320 lines
14 KiB
Vue
320 lines
14 KiB
Vue
<template>
|
||
<div v-if="show" class="sign-contract-container">
|
||
<div class="contract-title">合同简要</div>
|
||
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
||
<el-form-item label="服务方" style="margin: 0">
|
||
<span>深圳市胜唐科技有限公司</span>
|
||
</el-form-item>
|
||
<el-form-item label="导师" style="margin: 0">
|
||
<span>{{form.tutor}}</span>
|
||
</el-form-item>
|
||
<el-form-item label="服务费" style="margin: 0">
|
||
<span>¥{{form.amount}}</span>
|
||
</el-form-item>
|
||
<el-form-item label="服务时长" style="margin: 0">
|
||
<span>{{form.serveTimeStr}}</span>
|
||
</el-form-item>
|
||
<el-form-item label="服务承诺" style="margin: 0">
|
||
<span>健康吃瘦{{form.servePromise}}斤</span>
|
||
</el-form-item>
|
||
<el-form-item v-if="form.remark" label="备注" style="margin: 0">
|
||
<span>{{form.remark}}</span>
|
||
</el-form-item>
|
||
<el-form-item label="姓名" prop="signName">
|
||
<el-input v-model="form.signName" placeholder="请输入客户姓名"/>
|
||
</el-form-item>
|
||
<el-form-item label="证件类型">
|
||
<el-select v-model="idType">
|
||
<el-option
|
||
v-for="opt in idTypeOptions"
|
||
:key="opt.value"
|
||
:label="opt.label"
|
||
:value="opt.value"/>
|
||
</el-select>
|
||
</el-form-item>
|
||
<el-form-item label="证件号" prop="cusId">
|
||
<el-input v-model="form.cusId" placeholder="请输入证件号"/>
|
||
</el-form-item>
|
||
<el-form-item label="电话">
|
||
<el-input v-model="form.phone" placeholder="请输入电话"/>
|
||
</el-form-item>
|
||
</el-form>
|
||
<div>
|
||
<el-checkbox v-model="read" @change="handleRadioChange" style="margin-bottom: 12px">已阅读合同相关
|
||
</el-checkbox>
|
||
<span class="detail" @click="dialogVisible = true">详情</span>
|
||
</div>
|
||
<el-button type="primary" style="width: 100%" @click="submitForm" :disabled="!read">提交签约</el-button>
|
||
<el-dialog
|
||
title="营养减脂服务合同"
|
||
:visible.sync="dialogVisible"
|
||
width="90%"
|
||
custom-class="contract_dialog"
|
||
center>
|
||
<div class="dialog-detail">
|
||
<p>
|
||
<div>甲方:胜唐体控(深圳市胜唐科技有限公司)</div>
|
||
<div>公司地址:深圳市宝安区西乡街道宝民二路缤纷时代广场3楼318</div>
|
||
<div>联系电话:0755-23213903</div>
|
||
</p>
|
||
<p>
|
||
<div>乙方:<b>{{form.signName}}</b></div>
|
||
<div>身份证号:<b>{{form.cusId}}</b></div>
|
||
<div>联系电话:<b>{{form.phone}}</b></div>
|
||
</p>
|
||
<p>
|
||
<div>甲乙双方本着诚信合作、互惠互利的原则,依据中华人民共和国有相关法律,经友好协商,现就胜唐体控减肥咨询指导服务合作相关事宣达成一致协议,以兹共同遵守。</div>
|
||
<div>若乙方为未成年,由应由乙方法定监护人代签本合同,乙方享受同等法律权益。</div>
|
||
</p>
|
||
<p>
|
||
第一条 甲方资质与服务保证
|
||
<div class="line-rule">1、甲方系经由工商部门注册、合法经营的正规公司,具备提供相关咨询服务的法定资质。</div>
|
||
<div class="line-rule">2、甲方在合约期内为乙方安排营养师团队提供营养减脂服务。</div>
|
||
<div class="line-rule">3、甲方按与乙方约定事项及服务内容,通过定制营养减脂饮食方案为乙方提供减脂服务,服务中不使用任何仪器、针药、不使用医疗类药物等。</div>
|
||
<div class="line-rule">4、甲方为乙方提供专业营养指导咨询服务。</div>
|
||
<div class="line-rule">5、服务标准</div>
|
||
<div style="margin-left: 24px">5.1、甲方为乙方每周提供一对一有效咨询时间6日,每日咨询服务时间为早10:00—晚20:30。每日服务10.5小时(法定节假日除外)</div>
|
||
<div style="margin-left: 24px">5.2、乙方可享受营养学基础知识学习,肥胖与生活习惯知识学习,享受营养师亲自培训初级自我体重管理知识。</div>
|
||
<div style="margin-left: 24px">5.3、甲方为乙方定制营养减脂饮食方案,7天为一期,每期结束前1—2天,更新发送下一期饮食减脂方案。</div>
|
||
<div style="margin-left: 24px">5.4、甲方对乙方所做出的承诺不得超出力所能及的范围,不得夸大、吹嘘、作假服务效果,双方明确,甲方只提供咨询服务,不含任何医疗行为。</div>
|
||
<div style="margin-left: 24px">5.5、甲方需保证提供服务的导师具备相关的服务资质证书。</div>
|
||
<div style="margin-left: 24px">5.6、甲方为乙方提供的服务方式主要为网络线上进行指导服务,不涉及线下服务内容。</div>
|
||
<div style="margin-left: 24px">5.7、乙方不能在家佐餐,需要进行外食指导,甲方有责任及义务为乙方提供对应的指导。</div>
|
||
<div style="margin-left: 24px">5.8、乙方自订购服务日起,享有单一营养师的指导及咨询服务,如需中途更换指导老师,需在当期方案执行结束至少3日内告知,以便于更换指导。</div>
|
||
<div style="margin-left: 24px">5.9、甲方每日会敦促乙方进行服务效果反馈,一日三餐需进行打卡。</div>
|
||
<div style="margin-left: 24px">5.10、甲方在接收到乙方发送咨询需求3.5小时内需及时为乙方解答(周日及法定节假日除外)。</div>
|
||
</p>
|
||
|
||
<p>第二条 合作内容及费用
|
||
<div class="line-rule">经甲乙双方协商确定,乙方向甲方购买 <b>{{form.serveTimeStr}}</b> “胜唐体控瘦身指导服务”(以下简称服务)。
|
||
经甲乙双方协商一致,确定乙方向甲方支付服务费用为人民币 <b>{{form.amount}}</b>元,大写:<b>{{form.amountUpper}}</b>。
|
||
</div>
|
||
<div><b>{{form.remark ? `(备注:${form.remark})`:''}}</b></div>
|
||
</p>
|
||
|
||
<p>第三条 服务期约定
|
||
<div class="line-rule">1、服务时间阶段(服务指导期、服务跟踪期、免费咨询期)具体安排,由甲方根据乙方的实际情况与乙方协商确定。</div>
|
||
<div class="line-rule">2、因不可抗拒的因素(如意外怀孕等)而暂停服务指导,其后续服务期限由甲乙方协商确定。</div>
|
||
<div class="line-rule">3、减肥需要双方的配合,在不是甲方技术问题的情况下,乙方不执行营养师的指导导致没有达到预期效果,责任由乙方承担。根据个人体质不同,在调理营养健康的前提下,健康吃瘦 <b>{{form.servePromise}}</b>
|
||
斤
|
||
</div>
|
||
<div class="line-rule">
|
||
4、乙方应按甲方制定的饮食方案来饮食,承诺在未与甲方沟通前,不得擅自吃方案之外的高热量、高油、高盐、高糖等不利于健康和减脂的饮食,服务期内擅自暴食导致体重上涨,次数超过3次视为乙方主动放弃营养减脂,且甲方无需免费延长服务时间。
|
||
</div>
|
||
<div class="line-rule">
|
||
5、乙方在一个服务期内享有2次暂停服务的机会,在暂停前应与甲方沟通,确认暂停前已减重斤数,累积到总减重结果中。在暂停结束后,自新体重开始,甲方服务乙方继续完成承诺的减重斤数,即:包瘦斤数 - 暂停前已成功减重数。
|
||
</div>
|
||
<div class="line-rule">6、乙方隐瞒病情或身体情况误导营养师的,造成的后果由乙方承担并且甲方不予退款。</div>
|
||
<div class="line-rule">
|
||
7、乙方同意并且理解甲方定制营养方案付出的时间和智力成本,乙方在第一周营养方案定制交付之前申请退款的可退款90%,在第一周营养方案定制交付之后因个人原因,非不可抗力因素则不予退款。
|
||
</div>
|
||
<div class="line-rule">
|
||
8、若乙方具有特殊病史、慢病疾病、食用减肥药物或产品、使用激素药物、中药及其他疗程性药物调理,需在购买减脂服务前告知甲方,以便于合理安排减脂计划,若乙方未告知甲方相关的疾病史以及药物使用情况,因此造成的负面效果由乙方自行承担。
|
||
</div>
|
||
<div class="line-rule">9、甲方在乙方告知所有身体情况及药物服用情况,甲方仍未做出合理安排,对乙方的身体及心理造成影响时,乙方可申请扣除已进行服务期外相应的服务款项,退还未进行服务期对应款项。</div>
|
||
</p>
|
||
|
||
<p>第四条 其他
|
||
<div class="line-rule">1、如因本合同发生争议,双方应协商解决,如协商不成,双方可向甲方所在地法院提起诉讼解决。</div>
|
||
<div class="line-rule">2、本合同经双方线上签字盖章后生效。</div>
|
||
</p>
|
||
</div>
|
||
<span slot="footer" class="dialog-footer">
|
||
<el-button type="primary" @click="handleConfirm">确 定</el-button>
|
||
</span>
|
||
</el-dialog>
|
||
</div>
|
||
|
||
</template>
|
||
|
||
<script>
|
||
|
||
import {getFile, signContract} from "@/api/custom/contract";
|
||
import {digitUppercase, validatorIDCard} from "../../../utils/ruoyi";
|
||
|
||
export default {
|
||
name: 'sign',
|
||
data() {
|
||
|
||
const checkSignName = (rule, value, callback) => {
|
||
if (!value) {
|
||
return callback(new Error('姓名不能为空'))
|
||
}
|
||
callback();
|
||
}
|
||
|
||
const checkPhone = (rule, value, callback) => {
|
||
const phoneReg = /^1[3|4|5|6|7|8|9][0-9]{9}$/
|
||
const hkPhoneReg = /^(5|6|8|9)\d{7}$/
|
||
if (!value) {
|
||
return callback(new Error('电话号码不能为空'))
|
||
}
|
||
setTimeout(() => {
|
||
// Number.isInteger是es6验证数字是否为整数的方法,实际输入的数字总是识别成字符串
|
||
// 所以在前面加了一个+实现隐式转换
|
||
if (!Number.isInteger(+value)) {
|
||
callback(new Error('请输入数字值'))
|
||
} else {
|
||
if (phoneReg.test(value) || hkPhoneReg.test(value)) {
|
||
callback()
|
||
} else {
|
||
callback(new Error('电话号码格式不正确'))
|
||
}
|
||
}
|
||
}, 100)
|
||
}
|
||
|
||
const checkcusId = (rule, value, callback) => {
|
||
if (!value) {
|
||
callback();
|
||
//return callback(new Error('证件号码不能为空'))
|
||
}
|
||
setTimeout(() => {
|
||
const {code, msg} = validatorIDCard(value, this.idType);
|
||
if (code === 1) {
|
||
callback()
|
||
} else {
|
||
return callback(new Error(msg))
|
||
}
|
||
}, 100)
|
||
}
|
||
|
||
return {
|
||
show: false,
|
||
form: {},
|
||
read: false,
|
||
dialogVisible: false,
|
||
idType: 1,
|
||
idTypeOptions: [
|
||
{label: '身份证', value: 1},
|
||
{label: '港澳身份证', value: 2},
|
||
{label: '台湾身份证', value: 3},
|
||
{label: '护照', value: 4},
|
||
{label: '军官证', value: 5},
|
||
],
|
||
serveTimeIdOption: [
|
||
{label: '7天', value: 7},
|
||
{label: '1个月', value: 30},
|
||
{label: '2个月', value: 60},
|
||
{label: '3个月', value: 90},
|
||
{label: '4个月', value: 120},
|
||
{label: '5个月', value: 150},
|
||
{label: '6个月', value: 180},
|
||
{label: '7个月', value: 210},
|
||
{label: '8个月', value: 240},
|
||
{label: '9个月', value: 270},
|
||
{label: '10个月', value: 300},
|
||
{label: '11个月', value: 330},
|
||
{label: '12个月', value: 360},
|
||
],
|
||
rules: {
|
||
signName: [
|
||
{required: true, trigger: "blur", validator: checkSignName}
|
||
],
|
||
phone: [
|
||
{required: true, trigger: "blur", validator: checkPhone}
|
||
],
|
||
cusId: [
|
||
{required: false, trigger: "blur", validator: checkcusId}
|
||
]
|
||
}
|
||
}
|
||
},
|
||
mounted() {
|
||
document.title = this.$route.meta.title
|
||
},
|
||
created() {
|
||
this.getContract();
|
||
},
|
||
methods: {
|
||
getContract() {
|
||
const {pathname} = window.location;
|
||
const id = pathname.substring(pathname.lastIndexOf('/') + 1);
|
||
// console.log(id)
|
||
getFile(id).then(result => {
|
||
if (result.url) {
|
||
this.$router.push(result.url);
|
||
} else if (result.data) {
|
||
this.form = result.data;
|
||
this.form.amount = parseInt(result.data.amount);
|
||
this.form.amountUpper = digitUppercase(this.form.amount);
|
||
this.form.serveTimeStr = this.serveTimeIdOption.find(obj => obj.value === parseInt(result.data.serveTime)).label
|
||
this.show = true;
|
||
}
|
||
})
|
||
},
|
||
submitForm() {
|
||
console.log("chdkscjksdc1");
|
||
this.$refs["form"].validate(valid => {
|
||
if (valid) {
|
||
console.log("chdkscjksdc2");
|
||
signContract(this.form).then(result => {
|
||
if (result.code === 200) {
|
||
window.location.href = window.location.origin + result.url;
|
||
}
|
||
});
|
||
}
|
||
})
|
||
},
|
||
handleRadioChange(val) {
|
||
this.read = val;
|
||
},
|
||
handleConfirm() {
|
||
this.dialogVisible = false;
|
||
this.read = true;
|
||
},
|
||
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
.sign-contract-container {
|
||
font-family: Helvetica Neue, Helvetica, Arial, Microsoft Yahei, Hiragino Sans GB, Heiti SC, WenQuanYi Micro Hei, sans-serif;
|
||
padding: 32px;
|
||
/*background-color: rgb(240, 242, 245);*/
|
||
position: relative;
|
||
|
||
.contract-title {
|
||
text-align: center;
|
||
font-size: 20px;
|
||
margin-bottom: 32px;
|
||
}
|
||
|
||
|
||
.detail {
|
||
color: #0066cc;
|
||
cursor: pointer;
|
||
font-size: 14px;
|
||
}
|
||
|
||
.contract_dialog {
|
||
|
||
|
||
.dialog-detail {
|
||
height: 60vh;
|
||
margin-top: -12px;
|
||
margin-bottom: -12px;
|
||
overflow: auto;
|
||
}
|
||
}
|
||
|
||
.line-rule {
|
||
margin: 4px 0;
|
||
line-height: 18px;
|
||
}
|
||
|
||
.chart-wrapper {
|
||
background: #fff;
|
||
padding: 16px 16px 0;
|
||
margin-bottom: 32px;
|
||
}
|
||
}
|
||
|
||
@media (max-width: 1024px) {
|
||
.chart-wrapper {
|
||
padding: 8px;
|
||
}
|
||
}
|
||
</style>
|