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.

321 lines
7.7 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="container">
<!-- <image class="bkg" mode="aspectFill" src="@/static/order-bg.png"></image> -->
<!-- <view class="user">
<u-navbar :background="{'background':'transparent'}" title-color="#000" :border-bottom="false" title="订单详情"></u-navbar>
</view> -->
<view class="order">
<view class="order-title">基本信息</view>
<view class="order-item">
<view class="order-item-info">
<view>
<text>编号</text><text>{{info.no}}</text>
</view>
<view>
<text>预约时间</text><text>{{info.time}}</text>
</view>
<!-- <view>
<text>结束时间</text><text>2025-01-17 15:30</text>
</view> -->
<view>
<text>联系人</text><text>{{info.appoint_name}}</text>
</view>
<view class="flex-center" @click.stop="callTel(info.appoint_mobile)">
<view>
<text>联系人电话</text><text>{{info.appoint_mobile}}</text>
</view>
<view style="margin-left:10rpx">
<u-icon name="phone-fill" color="#d61b24"></u-icon>
</view>
</view>
<view>
<text>医院</text><text>{{info.hospital?info.hospital.name:''}}</text>
</view>
</view>
</view>
<view class="order-item">
<view class="order-item-info">
<view>
<text>是否可以自理</text><text>{{info.my_provide===1?'可以自理':'不能自理'}}</text>
</view>
<view>
<text>就诊人</text><text>{{info.user_archive?info.user_archive.name:''}}/{{base.getAgeFromId(info.user_archive?info.user_archive.idcard:'')}}</text>
</view>
<view>
<view>就诊资料</view>
<view class="order-item-img">
<image v-for="(item,index) in imgs" :src="item" @click="imgPreview(index)"></image>
</view>
</view>
</view>
</view>
<view class="order-item">
<view class="order-item-info">
<view>
<view>其他要求:</view>
<view>{{info.content?info.content:'暂无'}}</view>
</view>
</view>
</view>
<view class="order-title" v-if="info.accompany_order_log && info.accompany_order_log.length>0">服务记录</view>
<view class="order-item" v-if="info.accompany_order_log && info.accompany_order_log.length>0">
<view class="order-item-info">
<view>
<view v-for="item in info.accompany_order_log">
<block v-for="s in statusList">
<view v-if="item.status===s.id">
{{item.created_at}} {{s.name}}
</view>
</block>
<view class="order-item-img">
<image v-for="(i,index) in item.files" :src="i.url" @click="imgPreviewList(item.files,index)"></image>
</view>
<view>{{item.remark}}</view>
</view>
</view>
</view>
</view>
<view class="order-item">
<view>服务照片:</view>
<u-upload :action="action" ref="uUpload" :header="{
['Authorization']: `Bearer ${vuex_token}`,
}"></u-upload>
</view>
<view class="order-item">
<view class="order-item-input">
<u-input :border="true" v-model="form.statusName" @click="isShowStatus = true" type="select"
placeholder="请选择状态"></u-input>
</view>
<view class="order-item-input">
<u-input :border="true" v-model="form.remark" type="textarea" placeholder="备注"></u-input>
</view>
</view>
<view class="order-btn">
<view @click="$u.throttle(submit,2000)">提交</view>
</view>
<u-select v-model="isShowStatus" value-name="id" @confirm="confirmStatus" label-name="name"
:list="statusList"></u-select>
</view>
</view>
</template>
<script>
import {
statusList
} from "@/common/const.js"
import {
ROOTPATH as baseUrl
} from "@/common/config.js";
export default {
data() {
return {
imgs: [],
type: 'index',
action: '',
id: '',
isShowStatus: false,
form: {
status: '',
statusName: '',
remark: ''
},
action: `${baseUrl}/api/nurse/upload-file`,
statusList: [],
info: {}
}
},
onLoad(options) {
this.statusList = statusList
this.id = options.id ? options.id : ''
this.type = options.type ? options.type : 'index'
this.getDetail(this.id)
},
methods: {
toUrl() {
uni.navigateTo({
url: '/package_sub/order/orderDetail'
})
},
imgPreview(index) {
uni.previewImage({
current: index, // 当前显示图片索引
urls: this.imgs // 需要预览的图片http链接列表
});
},
imgPreviewList(list,index){
let imgs = []
list.map(item=>{
imgs.push(item.url)
})
console.log("imgs",imgs)
uni.previewImage({
current: index, // 当前显示图片索引
urls: imgs // 需要预览的图片http链接列表
});
},
callTel(tel) {
if (this.base.isNull(tel)) {
return
}
uni.makePhoneCall({
phoneNumber: tel
});
},
confirmStatus(e) {
this.form.status = e[0].value
this.form.statusName = e[0].label
},
async getDetail(id) {
const res = await this.$u.api.orderDetail({
id: id
})
this.info = res
this.form.status = res.status
this.form.remark = res.remark
if (res.files.length > 0) {
res.files.map(item => {
this.imgs.push(item.url)
})
}
this.statusList.map(item => {
if (item.id === res.status) {
this.form.statusName = item.name
}
})
console.log("res", res)
},
submit() {
let that = this
let url = this.type === 'index' ? '/pages/index/index' : '/package_sub/order/order'
this.form.file_ids =
this.$refs.uUpload?.lists
?.filter((val) => {
return val.progress === 100;
})
?.map((i) => i.response?.id) || [];
this.$u.api.saveOrder({
id: this.info.id,
...this.form
}).then(res => {
that.base.toast("提交成功", 1500, function() {
setTimeout(function() {
if (that.type === 'index') {
uni.switchTab({
url: url
})
} else {
uni.redirectTo({
url: url
})
}
}, 1500)
})
})
console.log("123")
},
}
}
</script>
<style lang="scss" scoped>
.container {
width: 100vw;
height: 100vh;
background-color: #fff;
font-size: 32rpx;
.bkg {
position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 686rpx;
}
.user {
font-size: 36rpx;
color: #000;
position: relative;
padding: 20rpx;
}
.flex-center {
display: flex;
align-items: center;
.u-icon {
margin-left: 10rpx;
}
}
.order {
margin: 20rpx;
position: relative;
padding-bottom: 40rpx;
&-title {
font-size: 36rpx;
color: #000;
position: relative;
padding: 20rpx;
}
&-item {
background-color: #fff;
padding: 20rpx;
box-shadow: 1rpx 1rpx 10rpx rgba(0, 0, 0, 0.2);
border-radius: 10rpx;
margin-bottom: 30rpx;
&-info {
padding: 20rpx 0;
&>view {
margin-bottom: 10rpx;
}
}
&-img {
display: flex;
flex-wrap: wrap;
image {
width: 140rpx;
height: 140rpx;
margin: 10rpx;
}
}
&-input {
margin-bottom: 20rpx;
}
}
&-btn {
padding: 0 65rpx;
&>view {
font-size: 33rpx;
border-radius: 60rpx;
margin-bottom: 35rpx;
height: 90rpx;
line-height: 90rpx;
text-align: center;
color: #fff;
background: linear-gradient(-90deg, #e26165 0%, #c10d12 94%, #c10d12 100%);
box-shadow: 1rpx 1rpx 10rpx #c10d12;
}
}
}
}
</style>