sadjv3_admin/src/views/bl/massage/massagePackage.vue

2636 lines
66 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<!-- 服务包列表 -->
<div style="position: relative; display: inline-block; margin: 5px">
<span>服务包类型</span>
<el-select
clearable
v-model="type"
style="width: 150px; margin-left: 10px">
<el-option
v-for="item in typeDictData"
:key="item.id"
:label="item.value"
:value="item.id">
</el-option>
</el-select>&nbsp;&nbsp;
</div>
<div style="position: relative; display: inline-block; margin: 5px">
<span>服务类型:</span>
<el-select
clearable
v-model="classifyId"
style="width: 150px; margin-left: 10px">
<el-option
v-for="item in fwData"
:key="item.id"
:label="item.value"
:value="item.id">
</el-option>
</el-select>&nbsp;&nbsp;
</div>
<div style="position: relative; display: inline-block">
<span>状态:</span>
<el-select
clearable
v-model="status"
style="width: 150px; margin-left: 10px">
<el-option value="1" label="上线"></el-option>
<el-option value="2" label="下线"></el-option>
</el-select>&nbsp;&nbsp;
</div>
<div style="position: relative; display: inline-block">
<span>等级:</span>
<el-select
clearable
v-model="level"
style="width: 150px; margin-left: 10px">
<el-option value="3" label="新手"></el-option>
<el-option value="4" label="专家"></el-option>
<el-option value="5" label="资深"></el-option>
</el-select>&nbsp;&nbsp;
</div>
<div style="position: relative; display: inline-block">
<span>项目名称:</span>
<el-input
style="width: 200px"
placeholder="请输入服务名称"
v-model="title">
</el-input>
</div>
<div style="position: relative; display: inline-block">
<span>城市:</span>
<el-input
style="width: 200px"
placeholder="请输入城市"
v-model="city"
>
</el-input>
</div>
<el-button
style="margin: 10px"
size="mini"
type="primary"
icon="document"
@click="handleSelect"
>查询
</el-button>
<el-button
style="margin: 10px"
size="mini"
type="primary"
icon="document"
@click="handleClear"
>重置
</el-button>&nbsp;&nbsp;
<div style="text-align: right; display: inline-block">
<el-button
style="margin: 10px"
size="mini"
type="primary"
icon="document"
@click="handleEdit(0)"
>添加
</el-button>
</div>
<el-table v-loading="tableDataLoading" :data="tableData.list">
<el-table-column
prop="id"
label="编号"
width="80"
fixed="left"
>
</el-table-column>
<el-table-column label="服务包类型" fixed="left" prop="type" width="100">
<template slot-scope="scope">
{{ showDictValue(scope.row.type, typeDictData) }}
</template>
</el-table-column>
<el-table-column label="服务类型" fixed="left" prop="classifyId">
<template slot-scope="scope">
{{ showDictValue(scope.row.classifyId, fwData) }}
</template>
</el-table-column>
<el-table-column label="等级" fixed="left" prop="level" width="60">
<template slot-scope="scope">
{{ showLevelValue(scope.row.level, levelData) }}
</template>
</el-table-column>
<el-table-column
prop="title"
label="名称"
fixed="left"
width="150"
>
</el-table-column>
<el-table-column prop="packageImg" label="图片">
<template slot-scope="scope">
  <img
