提交 VIP办理
This commit is contained in:
@@ -155,6 +155,29 @@
|
|||||||
:close="setStudentClose"
|
:close="setStudentClose"
|
||||||
>
|
>
|
||||||
<div>
|
<div>
|
||||||
|
<div style="display: flex;align-items: center;">
|
||||||
|
<el-autocomplete
|
||||||
|
size="small"
|
||||||
|
style="width: 100%;"
|
||||||
|
v-model="addForm.userKey"
|
||||||
|
:fetch-suggestions="loadAll"
|
||||||
|
placeholder="请输入手机号/邮箱"
|
||||||
|
@select="handleSelect"
|
||||||
|
>
|
||||||
|
<template #default="{ item }">
|
||||||
|
<div class="custom-item">
|
||||||
|
<span>{{ item.tel ? item.tel : item.email }}</span>
|
||||||
|
<span style="color: gray; margin-left: 10px;" v-if="item.name"
|
||||||
|
>({{ item.name }})</span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</el-autocomplete>
|
||||||
|
<el-button size="mini" type="primary" @click="addClass()" style="margin-left: 20px;"
|
||||||
|
>+ 添加学员</el-button
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<p>已添加的成员列表</p>
|
||||||
<el-table :data="studentList">
|
<el-table :data="studentList">
|
||||||
<el-table-column
|
<el-table-column
|
||||||
property="student.id"
|
property="student.id"
|
||||||
@@ -174,7 +197,7 @@
|
|||||||
<el-table-column property="student.tel" label="手机号"></el-table-column>
|
<el-table-column property="student.tel" label="手机号"></el-table-column>
|
||||||
<el-table-column property="" label="操作">
|
<el-table-column property="" label="操作">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<el-button type="warning" @click="outClass(scope.row)"
|
<el-button size="mini" type="warning" @click="outClass(scope.row)"
|
||||||
>踢出班级</el-button
|
>踢出班级</el-button
|
||||||
>
|
>
|
||||||
</template>
|
</template>
|
||||||
@@ -194,6 +217,7 @@ import miniClass from "./miniClass.vue";
|
|||||||
export default {
|
export default {
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
addForm:{},
|
||||||
setStudentVisible: false,
|
setStudentVisible: false,
|
||||||
setStudentVisible: false,
|
setStudentVisible: false,
|
||||||
studentList: [], // 学员列表
|
studentList: [], // 学员列表
|
||||||
@@ -333,6 +357,70 @@ export default {
|
|||||||
}else{
|
}else{
|
||||||
this.$message.error("获取学员列表失败");
|
this.$message.error("获取学员列表失败");
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
handleSelect(data) {
|
||||||
|
console.log("data at line 161:", data);
|
||||||
|
this.addForm.userKey = data.tel || data.email;
|
||||||
|
this.addForm.userId = data.id;
|
||||||
|
this.addForm.name = data.name;
|
||||||
|
this.addForm.tel = data.tel;
|
||||||
|
this.addForm.email = data.email;
|
||||||
|
},
|
||||||
|
loadAll(queryString, cb) {
|
||||||
|
this.addForm.userId = "";
|
||||||
|
this.addForm.userName = "";
|
||||||
|
if (queryString == "") {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
this.$http({
|
||||||
|
// url: this.$http.adornUrl('/book/user/list'),
|
||||||
|
url: this.$http.adornUrl("/book/user/getUserList"),
|
||||||
|
method: "post",
|
||||||
|
data: this.$http.adornData({
|
||||||
|
page: 1,
|
||||||
|
limit: 9999,
|
||||||
|
key: queryString
|
||||||
|
})
|
||||||
|
}).then(({ data }) => {
|
||||||
|
if (data && data.code === 0) {
|
||||||
|
var arr = data.user.records;
|
||||||
|
console.log("arr at line 467:", arr);
|
||||||
|
cb(arr);
|
||||||
|
} else {
|
||||||
|
cb([]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
addClass(row){
|
||||||
|
console.log('row at line 340:', this.miniClass.id,this.addForm)
|
||||||
|
if(this.addForm&&this.addForm.userId){
|
||||||
|
this.$http({
|
||||||
|
// url: this.$http.adornUrl('/book/user/list'),
|
||||||
|
url: this.$http.adornUrl("/common/class/addClassUser"),
|
||||||
|
method: "post",
|
||||||
|
data: this.$http.adornData({
|
||||||
|
classId: this.miniClass.id,
|
||||||
|
userId: this.addForm.userId
|
||||||
|
})
|
||||||
|
}).then(async ({ data }) => {
|
||||||
|
if (data && data.code === 0) {
|
||||||
|
this.$message({
|
||||||
|
type: "success",
|
||||||
|
message: "添加成功!"
|
||||||
|
});
|
||||||
|
var jieguo = await this.getCLassInfo(this.miniClass.id)
|
||||||
|
if(jieguo.data.code == 0){
|
||||||
|
this.studentList = jieguo.data.result.students;
|
||||||
|
this.addForm={}
|
||||||
|
}else{
|
||||||
|
this.$message.error("获取学员列表失败");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}else{
|
||||||
|
this.$message.error("请输入手机号/邮箱");
|
||||||
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
// 踢出班级
|
// 踢出班级
|
||||||
async outClass(row) {
|
async outClass(row) {
|
||||||
|
|||||||
@@ -120,7 +120,7 @@
|
|||||||
v-else-if="scope.row.nickname == scope.row.name"
|
v-else-if="scope.row.nickname == scope.row.name"
|
||||||
>
|
>
|
||||||
<span style="color: #999;">
|
<span style="color: #999;">
|
||||||
未设置
|
{{ scope.row.nickname }}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div style="font-size: 13px;" v-else>
|
<div style="font-size: 13px;" v-else>
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
<template>
|
<template>
|
||||||
<el-dialog
|
<el-dialog
|
||||||
width="80%"
|
width="1200px"
|
||||||
title="开通VIP"
|
title="开通VIP"
|
||||||
|
destroy-on-close
|
||||||
:close-on-click-modal="false"
|
:close-on-click-modal="false"
|
||||||
:visible.sync="visible"
|
:visible.sync="visible"
|
||||||
@close="handlereset"
|
@close="handlereset"
|
||||||
@@ -40,7 +41,7 @@
|
|||||||
</el-autocomplete>
|
</el-autocomplete>
|
||||||
</div>
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item
|
<!-- <el-form-item
|
||||||
label="账户余额"
|
label="账户余额"
|
||||||
v-if="dataForm.userKey"
|
v-if="dataForm.userKey"
|
||||||
style="width: 50%;float: left;"
|
style="width: 50%;float: left;"
|
||||||
@@ -53,7 +54,7 @@
|
|||||||
style="font-style: normal; font-size: 16px; color: #17B3A3;"
|
style="font-style: normal; font-size: 16px; color: #17B3A3;"
|
||||||
>{{ dataForm.jf }}</em
|
>{{ dataForm.jf }}</em
|
||||||
>
|
>
|
||||||
</el-form-item>
|
</el-form-item> -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<el-form-item label="VIP类型" prop="type" class="type_block">
|
<el-form-item label="VIP类型" prop="type" class="type_block">
|
||||||
@@ -69,7 +70,12 @@
|
|||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="VIP年限" prop="year" class="year_block">
|
<el-form-item label="VIP年限" prop="year" class="year_block">
|
||||||
<el-radio-group v-model="dataForm.year" size="mini">
|
<div style="height: 40px;">
|
||||||
|
<el-radio-group
|
||||||
|
v-model="dataForm.year"
|
||||||
|
size="mini"
|
||||||
|
|
||||||
|
>
|
||||||
<el-radio
|
<el-radio
|
||||||
v-for="(option, index) in yearList"
|
v-for="(option, index) in yearList"
|
||||||
:key="index"
|
:key="index"
|
||||||
@@ -78,46 +84,61 @@
|
|||||||
{{ option.label }}
|
{{ option.label }}
|
||||||
</el-radio>
|
</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
<span class="qita"
|
</div >
|
||||||
>其他:<el-input v-model="dataForm.day"></el-input>  天</span
|
|
||||||
>
|
<span class="qita"> </span>
|
||||||
|
<!-- 其他:<el-input v-model="dataForm.day"></el-input>  天 -->
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="预计费用" class="price_block">
|
<!-- <el-form-item label="预计费用" class="price_block">
|
||||||
<span style=" color: #f56c6c;">{{ dataForm.price }}元</span>
|
<span style=" color: #f56c6c;">{{ dataForm.price }}元</span>
|
||||||
|
</el-form-item> -->
|
||||||
|
|
||||||
|
<el-form-item label="支付方式" class="coin_block">
|
||||||
|
<div>
|
||||||
|
<el-radio-group v-model="dataForm.payType" @input="payTypeChange">
|
||||||
|
<el-radio label="微信">微信</el-radio>
|
||||||
|
<el-radio label="支付宝">支付宝</el-radio>
|
||||||
|
|
||||||
|
<el-radio label="天医币">天医币</el-radio>
|
||||||
|
<el-radio label="银行支付">银行支付</el-radio>
|
||||||
|
<el-radio label="海外支付">海外支付</el-radio>
|
||||||
|
<el-radio label="其他">其他</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="抵扣天医币" class="coin_block">
|
<el-form-item label="金额" class="coin_block">
|
||||||
<div> <el-input
|
<div>
|
||||||
style="width: 300px;"
|
<el-input
|
||||||
|
clearable
|
||||||
v-model="dataForm.value"
|
v-model="dataForm.fee"
|
||||||
placeholder="请输入需要抵扣的天医币"
|
placeholder="请输入需要金额"
|
||||||
>
|
>
|
||||||
</el-input></div>
|
</el-input>
|
||||||
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="抵扣积分" class="coin_block">
|
<el-form-item label="抵扣积分" class="coin_block">
|
||||||
<div> <el-input
|
<div>
|
||||||
style="width: 300px;"
|
<el-input
|
||||||
|
clearable
|
||||||
v-model="dataForm.value"
|
v-model="dataForm.jf"
|
||||||
placeholder="请输入需要抵扣的天医币"
|
placeholder="请输入需要抵扣的积分"
|
||||||
>
|
>
|
||||||
</el-input></div>
|
</el-input>
|
||||||
|
</div>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="开通说明">
|
<el-form-item label="备注">
|
||||||
<el-input
|
<el-input
|
||||||
type="textarea"
|
type="textarea"
|
||||||
rows="5"
|
rows="5"
|
||||||
v-model="dataForm.remark"
|
v-model="dataForm.remark"
|
||||||
placeholder="开通说明"
|
placeholder="备注"
|
||||||
>
|
>
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
<el-button @click="handlereset">取消</el-button>
|
<el-button @click="handlereset" size="mini">取消</el-button>
|
||||||
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
|
<el-button type="primary" @click="dataFormSubmit()" size="mini" >确定</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
</template>
|
</template>
|
||||||
@@ -135,12 +156,14 @@ export default {
|
|||||||
name: "",
|
name: "",
|
||||||
tel: "",
|
tel: "",
|
||||||
email: "",
|
email: "",
|
||||||
peanutCoin: "",
|
|
||||||
|
pageType: "", //vip类型
|
||||||
type: "", //vip类型
|
type: "", //vip类型
|
||||||
year: "",
|
year: "",
|
||||||
day: "",
|
|
||||||
remark: "",
|
remark: "",
|
||||||
price: "0"
|
fee: 0, //金额
|
||||||
|
jf: 0 //积分
|
||||||
},
|
},
|
||||||
peanutCoin: 0, //天医币和积分总和判断是否为0
|
peanutCoin: 0, //天医币和积分总和判断是否为0
|
||||||
dataRule: {
|
dataRule: {
|
||||||
@@ -160,12 +183,15 @@ export default {
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
typeList: [
|
typeList: [
|
||||||
|
{ value: "11", label: "超v" },
|
||||||
|
{ value: "12", label: "简易超v" },
|
||||||
{ value: "1", label: "医学超v" },
|
{ value: "1", label: "医学超v" },
|
||||||
|
{ value: "2", label: "国学与心理学超v" },
|
||||||
{ value: "4", label: "中医学" },
|
{ value: "4", label: "中医学" },
|
||||||
{ value: "9", label: "中西汇通学" },
|
|
||||||
{ value: "5", label: "针灸学" },
|
{ value: "5", label: "针灸学" },
|
||||||
{ value: "6", label: "肿瘤学" },
|
{ value: "6", label: "肿瘤学" },
|
||||||
{ value: "2", label: "国学与心理学超v" },
|
|
||||||
|
{ value: "9", label: "中西汇通学" },
|
||||||
{ value: "7", label: "国学" },
|
{ value: "7", label: "国学" },
|
||||||
{ value: "8", label: "心理学" }
|
{ value: "8", label: "心理学" }
|
||||||
],
|
],
|
||||||
@@ -178,14 +204,41 @@ export default {
|
|||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
init(data) {
|
init(data) {
|
||||||
|
this.dataForm = {
|
||||||
|
id: 0,
|
||||||
|
name: "",
|
||||||
|
tel: "",
|
||||||
|
email: "",
|
||||||
|
|
||||||
|
pageType: "", //vip类型
|
||||||
|
type: "", //vip类型
|
||||||
|
year: "",
|
||||||
|
|
||||||
|
remark: "",
|
||||||
|
fee: 0, //金额
|
||||||
|
jf: 0 //积分
|
||||||
|
}
|
||||||
this.visible = true;
|
this.visible = true;
|
||||||
this.dataForm.userKey = data.tel || data.email;
|
this.$http({
|
||||||
this.dataForm.userId = data.id;
|
url: this.$http.adornUrl("/master/userVip/getUserVipInfoByUserId"),
|
||||||
this.dataForm.name = data.name;
|
method: "post",
|
||||||
this.dataForm.tel = data.tel;
|
data: this.$http.adornData({
|
||||||
this.dataForm.email = data.email;
|
userId: data.id
|
||||||
this.dataForm.peanutCoin = data.peanutCoin;
|
})
|
||||||
this.dataForm.jf = data.jf;
|
}).then(({ data }) => {
|
||||||
|
if (data && data.code === 0) {
|
||||||
|
this.dataForm = data.userVipInfo;
|
||||||
|
} else {
|
||||||
|
cb([]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
// this.dataForm.userKey = data.tel || data.email;
|
||||||
|
// this.dataForm.userId = data.id;
|
||||||
|
// this.dataForm.name = data.name;
|
||||||
|
// this.dataForm.tel = data.tel;
|
||||||
|
// this.dataForm.email = data.email;
|
||||||
|
// this.dataForm.peanutCoin = data.peanutCoin;
|
||||||
|
// this.dataForm.jf = data.jf;
|
||||||
},
|
},
|
||||||
handleSelect(data) {
|
handleSelect(data) {
|
||||||
console.log("data at line 161:", data);
|
console.log("data at line 161:", data);
|
||||||
@@ -194,8 +247,6 @@ export default {
|
|||||||
this.dataForm.name = data.name;
|
this.dataForm.name = data.name;
|
||||||
this.dataForm.tel = data.tel;
|
this.dataForm.tel = data.tel;
|
||||||
this.dataForm.email = data.email;
|
this.dataForm.email = data.email;
|
||||||
this.dataForm.peanutCoin = data.peanutCoin;
|
|
||||||
this.dataForm.jf = data.jf;
|
|
||||||
},
|
},
|
||||||
loadAll(queryString, cb) {
|
loadAll(queryString, cb) {
|
||||||
this.dataForm.userId = "";
|
this.dataForm.userId = "";
|
||||||
@@ -222,9 +273,74 @@ export default {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
payTypeChange(e){
|
||||||
|
console.log('e at line 261:', e)
|
||||||
|
if (this.dataForm.payType == "海外支付") {
|
||||||
|
this.dataForm.fee=0;
|
||||||
|
this.dataForm.jf=0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
//表单提交
|
//表单提交
|
||||||
dataFormSubmit() {},
|
dataFormSubmit() {
|
||||||
|
this.$refs["dataForm"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (!this.dataForm.userId) {
|
||||||
|
this.$message.error("请选择用户");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!this.dataForm.payType) {
|
||||||
|
this.$message.error("请输入支付方式");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// if (this.dataForm.jf == 0 && this.dataForm.fee == 0) {
|
||||||
|
// this.$message.error("请重新填写金额或者积分,不能都为0");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
if (this.dataForm.payType == "海外支付") {
|
||||||
|
this.dataForm.fee=0;
|
||||||
|
this.dataForm.jf=0;
|
||||||
|
}
|
||||||
|
if (this.dataForm.payType == "其他") {
|
||||||
|
if (!this.dataForm.remark) {
|
||||||
|
this.$message.error("请输入备注");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var data = {
|
||||||
|
...this.dataForm,
|
||||||
|
|
||||||
|
jf: this.dataForm.jf || 0,
|
||||||
|
fee: this.dataForm.fee || 0
|
||||||
|
};
|
||||||
|
|
||||||
|
data.adminId = 1;
|
||||||
|
console.log("...this.dataForm at line 273:", this.dataForm);
|
||||||
|
|
||||||
|
this.$http({
|
||||||
|
url: this.$http.adornUrl("/master/userVip/addUserVipByAdmin"),
|
||||||
|
method: "post",
|
||||||
|
data: this.$http.adornData({
|
||||||
|
...data
|
||||||
|
})
|
||||||
|
}).then(({ data }) => {
|
||||||
|
if (data && data.code === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: "操作成功",
|
||||||
|
type: "success",
|
||||||
|
duration: 1500,
|
||||||
|
onClose: () => {
|
||||||
|
this.visible = false;
|
||||||
|
this.$emit("refreshDataList");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.$message.error(data.msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
//取消
|
//取消
|
||||||
handlereset() {
|
handlereset() {
|
||||||
this.visible = false;
|
this.visible = false;
|
||||||
@@ -286,7 +402,7 @@ export default {
|
|||||||
}
|
}
|
||||||
/deep/.el-radio__label {
|
/deep/.el-radio__label {
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
padding-right: 25px;
|
padding-right: 10px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -7,8 +7,26 @@
|
|||||||
>
|
>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-input
|
<el-input
|
||||||
v-model="dataForm.key"
|
v-model="dataForm.userName"
|
||||||
placeholder="参数名"
|
placeholder="用户名"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-input
|
||||||
|
v-model="dataForm.tel"
|
||||||
|
placeholder="电话"
|
||||||
|
clearable
|
||||||
|
size="small"
|
||||||
|
>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item>
|
||||||
|
<el-input
|
||||||
|
v-model="dataForm.email"
|
||||||
|
placeholder="邮箱"
|
||||||
clearable
|
clearable
|
||||||
size="small"
|
size="small"
|
||||||
>
|
>
|
||||||
@@ -17,7 +35,7 @@
|
|||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-select
|
<el-select
|
||||||
size="small"
|
size="small"
|
||||||
v-model="dataForm.vipType"
|
v-model="dataForm.type"
|
||||||
placeholder="请选择VIP类型"
|
placeholder="请选择VIP类型"
|
||||||
clearable
|
clearable
|
||||||
>
|
>
|
||||||
@@ -28,17 +46,24 @@
|
|||||||
<el-option label="肿瘤VIP" value="6"></el-option>
|
<el-option label="肿瘤VIP" value="6"></el-option>
|
||||||
<el-option label="国学VIP" value="7"></el-option>
|
<el-option label="国学VIP" value="7"></el-option>
|
||||||
<el-option label="心理学VIP" value="8"></el-option>
|
<el-option label="心理学VIP" value="8"></el-option>
|
||||||
|
<el-option label="中西汇通VIP" value="9"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-date-picker
|
<el-select
|
||||||
size="small"
|
size="small"
|
||||||
type="daterange"
|
clearable
|
||||||
range-separator="至"
|
v-model="dataForm.state"
|
||||||
start-placeholder="开始日期"
|
placeholder="请选择VIP状态"
|
||||||
end-placeholder="结束日期"
|
|
||||||
>
|
>
|
||||||
</el-date-picker>
|
<el-option
|
||||||
|
v-for="item in statusOptions"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
>
|
||||||
|
</el-option>
|
||||||
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button
|
<el-button
|
||||||
@@ -84,17 +109,17 @@
|
|||||||
prop="id"
|
prop="id"
|
||||||
header-align="center"
|
header-align="center"
|
||||||
align="center"
|
align="center"
|
||||||
label="用户ID"
|
label="用户信息"
|
||||||
>
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<span
|
<span
|
||||||
@click="detailHandle(scope.row)"
|
@click="detailHandle(scope.row)"
|
||||||
style="cursor: pointer;color: #006699;position: absolute;top: 0;left: 6px;font-size: 12px;"
|
style="cursor: pointer;color: #006699;position: absolute;top: 0;right: 6px;font-size: 12px;"
|
||||||
>详情</span
|
>详情</span
|
||||||
>
|
>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<el-image
|
<!-- <el-image
|
||||||
v-if="scope.row.avatar && scope.row.avatar != ''"
|
v-if="scope.row.avatar && scope.row.avatar != ''"
|
||||||
style="width: 30px; height: 30px;cursor: pointer;"
|
style="width: 30px; height: 30px;cursor: pointer;"
|
||||||
:src="scope.row.avatar"
|
:src="scope.row.avatar"
|
||||||
@@ -108,10 +133,13 @@
|
|||||||
width="30"
|
width="30"
|
||||||
height="30"
|
height="30"
|
||||||
class="tableImg"
|
class="tableImg"
|
||||||
/>
|
/> -->
|
||||||
</div>
|
</div>
|
||||||
<div style="line-height: 20px;">
|
<div style="line-height: 20px;">
|
||||||
<span>ID:{{ scope.row.id }}</span>
|
<span>{{
|
||||||
|
scope.row.name || scope.row.nickname || scope.row.id
|
||||||
|
}}</span>
|
||||||
|
<!-- <span>ID:{{ scope.row.id }}</span> -->
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
@@ -120,62 +148,24 @@
|
|||||||
prop="nickname"
|
prop="nickname"
|
||||||
header-align="center"
|
header-align="center"
|
||||||
align="center"
|
align="center"
|
||||||
label="用户信息"
|
label="联系方式"
|
||||||
>
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<div style="display: flex;align-items: center;padding-left: 10px;">
|
|
||||||
<span style="margin-right: 10px;color: #888;">昵称 ( 姓名 ):</span>
|
|
||||||
<div
|
<div
|
||||||
style="font-size: 13px;"
|
v-if="scope.row.tel"
|
||||||
v-if="!scope.row.nickname && !scope.row.name"
|
style="text-align: left;padding-left: 20px;"
|
||||||
>
|
>
|
||||||
<span style="color: #999;">
|
<img src="../../../assets/img/tel.png" width="15" height="15" />{{
|
||||||
未设置
|
scope.row.tel ? scope.row.tel : "-"
|
||||||
</span>
|
}}
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
style="font-size: 13px;"
|
v-if="scope.row.email"
|
||||||
v-else-if="scope.row.nickname == scope.row.name"
|
style="text-align: left;padding-left: 20px;"
|
||||||
>
|
>
|
||||||
<span style="color: #999;">
|
<img src="../../../assets/img/email.png" width="15" height="15" />
|
||||||
未设置
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
<div style="font-size: 13px;" v-else>
|
|
||||||
<span v-if="scope.row.nickname">{{ scope.row.nickname }}</span>
|
|
||||||
<span v-else style="color: #999;">
|
|
||||||
未设置
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<span style="color: #999;">(</span>
|
|
||||||
<span v-if="scope.row.name">{{ scope.row.name }}</span>
|
|
||||||
<span v-else style="color: #999;">
|
|
||||||
未设置
|
|
||||||
</span>
|
|
||||||
<span style="color: #999;">)</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div style="display: flex;align-items: flex-start;padding-left: 10px;margin-top: 4px;">
|
|
||||||
<span style="margin-right: 10px;display: inline-block;color: #888;">联系方式:</span>
|
|
||||||
<div style="font-size: 14px;padding-left: 4px;font-weight: bold;text-align: left;">
|
|
||||||
<div v-if="scope.row.tel">
|
|
||||||
<img
|
|
||||||
src="../../../assets/img/tel.png"
|
|
||||||
width="15"
|
|
||||||
height="15"
|
|
||||||
/>{{ scope.row.tel ? scope.row.tel : "-" }}
|
|
||||||
</div>
|
|
||||||
<div v-if="scope.row.email">
|
|
||||||
<img
|
|
||||||
src="../../../assets/img/email.png"
|
|
||||||
width="15"
|
|
||||||
height="15"
|
|
||||||
/>
|
|
||||||
{{ scope.row.email ? scope.row.email : "-" }}
|
{{ scope.row.email ? scope.row.email : "-" }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column
|
<el-table-column
|
||||||
@@ -183,20 +173,25 @@
|
|||||||
prop="nickname"
|
prop="nickname"
|
||||||
header-align="center"
|
header-align="center"
|
||||||
align="center"
|
align="center"
|
||||||
label="VIP信息 ( 时间 )"
|
label="VIP信息 / 摊销金额 / 时间"
|
||||||
>
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
<div style="text-align: left;padding-left: 20px;">
|
||||||
<span v-if="!scope.row.userVips || scope.row.userVips.length == 0"
|
<span v-if="!scope.row.userVips || scope.row.userVips.length == 0"
|
||||||
>-</span
|
>-</span
|
||||||
>
|
>
|
||||||
|
|
||||||
<span v-else v-html="computedVipType(scope.row.userVips)"> </span>
|
<span
|
||||||
<span>{{ scope.row.createTime?scope.row.createTime.split(' ')[0]:'' }}</span>
|
v-else
|
||||||
<span >{{ scope.row.endTime?scope.row.endTime.split(' ')[0]:'' }}</span>
|
v-html="computedVipType(scope.row.userVips)"
|
||||||
|
style="text-align: left;"
|
||||||
|
>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
|
|
||||||
<el-table-column
|
<!-- <el-table-column
|
||||||
width="190"
|
width="190"
|
||||||
prop="nickname"
|
prop="nickname"
|
||||||
header-align="center"
|
header-align="center"
|
||||||
@@ -204,9 +199,21 @@
|
|||||||
label="摊销金额"
|
label="摊销金额"
|
||||||
>
|
>
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
|
{{ getVipPrice(scope.row) }}
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column> -->
|
||||||
|
<!-- <el-table-column
|
||||||
|
width="120"
|
||||||
|
prop="nickname"
|
||||||
|
header-align="center"
|
||||||
|
align="center"
|
||||||
|
label="VIP状态"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span v-if="scope.row.state == 0" style="color: #67c23a;">有效</span>
|
||||||
|
<span v-else style="color: #7f7575;">失效</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column> -->
|
||||||
<!-- <el-table-column
|
<!-- <el-table-column
|
||||||
width="190"
|
width="190"
|
||||||
prop="nickname"
|
prop="nickname"
|
||||||
@@ -220,8 +227,6 @@
|
|||||||
</template>
|
</template>
|
||||||
</el-table-column> -->
|
</el-table-column> -->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- <el-table-column prop="age" header-align="center" align="center" label="年龄">
|
<!-- <el-table-column prop="age" header-align="center" align="center" label="年龄">
|
||||||
</el-table-column> -->
|
</el-table-column> -->
|
||||||
<!-- <el-table-column prop="sex" header-align="center" align="center" label="性别">
|
<!-- <el-table-column prop="sex" header-align="center" align="center" label="性别">
|
||||||
@@ -244,12 +249,12 @@
|
|||||||
@click="handleDetail(scope.row.id)"
|
@click="handleDetail(scope.row.id)"
|
||||||
>管理</el-button
|
>管理</el-button
|
||||||
>
|
>
|
||||||
<el-button
|
<!-- <el-button
|
||||||
type="text"
|
type="text"
|
||||||
size="small"
|
size="small"
|
||||||
@click="addOrUpdateHandle(scope.row.id)"
|
@click="addOrUpdateHandle(scope.row.id)"
|
||||||
>操作VIP</el-button
|
>升级VIP</el-button
|
||||||
>
|
> -->
|
||||||
|
|
||||||
<!-- <el-dropdown>
|
<!-- <el-dropdown>
|
||||||
<span
|
<span
|
||||||
@@ -357,7 +362,12 @@
|
|||||||
@refreshDataList="getDataList"
|
@refreshDataList="getDataList"
|
||||||
></add-or-update>
|
></add-or-update>
|
||||||
<!-- 开通VIP -->
|
<!-- 开通VIP -->
|
||||||
<open-vip v-if="openVipVisible" ref="openVip"> </open-vip>
|
<open-vip
|
||||||
|
v-if="openVipVisible"
|
||||||
|
ref="openVip"
|
||||||
|
@refreshDataList="getDataList"
|
||||||
|
>
|
||||||
|
</open-vip>
|
||||||
|
|
||||||
<el-dialog
|
<el-dialog
|
||||||
title="充/扣天医币"
|
title="充/扣天医币"
|
||||||
@@ -433,7 +443,7 @@ export default {
|
|||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
dataForm: {
|
dataForm: {
|
||||||
key: ""
|
state: ""
|
||||||
},
|
},
|
||||||
pointFormRules: {
|
pointFormRules: {
|
||||||
pointAmount: [
|
pointAmount: [
|
||||||
@@ -446,6 +456,16 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
vipList: [],
|
vipList: [],
|
||||||
|
statusOptions: [
|
||||||
|
{
|
||||||
|
value: 0,
|
||||||
|
label: "有效"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
value: 1,
|
||||||
|
label: "失效"
|
||||||
|
}
|
||||||
|
],
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
value: 0,
|
value: 0,
|
||||||
@@ -485,14 +505,31 @@ export default {
|
|||||||
this.getDataList();
|
this.getDataList();
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
getVipPrice(data) {
|
||||||
|
console.log("data at line 504:", data.userVipLogs);
|
||||||
|
if (data.userVipLogs && data.userVipLogs.length > 0) {
|
||||||
|
const now = new Date(); // 当前时间
|
||||||
|
const matchedData = data.userVipLogs.filter(item => {
|
||||||
|
// 转换日期为 Date 对象,直接比较
|
||||||
|
const start = new Date(item.startTime);
|
||||||
|
const end = new Date(item.endTime);
|
||||||
|
return now >= start && now <= end; // 核心判断条件
|
||||||
|
});
|
||||||
|
console.log("matchedData at line 508:", matchedData);
|
||||||
|
if (matchedData && matchedData.length > 0) {
|
||||||
|
return matchedData[0].dayAmount;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
},
|
||||||
handleDetail(id) {
|
handleDetail(id) {
|
||||||
|
|
||||||
this.$router.push({
|
this.$router.push({
|
||||||
name: "vipList-vipDetail",
|
name: "vipList-vipDetail",
|
||||||
query: {
|
query: {
|
||||||
id: id
|
id: id
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
},
|
},
|
||||||
detailHandle(row) {
|
detailHandle(row) {
|
||||||
console.log("row at line 447:", row);
|
console.log("row at line 447:", row);
|
||||||
@@ -523,7 +560,8 @@ this.$router.push({
|
|||||||
5: "针灸VIP",
|
5: "针灸VIP",
|
||||||
6: "肿瘤VIP",
|
6: "肿瘤VIP",
|
||||||
7: "国学VIP",
|
7: "国学VIP",
|
||||||
8: "心理学VIP"
|
8: "心理学VIP",
|
||||||
|
9: "中西汇通VIP"
|
||||||
};
|
};
|
||||||
|
|
||||||
// 将 userVips 转为数组形式,以便处理(如果是数字则转为数字数组)
|
// 将 userVips 转为数组形式,以便处理(如果是数字则转为数字数组)
|
||||||
@@ -533,7 +571,7 @@ this.$router.push({
|
|||||||
.split("")
|
.split("")
|
||||||
.map(Number); // 数字转为数组
|
.map(Number); // 数字转为数组
|
||||||
} else {
|
} else {
|
||||||
vipTypes = userVips.map(vip => vip.type); // 如果是对象数组,获取每个对象的 type
|
vipTypes = userVips.map(vip => vip); // 如果是对象数组,获取每个对象的 type
|
||||||
}
|
}
|
||||||
|
|
||||||
// 判断是否同时包含 4、5、6(医学SVIP)
|
// 判断是否同时包含 4、5、6(医学SVIP)
|
||||||
@@ -542,18 +580,69 @@ this.$router.push({
|
|||||||
const hasPsychologySVip = [7, 8].every(type => vipTypes.includes(type));
|
const hasPsychologySVip = [7, 8].every(type => vipTypes.includes(type));
|
||||||
|
|
||||||
const tags = [];
|
const tags = [];
|
||||||
vipTypes.forEach(type => {
|
vipTypes.forEach(e => {
|
||||||
if (type == 4 || type == 5 || type == 6) {
|
if (e.type == 4 || e.type == 5 || e.type == 6 || e.type == 9) {
|
||||||
tags.push(
|
tags.push(
|
||||||
`<el-tag size="mini" type="info" style="font-weight: bold; color: #fff;display:inline-block;margin-bottom: 6px; padding:0 6px; border-radius: 2px; font-size: 11px; background: #409EFF;" effect="dark">${vipMap[type]}</el-tag>`
|
`<el-tag size="mini" type="info" style="text-align:center;width:76px;font-weight: bold; color: ${
|
||||||
|
e.state == 0 ? "#fff" : "#888"
|
||||||
|
};display:inline-block;margin-bottom: 6px; padding:0 6px; border-radius: 2px; font-size: 11px; background: ${
|
||||||
|
e.state == 0 ? "#409EFF" : "#f0f0f0"
|
||||||
|
};" effect="dark">${vipMap[e.type]}</el-tag>
|
||||||
|
|
||||||
|
<span style="color: #f94f04;margin-left: 20px;font-weight:700;display:inline-block;min-width:80px;text-align:center"> ${
|
||||||
|
this.getVipPrice(e) != null
|
||||||
|
? "¥" + this.getVipPrice(e)
|
||||||
|
: '<i class="el-icon-close"></i>'
|
||||||
|
}</span>
|
||||||
|
<span style="color: #888;margin-left: 20px;">有效期:${
|
||||||
|
e.startTime ? e.startTime : ""
|
||||||
|
}</span>
|
||||||
|
<span>~</span>
|
||||||
|
<span style="color: #888;">${e.endTime ? e.endTime : ""}</span>
|
||||||
|
|
||||||
|
`
|
||||||
);
|
);
|
||||||
} else if (type == 7 ) {
|
} else if (e.type == 7) {
|
||||||
tags.push(
|
tags.push(
|
||||||
`<el-tag size="mini" type="info" style="font-weight: bold; color: #fff;display:inline-block;margin-bottom: 6px; padding:0 6px; border-radius: 2px; font-size: 11px; background:#67c23a" effect="dark">${vipMap[type]}</el-tag>`
|
`<el-tag size="mini" type="info" style="text-align:center;width:76px;font-weight: bold; color: ${
|
||||||
|
e.state == 0 ? "#fff" : "#888"
|
||||||
|
};display:inline-block;margin-bottom: 6px; padding:0 6px; border-radius: 2px; font-size: 11px; background: ${
|
||||||
|
e.state == 0 ? "#67c23a" : "#f0f0f0"
|
||||||
|
}" effect="dark">${vipMap[e.type]}</el-tag>
|
||||||
|
<span style="color: #f94f04;margin-left: 20px;font-weight:700;display:inline-block;min-width:80px;text-align:center"> ${
|
||||||
|
this.getVipPrice(e) != null
|
||||||
|
? "¥" + this.getVipPrice(e)
|
||||||
|
: '<i class="el-icon-close"></i>'
|
||||||
|
}</span>
|
||||||
|
<span style="color: #888;margin-left: 20px;">有效期:${
|
||||||
|
e.startTime ? e.startTime : ""
|
||||||
|
}</span>
|
||||||
|
<span>~</span>
|
||||||
|
<span style="color: #888;">${e.endTime ? e.endTime : ""}</span>
|
||||||
|
|
||||||
|
`
|
||||||
);
|
);
|
||||||
} else if (type == 8 ) {
|
} else if (e.type == 8) {
|
||||||
tags.push(
|
tags.push(
|
||||||
`<el-tag size="mini" type="info" style="font-weight: bold; color: #fff;display:inline-block;margin-bottom: 6px; background: #00bcd4; padding:0 6px; border-radius: 2px; font-size: 11px; " effect="dark">${vipMap[type]}</el-tag>`
|
`<el-tag size="mini" type="info" style="text-align:center;width:76px;font-weight: bold; color: ${
|
||||||
|
e.state == 0 ? "#fff" : "#888"
|
||||||
|
};display:inline-block;margin-bottom: 6px; background: ${
|
||||||
|
e.state == 0 ? "#00bcd4" : "#f0f0f0"
|
||||||
|
}; padding:0 6px; border-radius: 2px; font-size: 11px; " effect="dark">${
|
||||||
|
vipMap[e.type]
|
||||||
|
}</el-tag>
|
||||||
|
<span style="color: #f94f04;margin-left: 20px;font-weight:700;display:inline-block;min-width:80px;text-align:center"> ${
|
||||||
|
this.getVipPrice(e) != null
|
||||||
|
? "¥" + this.getVipPrice(e)
|
||||||
|
: '<i class="el-icon-close"></i>'
|
||||||
|
}</span>
|
||||||
|
<span style="color: #888;margin-left: 20px;">有效期:${
|
||||||
|
e.startTime ? e.startTime : ""
|
||||||
|
}</span>
|
||||||
|
<span>~</span>
|
||||||
|
<span style="color: #888;">${e.endTime ? e.endTime : ""}</span>
|
||||||
|
|
||||||
|
`
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -626,15 +715,22 @@ this.$router.push({
|
|||||||
// 获取数据列表
|
// 获取数据列表
|
||||||
getDataList() {
|
getDataList() {
|
||||||
this.dataListLoading = true;
|
this.dataListLoading = true;
|
||||||
|
var data = {
|
||||||
|
current: this.pageIndex,
|
||||||
|
limit: this.pageSize,
|
||||||
|
userName: this.dataForm.userName,
|
||||||
|
tel: this.dataForm.tel,
|
||||||
|
email: this.dataForm.email,
|
||||||
|
type: this.dataForm.type,
|
||||||
|
state: this.dataForm.state
|
||||||
|
};
|
||||||
|
|
||||||
this.$http({
|
this.$http({
|
||||||
// url: this.$http.adornUrl('/book/user/list'),
|
// url: this.$http.adornUrl('/book/user/list'),
|
||||||
url: this.$http.adornUrl("/book/user/getUserList"),
|
url: this.$http.adornUrl("/master/userVip/getUserVipList"),
|
||||||
method: "post",
|
method: "post",
|
||||||
data: this.$http.adornData({
|
data: this.$http.adornData({
|
||||||
page: this.pageIndex,
|
...data
|
||||||
limit: this.pageSize,
|
|
||||||
key: this.dataForm.key,
|
|
||||||
vipType: this.dataForm.vipType
|
|
||||||
})
|
})
|
||||||
// params: this.$http.adornParams({
|
// params: this.$http.adornParams({
|
||||||
// 'page': 1,
|
// 'page': 1,
|
||||||
@@ -643,9 +739,9 @@ this.$router.push({
|
|||||||
// })
|
// })
|
||||||
}).then(({ data }) => {
|
}).then(({ data }) => {
|
||||||
if (data && data.code === 0) {
|
if (data && data.code === 0) {
|
||||||
this.dataList = data.user.records;
|
this.dataList = data.result.records;
|
||||||
this.totalPage = data.user.pages;
|
this.totalPage = data.result.pages;
|
||||||
this.total = data.user.total;
|
this.total = data.result.total;
|
||||||
this.dataListLoading = false;
|
this.dataListLoading = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -17,244 +17,317 @@
|
|||||||
</div> -->
|
</div> -->
|
||||||
<div>
|
<div>
|
||||||
<ul class="list">
|
<ul class="list">
|
||||||
<div v-if="orderDetails.userInfo">
|
<div v-if="userInfo">
|
||||||
<div class="liName">用户信息</div>
|
<div class="liName">用户信息</div>
|
||||||
<li>
|
<li>
|
||||||
<span class="infoTitle">用户名:</span
|
<span class="infoTitle">用户名:</span
|
||||||
><span>{{
|
><span>{{ userInfo.name || userInfo.nickname || "未设置" }}</span>
|
||||||
orderDetails.userInfo.userName !== null
|
|
||||||
? orderDetails.userInfo.userName
|
|
||||||
: "暂无"
|
|
||||||
}}</span>
|
|
||||||
</li>
|
</li>
|
||||||
<!-- <li><span class="infoTitle">用户ID:</span><span>{{orderDetails.userId}}</span></li> -->
|
<!-- <li><span class="infoTitle">用户ID:</span><span>{{orderDetails.userId}}</span></li> -->
|
||||||
<li>
|
<li>
|
||||||
<span class="infoTitle">联系电话:</span
|
<span class="infoTitle">联系电话:</span
|
||||||
><span>{{ orderDetails.userInfo.userPhone }}</span>
|
><span>{{ userInfo.tel ? userInfo.tel : "未设置" }}</span>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<span class="infoTitle">邮箱:</span
|
||||||
|
><span>{{ userInfo.email ? userInfo.email : "未设置" }}</span>
|
||||||
</li>
|
</li>
|
||||||
<li style="clear:both"></li>
|
<li style="clear:both"></li>
|
||||||
<!-- <li><span class="infoTitle">电 话:</span><span>187898544875</span></li> -->
|
<!-- <li><span class="infoTitle">电 话:</span><span>187898544875</span></li> -->
|
||||||
<!-- <li><span class="infoTitle">地 址:</span><span>天津市天津市天津市天津市天津市天津市</span></li> -->
|
<!-- <li><span class="infoTitle">地 址:</span><span>天津市天津市天津市天津市天津市天津市</span></li> -->
|
||||||
<li class="line"></li>
|
<li class="line"></li>
|
||||||
</div>
|
</div>
|
||||||
<div style="display: none;">
|
|
||||||
|
|
||||||
|
|
||||||
<div class="liName">订单信息</div>
|
|
||||||
<li>
|
|
||||||
<span class="infoTitle">订单ID:</span
|
|
||||||
><span>{{ orderDetails.orderSn }}</span>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
<li>
|
|
||||||
<span class="infoTitle">创建时间:</span
|
|
||||||
><span>{{ orderDetails.createTime }}</span>
|
|
||||||
</li>
|
|
||||||
<li v-if="orderDetails.orderStatus > 0">
|
|
||||||
<span class="infoTitle">支付时间:</span
|
|
||||||
><span>{{ orderDetails.paymentDate }}</span>
|
|
||||||
</li>
|
|
||||||
<li style="width: 100%;" v-if="orderDetails.orderStatus > 0">
|
|
||||||
<span class="infoTitle">支付方式:</span>
|
|
||||||
<span v-if="orderDetails.paymentMethod == 2"
|
|
||||||
><icon-svg name="zhifubao"></icon-svg> <span>支付宝支付</span></span
|
|
||||||
>
|
|
||||||
<span v-if="orderDetails.paymentMethod == 1"
|
|
||||||
><icon-svg name="weixin"></icon-svg> <span>微信支付</span></span
|
|
||||||
>
|
|
||||||
<span v-if="orderDetails.paymentMethod == 4"
|
|
||||||
><img
|
|
||||||
src="../../../../static/img/oder_chong.png"
|
|
||||||
width="22px"
|
|
||||||
height="22px"
|
|
||||||
/>
|
|
||||||
<span>天医币支付</span></span
|
|
||||||
>
|
|
||||||
<span v-if="orderDetails.paymentMethod == 3">
|
|
||||||
|
|
||||||
<span>IOS内购</span>
|
|
||||||
</span>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li
|
|
||||||
style="width: 100%;"
|
|
||||||
v-if="orderDetails.paymentMethod == 2 && orderDetails.orderStatus > 0"
|
|
||||||
>
|
|
||||||
<span class="infoTitle">订单号:</span>
|
|
||||||
<span>{{ orderDetails.outTradeNo }}</span>
|
|
||||||
</li>
|
|
||||||
<li
|
|
||||||
style="width: 100%;"
|
|
||||||
v-if="orderDetails.paymentMethod == 2 && orderDetails.orderStatus > 0"
|
|
||||||
>
|
|
||||||
<span class="infoTitle">支付宝订单号:</span>
|
|
||||||
<span>{{ orderDetails.tradeNo }}</span>
|
|
||||||
</li>
|
|
||||||
<li class="line"></li>
|
|
||||||
<div style="clear:both"></div>
|
|
||||||
<div>
|
|
||||||
<div class="liName">支付信息</div>
|
|
||||||
<li>
|
|
||||||
<span class="infoTitle">订单金额:</span
|
|
||||||
><span>¥{{ orderDetails.orderPrice }}</span>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<li>
|
|
||||||
<span class="infoTitle">积分抵扣:</span
|
|
||||||
><span
|
|
||||||
|
|
||||||
v-if="orderDetails.jfDeduction > 0"
|
|
||||||
>-</span
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
|
|
||||||
>{{ orderDetails.jfDeduction }}</span
|
|
||||||
>
|
|
||||||
<span
|
|
||||||
|
|
||||||
v-if="orderDetails.jfDeduction > 0"
|
|
||||||
>积分</span
|
|
||||||
>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
<span class="infoTitle">天医币抵扣:</span
|
|
||||||
><span
|
|
||||||
v-if="
|
|
||||||
orderDetails.paymentMethod == 4 && orderDetails.realPrice > 0
|
|
||||||
"
|
|
||||||
|
|
||||||
>- {{ orderDetails.realPrice }}
|
|
||||||
</span>
|
|
||||||
<span
|
|
||||||
v-if="
|
|
||||||
orderDetails.paymentMethod == 4 && orderDetails.realPrice == 0
|
|
||||||
"
|
|
||||||
>0
|
|
||||||
</span>
|
|
||||||
</li>
|
|
||||||
|
|
||||||
<li v-if="orderDetails.orderStatus > 0" style="width: 100%;">
|
|
||||||
<span class="infoTitle">实际支付:</span>
|
|
||||||
<span v-if="orderDetails.orderType == 'point'"
|
|
||||||
>¥{{ orderDetails.realPrice }}</span
|
|
||||||
>
|
|
||||||
|
|
||||||
<span class="DiscountColor" v-else>
|
|
||||||
<span v-if="orderDetails.realPrice > 0">
|
|
||||||
¥{{ orderDetails.realPrice }}
|
|
||||||
|
|
||||||
<span style="" v-if="orderDetails.paymentMethod == 1"
|
|
||||||
>微信支付</span
|
|
||||||
>
|
|
||||||
<span style="" v-if="orderDetails.paymentMethod == 2"
|
|
||||||
>支付宝支付</span
|
|
||||||
>
|
|
||||||
<span style="" v-if="orderDetails.paymentMethod == 3"
|
|
||||||
>苹果支付</span
|
|
||||||
>
|
|
||||||
<span style="" v-if="orderDetails.paymentMethod == 4">
|
|
||||||
天医币支付
|
|
||||||
</span>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
<span
|
|
||||||
style="margin: 0 4rpx"
|
|
||||||
v-if="
|
|
||||||
orderDetails.realPrice > 0 && orderDetails.jfDeduction > 0
|
|
||||||
"
|
|
||||||
>
|
|
||||||
+
|
|
||||||
</span>
|
|
||||||
|
|
||||||
<span v-if="orderDetails.jfDeduction > 0"
|
|
||||||
>{{ orderDetails.jfDeduction }} 积分</span
|
|
||||||
>
|
|
||||||
</span>
|
|
||||||
</li>
|
|
||||||
<li class="line"></li>
|
|
||||||
<div style="clear:both"></div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
<!-- 订单商品 -->
|
<!-- 订单商品 -->
|
||||||
<div v-for="(item, index) in vipData">
|
<div v-for="(item, index) in vipData" style="margin-bottom: 60px;">
|
||||||
<div class="liName">VIP 信息</div>
|
<div class="liName">
|
||||||
|
<span
|
||||||
<p>办理明细</p>
|
style="width: 120px;display: inline-block;"
|
||||||
<el-table
|
v-html="getVipType(item)"
|
||||||
:data="orderDetails.trainingClassData"
|
></span>
|
||||||
style="width: 100%"
|
<span
|
||||||
v-if="orderDetails.orderType == 'trainingClass'"
|
style="margin-left: 0px;"
|
||||||
|
:style="{ color: item.state == 0 ? '#67c23a' : '#888' }"
|
||||||
|
>{{ item.state == 0 ? "生效中" : "已失效" }}</span
|
||||||
>
|
>
|
||||||
<el-table-column label="商品名" min-width="280">
|
<span
|
||||||
|
style="margin-left:20px;"
|
||||||
|
:style="
|
||||||
|
`color:${item.state == 0 ? '#515a6e' : '#888'} !important`
|
||||||
|
"
|
||||||
|
>有效期 :{{ item.startTime }} 至 {{ item.endTime }}</span
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
<el-collapse v-model="activeNames">
|
||||||
|
<el-collapse-item
|
||||||
|
:title="`VIP明细 ( ${item.userVipLogs.length} 条记录)`"
|
||||||
|
:name="item.id + ''"
|
||||||
|
style="padding-left: 20px;"
|
||||||
|
>
|
||||||
|
<el-table
|
||||||
|
:data="item.userVipLogs"
|
||||||
|
style="width: 100%"
|
||||||
|
v-if="item.userVipLogs.length > 0"
|
||||||
|
>
|
||||||
|
<el-table-column label="序号" width="50" align="center">
|
||||||
<template slot-scope="scope">
|
<template slot-scope="scope">
|
||||||
<div class="flexbox">
|
{{ scope.$index + 1 }}
|
||||||
<!-- <img
|
|
||||||
style="padding: 2px; border:1px solid #f1f1f1; margin-right: 5px;"
|
|
||||||
:src="scope.row.productImage"
|
|
||||||
width="30px"
|
|
||||||
height="30px"
|
|
||||||
/> -->
|
|
||||||
<div class="proname">
|
|
||||||
{{ scope.row.productName }}
|
|
||||||
<i
|
|
||||||
v-if="scope.row.books && scope.row.books.length > 0"
|
|
||||||
@click.stop="seeBooks(scope.row.books)"
|
|
||||||
class="el-icon-view"
|
|
||||||
style="color:#409eff; cursor: pointer;"
|
|
||||||
></i>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="productPrice" label="价格" width="180">
|
<el-table-column prop="type" label="来源" width="80">
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column prop="quantity" label="数量" width="80">
|
|
||||||
|
<el-table-column prop="payType" label="支付方式" width="100">
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="fee" label="实付款" width="110">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span style="color:#333">¥ {{ scope.row.fee }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="jf" label="积分抵扣" width="110">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span style="">- {{ scope.row.jf }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column
|
||||||
|
prop="dayAmount"
|
||||||
|
label="摊销单价(天)"
|
||||||
|
width="100"
|
||||||
|
>
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span style="color:#f94f04;font-weight: 700;"
|
||||||
|
>¥{{ scope.row.dayAmount }}</span
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="orderSn" label="订单编号" width="180">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span style="color:#888" v-if="scope.row.orderSn"
|
||||||
|
>SN:{{ scope.row.orderSn }}</span
|
||||||
|
>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="startTime" label="开始时间" width="150">
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="endTime" label="结束时间" width="150">
|
||||||
|
</el-table-column>
|
||||||
|
|
||||||
|
<el-table-column prop="remark" label="备注"> </el-table-column>
|
||||||
|
<el-table-column prop="remark" label="操作" width="80">
|
||||||
|
<template slot-scope="scope">
|
||||||
|
<span
|
||||||
|
style="margin-right: 4px;cursor: pointer;color: #67c23a;"
|
||||||
|
@click="handleEdit(scope.row, item)"
|
||||||
|
>编辑</span
|
||||||
|
>
|
||||||
|
<!-- <span
|
||||||
|
style="color: red;cursor: pointer;"
|
||||||
|
@click="handleDelete(scope.row)"
|
||||||
|
>删除</span
|
||||||
|
> -->
|
||||||
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</el-table>
|
</el-table>
|
||||||
|
<div v-else>暂无明细</div>
|
||||||
|
</el-collapse-item>
|
||||||
|
</el-collapse>
|
||||||
|
<div
|
||||||
|
style="display: flex;align-items: center;justify-content: center;margin-top: 20px;"
|
||||||
|
>
|
||||||
|
<el-button
|
||||||
|
size="mini"
|
||||||
|
type="primary"
|
||||||
|
plain
|
||||||
|
style=""
|
||||||
|
@click="handleAdd(item)"
|
||||||
|
>
|
||||||
|
+ 新增
|
||||||
|
<span v-if="item.type == 4">中医VIP</span>
|
||||||
|
<span v-if="item.type == 5">针灸VIP</span>
|
||||||
|
<span v-if="item.type == 6">肿瘤VIP</span>
|
||||||
|
<span v-if="item.type == 7">国学VIP</span>
|
||||||
|
<span v-if="item.type == 8">心理学VIP</span>
|
||||||
|
<span v-if="item.type == 9">中西汇通VIP</span>
|
||||||
|
明细
|
||||||
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- <p style="margin-bottom: 20px;text-align: center;">办理明细</p> -->
|
||||||
|
</div>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<!-- 抽屉 -->
|
<!-- 抽屉 -->
|
||||||
<el-dialog
|
<el-dialog v-if="currentSheet && currentSheet.info"
|
||||||
title="物流详情"
|
:title="`${editType == 'add' ? '新增' : '编辑'} ${currentSheet.info.typeName} 明细`"
|
||||||
:visible.sync="tracesShow"
|
:visible.sync="tracesShow"
|
||||||
@close="drawerHandleClose"
|
@close="drawerHandleClose"
|
||||||
append-to-body
|
append-to-body
|
||||||
|
width="1000px"
|
||||||
>
|
>
|
||||||
<div class="deliver_info" >
|
<div class="deliver_info" >
|
||||||
<div>
|
<el-form
|
||||||
运单信息:{{ currentSheet.expressCompanyName }} -
|
:model="dataForm"
|
||||||
{{ currentSheet.expressOrderSn }}
|
:rules="dataRule"
|
||||||
</div>
|
ref="dataForm"
|
||||||
<div
|
@keyup.enter.native="dataFormSubmit()"
|
||||||
class="scroll"
|
label-width="120px"
|
||||||
style="padding: 10px;"
|
|
||||||
v-if="traces && traces.length > 0"
|
|
||||||
>
|
>
|
||||||
<el-timeline :reverse="reverse">
|
<el-form-item label="VIP类型" class="coin_block">
|
||||||
<el-timeline-item
|
<el-radio-group
|
||||||
v-for="(activity, index2) in traces"
|
v-if="editType == 'add'"
|
||||||
:key="index2"
|
v-model="dataForm.vipType"
|
||||||
:icon="activity.icon"
|
size="mini"
|
||||||
:timestamp="activity.acceptTime"
|
style="display: flex;align-items: center;flex-wrap: wrap;position: relative;padding-top: 14px;"
|
||||||
>
|
>
|
||||||
{{ activity.acceptStation }}
|
<el-radio v-if="[11, 12,1,2,currentSheet.info.vipType].includes(option.value)"
|
||||||
</el-timeline-item>
|
:style="`${index == 1 ? '' : ''}`"
|
||||||
</el-timeline>
|
style="margin-left: 10px;display: inline-block;width: 140px;margin-bottom: 10px;"
|
||||||
</div>
|
v-for="(option, index) in typeList"
|
||||||
<div v-else class="noinfo">-暂无物流信息-</div>
|
:key="index"
|
||||||
</div>
|
:label="option.value"
|
||||||
</el-dialog>
|
>
|
||||||
|
{{ option.label }}
|
||||||
|
|
||||||
|
|
||||||
|
</el-radio>
|
||||||
|
<el-tag style="position: absolute;top: -30px;left: 10px;"
|
||||||
|
type="danger"
|
||||||
|
v-if="[11, 12,1,2].includes(dataForm.vipType)"
|
||||||
|
>选择此类型会同时生成多条VIP明细</el-tag
|
||||||
|
>
|
||||||
|
|
||||||
|
</el-radio-group>
|
||||||
|
|
||||||
|
<div v-if="editType == 'edit'">
|
||||||
|
{{ currentSheet.info.typeName }}
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="VIP有效期" class="coin_block">
|
||||||
|
<div>
|
||||||
|
{{ currentSheet.startTime}}
|
||||||
|
<span style="padding: 0 10px;cursor: pointer;color: #006699;font-weight: bold;" @click="handleInsert('start',currentSheet.startTime)">插入</span>
|
||||||
|
<span style="padding: 0 10px;">至</span>
|
||||||
|
|
||||||
|
{{currentSheet.endTime }} <span style="padding: 0 10px;cursor: pointer;color: #006699;font-weight: bold;" @click="handleInsert('end',currentSheet.endTime)">插入</span>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="明细有效期" class="coin_block">
|
||||||
|
<div>
|
||||||
|
<el-date-picker size="mini"
|
||||||
|
v-model="dataForm.startTime"
|
||||||
|
type="datetime"
|
||||||
|
format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
placeholder="选择开始时间"
|
||||||
|
@change="handleChangeStartTime"
|
||||||
|
>
|
||||||
|
</el-date-picker>
|
||||||
|
<span style="padding: 0 10px;">至</span>
|
||||||
|
|
||||||
|
<el-date-picker size="mini"
|
||||||
|
v-model="dataForm.endTime"
|
||||||
|
type="datetime"
|
||||||
|
format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
value-format="yyyy-MM-dd HH:mm:ss"
|
||||||
|
placeholder="选择结束时间"
|
||||||
|
>
|
||||||
|
</el-date-picker>
|
||||||
|
</div>
|
||||||
|
<div class="year_block">
|
||||||
|
<span @click="handleYear('1')">1 年</span>
|
||||||
|
<span @click="handleYear('3')">3 年</span>
|
||||||
|
<span @click="handleYear('4')">4 年</span>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="来源" class="coin_block">
|
||||||
|
<div>
|
||||||
|
<el-radio-group v-model="dataForm.type">
|
||||||
|
<el-radio label="master">管理员</el-radio>
|
||||||
|
<el-radio label="order">订单</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="支付方式" class="coin_block">
|
||||||
|
<div>
|
||||||
|
<el-radio-group v-model="dataForm.payType" @input="payTypeChange">
|
||||||
|
<el-radio label="微信">微信</el-radio>
|
||||||
|
<el-radio label="支付宝">支付宝</el-radio>
|
||||||
|
|
||||||
|
<el-radio label="天医币">天医币</el-radio>
|
||||||
|
<el-radio label="银行支付">银行支付</el-radio>
|
||||||
|
<el-radio label="海外支付">海外支付</el-radio>
|
||||||
|
<el-radio label="其他">其他</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item
|
||||||
|
label="订单号"
|
||||||
|
class="coin_block"
|
||||||
|
v-if="dataForm.type == 'order'"
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<el-input
|
||||||
|
clearable
|
||||||
|
style=""
|
||||||
|
v-model="dataForm.orderSn"
|
||||||
|
placeholder="请输入关联订单号"
|
||||||
|
>
|
||||||
|
</el-input>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<el-form-item label="金额" class="coin_block">
|
||||||
|
<div>
|
||||||
|
<el-input
|
||||||
|
clearable
|
||||||
|
style=""
|
||||||
|
v-model="dataForm.fee"
|
||||||
|
placeholder="请输入金额"
|
||||||
|
>
|
||||||
|
</el-input>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
<!-- <el-form-item label="抵扣天医币" class="coin_block">
|
||||||
|
<div>
|
||||||
|
<el-input
|
||||||
|
clearable
|
||||||
|
style=""
|
||||||
|
v-model="dataForm.value"
|
||||||
|
placeholder="请输入需要抵扣的天医币"
|
||||||
|
>
|
||||||
|
</el-input>
|
||||||
|
</div>
|
||||||
|
</el-form-item> -->
|
||||||
|
|
||||||
|
<el-form-item label="抵扣积分" class="coin_block">
|
||||||
|
<div>
|
||||||
|
<el-input
|
||||||
|
clearable
|
||||||
|
style=""
|
||||||
|
v-model="dataForm.jf"
|
||||||
|
placeholder="请输入需要抵扣的积分"
|
||||||
|
>
|
||||||
|
</el-input>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
|
|
||||||
|
<el-form-item label="备注">
|
||||||
|
<el-input
|
||||||
|
type="textarea"
|
||||||
|
rows="5"
|
||||||
|
v-model="dataForm.remark"
|
||||||
|
placeholder="备注"
|
||||||
|
>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-form>
|
||||||
|
</div>
|
||||||
|
<span slot="footer" class="dialog-footer">
|
||||||
|
<el-button @click="handleCancel" size="mini">取消</el-button>
|
||||||
|
<el-button type="primary" @click="dataFormSubmit()" size="mini"
|
||||||
|
>确定</el-button
|
||||||
|
>
|
||||||
|
</span>
|
||||||
|
</el-dialog>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -265,6 +338,23 @@
|
|||||||
props: ["orderSn", "pageType"],
|
props: ["orderSn", "pageType"],
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
userInfo: {},
|
||||||
|
editType: "",
|
||||||
|
typeList: [
|
||||||
|
{ value: 11, label: "超v" },
|
||||||
|
{ value: 12, label: "简易超v" },
|
||||||
|
{ value: 1, label: "医学超v" },
|
||||||
|
{ value: 2, label: "国学与心理学超v" },
|
||||||
|
{ value: 4, label: "中医学VIP" },
|
||||||
|
{ value: 5, label: "针灸学VIP" },
|
||||||
|
{ value: 6, label: "肿瘤学VIP" },
|
||||||
|
{ value: 9, label: "中西汇通学VIP" },
|
||||||
|
{ value: 7, label: "国学VIP" },
|
||||||
|
{ value: 8, label: "心理学VIP" }
|
||||||
|
],
|
||||||
|
dataRule: {},
|
||||||
|
activeNames: [],
|
||||||
|
vipData: [],
|
||||||
orderList: [],
|
orderList: [],
|
||||||
dataForm: {
|
dataForm: {
|
||||||
key: ""
|
key: ""
|
||||||
@@ -307,36 +397,7 @@
|
|||||||
label: "provName",
|
label: "provName",
|
||||||
children: "children"
|
children: "children"
|
||||||
},
|
},
|
||||||
addressFormRule: {
|
|
||||||
name: [
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: "请输入收货人信息",
|
|
||||||
trigger: "blur"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
tel: [
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: "请输入收货联系电话信息",
|
|
||||||
trigger: "blur"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
county: [
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: "请选择收货地址",
|
|
||||||
trigger: "blur"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
addressXX: [
|
|
||||||
{
|
|
||||||
required: true,
|
|
||||||
message: "请输入详细地址信息",
|
|
||||||
trigger: "blur"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
sheetList: [], // 面单列表
|
sheetList: [], // 面单列表
|
||||||
currBookLIst: [],
|
currBookLIst: [],
|
||||||
booksShow: false,
|
booksShow: false,
|
||||||
@@ -350,10 +411,319 @@
|
|||||||
this.query.orderSn = this.$route.query.orderSn;
|
this.query.orderSn = this.$route.query.orderSn;
|
||||||
this.query.ordertype = this.$route.query.ordertype;
|
this.query.ordertype = this.$route.query.ordertype;
|
||||||
// console.log(this.$route.query.orderSn)
|
// console.log(this.$route.query.orderSn)
|
||||||
|
|
||||||
|
this.getUserInfo();
|
||||||
this.getData();
|
this.getData();
|
||||||
|
|
||||||
// this.getOrderSheetList()
|
// this.getOrderSheetList()
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
addYearsToTime(timeStr, yearsToAdd,type) {
|
||||||
|
// 1. 拆分时间字符串为「日期部分」和「时间部分」
|
||||||
|
const [datePart, timePart] = timeStr.split(' ');
|
||||||
|
// 拆分日期为「年、月、日」,拆分时间为「时、分、秒」
|
||||||
|
const [year, month, day] = datePart.split('-').map(Number);
|
||||||
|
const [hour, minute, second] = timePart.split(':').map(Number);
|
||||||
|
|
||||||
|
// 2. 构造 Date 对象(注意:Date 的月份是 0~11,所以要减 1)
|
||||||
|
const date = new Date(year, month - 1, day, hour, minute, second);
|
||||||
|
|
||||||
|
// 3. 给年份加指定数值
|
||||||
|
if(type=='reduce'){
|
||||||
|
date.setFullYear(date.getFullYear() - yearsToAdd);
|
||||||
|
}else{
|
||||||
|
date.setFullYear(date.getFullYear() + yearsToAdd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// 4. 格式化 Date 对象为原字符串格式(补零保证两位)
|
||||||
|
const newYear = date.getFullYear();
|
||||||
|
const newMonth = String(date.getMonth() + 1).padStart(2, '0'); // 月份加 1 后补零
|
||||||
|
const newDay = String(date.getDate()).padStart(2, '0');
|
||||||
|
const newHour = String(date.getHours()).padStart(2, '0');
|
||||||
|
const newMinute = String(date.getMinutes()).padStart(2, '0');
|
||||||
|
const newSecond = String(date.getSeconds()).padStart(2, '0');
|
||||||
|
|
||||||
|
return `${newYear}-${newMonth}-${newDay} ${newHour}:${newMinute}:${newSecond}`;
|
||||||
|
},
|
||||||
|
handleYear(years){
|
||||||
|
|
||||||
|
|
||||||
|
if(this.dataForm.startTime){
|
||||||
|
const startTimeStr = this.dataForm.startTime;
|
||||||
|
var endTime= this.addYearsToTime(startTimeStr,Number(years),'add')
|
||||||
|
console.log('endTime at line 447:', endTime)
|
||||||
|
this.dataForm.endTime = endTime
|
||||||
|
}else{
|
||||||
|
this.$message.error("请选择开始时间");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
handleInsert(type,time){
|
||||||
|
if(type == 'start'){
|
||||||
|
this.dataForm.startTime = time
|
||||||
|
}
|
||||||
|
if(type == 'end'){
|
||||||
|
this.dataForm.endTime = time
|
||||||
|
}
|
||||||
|
},
|
||||||
|
getUserInfo() {
|
||||||
|
this.$http({
|
||||||
|
url: this.$http.adornUrl(`/book/user/info/${this.$route.query.id}`),
|
||||||
|
method: "get",
|
||||||
|
params: this.$http.adornParams()
|
||||||
|
})
|
||||||
|
.then(res => {
|
||||||
|
console.log("response at line 214:", res);
|
||||||
|
// 请求成功,返回用户数据
|
||||||
|
if (res.data.code == 0) {
|
||||||
|
this.userInfo = res.data.user;
|
||||||
|
console.log("this.userInfo at line 401:", this.userInfo);
|
||||||
|
} else {
|
||||||
|
this.$message.error("请刷新页面,重新获取数据");
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
// 请求失败,返回一个失败标识
|
||||||
|
});
|
||||||
|
},
|
||||||
|
payTypeChange(e){
|
||||||
|
console.log('e at line 261:', e)
|
||||||
|
if (this.dataForm.payType == "海外支付") {
|
||||||
|
this.dataForm.fee=0;
|
||||||
|
this.dataForm.jf=0;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
dataFormSubmit() {
|
||||||
|
this.$refs["dataForm"].validate(valid => {
|
||||||
|
if (valid) {
|
||||||
|
if (this.dataForm.startTime == "") {
|
||||||
|
this.$message.error("请选择开始时间");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.dataForm.endTime == "") {
|
||||||
|
this.$message.error("请选择结束时间");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.dataForm.startTime && this.dataForm.endTime) {
|
||||||
|
if (this.dataForm.startTime > this.dataForm.endTime) {
|
||||||
|
this.$message.error("开始时间不能大于结束时间");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (this.dataForm.type == "order" && !this.dataForm.orderSn) {
|
||||||
|
this.$message.error("请输入订单号");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!this.dataForm.payType) {
|
||||||
|
this.$message.error("请输入支付方式");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (this.dataForm.payType == "海外支付") {
|
||||||
|
this.dataForm.fee=0;
|
||||||
|
this.dataForm.jf=0;
|
||||||
|
}
|
||||||
|
// if (this.dataForm.jf == 0 && this.dataForm.fee == 0) {
|
||||||
|
// this.$message.error("请重新填写金额或者积分,不能都为0");
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
if (this.dataForm.payType == "其他") {
|
||||||
|
if (!this.dataForm.remark) {
|
||||||
|
this.$message.error("请输入备注");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var data = {
|
||||||
|
...this.dataForm,
|
||||||
|
jf: this.dataForm.jf || 0,
|
||||||
|
fee: this.dataForm.fee || 0,
|
||||||
|
userId: this.userInfo.id
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
if (this.editType == "add") {
|
||||||
|
if (data.vipType == 1 || data.vipType == 2) {
|
||||||
|
data.userVipId = "";
|
||||||
|
}
|
||||||
|
if (this.dataForm.type == "master") {
|
||||||
|
data.adminId = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$http({
|
||||||
|
url: this.$http.adornUrl(
|
||||||
|
this.editType == "add"
|
||||||
|
? "/master/userVip/addUserVipLog"
|
||||||
|
: "/master/userVip/updateUserVipLogById"
|
||||||
|
),
|
||||||
|
method: "post",
|
||||||
|
data: this.$http.adornData({
|
||||||
|
...data
|
||||||
|
})
|
||||||
|
}).then(({ data }) => {
|
||||||
|
if (data && data.code === 0) {
|
||||||
|
this.$message({
|
||||||
|
message: "操作成功",
|
||||||
|
type: "success",
|
||||||
|
duration: 1500,
|
||||||
|
onClose: () => {
|
||||||
|
this.tracesShow = false;
|
||||||
|
this.$nextTick(() => {
|
||||||
|
this.getData();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
this.$message.error(data.msg);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
handleChangeStartTime(time) {
|
||||||
|
console.log("time at line 385:", time);
|
||||||
|
if (this.dataForm.startTime) {
|
||||||
|
this.dataForm.startTime = this.dataForm.startTime.replace("T", " ");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
handleCancel() {
|
||||||
|
this.tracesShow = false;
|
||||||
|
this.dataForm = {};
|
||||||
|
},
|
||||||
|
handleAdd(data) {
|
||||||
|
this.editType = "add";
|
||||||
|
console.log("data at line 263:", data);
|
||||||
|
|
||||||
|
const vipMap = {
|
||||||
|
4: "中医VIP",
|
||||||
|
5: "针灸VIP",
|
||||||
|
6: "肿瘤VIP",
|
||||||
|
7: "国学VIP",
|
||||||
|
8: "心理学VIP",
|
||||||
|
9: "中西汇通VIP"
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log("at line 274:", vipMap[data.type]);
|
||||||
|
this.currentSheet = {
|
||||||
|
...data,
|
||||||
|
info: { type: "master", typeName: vipMap[data.type],vipType:data.type }
|
||||||
|
};
|
||||||
|
this.dataForm = {
|
||||||
|
type: "master",
|
||||||
|
userVipId: data.id,
|
||||||
|
vipType: data.type,
|
||||||
|
startTime: "",
|
||||||
|
endTime: "",
|
||||||
|
jf: 0,
|
||||||
|
fee: 0
|
||||||
|
};
|
||||||
|
if (data.userVipLogs && data.userVipLogs.length > 0) {
|
||||||
|
this.dataForm.startTime =
|
||||||
|
data.userVipLogs[data.userVipLogs.length - 1].endTime;
|
||||||
|
}
|
||||||
|
this.tracesShow = true;
|
||||||
|
},
|
||||||
|
handleEdit(item, data) {
|
||||||
|
this.editType = "edit";
|
||||||
|
console.log("data at line 263:", data);
|
||||||
|
|
||||||
|
const vipMap = {
|
||||||
|
4: "中医VIP",
|
||||||
|
5: "针灸VIP",
|
||||||
|
6: "肿瘤VIP",
|
||||||
|
7: "国学VIP",
|
||||||
|
8: "心理学VIP",
|
||||||
|
9: "中西汇通VIP"
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log("at line 274:", vipMap[data.type]);
|
||||||
|
this.currentSheet = {
|
||||||
|
...data,
|
||||||
|
info: { ...item, typeName: vipMap[data.type] }
|
||||||
|
};
|
||||||
|
this.dataForm = {
|
||||||
|
...item,
|
||||||
|
jf: this.dataForm.jf || 0,
|
||||||
|
fee: this.dataForm.fee || 0
|
||||||
|
};
|
||||||
|
this.tracesShow = true;
|
||||||
|
},
|
||||||
|
handleDelete(data) {
|
||||||
|
this.$confirm("确定要删除该明细吗?", "提示", {
|
||||||
|
confirmButtonText: "确定",
|
||||||
|
cancelButtonText: "取消",
|
||||||
|
type: "warning"
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
return;
|
||||||
|
this.$http({
|
||||||
|
url: this.$http.adornUrl("/book/point/delPoint"),
|
||||||
|
method: "post",
|
||||||
|
data: this.$http.adornData({
|
||||||
|
pointId: item.id
|
||||||
|
})
|
||||||
|
}).then(({ data }) => {
|
||||||
|
if (data.code == 0) {
|
||||||
|
this.$message.success("删除成功");
|
||||||
|
this.getData();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {});
|
||||||
|
},
|
||||||
|
getVipType(data) {
|
||||||
|
var userVips = data.type;
|
||||||
|
const vipMap = {
|
||||||
|
4: "中医VIP",
|
||||||
|
5: "针灸VIP",
|
||||||
|
6: "肿瘤VIP",
|
||||||
|
7: "国学VIP",
|
||||||
|
8: "心理学VIP",
|
||||||
|
9: "中西汇通VIP"
|
||||||
|
};
|
||||||
|
const tags = [];
|
||||||
|
let vipTypes = [];
|
||||||
|
if (typeof userVips === "number") {
|
||||||
|
vipTypes = String(userVips)
|
||||||
|
.split("")
|
||||||
|
.map(Number); // 数字转为数组
|
||||||
|
} else {
|
||||||
|
vipTypes = userVips.map(vip => vip.type); // 如果是对象数组,获取每个对象的 type
|
||||||
|
}
|
||||||
|
vipTypes.forEach(type => {
|
||||||
|
if (type == 4 || type == 5 || type == 6 || type == 9) {
|
||||||
|
tags.push(
|
||||||
|
`<span style="font-weight: bold; color: ${
|
||||||
|
data.state == 0 ? "#fff" : "#888"
|
||||||
|
};display:inline-block;margin-bottom: 6px; padding:6px 10px; border-radius: 6px; font-size: 16px; background: ${
|
||||||
|
data.state == 0 ? "#409EFF" : "#f0f0f0"
|
||||||
|
};" effect="dark">${vipMap[type]}</span>`
|
||||||
|
);
|
||||||
|
} else if (type == 7) {
|
||||||
|
tags.push(
|
||||||
|
`<span style="font-weight: bold; color: ${
|
||||||
|
data.state == 0 ? "#fff" : "#888"
|
||||||
|
};display:inline-block;margin-bottom: 6px; padding:6px 10px; border-radius: 6px; font-size: 16px;background: ${
|
||||||
|
data.state == 0 ? "#67c23a" : "#f0f0f0"
|
||||||
|
};" effect="dark">${vipMap[type]}</span>`
|
||||||
|
);
|
||||||
|
} else if (type == 8) {
|
||||||
|
tags.push(
|
||||||
|
`<span style="font-weight: bold;color: ${
|
||||||
|
data.state == 0 ? "#fff" : "#888"
|
||||||
|
};display:inline-block;margin-bottom: 6px; background: ${
|
||||||
|
data.state == 0 ? "#00bcd4" : "#f0f0f0"
|
||||||
|
}; padding:6px 10px; border-radius:6px; font-size: 16px; " effect="dark">${
|
||||||
|
vipMap[type]
|
||||||
|
}</span>`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return tags.join("<br/>");
|
||||||
|
},
|
||||||
init() {
|
init() {
|
||||||
this.query.orderSn = this.orderSn;
|
this.query.orderSn = this.orderSn;
|
||||||
this.query.ordertype = this.$route.query.ordertype;
|
this.query.ordertype = this.$route.query.ordertype;
|
||||||
@@ -543,18 +913,22 @@
|
|||||||
|
|
||||||
// 获取数据列表
|
// 获取数据列表
|
||||||
getData() {
|
getData() {
|
||||||
|
this.activeNames = [];
|
||||||
this.dataListLoading = true;
|
this.dataListLoading = true;
|
||||||
this.$http({
|
this.$http({
|
||||||
|
url: this.$http.adornUrl("/master/userVip/getUserVipInfoByUserId"),
|
||||||
url: this.$http.adornUrl(`/book/buyOrder/orderDetail`),
|
method: "post",
|
||||||
method: "get",
|
data: this.$http.adornData({
|
||||||
params: this.$http.adornParams({
|
state: "",
|
||||||
orderSn: this.query.orderSn
|
userId: this.$route.query.id
|
||||||
})
|
})
|
||||||
}).then(({ data }) => {
|
}).then(({ data }) => {
|
||||||
if (data && data.code === 0) {
|
if (data && data.code === 0) {
|
||||||
// console.log(data.result,'data.result')
|
// console.log(data.result,'data.result')
|
||||||
this.vipData = data.result;
|
this.vipData = data.userVips;
|
||||||
|
this.vipData.forEach((item, index) => {
|
||||||
|
this.activeNames.push(item.id + "");
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
this.orderDetails = {};
|
this.orderDetails = {};
|
||||||
return this.$message.error("VIP详情获取失败,请重试");
|
return this.$message.error("VIP详情获取失败,请重试");
|
||||||
@@ -603,8 +977,7 @@
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -710,6 +1083,7 @@
|
|||||||
ul.list {
|
ul.list {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
color: #515a6e;
|
color: #515a6e;
|
||||||
|
padding-left: 0;
|
||||||
|
|
||||||
li {
|
li {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
@@ -731,7 +1105,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.liName {
|
.liName {
|
||||||
font-size: 12px;
|
font-size: 14px;
|
||||||
margin-bottom: 10px;
|
margin-bottom: 10px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
@@ -819,5 +1193,17 @@
|
|||||||
.DiscountColor {
|
.DiscountColor {
|
||||||
color: #f94f04;
|
color: #f94f04;
|
||||||
}
|
}
|
||||||
|
.coin_block{
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.year_block{
|
||||||
|
span{
|
||||||
|
padding: 2px 10px;
|
||||||
|
border: 1px solid #006699;
|
||||||
|
color: #006699;
|
||||||
|
border-radius: 5px;
|
||||||
|
margin-right: 10px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
Reference in New Issue
Block a user