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

1 year ago
<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>
1 year ago
<!-- <u-input v-model="form.name" placeholder="请填写姓名" /> -->
<u-input
:type="'select'"
placeholder="请选择人员"
:value="form.name"
:select-open="isShowArchive"
@click="isShowArchive = true"
/>
1 year ago
</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"
1 year ago
: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>
1 year ago
</view>
</template>
1 year ago
<script>
import serviceArchive from "@/component/serviceArchive/service-archive.vue";
export default {
components: {
serviceArchive,
},
1 year ago
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: {},
1 year ago
department_name: '',
isShowArchive: false,
list_archive: [],
1 year ago
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: [{
1 year ago
label: '挂号',
value: '挂号'
1 year ago
}, {
1 year ago
label: '陪诊',
value: '陪诊'
},{
label: '照护',
value: '照护'
}, {
label: '预约专家',
value: '预约专家'
1 year ago
}],
};
},
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 : ''
1 year ago
this.serve_hospital_department_id = options.department_id ? options.department_id : ''
this.getUserArchive();
this.getDetail()
1 year ago
},
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
}
})
1 year ago
},
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();
}
},
1 year ago
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() {
1 year ago
uni.redirectTo({
url:'/package_sub/pages/ServeOrder/ServeOrder'
1 year ago
})
}, 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;
}
1 year ago
}
.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;
}
1 year ago
}
</style>