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

8 months ago
<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>