v-if="scope.row.packageImg && scope.row.packageImg != ''"
:src="scope.row.packageImg"
width="40"
height="40"
/>
<span v-else>暂无图片</span>
</template>
</el-table-column>
<el-table-column prop="contentImg" label="详情图" width="250">
<template slot-scope="scope">
<div
v-for="(item, index) in scope.row.contentImg"
:key="index"
style="display: inline-block; margin: 3px"
>
<el-popover placement="top-start" title="" trigger="hover">
<img
style="width: 50px; height: 50px"
:src="item"
alt=""
slot="reference"
/>
<img style="width: 300px; height: auto" :src="item" alt=""/>
</el-popover>
</div>
</template>
</el-table-column>
<el-table-column prop="city" label="城市" width="100">
<template slot-scope="scope">
<span v-if="scope.row.city">{{ scope.row.city }}</span>
<span v-else>不限</span>
</template>
</el-table-column>
<el-table-column prop="oldPrice" label="原价"></el-table-column>
<el-table-column prop="price" label="现价"></el-table-column>
<el-table-column prop="labels" label="标签" width="150">
</el-table-column>
<el-table-column prop="sales" label="销量" width="150">
<template slot-scope="scope">
<span>{{ scope.row.sales }}</span>
<el-button
size="mini"
type="primary"
plain
@click="showUpdateSalesView(scope.row)"
style="margin: 5px"
>修改
</el-button
>
</template>
</el-table-column>
<!-- <el-table-column prop="sales" label="好评" width="150">-->
<!-- <template slot-scope="scope">-->
<!-- <span>{{ scope.row.esteemRate }}</span>-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="primary"-->
<!-- plain-->
<!-- @click="showUpdateEsteemRateView(scope.row)"-->
<!-- style="margin: 5px"-->
<!-- >修改-->
<!-- </el-button-->
<!-- >-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column prop="addNum" label="加钟数"></el-table-column>
<el-table-column prop="status" label="代金券可用" width="100">
<template slot-scope="scope">
<el-switch
v-model="scope.row.isCanCoupon"
@change="changeCoupon(scope.row.id, scope.row.isCanCoupon)"
:active-value="openValue"
:inactive-value="closeValue"
active-color="#13ce66"
inactive-color="#ff4949"
>
</el-switch>
</template>
</el-table-column>
<el-table-column prop="status" label="VIP可用">
<template slot-scope="scope">
<el-switch
v-model="scope.row.isCanVip"
@change="changeVip(scope.row.id, scope.row.isCanVip)"
:active-value="openValue"
:inactive-value="closeValue"
active-color="#13ce66"
inactive-color="#ff4949"
>
</el-switch>
</template>
</el-table-column>
<el-table-column prop="status" label="状态">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
@change="changeStatus(scope.row.id, scope.row.status)"
:active-value="openValue"
:inactive-value="closeValue"
active-color="#13ce66"
inactive-color="#ff4949"
>
</el-switch>
</template>
</el-table-column>
<el-table-column label="操作" prop="id" width="360" fixed="right">
<template slot-scope="scope">
<el-button
size="mini"
type="primary"
style="margin: 5px"
@click="showDetailView(scope.row)"
>服务项目
</el-button>
<el-button
size="mini"
type="primary"
style="margin: 5px"
@click="handleEdit(scope.row)"
>修改
</el-button>
<el-button
size="mini"
type="danger"
style="margin: 5px"
@click="handleDelete(scope.row)"
>删除
</el-button>
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="danger"-->
<!-- style="margin: 5px"-->
<!-- @click="showBuyView(scope.row)"-->
<!-- >购买-->
<!-- </el-button>-->
<!-- <el-button-->
<!-- size="mini"-->
<!-- type="danger"-->
<!-- style="margin: 5px"-->
<!-- @click="showPayView()"-->
<!-- >支付-->
<!-- </el-button>-->
</template>
</el-table-column>
</el-table>
<div style="text-align: center; margin-top: 10px">
<el-pagination
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:page-sizes="[10, 20, 30, 40]"
:page-size="limit"
:current-page="page"
layout="total,sizes, prev, pager, next,jumper"
:total="tableData.totalCount"
>
</el-pagination>
</div>
<!-- 修改销量 -->
<el-dialog title="修改销量" :visible.sync="dialogFormVisibleSales" center>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>销量:</span
>
<el-input
style="width: 50%"
v-model="sales"
type="number"
min="0"
placeholder="请输入销量"
>
</el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisibleSales = false">取 消</el-button>
<el-button type="primary" @click="updateSales()">确 定</el-button>
</div>
</el-dialog>
<!-- 修改好评 -->
<el-dialog title="修改好评" :visible.sync="dialogFormVisibleEsteemRate" center>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>好评%</span
>
<el-input
style="width: 50%"
v-model="esteemRate"
type="number"
min="0"
placeholder="请输入好评率0-100不要输入%"
>
</el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisibleEsteemRate = false">取 消</el-button>
<el-button type="primary" @click="updateEsteemRate()">确 定</el-button>
</div>
</el-dialog>
<!-- 添加、修改服务包 -->
<el-dialog :title="titles" :visible.sync="dialogFormVisible" center @close="closeMain">
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>服务包类型:</span
>
<el-select clearable v-model="type" style="width: 50%">
<el-option
v-for="item in typeDictData"
:key="item.id"
:label="item.value"
:value="item.id"
>
</el-option>
</el-select
>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>服务类型:</span
>
<el-select clearable v-model="classifyId" style="width: 50%">
<el-option
v-for="item in fwData"
:key="item.id"
:label="item.value"
:value="item.id"
>
</el-option>
</el-select
>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>套餐等级:</span
>
<el-select clearable v-model="level" style="width: 50%">
<el-option
v-for="item in levelData"
:key="item.vipNameType"
:label="item.vipName"
:value="item.vipNameType"
>
</el-option>
</el-select
>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>名称:</span
>
<el-input
style="width: 50%"
v-model="title"
type="text"
placeholder="请输入服务包名称"
>
</el-input>
</div>
<div style="margin-bottom: 10px; display: flex">
<span style="width: 200px; display: inline-block; text-align: right"
>图片:</span
>
<div
style="
width: 148px;
height: 148px;
border: 1px dashed #c0ccda;
border-radius: 6px;
text-align: center;
line-height: 148px;
"
>
<el-upload
class="avatar-uploader"
v-model="packageImg"
:action="uploadUrl"
:show-file-list="false"
:on-success="handlePackageImgSuccess"
:on-progress="onPackageImgProgress"
>
<img
v-if="packageImg != ''"
:src="packageImg"
class="avatar"
style="border-radius: 6px; width: 148px; height: 148px"
/>
<i v-else class="el-icon-plus avatar-uploader-icon iconss"></i>
</el-upload>
</div>
</div>
<div style="margin-bottom: 10px; display: flex">
<span style="width: 200px; display: inline-block; text-align: right"
>详情图:</span
>
<div class="imgs" v-for="(item, index) in contentImg" :key="index">
<img width="100%" class="images" height="100%" :src="item" alt=""/>
<span class="dels">
<i class="el-icon-delete" @click="clearContentImg(index)"></i>
</span>
</div>
<div class="imgs" style="width: 50%">
<el-upload
:action="uploadUrl"
list-type="picture-card"
:show-file-list="false"
:on-success="handleContentImgSuccess"
:on-progress="onContentImgProgress"
>
<el-progress
v-if="contentImgPercentage > 0 && contentImgPercentage < 100"
type="circle"
:percentage="contentImgPercentage"
></el-progress>
<i v-else class="el-icon-plus"></i>
</el-upload>
</div>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>原价:</span
>
<el-input
style="width: 50%"
v-model="oldPrice"
onkeyup="value=value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
type="number"
min="0"
placeholder="请输入原价"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>现价:</span
>
<el-input
style="width: 50%"
v-model="price"
onkeyup="value=value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
type="number"
min="0"
placeholder="请输入现价"
:disabled="true"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>状态:</span
>
<el-radio-group v-model="status">
<el-radio :label="1">上线</el-radio>
<el-radio :label="2">下线</el-radio>
</el-radio-group>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>城市:</span
>
<el-cascader
style="width: 45%"
size="large"
:options="options"
ref="cascaderAddr"
v-model="storeAddress"
:placeholder="storeAddre"
@change="handleChangeCity"
:value="storeAddre"
>
</el-cascader>
<el-button
type="info"
class="tj"
size="mini"
icon="el-icon-delete"
circle
@click="handleDeleteCity"
>
</el-button>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>标签:</span
>
<span class="bqList" v-for="(item, index) in labelsArr" :key="index"
>{{ item }}
<span class="delss">
<i class="el-icon-delete" @click="handleDeleteLabels(index)"></i>
</span>
</span>
<el-input
v-model="label"
style="width: 200px"
placeholder="请输入标签"
></el-input>
<el-button
type="primary"
class="tj"
size="mini"
icon="el-icon-edit"
circle
@click="handleAddLabels"
>
</el-button>
</div>
<!-- <div style="margin-bottom: 10px">-->
<!-- <span style="width: 200px; display: inline-block; text-align: right"-->
<!-- >简介:</span-->
<!-- >-->
<!-- <quill-editor-->
<!-- ref="myTextEditor"-->
<!-- v-model="content"-->
<!-- :options="quillOption"-->
<!-- style="-->
<!-- padding-bottom: 50px;-->
<!-- height: 300px;-->
<!-- width: 72%;-->
<!-- display: inline-table;-->
<!-- margin-bottom: 60px;-->
<!-- "-->
<!-- >-->
<!-- </quill-editor>-->
<!-- </div>-->
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>简介:</span
>
<el-input
style="width: 50%"
v-model="content"
type="textarea"
:rows="4"
placeholder="请输入服务包简介"
>
</el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>销量:</span
>
<el-input
style="width: 50%"
v-model="sales"
onkeyup="value=value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2')"
type="number"
min="0"
placeholder="请输入销量"
></el-input>
</div>
<!-- <div style="margin-bottom: 10px">-->
<!-- <span style="width: 200px; display: inline-block; text-align: right"-->
<!-- >好评率:</span-->
<!-- >-->
<!-- <el-input-->
<!-- style="width: 50%"-->
<!-- v-model="esteemRate"-->
<!-- onkeyup="value=value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2')"-->
<!-- type="number"-->
<!-- min="0"-->
<!-- placeholder="请输入销量0-100"-->
<!-- ></el-input>-->
<!-- </div>-->
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right"
>加钟数:</span
>
<el-input
style="width: 50%"
v-model="addNum"
onkeyup="value=value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2')"
type="number"
min="0"
placeholder="请输入加钟次数"
></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisible = false">取 消</el-button>
<el-button type="primary" @click="handleSubmit()">确 定</el-button>
</div>
</el-dialog>
<!-- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>服务项目>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -->
<el-dialog
title="服务项目"
:visible.sync="dialogFormVisibleDetail"
center
width="80%"
@close="closeDetail"
>
<div style="text-align: right; display: inline-block">
<el-button
style="margin: 10px"
size="mini"
type="primary"
icon="document"
@click="handleAddMassage()"
>添加
</el-button>
<el-button
style="margin: 10px"
size="mini"
type="primary"
icon="document"
@click="showMassageView()"
>项目列表
</el-button>
</div>
<el-table v-loading="detailTableDataLoading" :data="detailTableData.list">
<el-table-column
prop="id"
label="编号"
width="80"
fixed="left"
>
</el-table-column>
<el-table-column
prop="title"
label="项目名称"
fixed="left"
width="150"
>
</el-table-column>
<el-table-column prop="massageImg" label="图片">
<template slot-scope="scope">
  <img
