You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

495 lines
12 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="page">
<image class="bkg" :src="info.cover?info.cover.url:''"></image>
<view class="cotainer">
<view class="hospital">
<view class="title">咨询科室{{ info.name?info.name:'' }} - {{department_name?department_name:''}}</view>
<view class="hospital-title">患者信息</view>
<view class="hospital-form">
<view class="form-card form-card-1">
<u-form :model="form" :rules="rules" ref="uForm" :label-width="178" :error-type="['toast']">
<u-form-item label="姓名" prop="name" required>
<!-- <u-input v-model="form.name" placeholder="请填写姓名" /> -->
<u-input
:type="'select'"
placeholder="请选择人员"
:value="form.name"
:select-open="isShowArchive"
@click="isShowArchive = true"
/>
</u-form-item>
<u-form-item label="性别" prop="sex" required>
<view slot="right">
<view class="sexs">
<view v-for="item in list_sex" class="sexs-item" @click="confirmSex(item)"
:class="form.sex==item?'sexs-active':''">{{item}}</view>
</view>
</view>
</u-form-item>
<u-form-item label="出生年月" prop="birthday" required>
<u-input type="select" placeholder="请选择" v-model="form.birthday"
:select-open="isShowTime" @click="isShowTime = true" />
</u-form-item>
<u-form-item label="所在城市" prop="city">
<u-input v-model="form.city" placeholder="请填写所在城市" />
</u-form-item>
<u-form-item label="患者关系" prop="relationship" required>
<u-input type="select" placeholder="请选择" v-model="form.relationship"
:select-open="isShowRelationship" @click="isShowRelationship = true" />
</u-form-item>
<u-form-item label="手机号码" prop="mobile" required>
<u-input v-model="form.mobile" placeholder="请填写手机号码" type="number" />
</u-form-item>
<u-form-item label="咨询类别" prop="type" required>
<u-input type="select" placeholder="请选择" v-model="form.type" :select-open="isShowType"
@click="isShowType = true" />
</u-form-item>
<view class="form-card-2">
<u-form-item label="咨询信息" prop="content" label-position="top" :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>
<u-button ripple shape="circle" :custom-style="orderBtnStyle" :throttle-time="2000"
@click="submit">提交咨询</u-button>
</view>
<!-- 出生年月 -->
<u-picker v-model="isShowTime" :params="{
year: true,
month: true,
day: true,
}" mode="time" @confirm="confirmTime"></u-picker>
<!-- 患者关系 -->
<u-select v-model="isShowRelationship" value-name="value" @confirm="confirmRelationship" label-name="label"
:list="list_relationship"></u-select>
<!-- 咨询类别 -->
<u-select v-model="isShowType" value-name="value" @confirm="confirmType" label-name="label"
:list="list_type"></u-select>
<!-- 选择就诊人可以新增 -->
<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>
</view>
</view>
</view>
</view>
<view class="service-list-btn">
<u-button
shape="circle"
ripple
:custom-style="orderBtnStyle"
@click="addArchive"
>新增被服务人</u-button
>
</view>
</u-popup>
<!-- 新增就诊人 -->
<service-archive
ref="serviceArchive"
@addSuccess="addSuccess"
></service-archive>
</view>
</template>
<script>
import serviceArchive from "@/component/serviceArchive/service-archive.vue";
export default {
components: {
serviceArchive,
},
data() {
return {
orderBtnStyle: {
'background-image': 'linear-gradient(-90deg, #e26165 0%, #c10d12 94%, #c10d12 100%)',
'font-weight': '500',
'font-size': '27rpx',
'color': '#fff',
'width': '440rpx',
'height': '80rpx',
'line-height': '80rpx'
},
serve_hospital_id: '',
serve_hospital_department_id: '',
info: {},
department_name: '',
isShowArchive: false,
list_archive: [],
form: {
name: '',
sex: '男',
birthday: '',
city: '',
relationship: '',
mobile: '',
type: '',
content: '',
},
rules: {
name: [{
required: true,
message: "请填写姓名",
trigger: ["blur", "change"],
}],
sex: [{
required: true,
message: "请选择性别",
trigger: ["blur", "change"],
}],
birthday: [{
required: true,
message: "请选择出生日期",
trigger: ["blur", "change"],
}],
relationship: [{
required: true,
message: "请选择患者关系",
trigger: ["blur", "change"],
}],
mobile: [{
required: true,
message: "请填写手机号码",
trigger: ["blur", "change"],
},
{
// 自定义验证函数,见上说明
validator: (rule, value, callback) => {
return this.$u.test.mobile(value);
},
message: "手机号码不正确",
// 触发器可以同时用blur和change
trigger: ["change", "blur"],
}
],
type: [{
required: true,
message: "请选择咨询类别",
trigger: ["blur", "change"],
}],
},
isShowTime: false,
isShowRelationship: false,
list_sex: ['男', '女'],
list_relationship: [{
label: '本人',
value: '本人'
}, {
label: '家庭成员',
value: '家庭成员'
}, {
label: '亲戚朋友',
value: '亲戚朋友'
}, {
label: '其他',
value: '其他'
}],
isShowType: false,
list_type: [{
label: '挂号',
value: '挂号'
}, {
label: '陪诊',
value: '陪诊'
},{
label: '照护',
value: '照护'
}, {
label: '预约专家',
value: '预约专家'
}],
};
},
mounted() {
// if (this.$store.state.vuex_location !== 2) {
// this.$store.dispatch('getLocation')
// }
},
onReady() {
this.$refs.uForm.setRules(this.rules);
},
onLoad(options) {
this.serve_hospital_id = options.id ? options.id : ''
this.serve_hospital_department_id = options.department_id ? options.department_id : ''
this.getUserArchive();
this.getDetail()
},
methods: {
async getDetail() {
const res = await this.$u.api.serveHospitalDetail({
id: this.serve_hospital_id
})
this.info = res
res.serve_hospital_department.map(item => {
if (this.serve_hospital_department_id == item.id) {
this.department_name = item.name
}
})
},
async getUserArchive() {
const res = await this.$u.api.userArchive({
page: 1,
page_size: 999,
});
this.list_archive = res.data;
},
// 服务对象
confirmArchive(e) {
this.form.name = e.name
this.form.mobile = e.mobile
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();
}
},
confirmSex(e) {
this.form.sex = e
},
confirmTime(e) {
this.form.birthday = `${e.year}-${e.month}-${e.day}`;
},
confirmRelationship(e) {
this.form.relationship = e[0].value;
},
confirmType(e) {
this.form.type = e[0].value;
},
submit() {
this.$refs.uForm.validate(async (valid) => {
if (valid) {
const res = await this.$u.api.serveHospitalForm({
serve_hospital_id: this.serve_hospital_id,
serve_hospital_department_id: this.serve_hospital_department_id,
...this.form
});
if (res) {
uni.showToast({
title: '提交成功',
duration: 1500,
icon:'none',
success() {
setTimeout(function() {
uni.redirectTo({
url:'/package_sub/pages/ServeOrder/ServeOrder'
})
}, 1500)
}
})
}
} else {
console.log("验证失败");
}
});
}
},
computed: {
token() {
return this.vuex_token || uni.getStorageSync('lifeData')?.vuex_token
}
}
}
</script>
<style lang="scss">
.page {
position: relative;
background-color: #f5efee;
height: 100vh;
padding-bottom: 80rpx;
}
.bkg {
height: 540rpx;
width: 100vw;
position: absolute;
}
.cotainer {
padding-top: 460rpx;
padding-bottom: 80rpx;
background-color: #f5efee;
}
.hospital {
background-color: #fff;
border-radius: 10rpx;
filter: drop-shadow(2.192rpx 4.494rpx 5rpx rgba(33, 32, 32, 0.15));
margin: 25rpx;
margin-top: 0;
padding-bottom: 60rpx;
margin-bottom: 50rpx;
.title {
font-size: 28rpx;
color: #222222;
padding: 40rpx;
border-bottom: 1rpx solid rgba(33, 32, 32, 0.15);
}
&-title {
font-size: 28rpx;
padding: 40rpx;
color: #000;
padding-bottom: 20rpx;
}
&-form {
.form-card {
padding: 0 60rpx;
}
}
.sexs {
display: flex;
align-items: center;
&-item {
width: 130rpx;
height: 48rpx;
line-height: 48rpx;
color: #000000;
font-size: 24rpx;
text-align: center;
border-radius: 48rpx;
background-color: #e4e9f0;
margin-left: 10rpx
}
&-active {
color: #fff;
background: linear-gradient(-90deg, #e26165 0%, #c10d12 94%, #c10d12 100%);
}
}
::v-deep .form-card .u-input__input {
text-align: right;
}
::v-deep .form-card-2 .u-input__input {
text-align: left;
}
}
.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>