|
|
<template>
|
|
|
<page-meta :page-style="`overflow:${
|
|
|
isShowService || isShowHospital || isShowTime || isShowArchive
|
|
|
? 'hidden'
|
|
|
: 'visible'
|
|
|
};`"></page-meta>
|
|
|
<view class="page">
|
|
|
<image class="bkg" mode="aspectFill" src="~@/package_sub/static/AddOrder/bkg.png"></image>
|
|
|
|
|
|
<view class="container">
|
|
|
<view class="step" v-if="form.pay_status !== 2">
|
|
|
<view class="step-item" v-for="(i, index) in stepList" :class="{ 'is-active': index <= currentStep }"
|
|
|
:key="index">
|
|
|
<view class="step-item__dot">
|
|
|
<u-icon v-show="index <= currentStep"
|
|
|
:name="index === currentStep ? 'more-dot-fill' : 'checkbox-mark'" color="#fff"
|
|
|
size="16"></u-icon>
|
|
|
</view>
|
|
|
<view class="step-item__text">{{ i.name }}</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
<view>
|
|
|
<view class="switch-service">
|
|
|
<view class="switch-service__icon">
|
|
|
<u-icon :name="
|
|
|
accompanyProduct.cover
|
|
|
? accompanyProduct.cover.url
|
|
|
: vuex_default_icon
|
|
|
" size="30"></u-icon>
|
|
|
</view>
|
|
|
|
|
|
<view class="switch-service__name">
|
|
|
{{ accompanyProduct.name || "未选择" }}
|
|
|
</view>
|
|
|
|
|
|
<view v-if="!orderId" class="switch-service__btn" @click="isShowService = true">
|
|
|
<image src="~@/package_sub/static/switch.png" mode="aspectFit"></image>
|
|
|
<text>更换服务</text>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
<u-form :model="form" :rules="rules" ref="uForm" :label-width="178" :error-type="['toast']">
|
|
|
<view class="form-card form-card-1">
|
|
|
<u-form-item label="站点区域" prop="site_id" required>
|
|
|
<u-input
|
|
|
type="input"
|
|
|
placeholder="请选择站点区域"
|
|
|
:disabled="true"
|
|
|
:value="site_name"
|
|
|
/>
|
|
|
</u-form-item>
|
|
|
<u-form-item label="就诊医院" prop="hospital" required v-if="form.type == 1">
|
|
|
<u-input :type="'select'" placeholder="请选择就诊医院" :value="hospital.name"
|
|
|
:select-open="isShowHospital" @click="isShowHospital = true" />
|
|
|
</u-form-item>
|
|
|
<u-form-item :label="(form.type == 1 ? '就诊' : '服务') + '时间'" prop="time" required>
|
|
|
<u-input :type="'select'" placeholder="请选择时间" v-model="form.time" :select-open="isShowTime"
|
|
|
@click="isShowTime = true" />
|
|
|
</u-form-item>
|
|
|
<u-form-item :label="(form.type == 1 ? '被服务' : '被服务') +'人'" prop="user_archive_id" required>
|
|
|
<u-input :type="'select'" placeholder="请选择人员" :value="archive.name"
|
|
|
:select-open="isShowArchive" @click="isShowArchive = true" />
|
|
|
</u-form-item>
|
|
|
<u-form-item label="是否可以自理">
|
|
|
<view slot="right">
|
|
|
<u-radio-group v-model="form.my_provide" active-color="#c20d12">
|
|
|
<u-radio :name="1">是</u-radio>
|
|
|
<u-radio :name="0">否</u-radio>
|
|
|
</u-radio-group>
|
|
|
</view>
|
|
|
</u-form-item>
|
|
|
<u-form-item label="详细地址" prop="city" v-if="form.type == 2">
|
|
|
<u-input v-model="form.city" placeholder="请填写详细地址" />
|
|
|
<view style="text-align: right;color:blue" @click="openMap">地图选点</view>
|
|
|
</u-form-item>
|
|
|
<u-form-item label="预约人" prop="appoint_name" required>
|
|
|
<u-input v-model="form.appoint_name" placeholder="请填写预约人" />
|
|
|
</u-form-item>
|
|
|
<u-form-item label="预约人电话" prop="appoint_mobile" required>
|
|
|
<u-input v-model="form.appoint_mobile" placeholder="请填写预约人电话" type="number" />
|
|
|
</u-form-item>
|
|
|
<u-form-item :label="'选择'+ (form.type == 1 ? '陪诊师' : '照护师') +'性别'" :border-bottom="false">
|
|
|
<view slot="right">
|
|
|
<u-radio-group v-model="form.accompany_sex" active-color="#c20d12">
|
|
|
<u-radio :name="1">男</u-radio>
|
|
|
<u-radio :name="2">女</u-radio>
|
|
|
<u-radio :name="0">任意</u-radio>
|
|
|
</u-radio-group>
|
|
|
</view>
|
|
|
</u-form-item>
|
|
|
</view>
|
|
|
|
|
|
<view class="form-card form-card-2" v-if="form.type == 1">
|
|
|
<view class="title">
|
|
|
<view class="title__left">
|
|
|
<text>上传资料</text>
|
|
|
<text>(挂号单)</text>
|
|
|
</view>
|
|
|
<!-- <view class="title__right">
|
|
|
点击查看示例
|
|
|
</view> -->
|
|
|
</view>
|
|
|
<view>
|
|
|
<u-upload :action="action" ref="uUpload" :file-list="fileList" :header="{
|
|
|
['Authorization']: `Bearer ${token}`,
|
|
|
}"></u-upload>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
<view class="form-card form-card-3">
|
|
|
<view class="title"> 其他服务需求 </view>
|
|
|
<u-form-item :label-width="0" :border-bottom="false">
|
|
|
<u-input border :custom-style="{ 'letter-spacing': '2rpx' }" border-color="#dad9d9"
|
|
|
placeholder="请简单描述您要就诊的科室及就诊内容(内容加密保护)" v-model="form.content"
|
|
|
type="textarea"></u-input>
|
|
|
</u-form-item>
|
|
|
</view>
|
|
|
</u-form>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
<view class="bottom-bar">
|
|
|
<view class="price">
|
|
|
<text>实付:</text>
|
|
|
<text>¥ {{ orderId?paidPrice:accompanyProduct.price }}</text>
|
|
|
</view>
|
|
|
<u-button v-if="form.pay_status === 0" style="margin-left: auto;" shape="circle" ripple
|
|
|
:custom-style="payBtnStyle" :throttle-time="2000" @click="pay">确认修改</u-button>
|
|
|
</view>
|
|
|
<!-- 服务列表 -->
|
|
|
<u-popup v-model="isShowService" mode="bottom" safe-area-inset-bottom closeable :border-radius="10"
|
|
|
:height="800">
|
|
|
<view class="service-list">
|
|
|
<view class="service-list-item" v-for="(item, i) in list_service" :key="i" @click="changeService(item)">
|
|
|
<view class="service-list-item__icon">
|
|
|
<!-- <u-icon name="integral" size="30"></u-icon> -->
|
|
|
<image style="width: 70rpx; height: 70rpx" :src="item.cover.url"></image>
|
|
|
</view>
|
|
|
|
|
|
<view class="service-list-item__name">
|
|
|
{{ item.name }}
|
|
|
</view>
|
|
|
|
|
|
<view class="service-list-item__price"> ¥{{ item.price }} </view>
|
|
|
</view>
|
|
|
</view>
|
|
|
</u-popup>
|
|
|
<!-- 选择就诊人,可以新增 -->
|
|
|
<u-popup v-model="isShowArchive" mode="bottom" safe-area-inset-bottom closeable :border-radius="10"
|
|
|
:height="800">
|
|
|
<view class="service-list" style="padding-bottom: 120rpx">
|
|
|
<view class="service-list-item" v-for="(item, i) in list_archive" :key="i"
|
|
|
@click="confirmArchive(item)">
|
|
|
<view class="service-list-item__namewrap">
|
|
|
<view class="service-list-item__name">
|
|
|
{{ item.name }}
|
|
|
</view>
|
|
|
<view class="service-list-item__price">
|
|
|
{{ item.mobile }}
|
|
|
</view>
|
|
|
</view>
|
|
|
<view class="service-list-item__address">
|
|
|
<text>{{ item.address }}</text>
|
|
|
<view class="icon">
|
|
|
<u-icon name="edit-pen" :size="40" color="#999999"
|
|
|
@tap="editUser(item),$event.stopPropagation()"></u-icon>
|
|
|
<!-- <u-icon name="trash" style="margin-left: 40rpx;" :size="40" color="red"
|
|
|
@tap="delUser(item),$event.stopPropagation()"></u-icon> -->
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
<view class="service-list-btn">
|
|
|
<u-button shape="circle" ripple :custom-style="payBtnStyle" @click="addArchive">新增被服务人</u-button>
|
|
|
</view>
|
|
|
</u-popup>
|
|
|
<!-- 新增就诊人 -->
|
|
|
<service-archive ref="serviceArchive" @addSuccess="addSuccess"></service-archive>
|
|
|
<!-- 选择 站点下的医院 -->
|
|
|
<u-select v-model="isShowHospital" value-name="id" @confirm="confirmHospital" label-name="name"
|
|
|
:list="list_hospital"></u-select>
|
|
|
<!-- 服务时间 -->
|
|
|
<u-picker v-model="isShowTime" :params="{
|
|
|
year: true,
|
|
|
month: true,
|
|
|
day: true,
|
|
|
hour: true,
|
|
|
minute: true,
|
|
|
second: false,
|
|
|
}" mode="time" @confirm="confirmTime"></u-picker>
|
|
|
<!-- 更多操作-->
|
|
|
<u-action-sheet safe-area-inset-bottom :list="moreActionList" v-model="isShowMoreAction"
|
|
|
@click="moreActionClick" />
|
|
|
|
|
|
<!-- 优惠,不显示先 -->
|
|
|
<u-popup v-model="isShowPayPopup" class="pay-popup" mode="bottom" closeable :z-index="10073"
|
|
|
:close-icon-size="40" close-icon="close-circle" :border-radius="20" :height="800">
|
|
|
<view class="pay-popup-container">
|
|
|
<view class="service">
|
|
|
<view class="service__icon">
|
|
|
<u-icon name="integral" size="40"></u-icon>
|
|
|
</view>
|
|
|
|
|
|
<view class="service__text">
|
|
|
<view class="service__text--price">¥600.00</view>
|
|
|
<view class="service__text--name">专享半天陪诊</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
<view class="row">
|
|
|
<view class="row__title"> 平台保障 </view>
|
|
|
|
|
|
<view class="row__content d-flex ai-center cards">
|
|
|
<view class="cards__icon d-flex jc-center ai-center">
|
|
|
<u-icon name="integral" size="30"></u-icon>
|
|
|
</view>
|
|
|
|
|
|
<view style="padding-left: 18rpx" class="flex-1">
|
|
|
<view class="d-flex ai-center">
|
|
|
<view style="font-size: 28rpx">半天陪诊·3次卡</view>
|
|
|
|
|
|
<view class="d-flex ai-center" style="margin-left: auto">
|
|
|
<text style="
|
|
|
font-size: 24rpx;
|
|
|
padding-right: 22rpx;
|
|
|
font-weight: bold;
|
|
|
">¥ 600</text>
|
|
|
<u-checkbox :value="false" shape="circle" active-color="#c20d12" />
|
|
|
</view>
|
|
|
</view>
|
|
|
<view class="d-flex ai-center">
|
|
|
<view style="color: #999; font-size: 24rpx">本次预约可直接抵扣1次</view>
|
|
|
|
|
|
<view style="
|
|
|
font-size: 16rpx;
|
|
|
color: #999;
|
|
|
font-weight: 500;
|
|
|
margin-left: auto;
|
|
|
">低至¥246/次
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
<view class="row">
|
|
|
<view class="row__title"> 平台保障 </view>
|
|
|
|
|
|
<view class="row__content d-flex jc-center">
|
|
|
<view class="row__content--first">险</view>
|
|
|
<view class="row__content--name">陪诊服务险</view>
|
|
|
<view class="d-flex ai-center" style="margin-left: auto">
|
|
|
<text style="
|
|
|
font-size: 24rpx;
|
|
|
padding-right: 22rpx;
|
|
|
font-weight: bold;
|
|
|
">¥ 600</text>
|
|
|
<u-checkbox :value="false" shape="circle" active-color="#c20d12" />
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
<view class="row">
|
|
|
<view class="row__title"> 本单优惠 </view>
|
|
|
|
|
|
<view class="row__content d-flex jc-center">
|
|
|
<view class="row__content--first" style="background: #c31014">券</view>
|
|
|
<view class="row__content--name" style="color: #999">请选择优惠券</view>
|
|
|
<view style="margin-left: auto">
|
|
|
<u-icon name="arrow-down" :size="24"></u-icon>
|
|
|
</view>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
<view class="row use-card"> 新人优惠券 20元 服务满1元可用 </view>
|
|
|
|
|
|
<view class="row">
|
|
|
<view class="row__content d-flex jc-center">
|
|
|
<view class="row__content--first" style="background: #c31014">减</view>
|
|
|
<view class="row__content--name">无忧赠险保障</view>
|
|
|
<view style="margin-left: auto; color: #c31014"> -¥25 </view>
|
|
|
</view>
|
|
|
</view>
|
|
|
|
|
|
<view class="is-auth">
|
|
|
<u-checkbox v-model="isAuth" shape="circle" active-color="#c20d12">
|
|
|
<text style="padding-left: 10rpx">我已认真阅读预约相关</text>
|
|
|
<text style="color: #c20d12" @click.stop.prevent>《服务条款同意书》</text>
|
|
|
</u-checkbox>
|
|
|
</view>
|
|
|
</view>
|
|
|
</u-popup>
|
|
|
<u-top-tips :z-index="10080" ref="uTips"></u-top-tips>
|
|
|
</view>
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
import serviceArchive from "@/component/serviceArchive/service-archive.vue";
|
|
|
import {
|
|
|
ROOTPATH as baseUrl
|
|
|
} from "@/common/config.js";
|
|
|
import {
|
|
|
isNull
|
|
|
} from "@/common/util.js"
|
|
|
export default {
|
|
|
components: {
|
|
|
serviceArchive,
|
|
|
},
|
|
|
data() {
|
|
|
return {
|
|
|
paidPrice:0,
|
|
|
workStatus: new Map([
|
|
|
[0, '待处理'],
|
|
|
[1, '已到客户家'],
|
|
|
[2, '已接到客户'],
|
|
|
[3, '已到医院'],
|
|
|
[4, '完成服务']
|
|
|
]),
|
|
|
payBtnStyle: {
|
|
|
"background-image": "linear-gradient(-90deg, #e26165 0%, #c10d12 94%, #c10d12 100%)",
|
|
|
"font-weight": "500",
|
|
|
"font-size": "28rpx",
|
|
|
color: "#fff",
|
|
|
width: "288rpx",
|
|
|
"margin-right": "25rpx"
|
|
|
},
|
|
|
|
|
|
//more action
|
|
|
isShowMoreAction: false,
|
|
|
|
|
|
// service
|
|
|
isShowService: false,
|
|
|
site_name:'',
|
|
|
// form
|
|
|
fileList: [],
|
|
|
isShowHospital: false,
|
|
|
isShowTime: false,
|
|
|
isShowArchive: false,
|
|
|
list_service: [],
|
|
|
list_hospital: [],
|
|
|
list_archive: [],
|
|
|
orderId: "",
|
|
|
nurse: {},
|
|
|
form: {
|
|
|
type: 1,
|
|
|
is_show: false,
|
|
|
accompany_product_id: "",
|
|
|
user_archive_id: "",
|
|
|
city: "",
|
|
|
hospital: "",
|
|
|
time: "",
|
|
|
my_provide: 1,
|
|
|
appoint_name: "",
|
|
|
appoint_mobile: "",
|
|
|
accompany_sex: "",
|
|
|
file_ids: "",
|
|
|
content: "",
|
|
|
pay_status: 0,
|
|
|
no: "",
|
|
|
},
|
|
|
rules: {
|
|
|
user_archive_id: [{
|
|
|
type: "number",
|
|
|
required: true,
|
|
|
message: "请选择人员",
|
|
|
trigger: ["blur", "change"],
|
|
|
}, ],
|
|
|
time: [{
|
|
|
required: true,
|
|
|
message: "请选择时间",
|
|
|
trigger: ["blur", "change"],
|
|
|
}, ],
|
|
|
hospital: [{
|
|
|
validator: (rule, value, callback) => {
|
|
|
if (this.form.type == 2) {
|
|
|
return true
|
|
|
} else {
|
|
|
return !!value
|
|
|
}
|
|
|
},
|
|
|
message: "请选择就诊医院",
|
|
|
trigger: ["blur", "change"],
|
|
|
}, ],
|
|
|
appoint_name: [{
|
|
|
required: true,
|
|
|
message: "请输入预约人",
|
|
|
trigger: ["blur", "change"],
|
|
|
}, ],
|
|
|
appoint_mobile: [{
|
|
|
required: true,
|
|
|
message: "请输入预约人电话",
|
|
|
trigger: ["blur", "change"],
|
|
|
},
|
|
|
{
|
|
|
// 自定义验证函数,见上说明
|
|
|
validator: (rule, value, callback) => {
|
|
|
return this.$u.test.mobile(value);
|
|
|
},
|
|
|
message: "预约人电话不正确",
|
|
|
// 触发器可以同时用blur和change
|
|
|
trigger: ["change", "blur"],
|
|
|
},
|
|
|
],
|
|
|
},
|
|
|
action: `${baseUrl}/api/mobile/upload-file`,
|
|
|
isAuth: false,
|
|
|
//
|
|
|
|
|
|
// pay popup
|
|
|
isShowPayPopup: false,
|
|
|
};
|
|
|
},
|
|
|
onReady() {
|
|
|
this.$refs.uForm.setRules(this.rules);
|
|
|
},
|
|
|
onLoad(option) {
|
|
|
this.form.accompany_product_id = option.id ? Number(option.id) : "";
|
|
|
this.form.type = Number(option.type);
|
|
|
uni.setNavigationBarTitle({
|
|
|
title: option.type == 1 ? '预约陪诊' : '预约居家照护'
|
|
|
})
|
|
|
this.getList(option.type);
|
|
|
this.getHospital(option.site_id);
|
|
|
this.getUserArchive();
|
|
|
if (!this.orderId && option.order_id) {
|
|
|
this.orderId = option.order_id;
|
|
|
this.getDetail();
|
|
|
}
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
// 获取产品列表
|
|
|
async getList(type) {
|
|
|
const res = await this.$u.api.accompanyProduct({
|
|
|
type: type,
|
|
|
page: 1,
|
|
|
page_size: 999,
|
|
|
});
|
|
|
this.list_service = res.data;
|
|
|
},
|
|
|
async getDetail(id) {
|
|
|
console.log(id, this.orderId);
|
|
|
await this.$u.api
|
|
|
.accompanyOrdersDetail({
|
|
|
id: id || this.orderId,
|
|
|
})
|
|
|
.then((res) => {
|
|
|
for (const key in this.form) {
|
|
|
if (res.hasOwnProperty(key)) {
|
|
|
this.form[key] = res[key];
|
|
|
}
|
|
|
}
|
|
|
this.form['created_at'] = res['created_at']
|
|
|
this.form['status'] = res['status']
|
|
|
this.form['nurse_id'] = res['nurse_id']
|
|
|
this.nurse = res['nurse']
|
|
|
this.fileList = res.files.map(i => ({
|
|
|
url: i.url
|
|
|
}))
|
|
|
this.paidPrice = res.price
|
|
|
this.site_name = res.site.name?res.site.name:''
|
|
|
uni.setNavigationBarTitle({
|
|
|
title: res.accompany_product ? res.accompany_product.name : '订单详情'
|
|
|
})
|
|
|
});
|
|
|
},
|
|
|
async getHospital(site_id) {
|
|
|
const res = await this.$u.api.listHospital({
|
|
|
site_id: site_id,
|
|
|
page: 1,
|
|
|
page_size: 999,
|
|
|
});
|
|
|
this.list_hospital = res.data;
|
|
|
},
|
|
|
async getUserArchive() {
|
|
|
const res = await this.$u.api.userArchive({
|
|
|
page: 1,
|
|
|
page_size: 999,
|
|
|
});
|
|
|
this.list_archive = res.data;
|
|
|
},
|
|
|
changeService(item) {
|
|
|
this.info = item;
|
|
|
this.form.accompany_product_id = item.id;
|
|
|
this.getHospital(item.site_id);
|
|
|
this.isShowService = false;
|
|
|
this.form.hospital = "";
|
|
|
},
|
|
|
confirmHospital(e) {
|
|
|
this.form.hospital = e[0].value;
|
|
|
},
|
|
|
confirmTime(e) {
|
|
|
this.form.time = `${e.year}-${e.month}-${e.day} ${e.hour}:${e.minute}:00`;
|
|
|
},
|
|
|
// 服务对象
|
|
|
confirmArchive(e) {
|
|
|
this.form.user_archive_id = e.id;
|
|
|
this.isShowArchive = false;
|
|
|
},
|
|
|
addArchive() {
|
|
|
this.$refs.serviceArchive.isShow = true;
|
|
|
},
|
|
|
editUser(item) {
|
|
|
this.$refs.serviceArchive.form = item
|
|
|
this.$refs.serviceArchive.isShow = true;
|
|
|
},
|
|
|
delUser(item) {
|
|
|
uni.showModal({
|
|
|
title: '确认删除该人员?',
|
|
|
success: async (res) => {
|
|
|
if (res.confirm) {
|
|
|
try {
|
|
|
if (!item?.id) return
|
|
|
const res = await this.$u.api.userArchiveDestroy({
|
|
|
id: item?.id
|
|
|
})
|
|
|
this.getUserArchive()
|
|
|
} catch (err) {
|
|
|
console.error(err)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
})
|
|
|
|
|
|
},
|
|
|
addSuccess(e) {
|
|
|
if (e) {
|
|
|
this.getUserArchive();
|
|
|
}
|
|
|
},
|
|
|
|
|
|
// 打开地图选点
|
|
|
openMap(){
|
|
|
console.log("chooseLocation")
|
|
|
let that = this
|
|
|
uni.chooseLocation({
|
|
|
success(res){
|
|
|
console.log("chooseLocationres",res)
|
|
|
if (res.errMsg === 'chooseLocation:ok') {
|
|
|
that.form.city = res.address
|
|
|
console.log('位置名称:' + res.name);
|
|
|
console.log('详细地址:' + res.address);
|
|
|
console.log('纬度:' + res.latitude);
|
|
|
console.log('经度:' + res.longitude);
|
|
|
}
|
|
|
},
|
|
|
fail(err){
|
|
|
uni.showToast({
|
|
|
title:'打开地图失败',
|
|
|
icon:'none'
|
|
|
})
|
|
|
console.log("err",err)
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
pay() {
|
|
|
this.$refs.uForm.validate(async (valid) => {
|
|
|
if (valid) {
|
|
|
console.log("验证通过");
|
|
|
this.form.file_ids =
|
|
|
this.$refs.uUpload?.lists
|
|
|
?.filter((val) => {
|
|
|
return val.progress === 100;
|
|
|
})
|
|
|
?.map((i) => i.response?.id) || [];
|
|
|
// 陪诊 文件和 需求 必填之一
|
|
|
if (this.form.type === 1) {
|
|
|
if (this.form.file_ids.length < 1 && isNull(this.form.content)) {
|
|
|
uni.showToast({
|
|
|
title: '请填写服务需求或上传资料',
|
|
|
icon: 'none'
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
if (this.form.type === 2) {
|
|
|
if (isNull(this.form.content)) {
|
|
|
uni.showToast({
|
|
|
title: '请填写服务需求',
|
|
|
icon: 'none'
|
|
|
})
|
|
|
return
|
|
|
}
|
|
|
}
|
|
|
// return
|
|
|
let that = this
|
|
|
console.log("id",this.form,this.orderId)
|
|
|
// return
|
|
|
const res = await this.$u.api.accompanyProductOrder({
|
|
|
id:parseInt(this.orderId),
|
|
|
...this.form
|
|
|
});
|
|
|
uni.showToast({
|
|
|
title: '修改成功',
|
|
|
icon: 'none',
|
|
|
success(res) {
|
|
|
that.$u.route({
|
|
|
url: "/pages/order/order",
|
|
|
type: "tab",
|
|
|
});
|
|
|
}
|
|
|
})
|
|
|
} else {
|
|
|
console.log("验证失败");
|
|
|
}
|
|
|
});
|
|
|
},
|
|
|
|
|
|
// 更多菜单点击
|
|
|
moreActionClick(index) {
|
|
|
let name = this.moreActionList[index].text
|
|
|
let fn = () => {}
|
|
|
switch (this.moreActionList[index].tag) {
|
|
|
case 'cancel':
|
|
|
fn = () => this.$u.api.accompanyProductOrder({
|
|
|
id: this.orderId,
|
|
|
pay_status: -1
|
|
|
}).then(_ => {
|
|
|
this.getDetail()
|
|
|
})
|
|
|
break;
|
|
|
case 'chargeback':
|
|
|
fn = () => this.$u.api.orderRefund({
|
|
|
id: this.orderId
|
|
|
}).then(_ => {
|
|
|
this.getDetail().then(_ => {
|
|
|
if (this.form.status) {
|
|
|
uni.showModal({
|
|
|
title: "已成功提交退款申请",
|
|
|
content: "当前订单已分配护工,需等待客服处理",
|
|
|
showCancel: false
|
|
|
})
|
|
|
}
|
|
|
})
|
|
|
})
|
|
|
break;
|
|
|
}
|
|
|
uni.showModal({
|
|
|
title: "操作",
|
|
|
content: `是否确认${name}?`,
|
|
|
success: (status) => {
|
|
|
if (status.confirm) {
|
|
|
fn()
|
|
|
} else {}
|
|
|
},
|
|
|
fail: () => {},
|
|
|
})
|
|
|
}
|
|
|
},
|
|
|
computed: {
|
|
|
// step
|
|
|
stepList() {
|
|
|
return [{
|
|
|
name: "填写预约",
|
|
|
},
|
|
|
{
|
|
|
name: "在线支付",
|
|
|
},
|
|
|
{
|
|
|
name: "专人" + (this.form.type == 1 ? "陪诊" : "陪护"),
|
|
|
},
|
|
|
{
|
|
|
name: "服务完成",
|
|
|
},
|
|
|
]
|
|
|
},
|
|
|
//
|
|
|
currentStep() {
|
|
|
return 0
|
|
|
if (!this.orderId) {
|
|
|
return 0;
|
|
|
}
|
|
|
if (this.form.pay_status === 0) {
|
|
|
return 1;
|
|
|
}
|
|
|
if (this.form.pay_status === 1) {
|
|
|
return 2;
|
|
|
}
|
|
|
if (this.form.pay_status === 1 && this.form.status) {
|
|
|
return 3;
|
|
|
}
|
|
|
if (this.form.pay_status === 3 && this.form.status === 4) {
|
|
|
return 4;
|
|
|
}
|
|
|
return 0;
|
|
|
},
|
|
|
sex() {
|
|
|
return function(val) {
|
|
|
if (val == 1) {
|
|
|
return "男";
|
|
|
} else if (val == 2) {
|
|
|
return "女";
|
|
|
} else {
|
|
|
return "都可以";
|
|
|
}
|
|
|
};
|
|
|
},
|
|
|
token() {
|
|
|
return this.vuex_token ?
|
|
|
this.vuex_token :
|
|
|
uni.getStorageSync("lifeData")?.vuex_token;
|
|
|
},
|
|
|
accompanyProduct() {
|
|
|
return (
|
|
|
this.list_service.find(
|
|
|
(i) => i.id === this.form.accompany_product_id
|
|
|
) || {}
|
|
|
);
|
|
|
},
|
|
|
hospital() {
|
|
|
return this.list_hospital.find((i) => i.id == this.form.hospital) || {};
|
|
|
},
|
|
|
archive() {
|
|
|
return (
|
|
|
this.list_archive.find((i) => i.id === this.form.user_archive_id) || {}
|
|
|
);
|
|
|
},
|
|
|
moreActionList() {
|
|
|
if (this.form.pay_status === 0) {
|
|
|
return [{
|
|
|
text: '取消订单',
|
|
|
fontSize: 28,
|
|
|
tag: 'cancel'
|
|
|
}]
|
|
|
} else if (this.form.pay_status === 1) {
|
|
|
return [{
|
|
|
text: '退单',
|
|
|
fontSize: 28,
|
|
|
tag: 'chargeback'
|
|
|
}]
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
};
|
|
|
</script>
|
|
|
|
|
|
<style lang="scss">
|
|
|
.d-flex {
|
|
|
display: flex;
|
|
|
}
|
|
|
|
|
|
.jc-center {
|
|
|
justify-content: center;
|
|
|
}
|
|
|
|
|
|
.ai-center {
|
|
|
align-items: center;
|
|
|
}
|
|
|
|
|
|
.flex-1 {
|
|
|
flex: 1;
|
|
|
}
|
|
|
|
|
|
.pay-popup>.u-drawer {
|
|
|
bottom: calc(constant(safe-area-inset-bottom) + 80rpx + 28rpx + 27rpx) !important;
|
|
|
bottom: calc(env(safe-area-inset-bottom) + 80rpx + 28rpx + 27rpx) !important;
|
|
|
}
|
|
|
|
|
|
.pay-popup>.u-drawer .u-drawer-bottom {
|
|
|
overflow: initial !important;
|
|
|
background: #f4efee;
|
|
|
|
|
|
&::before {
|
|
|
font: normal normal normal 14px / 1 uicon-iconfont;
|
|
|
content: "\e65f 陪诊有保障,就医更安心";
|
|
|
font-size: 24rpx;
|
|
|
line-height: 70rpx;
|
|
|
color: #ffffff;
|
|
|
font-weight: 500;
|
|
|
box-sizing: border-box;
|
|
|
background: linear-gradient(90deg,
|
|
|
#c10d12 0%,
|
|
|
#c10d12 4%,
|
|
|
#e16265 99%,
|
|
|
#e16265 100%);
|
|
|
position: absolute;
|
|
|
width: 100%;
|
|
|
height: 100rpx;
|
|
|
padding-left: 70rpx;
|
|
|
border-radius: 20rpx 20rpx 0 0;
|
|
|
top: -70rpx;
|
|
|
left: 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.pay-popup>.u-drawer .u-mask {
|
|
|
bottom: calc(constant(safe-area-inset-bottom) + 80rpx + 28rpx) !important;
|
|
|
bottom: calc(env(safe-area-inset-bottom) + 80rpx + 28rpx) !important;
|
|
|
}
|
|
|
|
|
|
.pay-popup>.u-drawer .u-drawer__scroll-view {
|
|
|
position: relative;
|
|
|
background: #f4efee;
|
|
|
}
|
|
|
|
|
|
.pay-popup {
|
|
|
&-container {
|
|
|
padding-bottom: 20rpx;
|
|
|
|
|
|
.service {
|
|
|
border-radius: 10rpx;
|
|
|
padding: 28rpx 39rpx;
|
|
|
margin: 32rpx 25rpx 0;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
|
|
|
&__icon {
|
|
|
display: flex;
|
|
|
justify-content: center;
|
|
|
align-items: center;
|
|
|
background: #f1e7d9;
|
|
|
padding: 20rpx;
|
|
|
width: 124rpx;
|
|
|
height: 122rpx;
|
|
|
}
|
|
|
|
|
|
&__text {
|
|
|
padding-left: 12rpx;
|
|
|
font-weight: 500;
|
|
|
|
|
|
&--price {
|
|
|
font-size: 40rpx;
|
|
|
color: #c20d12;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
&--name {
|
|
|
font-size: 24rpx;
|
|
|
color: #333333;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.row {
|
|
|
margin: 30rpx 46rpx 0;
|
|
|
|
|
|
&__title {
|
|
|
padding-left: 22rpx;
|
|
|
font-size: 28rpx;
|
|
|
line-height: 40rpx;
|
|
|
color: #000000;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
&__content {
|
|
|
margin-top: 26rpx;
|
|
|
padding: 22rpx;
|
|
|
background: #fff;
|
|
|
border-radius: 5rpx;
|
|
|
|
|
|
&--first {
|
|
|
width: 51rpx;
|
|
|
height: 47rpx;
|
|
|
border-radius: 15rpx;
|
|
|
line-height: 47rpx;
|
|
|
text-align: center;
|
|
|
font-size: 30rpx;
|
|
|
color: #fff;
|
|
|
background-color: #e1a664;
|
|
|
}
|
|
|
|
|
|
&--name {
|
|
|
font-size: 28rpx;
|
|
|
line-height: 47rpx;
|
|
|
color: #000000;
|
|
|
font-weight: 500;
|
|
|
padding-left: 16rpx;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.u-checkbox__label {
|
|
|
margin: 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.cards {
|
|
|
&__icon {
|
|
|
width: 90rpx;
|
|
|
height: 83rpx;
|
|
|
background: #f3e7d8;
|
|
|
border-radius: 10rpx;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.use-card {
|
|
|
text-align: center;
|
|
|
white-space: nowrap;
|
|
|
overflow: hidden;
|
|
|
text-overflow: ellipsis;
|
|
|
width: 570rpx;
|
|
|
margin: 30rpx auto 0;
|
|
|
height: 66rpx;
|
|
|
line-height: 66rpx;
|
|
|
font-size: 28rpx;
|
|
|
color: #e1a664;
|
|
|
font-weight: 500;
|
|
|
background: #f1e7d9;
|
|
|
}
|
|
|
|
|
|
.is-auth {
|
|
|
padding-left: 56rpx;
|
|
|
margin-top: 22rpx;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
</style>
|
|
|
<style lang="scss" scoped>
|
|
|
.page {
|
|
|
position: relative;
|
|
|
|
|
|
.card {
|
|
|
background: #fff;
|
|
|
margin: 60rpx 25rpx 0;
|
|
|
padding: 36rpx 38rpx;
|
|
|
border-radius: 10rpx;
|
|
|
}
|
|
|
|
|
|
.bkg {
|
|
|
width: 100vw;
|
|
|
z-index: 0;
|
|
|
height: 550rpx;
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
}
|
|
|
|
|
|
.container {
|
|
|
z-index: 1;
|
|
|
position: relative;
|
|
|
padding-bottom: calc(27rpx * 2 + 80rpx + 20rpx);
|
|
|
padding-bottom: calc(constant(safe-area-inset-bottom) + 27rpx * 2 + 80rpx + 20rpx);
|
|
|
padding-bottom: calc(env(safe-area-inset-bottom) + 27rpx * 2 + 80rpx + 20rpx);
|
|
|
|
|
|
.refund-text {
|
|
|
font-size: 44rpx;
|
|
|
font-weight: 600;
|
|
|
color: #c20d12;
|
|
|
letter-spacing: 4rpx;
|
|
|
padding: 64rpx 37rpx 0;
|
|
|
}
|
|
|
|
|
|
.step {
|
|
|
display: flex;
|
|
|
justify-content: space-evenly;
|
|
|
padding: 64rpx 37rpx 0;
|
|
|
position: relative;
|
|
|
|
|
|
&::before {
|
|
|
content: "";
|
|
|
height: 12rpx;
|
|
|
background: #fff;
|
|
|
border-radius: 6rpx;
|
|
|
position: absolute;
|
|
|
left: 37rpx;
|
|
|
right: 37rpx;
|
|
|
top: calc(26rpx / 2 + 64rpx - 6rpx);
|
|
|
}
|
|
|
|
|
|
&-item {
|
|
|
&__dot {
|
|
|
width: 30rpx;
|
|
|
height: 30rpx;
|
|
|
border-radius: 100%;
|
|
|
filter: drop-shadow(0 0 10rpx rgba(211, 32, 2, 0.3));
|
|
|
background-color: #9b9c9c;
|
|
|
border: 2rpx solid #ffffff;
|
|
|
margin: auto;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
}
|
|
|
|
|
|
&__text {
|
|
|
font-size: 24rpx;
|
|
|
color: #333333;
|
|
|
font-weight: 500;
|
|
|
margin-top: 30rpx;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.is-active {
|
|
|
.step-item__dot {
|
|
|
filter: drop-shadow(4.384px 8.988px 10px rgba(211, 32, 2, 0.57));
|
|
|
background-image: linear-gradient(-90deg,
|
|
|
#e26165 0%,
|
|
|
#c10d12 94%,
|
|
|
#c10d12 100%);
|
|
|
transform: scale(2, 2);
|
|
|
}
|
|
|
|
|
|
.step-item__text {
|
|
|
color: #c20d12;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.switch-service {
|
|
|
border-radius: 10rpx;
|
|
|
background-color: #ffffff;
|
|
|
margin: 60rpx 25rpx 0;
|
|
|
padding: 28rpx 39rpx;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
|
|
|
&__icon {
|
|
|
display: flex;
|
|
|
justify-content: center;
|
|
|
align-items: center;
|
|
|
background: #f9f5e9;
|
|
|
padding: 20rpx;
|
|
|
}
|
|
|
|
|
|
&__name {
|
|
|
padding-left: 14rpx;
|
|
|
font-size: 28rpx;
|
|
|
color: #333333;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
&__btn {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
margin-left: auto;
|
|
|
|
|
|
&>image {
|
|
|
width: 31rpx;
|
|
|
height: 27rpx;
|
|
|
}
|
|
|
|
|
|
&>text {
|
|
|
font-size: 24rpx;
|
|
|
color: #999999;
|
|
|
padding-left: 20rpx;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.form-card {
|
|
|
border-radius: 10rpx;
|
|
|
background-color: #ffffff;
|
|
|
padding: 36rpx 38rpx;
|
|
|
margin: 0 25rpx;
|
|
|
|
|
|
&-1 {
|
|
|
margin-top: 44rpx;
|
|
|
}
|
|
|
|
|
|
&-2 {
|
|
|
margin-top: 24rpx;
|
|
|
|
|
|
.title {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: space-between;
|
|
|
font-size: 24rpx;
|
|
|
margin-bottom: 26rpx;
|
|
|
|
|
|
&__left text:nth-child(1) {
|
|
|
color: #333;
|
|
|
}
|
|
|
|
|
|
&__left text:nth-child(2) {
|
|
|
color: #999;
|
|
|
}
|
|
|
|
|
|
&__right {
|
|
|
color: #c20d12;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
::v-deep .u-add-wrap {
|
|
|
background: #fff;
|
|
|
border: 2rpx dashed #999999;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
&-3 {
|
|
|
margin-top: 20rpx;
|
|
|
|
|
|
.title {
|
|
|
font-size: 24rpx;
|
|
|
color: #333333;
|
|
|
margin-bottom: 22rpx;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.is-auth {
|
|
|
padding-left: 56rpx;
|
|
|
margin-top: 22rpx;
|
|
|
}
|
|
|
|
|
|
::v-deep .form-card-1 .u-input__input {
|
|
|
text-align: right;
|
|
|
}
|
|
|
|
|
|
.desc-card {
|
|
|
border-bottom: 2rpx solid #efefef;
|
|
|
padding: 48rpx 70rpx 46rpx;
|
|
|
|
|
|
&__title {
|
|
|
font-size: 28rpx;
|
|
|
color: #000000;
|
|
|
font-weight: bold;
|
|
|
position: relative;
|
|
|
padding-left: 24rpx;
|
|
|
|
|
|
&::before {
|
|
|
content: "";
|
|
|
background: linear-gradient(0deg,
|
|
|
#c10d12 0%,
|
|
|
#c10d12 6%,
|
|
|
#e26165 100%);
|
|
|
border-radius: 4rpx;
|
|
|
width: 6rpx;
|
|
|
position: absolute;
|
|
|
top: 0;
|
|
|
left: 0;
|
|
|
bottom: 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
&__content {
|
|
|
line-height: 65rpx;
|
|
|
margin-top: 34rpx;
|
|
|
|
|
|
&--title {
|
|
|
display: inline-block;
|
|
|
width: 240rpx;
|
|
|
padding-right: 64rpx;
|
|
|
font-size: 24rpx;
|
|
|
color: #999999;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
&--value {
|
|
|
display: inline-block;
|
|
|
font-size: 24rpx;
|
|
|
color: #333333;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.bottom-bar {
|
|
|
background: #fff;
|
|
|
position: fixed;
|
|
|
padding-top: 27rpx;
|
|
|
padding-bottom: 27rpx;
|
|
|
padding-bottom: calc(constant(safe-area-inset-bottom) + 27rpx);
|
|
|
padding-bottom: calc(env(safe-area-inset-bottom) + 27rpx);
|
|
|
width: 100vw;
|
|
|
left: 0;
|
|
|
bottom: 0;
|
|
|
z-index: 10074;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: space-between;
|
|
|
filter: drop-shadow(0 2rpx 6rpx #00000020);
|
|
|
|
|
|
.price {
|
|
|
margin-left: 50rpx;
|
|
|
color: #c20d12;
|
|
|
|
|
|
&>text:nth-child(1) {
|
|
|
font-size: 24rpx;
|
|
|
}
|
|
|
|
|
|
&>text:nth-child(2) {
|
|
|
color: #c20d12;
|
|
|
font-weight: 500;
|
|
|
font-size: 40rpx;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.more {
|
|
|
font-size: 26rpx;
|
|
|
color: #666;
|
|
|
padding-right: 20rpx;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
.service-list {
|
|
|
padding-top: 80rpx;
|
|
|
|
|
|
&-item {
|
|
|
border: 2rpx solid #e6e6eb;
|
|
|
border-radius: 10rpx;
|
|
|
background-color: #ffffff;
|
|
|
margin: 0 25rpx;
|
|
|
padding: 28rpx 39rpx;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
flex-wrap: wrap;
|
|
|
|
|
|
&__namewrap {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
width: 100%;
|
|
|
}
|
|
|
|
|
|
&__address {
|
|
|
margin-top: 10rpx;
|
|
|
width: 100%;
|
|
|
padding-left: 14rpx;
|
|
|
display: flex;
|
|
|
justify-content: space-between;
|
|
|
align-items: center;
|
|
|
}
|
|
|
|
|
|
&__icon {
|
|
|
display: flex;
|
|
|
justify-content: center;
|
|
|
align-items: center;
|
|
|
// background: #f9f5e9;
|
|
|
// padding: 20rpx;
|
|
|
}
|
|
|
|
|
|
&__name {
|
|
|
padding-left: 14rpx;
|
|
|
font-size: 28rpx;
|
|
|
color: #333333;
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
|
|
|
&__price {
|
|
|
color: #c20d12;
|
|
|
font-weight: 500;
|
|
|
margin-left: auto;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
&-btn {
|
|
|
position: fixed;
|
|
|
bottom: 40rpx;
|
|
|
left: calc(50% - 144rpx);
|
|
|
}
|
|
|
|
|
|
&-item+&-item {
|
|
|
margin-top: 20rpx;
|
|
|
}
|
|
|
}
|
|
|
</style> |