v-if="scope.row.massageImg && scope.row.massageImg != ''"
:src="scope.row.massageImg"
width="40"
height="40"
/>
<span v-else>暂无图片</span>
</template>
</el-table-column>
<el-table-column prop="oldPrice" label="原价"> </el-table-column>
<el-table-column prop="price" label="现价"> </el-table-column>
<el-table-column prop="duration" label="时长(分钟)">
</el-table-column>
<el-table-column prop="status" label="状态">
<template slot-scope="scope">
<el-switch
v-model="scope.row.status"
@change="changeDetailStatus(scope.row)"
:active-value="openValue"
:inactive-value="closeValue"
active-color="#13ce66"
inactive-color="#ff4949"
>
</el-switch>
</template>
</el-table-column>
<el-table-column prop="packagePrice" label="优惠价" width="150">
<template slot-scope="scope">
<span>{{ scope.row.packagePrice }}</span>
<el-button
size="mini"
type="primary"
plain
@click="showUpdatePriceView(scope.row)"
style="margin: 5px"
>修改
</el-button
>
</template>
</el-table-column>
<el-table-column prop="serviceCount" label="次数" width="150">
<template slot-scope="scope">
<span>{{ scope.row.serviceCount }}</span>
<el-button
size="mini"
type="primary"
plain
@click="showUpdateCountView(scope.row)"
style="margin: 5px"
>修改
</el-button
>
</template>
</el-table-column>
<el-table-column prop="intervalDays" label="间隔(天)" width="150">
<template slot-scope="scope">
<span>{{ scope.row.intervalDays }}</span>
<el-button
size="mini"
type="primary"
plain
@click="showUpdateDaysView(scope.row)"
style="margin: 5px"
>修改
</el-button
>
</template>
</el-table-column>
<el-table-column label="操作" prop="id" width="100" fixed="right">
<template slot-scope="scope">
<el-button
size="mini"
type="danger"
style="margin: 5px"
@click="handleDeleteDetail(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<div style="text-align: center; margin-top: 10px">
<el-pagination
@size-change="handleDetailSizeChange"
@current-change="handleDetailCurrentChange"
:page-sizes="[10, 20, 30, 40]"
:page-size="detailLimit"
:current-page="detailPage"
layout="total,sizes, prev, pager, next,jumper"
:total="detailTableData.totalCount"
>
</el-pagination>
</div>
</el-dialog>
<!-- 修改价格 -->
<el-dialog title="修改优惠价" :visible.sync="dialogFormVisiblePrice" center>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">优惠价:</span>
<el-input
style="width: 50%"
v-model="packagePrice"
type="number"
min="0"
placeholder="请输入优惠价"
></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisiblePrice = false">取 消</el-button>
<el-button type="primary" @click="updatePrice()">确 定</el-button>
</div>
</el-dialog>
<!-- 修改次数 -->
<el-dialog title="修改次数" :visible.sync="dialogFormVisibleCount" center>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">次数:</span>
<el-input
style="width: 50%"
v-model="serviceCount"
type="number"
min="0"
placeholder="请输入次数"
></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisibleCount = false">取 消</el-button>
<el-button type="primary" @click="updateCount()">确 定</el-button>
</div>
</el-dialog>
<!-- 修改间隔 -->
<el-dialog title="修改间隔" :visible.sync="dialogFormVisibleIntervalDays" center>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">间隔(天)</span>
<el-input
style="width: 50%"
v-model="intervalDays"
type="number"
min="0"
placeholder="请输入天数"
></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisibleIntervalDays = false">取 消</el-button>
<el-button type="primary" @click="updateIntervalDays()">确 定</el-button>
</div>
</el-dialog>
<!-- 添加服务项目 -->
<el-dialog title="添加服务项目" :visible.sync="dialogFormVisibleAddMassage" center>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">项目类型:</span>
<el-select clearable v-model="type" style="width: 50%">
<el-option
v-for="item in fwData"
:key="item.id"
:label="item.value"
:value="item.id"
></el-option>
</el-select>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">项目名称:</span>
<el-input
style="width: 50%"
v-model="title"
type="text"
placeholder="请输入项目名称"
></el-input>
</div>
<div style="margin-bottom: 10px; display: flex">
<span style="width: 200px; display: inline-block; text-align: right">项目图片:</span>
<div style="
width: 148px;
height: 148px;
border: 1px dashed #c0ccda;
border-radius: 6px;
text-align: center;
line-height: 148px;
" >
<el-upload
class="avatar-uploader"
v-model="massageImg"
:action="uploadUrl"
:show-file-list="false"
:on-success="handleMassageImgSuccess"
:on-progress="onMassageImgProgress"
>
<img
v-if="massageImg != ''"
:src="massageImg"
class="avatar"
style="border-radius: 6px; width: 148px; height: 148px"
/>
<i v-else class="el-icon-plus avatar-uploader-icon iconss"></i>
</el-upload>
</div>
</div>
<div style="margin-bottom: 10px; display: flex">
<span style="width: 200px; display: inline-block; text-align: right">项目详情图:</span>
<div class="imgs" v-for="(item, index) in contentImg" :key="index">
<img width="100%" class="images" height="100%" :src="item" alt=""/>
<span class="dels"><i class="el-icon-delete" @click="clearContentImg(index)"></i></span>
</div>
<div class="imgs" style="width: 50%">
<el-upload
:action="uploadUrl"
list-type="picture-card"
:show-file-list="false"
:on-success="handleContentImgSuccess"
:on-progress="onContentImgProgress"
>
<el-progress
v-if="contentImgPercentage > 0 && contentImgPercentage < 100"
type="circle"
:percentage="contentImgPercentage"
></el-progress>
<i v-else class="el-icon-plus"></i>
</el-upload>
</div>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">原价:</span>
<el-input
style="width: 50%"
v-model="oldPrice"
onkeyup="value=value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
type="number"
min="0"
placeholder="请输入原价"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">现价:</span>
<el-input
style="width: 50%"
v-model="price"
onkeyup="value=value.replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3')"
type="number"
min="0"
placeholder="请输入现价"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">项目时长(分钟)</span>
<el-input
style="width: 50%"
v-model="duration"
type="text"
placeholder="请输入项目时长(分钟)"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">性别限制:</span>
<el-radio-group v-model="isSex">
<el-radio :label="0">不限制</el-radio>
<el-radio :label="1">男</el-radio>
<el-radio :label="2">女</el-radio>
</el-radio-group>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">适用人群:</span>
<el-input
style="width: 50%"
v-model="applyPeople"
type="textarea"
:rows="4"
placeholder="请输入适用人群"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">状态:</span>
<el-radio-group v-model="status">
<el-radio :label="1">上线</el-radio>
<el-radio :label="2">下线</el-radio>
</el-radio-group>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">服务城市:</span>
<el-cascader
style="width: 45%"
size="large"
:options="options"
ref="cascaderAddr"
v-model="storeAddress"
:placeholder="storeAddre"
@change="handleChangeCity"
:value="storeAddre"
>
</el-cascader>
<el-button
type="info"
class="tj"
size="mini"
icon="el-icon-delete"
circle
@click="handleDeleteCity"
>
</el-button>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">项目标签:</span>
<span class="bqList" v-for="(item, index) in labelsArr" :key="index">{{ item }}
<span class="delss">
<i class="el-icon-delete" @click="handleDeleteLabels(index)"></i>
</span>
</span>
<el-input
v-model="label"
style="width: 200px"
placeholder="请输入标签"
></el-input>
<el-button
type="primary"
class="tj"
size="mini"
icon="el-icon-edit"
circle
@click="handleAddLabels"
>
</el-button>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">项目内容:</span>
<el-input
style="width: 50%"
v-model="content"
type="textarea"
:rows="4"
placeholder="请输入项目内容"
>
</el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">项目简介:</span>
<el-input
v-model="jianjie"
type="textarea"
:rows="4"
style="width: 50%"
placeholder="请输入项目简介"
></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisibleAddMassage = false">取 消</el-button>
<el-button type="primary" @click="handleAddMassageSubmit()">确 定</el-button>
</div>
</el-dialog>
<!-- 项目列表弹框 -->
<el-dialog title="服务项目列表" :visible.sync="dialogFormVisibleMassageList" width="80%" center>
<div style="position: relative; display: inline-block; margin: 5px">
<span>项目类型:</span>
<el-select
clearable
v-model="massageType"
style="width: 150px; margin-left: 10px">
<el-option
v-for="item in fwData"
:key="item.id"
:label="item.value"
:value="item.id">
</el-option>
</el-select>
</div>
<div style="position: relative; display: inline-block">
<span>项目名称:</span>
<el-input
style="width: 200px"
placeholder="请输入项目名称"
v-model="massageTitle"
></el-input>
</div>
<el-button
style="margin: 10px"
size="mini"
type="primary"
icon="document"
@click="handleSelectMassage">查询
</el-button>
<el-button
style="margin: 10px"
size="mini"
type="primary"
icon="document"
@click="handleClearMassage">重置
</el-button>
<el-table :data="massageData.list" style="width: 100%">
<el-table-column label="项目类型" fixed="left" prop="type">
<template slot-scope="scope">
{{ showDictValue(scope.row.type, fwData) }}
</template>
</el-table-column>
<el-table-column prop="title" label="项目名称" width="180">
</el-table-column>
<el-table-column prop="massageImg" label="图片">
<template slot-scope="scope">
<img
v-if="scope.row.massageImg && scope.row.massageImg != ''"
:src="scope.row.massageImg"
width="40"
height="40"
/>
<span v-else>暂无图片</span>
</template>
</el-table-column>
<el-table-column prop="duration" label="时长(分钟)"> </el-table-column>
<el-table-column prop="oldPrice" label="原价"> </el-table-column>
<el-table-column prop="price" label="现价"> </el-table-column>
<el-table-column label="操作" prop="id" width="160" fixed="right">
<template slot-scope="scope">
<el-button
style="margin: 10px 0"
size="mini"
type="primary"
icon="document"
@click="handleAddToDetail(scope.row)"
>添加
</el-button>
</template>
</el-table-column>
</el-table>
<div style="text-align: center; margin-top: 10px">
<el-pagination
@size-change="handleMassageSizeChange"
@current-change="handleMassageCurrentChange"
:page-size="massageLimit"
:current-page="massagePage"
layout="total, prev, pager, next,jumper"
:total="massageData.totalCount"
></el-pagination>
</div>
</el-dialog>
<!-- <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<服务项目<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -->
<!-- 购买 -->
<el-dialog title="购买" :visible.sync="dialogFormVisibleBuy" center>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">用户:</span>
<el-input
style="width: 50%"
v-model="userId"
type="number"
min="0"
placeholder="请输入用户ID"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">会员优惠比:</span>
<el-input
style="width: 50%"
v-model="vipRate"
type="number"
min="0"
placeholder="请输入会员优惠比"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">购买数量:</span>
<el-input
style="width: 50%"
v-model="quantity"
type="number"
min="0"
placeholder="请输入购买数量"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">总金额:</span>
<el-input
style="width: 50%"
v-model="oldSumMoney"
type="number"
min="0"
placeholder="请输入总金额"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">应付总金额:</span>
<el-input
style="width: 50%"
v-model="sumMoney"
type="number"
min="0"
placeholder="请输入应付总金额"
></el-input>
</div>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">代金卷ID</span>
<el-input
style="width: 50%"
v-model="couponId"
type="text"
min="0"
placeholder="请输入代金卷ID"
></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisibleBuy = false">取 消</el-button>
<el-button type="primary" @click="handleBuy()">确 定</el-button>
</div>
</el-dialog>
<!-- 支付 -->
<el-dialog title="支付" :visible.sync="dialogFormVisiblePay" center>
<div style="margin-bottom: 10px">
<span style="width: 200px; display: inline-block; text-align: right">订单ID</span>
<el-input
style="width: 50%"
v-model="ordersId"
type="text"
min="0"
placeholder="请输入订单ID"
></el-input>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogFormVisiblePay = false">取 消</el-button>
<el-button type="primary" @click="handlePay()"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import {quillEditor} from "vue-quill-editor";
import "quill/dist/quill.core.css";
import "quill/dist/quill.snow.css";
import "quill/dist/quill.bubble.css";
import quillConfig from "./quill-config.js";
import axios from "axios";
import {jsonp} from "vue-jsonp";
import {serverPaths} from '@/utils/enumData'
import {
provinceAndCityData,
regionData,
provinceAndCityDataPlus,
regionDataPlus,
CodeToText,
TextToCode,
} from "element-china-area-data";
export default {
components: {
quillEditor,
},
data() {
return {
uploadUrl: serverPaths.uploadUrl,
uploadWatermarkUrl: serverPaths.uploadWatermarkUrl,
apiUrl:"",
tableDataLoading: false,
tableData: {},
typeDictData: [],
levelData:[{vipNameType:3,vipName:'资深1'},{vipNameType:4,vipName:'金牌1'},{vipNameType:5,vipName:'专家1'}],
id: "",//编号
title: "",//标题
type: "",//服务包类型
classifyId: "",//服务类型
oldPrice: "",//原价
price: "",//现价
packageImg: "",//图片
content: "",//简介
contentImg: [], //详情图
status: "",//状态
addNum: "",//加钟次数
esteemRate: "",//好评率
sales: "",//销量
labels: "",//标签
city: "",//城市
createTime: "",//创建时间
fwxmtype:"",//服务项目类型 104服务套餐
level:"",
page: 1,
limit: 10,
dialogFormVisibleSales: false,
dialogFormVisibleEsteemRate: false,
openValue: 1,
closeValue: 2,
dialogFormVisible: false,
titles: "添加服务包",
label:"",
labelsArr: [], //标签集合
storeAddress: [],
storeAddre: "请选择城市",
province: "", //省
options: provinceAndCityData,
packageImgPercentage:0,//封面图片上传进度
contentImgPercentage:0,//详情图片上传进度
quillOption: quillConfig,
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>服务项目>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
fwData: [],
dialogFormVisibleDetail:false,
detailTableDataLoading: false,
detailTableData: {},
mainId: "",//主表ID
massageTypeId: "",//按摩类型ID
packagePrice: 0,
serviceCount: 1,
intervalDays: 0,
detailPage: 1,
detailLimit: 10,
massageImg:"",
isSex: "",//是否限制性别
applyPeople: "",//适用人群
duration: "",//时长
jianjie: "",//简介
dialogFormVisiblePrice: false,
dialogFormVisibleCount: false,
dialogFormVisibleIntervalDays: false,
dialogFormVisibleAddMassage: false,
dialogFormVisibleMassageList: false,
massageTableDataLoading: false,
massageData: {},
massageType: "",
massageTitle: "",
massagePage: 1,
massageLimit: 10,
massageImgPercentage:0,//封面图片上传进度
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<服务项目<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
packageId:"",//服务包ID
ordersNo:"",//订单号
userId:"",//用户ID
quantity:0,//数量
payMoney:0,//支付金额
payWay:"",//支付方式
couponId:"",//代金券ID
dialogFormVisibleBuy: false,
vipRate: 100,
oldSumMoney: 0,
sumMoney: 0,
ordersId: "",
dialogFormVisiblePay: false,
};
},
methods: {
showDictValue(data, datas){
const dictItem = datas.find(item => data === item.id);
return dictItem ? dictItem.value : '';
},
showLevelValue(data, datas){
console.log(datas);
const dictItem = datas.find(item => data === item.vipNameType);
return dictItem ? dictItem.vipName : '';
},
// 服务包类型
typeDictSelect() {
this.$http({
url: this.$http.adornUrl("sys/dict/selectDictList"),
method: "get",
params: this.$http.adornParams({
type: "service_package",
}),
}).then(({data}) => {
this.typeDictData = data.data;
});
},
// 项目类型
fwSelect() {
this.$http({
url: this.$http.adornUrl("sys/dict/selectDictList"),
method: "get",
params: this.$http.adornParams({
type: "服务类型",
}),
}).then(({ data }) => {
let returnData = data.data;
this.fwData = returnData;
});
},
// 项目类型
levelSelect() {
this.$http({
url: this.$http.adornUrl("vipDetails/selectVipDetails"),
method: "get",
params: this.$http.adornParams({
type: "1",
}),
}).then(({ data }) => {
let returnData = data.data;
this.levelData = returnData;
});
},
// 获取服务包列表数据
handleSelect() {
this.tableDataLoading = true;
this.$http({
url: this.$http.adornUrl("massage/package/findPage"),
method: "get",
params: this.$http.adornParams({
// data: this.$http.adornData({
page: this.page,
limit: this.limit,
type: this.type,
classifyId: this.classifyId,
city: this.city,
title: this.title,
status: this.status,
level: this.level,
isActivity:0
}),
}).then(({data}) => {
if (data.code == 0) {
let returnData = data.data;
this.tableData = returnData;
for (var i in this.tableData.list) {
if (this.tableData.list[i].contentImg) {
this.tableData.list[i].contentImg =
this.tableData.list[i].contentImg.split(",");
}
}
} else {
this.$notify({
title: "提示",
duration: 1800,
message: data.msg,
type: "warning",
});
}
this.tableDataLoading = false;
});
},
// 重置
handleClear() {
this.type = "";
this.classifyId ="";
this.city = "";
this.title = "";
this.status = "";
this.level = "";
this.page = 1;
this.handleSelect();
},
//分页
handleSizeChange(val) {
this.limit = val;
this.handleSelect();
},
//翻页
handleCurrentChange(val) {
this.page = val;
this.handleSelect();
},
// 修改销量
showUpdateSalesView(row) {
this.id = row.id;
this.sales = row.sales;
this.dialogFormVisibleSales = true;
},
// 修改销量
updateSales() {
this.$http({
url: this.$http.adornUrl("massage/package/updateSales"),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
id: this.id,
sales: this.sales,
}),
}).then(({data}) => {
if (data.code == 0) {
this.$message({
message: "修改成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelect();
},
});
this.dialogFormVisibleSales = false;
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {
},
});
}
});
},
// 修改好评
showUpdateEsteemRateView(row) {
this.id = row.id;
this.esteemRate = row.esteemRate;
this.dialogFormVisibleEsteemRate = true;
},
// 修改好评
updateEsteemRate() {
this.$http({
url: this.$http.adornUrl("massage/package/updateEsteemRate"),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
id: this.id,
esteemRate: this.esteemRate,
}),
}).then(({data}) => {
if (data.code == 0) {
this.$message({
message: "修改成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelect();
},
});
this.dialogFormVisibleEsteemRate = false;
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {
},
});
}
});
},
// 优惠卷可用与否
changeCoupon(id, status) {
this.$http({
url: this.$http.adornUrl(`massage/package/updateCoupon`),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
id: id,
isCanCoupon: status,
}),
}).then(({data}) => {
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelect();
},
});
});
},
// VIP可用与否
changeVip(id, status) {
this.$http({
url: this.$http.adornUrl(`massage/package/updateVip`),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
id: id,
isCanVip: status,
}),
}).then(({data}) => {
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelect();
},
});
});
},
// 启用与否
changeStatus(id, status) {
this.$http({
url: this.$http.adornUrl(`massage/package/updateStatus`),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
id: id,
status: status,
}),
}).then(({data}) => {
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelect();
},
});
});
},
// 删除服务包
handleDelete(row) {
this.$confirm(`确定删除此条信息?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$http({
url: this.$http.adornUrl("massage/package/delete"),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
id: row.id,
}),
}).then(({data}) => {
if (data.code == 0) {
this.$message({
message: "删除成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelect();
},
});
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {
},
});
}
});
})
.catch(() => {
});
},
//封面图片上传
handlePackageImgSuccess(file) {
this.packageImg = file.data;
},
//封面图片上传
onPackageImgProgress(event, file, fileList) {
this.packageImgPercentage = parseInt(event.percent);
},
// 删除详情图片
clearContentImg(index) {
this.contentImg.splice(index, 1);
},
//上传详情图片
handleContentImgSuccess(file, fileList) {
this.contentImg.push(file.data);
},
//上传详情图片
onContentImgProgress(event, file, fileList) {
this.contentImgPercentage = parseInt(event.percent);
},
// 添加标签
handleAddLabels() {
if (this.label == "" || this.label == " ") {
this.$notify({
title: "提示",
duration: 1800,
message: "请输入标签名",
type: "warning",
});
return;
} else {
this.labelsArr.push(this.label);
this.label = "";
}
},
// 删除标签
handleDeleteLabels(index) {
this.labelsArr.splice(index, 1);
},
// 添加服务包
handleEdit(row) {
if (row != 0) {
this.titles = "修改服务包";
this.id = row.id;
this.title = row.title;
this.type = row.type;
this.classifyId = row.classifyId;
this.oldPrice = row.oldPrice;
this.price = row.price;
this.packageImg = row.packageImg;
this.content = row.content;
this.contentImg = row.contentImg;
this.status = row.status;
this.addNum = row.addNum;
this.esteemRate = row.esteemRate;
this.sales = row.sales;
this.labels = row.labels;
this.city = row.city;
this.level = row.level;
this.createTime = row.createTime;
if (row.city != "" && row.city != "不限") {
this.city = row.city;
this.storeAddre = this.city;
} else {
this.city = "";
this.storeAddre = "请选择城市";
}
if (row.labels && row.labels !== "") {
this.labelsArr = row.labels.split(",");
} else {
this.labelsArr = [];
}
} else {
this.titles = "添加服务包";
this.id = "";
this.title = "";
this.type = "";
this.oldPrice = "0";
this.price = "0";
this.packageImg = "";
this.content = "";
this.contentImg = [];
this.status = 1;
this.addNum = "0";
this.esteemRate = "0";
this.sales = "0";
this.labels = "";
this.city = "";
this.labelsArr = [];
this.storeAddre = "请选择城市";
}
this.dialogFormVisible = true;
},
closeMain(){
this.handleClear();
},
// 提交添加、修改服务包
handleSubmit() {
if (this.type == "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请选择服务包类型",
type: "warning",
});
return;
}
if (this.classifyId == "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请选择服务类型",
type: "warning",
});
return;
}
if (this.level == "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请设置套餐等级",
type: "warning",
});
return;
}
if (this.title == "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请输入服务包名称",
type: "warning",
});
return;
}
if (this.packageImg == "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请上传封面图片",
type: "warning",
});
return;
}
if (this.contentImg.length == 0) {
this.$notify({
title: "提示",
duration: 1800,
message: "请上传详情图片",
type: "warning",
});
return;
}
if (this.oldPrice === "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请输入原价",
type: "warning",
});
return;
}
if (this.price === "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请输入现价",
type: "warning",
});
return;
}
if (this.status === "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请选择状态",
type: "warning",
});
return;
}
if (this.city == "") {
this.city = "不限";
}
if (this.titles == "添加服务包") {
this.apiUrl = "massage/package/add";
} else {
this.apiUrl = "massage/package/modify";
}
this.$http({
url: this.$http.adornUrl(this.apiUrl),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
id: this.id,
title: this.title,
type: this.type,
classifyId: this.classifyId,
oldPrice: this.oldPrice,
price: this.price,
packageImg: this.packageImg,
contentImg: this.contentImg.toString(),
content: this.content,
status: this.status,
addNum: this.addNum,
esteemRate: this.esteemRate,
sales: this.sales,
labels: this.labelsArr.toString(),
city: this.city,
level: this.level,
isActivity:0
}),
}).then(({data}) => {
if (data.code == 0) {
this.dialogFormVisible = false;
this.clearDatas();
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelect();
},
});
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {
},
});
}
});
},
// 获取省市区
handleChangeCity(value) {
value = this.$refs["cascaderAddr"].currentLabels;
console.log("````````````value", value);
this.province = value[0];
this.city = value[1];
if (this.city == "市辖区") {
this.city = this.province;
}
this.storeAddre = this.province + "/" + this.city;
this.storeAddress = value;
},
// 删除城市
handleDeleteCity() {
this.city = "";
this.storeAddress = [];
this.storeAddre = "请选择城市";
},
clearDatas(){
this.apiUrl="";
this.tableDataLoading= false;
this.id= "";//编号
this.title= "";//标题
this.type= "";//服务类型
this.oldPrice= "";//原价
this.price= "";//现价
this.packageImg= "";//图片
this.content= "";//简介
this.contentImg= []; //详情图
this.status= "";//状态
this.addNum= "";//加钟次数
this.esteemRate= "";//好评率
this.sales= "";//销量
this.labels= "";//标签
this.city= "";//城市
this.createTime= "";//创建时间
this.level= "";
this.page= 1;
this.limit= 10;
this.dialogFormVisibleSales= false;
this.dialogFormVisibleEsteemRate= false;
this.openValue= 1;
this.closeValue= 2;
this.dialogFormVisible= false;
this.titles= "添加服务包";
this.label="";
this.labelsArr= []; //标签集合
this.storeAddress= [];
this.storeAddre= "请选择城市";
this.province= ""; //省
},
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>服务项目>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
closeDetail(){
this.handleSelect();
},
showDetailView(row){
console.log(`🚀 ~ showDetailView ~ row:`, row)
this.mainId = row.id;
this.fwxmtype = row.type;
this.handleSelectDetail();
this.dialogFormVisibleDetail = true;
},
handleSelectDetail(){
this.detailTableDataLoading = true;
this.$http({
url: this.$http.adornUrl("massage/packageDetail/findPage"),
method: "get",
params: this.$http.adornParams({
// data: this.$http.adornData({
page: this.detailPage,
limit: this.detailLimit,
mainId: this.mainId,
}),
}).then(({data}) => {
if (data.code == 0) {
let returnData = data.data;
this.detailTableData = returnData;
} else {
this.$notify({
title: "提示",
duration: 1800,
message: data.msg,
type: "warning",
});
}
this.detailTableDataLoading = false;
});
},
//分页
handleDetailSizeChange(val) {
this.detailLimit = val;
this.handleSelectDetail();
},
//翻页
handleDetailCurrentChange(val) {
this.detailPage = val;
this.handleSelectDetail();
},
//修改状态
changeDetailStatus(row){
this.$http({
url: this.$http.adornUrl(`massage/packageDetail/updateStatus`),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
massageTypeId: row.massageTypeId,
status: row.status,
mainId: row.mainId,
}),
}).then(({data}) => {
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelectDetail();
},
});
});
},
// 修改价格
showUpdatePriceView(row) {
this.id = row.id;
this.mainId = row.mainId;
this.packagePrice = row.packagePrice;
this.dialogFormVisiblePrice = true;
},
// 修改价格
updatePrice() {
this.$http({
url: this.$http.adornUrl("massage/packageDetail/updatePrice"),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
id: this.id,
packagePrice: this.packagePrice,
mainId: this.mainId,
}),
}).then(({data}) => {
if (data.code == 0) {
this.$message({
message: "修改成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelectDetail();
},
});
this.dialogFormVisiblePrice = false;
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {
},
});
}
});
},
// 修改次数
showUpdateCountView(row) {
this.id = row.id;
this.mainId = row.mainId;
this.serviceCount = row.serviceCount;
this.dialogFormVisibleCount = true;
},
// 修改次数
updateCount() {
this.$http({
url: this.$http.adornUrl("massage/packageDetail/updateCount"),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
id: this.id,
serviceCount: this.serviceCount,
mainId: this.mainId,
}),
}).then(({data}) => {
if (data.code == 0) {
this.$message({
message: "修改成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelectDetail();
},
});
this.dialogFormVisibleCount = false;
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {
},
});
}
});
},
// 修改间隔
showUpdateDaysView(row) {
this.id = row.id;
this.intervalDays = row.intervalDays;
this.dialogFormVisibleIntervalDays = true;
},
// 修改间隔
updateIntervalDays() {
this.$http({
url: this.$http.adornUrl("massage/packageDetail/updateIntervalDays"),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
id: this.id,
intervalDays: this.intervalDays,
}),
}).then(({data}) => {
if (data.code == 0) {
this.$message({
message: "修改成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelectDetail();
},
});
this.dialogFormVisibleIntervalDays = false;
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {
},
});
}
});
},
handleDeleteDetail(row){
this.$confirm(`确定删除此条信息?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$http({
url: this.$http.adornUrl("massage/packageDetail/delete"),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
id: row.id,
mainId: row.mainId
}),
}).then(({data}) => {
if (data.code == 0) {
this.$message({
message: "删除成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelectDetail();
},
});
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {
},
});
}
});
})
.catch(() => {
});
},
//封面图片上传
handleMassageImgSuccess(file) {
this.massageImg = file.data;
},
//封面图片上传
onMassageImgProgress(event, file, fileList) {
this.massageImgPercentage = parseInt(event.percent);
},
handleAddMassage(){
var list = this.detailTableData.list;
if (list.length > 0) {
var fwxmtype = this.fwxmtype;
if(fwxmtype==104){
}else{
this.$notify({
title: "提示",
duration: 1800,
message: "只有【服务套餐】可以配置多条服务项目!",
type: "warning",
});
return ;
}
}
this.title = "";
this.status = 1;
this.sales = "0";
this.price = "";
this.oldPrice = "";
this.massageTypeId = "";
this.massageImg = "";
this.isSex = 0;
this.duration = "";
this.applyPeople = "";
this.contentImg = [];
this.content = "";
this.city = "";
this.labelsArr = [];
this.storeAddre = "请选择城市";
this.type = "";
this.jianjie = "";
this.level = "";
this.serviceCount = 1;
this.intervalDays = 0;
this.dialogFormVisibleAddMassage = true;
},
//提交新增服务项目
handleAddMassageSubmit(){
if (this.type == "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请选择项目类型",
type: "warning",
});
return;
}
if (this.title == "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请输入项目名称",
type: "warning",
});
return;
}
if (this.massageImg == "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请上传项目图片",
type: "warning",
});
return;
}
if (this.contentImg.length == 0) {
this.$notify({
title: '提示',
duration: 1800,
message: '请上传项目详情图片',
type: 'warning'
})
return
}
if (this.duration == "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请输入时长",
type: "warning",
});
return;
}
if (this.isSex === '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请选择性别要求',
type: 'warning'
})
return
}
if (this.oldPrice == "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请输入原价",
type: "warning",
});
return;
}
if (this.price == "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请输入现价",
type: "warning",
});
return;
}
if (this.status === "") {
this.$notify({
title: "提示",
duration: 1800,
message: "请选择状态",
type: "warning",
});
return;
}
this.$http({
url: this.$http.adornUrl("massage/packageDetail/insertDetail"),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
title: this.title,
status: this.status,
sales: this.sales,
price: this.price,
oldPrice: this.oldPrice,
massageImg: this.massageImg,
isSex: this.isSex,
applyPeople: this.applyPeople,
duration: this.duration,
contentImg: this.contentImg.toString(),
content: this.content,
city: this.city,
labels: this.labelsArr.toString(),
type: this.type,
jianjie: this.jianjie,
mainId: this.mainId,
packagePrice: this.price,
serviceCount: this.serviceCount,
intervalDays: this.intervalDays,
}),
}).then(({ data }) => {
if (data.code == 0) {
this.dialogFormVisibleAddMassage = false;
this.clearMassageDatas();
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelectDetail();
},
});
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {},
});
}
});
},
handleAddToDetail(row){
this.$http({
url: this.$http.adornUrl("massage/packageDetail/add"),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
mainId: this.mainId,
packagePrice: row.price,
massageTypeId: row.massageTypeId,
serviceCount: this.serviceCount,
intervalDays: this.intervalDays,
}),
}).then(({ data }) => {
if (data.code == 0) {
this.dialogFormVisibleMassageList = false;
this.clearMassageDatas();
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.handleSelectDetail();
},
});
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {},
});
}
});
},
showMassageView(){
var list = this.detailTableData.list;
var fwxmtype = this.fwxmtype;
if(list.length>0){
if(fwxmtype==104){
}else{
this.$notify({
title: "提示",
duration: 1800,
message: "只有【服务套餐】可以配置多条服务项目!",
type: "warning",
});
return;
}
}
this.serviceCount = 1;
this.intervalDays = 0;
this.handleSelectMassage();
this.dialogFormVisibleMassageList = true;
},
handleSelectMassage(){
this.massageTableDataLoading = true;
this.$http({
url: this.$http.adornUrl("massage/packageDetail/findMassagePage"),
method: "get",
params: this.$http.adornParams({
// data: this.$http.adornData({
page: this.massagePage,
limit: this.massageLimit,
title: this.massageTitle,
type: this.massageType,
}),
}).then(({data}) => {
if (data.code == 0) {
let returnData = data.data;
this.massageData = returnData;
} else {
this.$notify({
title: "提示",
duration: 1800,
message: data.msg,
type: "warning",
});
}
this.massageTableDataLoading = false;
});
},
// 重置
handleClearMassage() {
this.massageType = "";
this.massageTitle = "";
this.massagePage = 1;
this.handleSelectMassage();
},
//分页
handleMassageSizeChange(val) {
this.massageLimit = val;
this.handleSelectMassage();
},
//翻页
handleMassageCurrentChange(val) {
this.massagePage = val;
this.handleSelectMassage();
},
clearMassageDatas(){
this.apiUrl="";
this.detailTableDataLoading= false;
this.id= "";//编号
this.title= "";//标题
this.type= "";//服务类型
this.oldPrice= "";//原价
this.price= "";//现价
this.massageImg= "";//图片
this.content= "";//简介
this.contentImg= []; //详情图
this.status= "";//状态
this.esteemRate= "";//好评率
this.sales= "";//销量
this.labels= "";//标签
this.city= "";//城市
this.createTime= "";//创建时间
this.detailPage= 1;
this.detailLimit= 10;
this.openValue= 1;
this.closeValue= 2;
this.dialogFormVisibleAddMassage= false;
this.titles= "添加服务包";
this.label="";
this.labelsArr= []; //标签集合
this.storeAddress= [];
this.storeAddre= "请选择城市";
this.province= ""; //省
},
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<服务项目<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
showBuyView(row){
this.packageId = row.id;
this.userId = 624;
this.quantity = 1;
this.couponId = "";
this.packagePrice = row.price;//单价
this.vipRate = 90;
this.oldSumMoney = 985;
this.sumMoney = 835;
this.dialogFormVisibleBuy = true;
},
handleBuy(){
if(this.quantity <= 0){
this.$message({
message: "购买失败购买数量必须大于0",
type: "warning",
duration: 1500
});
return;
}
this.$http({
url: this.$http.adornUrl("app/user/package/order/insertOrders"),
method: "post",
// params: this.$http.adornParams({
data: this.$http.adornData({
ordersPackageList: [{
packageId: this.packageId,
num: this.quantity,
}],
vipRate: this.vipRate,
oldSumMoney: this.oldSumMoney,
sumMoney: this.sumMoney,
couponId: this.couponId,
userId: this.userId,
}),
}).then(({data}) => {
if (data.code == 0) {
this.$message({
message: "购买成功",
type: "success",
duration: 1500,
onClose: () => {
},
});
this.dialogFormVisibleBuy = false;
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {
},
});
}
});
},
showPayView(){
this.ordersId = "";
this.dialogFormVisiblePay = true;
},
handlePay(){
this.$http({
url: this.$http.adornUrl("app/user/package/order/payOrder"),
method: "post",
params: this.$http.adornParams({
// data: this.$http.adornData({
ordersId: this.ordersId,
}),
}).then(({data}) => {
if (data.code == 0) {
this.$message({
message: "支付成功",
type: "success",
duration: 1500,
onClose: () => {
},
});
this.dialogFormVisiblePay = false;
} else {
this.$message({
message: data.msg,
type: "warning",
duration: 1500,
onClose: () => {
},
});
}
});
},
},
mounted() {
this.fwSelect();
this.levelSelect();
this.typeDictSelect();
this.handleSelect();
},
};
</script>
<style>
.customWidth {
width: 80% !important;
}
.el-dialog--center {
text-align: center;
margin-top: 1vh !important;
}
.el-tooltip__popper {
width: 200px;
padding: 10px;
color: #000 !important;
box-shadow: 0px 4px 6px rgba(0, 0, 0, 0.4);
background-color: #fff !important;
}
.adver_main.box a {
display: flex;
justify-content: center;
height: 150px;
line-height: 150px;
text-decoration: none;
}
.bannerManin span {
display: inline-block;
margin-left: 5px;
}
.bannerManin img {
width: 48px;
height: 48px;
border-radius: 50%;
}
.bannerbtn a {
flex: 1;
text-align: center;
color: #3e8ef7 !important;
text-decoration: none;
}
.imgs {
position: relative;
border-radius: 6px;
width: 148px;
height: 148px;
margin-right: 10px;
display: inline-block;
}
.dels {
position: absolute;
top: 0;
left: 0;
display: none;
}
.dels .el-icon-delete {
line-height: 148px;
padding-left: 58px;
font-size: 25px;
color: #fff;
}
.imgs:hover .dels {
width: 100%;
height: 100%;
background: #000;
display: block;
opacity: 0.5;
}
.bqList {
padding: 4px 14px;
margin: 4px;
border: 1px solid #efefef;
font-size: 12px;
color: #999;
border-radius: 4px;
margin-right: 15px;
}
.delss {
display: none;
position: relative;
}
.delss .el-icon-delete {
position: absolute;
top: 0;
}
.bqList:hover .delss {
display: initial;
opacity: 0.5;
}
.tj {
padding: 6px !important;
margin: 4px;
font-size: 12px;
border: 1px solid #ccc;
border-radius: 4px;
}
</style>