320 lines
14 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

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 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天为一期每期结束前12更新发送下一期饮食减脂方案</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>