feature 订单管理,药品管理

This commit is contained in:
zoujiandong
2023-09-11 15:11:28 +08:00
parent 9c88f454a4
commit c53cd6763f
14 changed files with 5264 additions and 8 deletions
+564
View File
@@ -0,0 +1,564 @@
<template>
<div class="app-container">
<a-form :model="queryForm" ref="queryFormRef" layout="inline">
<a-form-item field="inquiry_no" label="订单编号">
<a-input :style="{ width: '182px' }" v-model="queryForm.inquiry_no" placeholder="请输入订单编号" @press-enter="handleQuery" />
</a-form-item>
<a-form-item field="mobile" label="医生姓名">
<a-input :style="{ width: '182px' }" v-model="queryForm.doctor_name" placeholder="请输入医生姓名" @press-enter="handleQuery" />
</a-form-item>
<a-form-item field="hospital_name" label="就诊人姓名">
<a-input :style="{ width: '182px' }" v-model="queryForm.patient_name" placeholder="请输入就诊人姓名" @press-enter="handleQuery" />
</a-form-item>
<!-- <a-form-item field="department_custom_name" label="科室名称">
<a-input v-model="queryForm.department_custom_name" placeholder="请输入科室名称" @press-enter="handleQuery" />
</a-form-item> -->
<a-form-item field="doctor_title" label="电话号码">
<a-input :style="{ width: '182px' }" v-model="queryForm.mobile" placeholder="请输入医生电话号码" @press-enter="handleQuery" />
</a-form-item>
<a-form-item field="inquiry_service" label="订单状态">
<a-select v-model="queryForm.inquiry_status" placeholder="请选择订单状态" :style="{ width: '182px' }">
<!-- 1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) -->
<a-option value="1">待支付</a-option>
<a-option value="2">待分配</a-option>
<a-option value="3">待接诊</a-option>
<a-option value="4">已接诊</a-option>
<a-option value="5">已完成</a-option>
<a-option value="6">已结束</a-option>
<a-option value="7">已取消</a-option>
</a-select>
</a-form-item>
<a-form-item>
<a-space>
<a-button type="primary" @click="handleQuery"><icon-search /> 搜索</a-button>
<a-button @click="handleResetQuery"><icon-loop /> 重置</a-button>
</a-space>
</a-form-item>
</a-form>
<a-divider />
<!-- action -->
<div class="action">
<a-space>
<a-button v-has="'admin:sysDoctorList:add'" type="primary" @click="handleAdd"><icon-plus /> 新增 </a-button>
<!-- <a-button v-has="'admin:sysDoctorList:remove'" type="primary" status="danger"><icon-delete /> 批量删除 </a-button> -->
</a-space>
</div>
<!-- table -->
<a-table
:columns="columns"
:data="tableData"
:pagination="{ 'show-total': true, 'show-jumper': true, 'show-page-size': true, total: pager.total, current: currentPage }"
:row-selection="{ type: 'checkbox', showCheckedAll: true }"
row-key="post_id"
@selection-change="(selection) => {deleteData = selection;}"
@page-change="handlePageChange"
@page-size-change="handlepage_sizeChange"
>
<template #post_id="{record,rowIndex}">
<div>{{(rowIndex+1)+(pager.page-1)*10}}</div>
</template>
<template #inquiry_pay_channel="{record}">
<div v-if="record.inquiry_pay_channel==1">小程序支付</div>
<div v-else-if="record.inquiry_pay_channel==2">微信扫码支付</div>
<div v-else-if="record.inquiry_pay_channel==3">模拟支付</div>
</template>
<!-- 1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) -->
<template #inquiry_status="{record}">
<div v-if="record.inquiry_status==1">待支付</div>
<div v-else-if="record.inquiry_status==2">待分配</div>
<div v-else-if="record.inquiry_status==3">待接诊</div>
<div v-else-if="record.inquiry_status==4">已接诊</div>
<div v-else-if="record.inquiry_status==5">已完成</div>
<div v-else-if="record.inquiry_status==6">已结束</div>
<div v-else-if="record.inquiry_status==7">已取消</div>
</template>
<template #pay_time="{ record }">
{{ parseTime(record.pay_time) }}
</template>
<template #action="{ record }">
<a-space>
<a-button v-has="'admin:sysDoctorList:detail'" type="text"
@click="handleDetail(record)"><icon-book />详情</a-button>
<!-- <a-button v-has="'admin:sysPost:remove'" type="text" @click="() => { deleteVisible = true; deleteData = [record.post_id]; }"><icon-delete /> 删除</a-button> -->
</a-space>
</template>
</a-table>
<!-- Modal -->
<a-modal v-model:visible="modalVisible" fullscreen :title="modalTitle" title-align="start" :footer="false"
@before-ok="handleSubmit" @close="() => {$refs.modalFormRef.resetFields(); modalForm.doctor_id = null;}">
<div class="titlebox">
<div class="bar"></div>
<div class="name">订单信息</div>
</div>
<a-form :model="modalForm" :disabled="true" :rules="rules" ref="modalFormRef" :auto-label-width="true">
<a-row :gutter="24" style="margin-top: 35px;">
<a-col :span="12">
<a-form-item field="inquiry_no" label="订单编号:">
<span>{{ modalForm.inquiry_no }}</span>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item field="inquiry_status" label="订单状态:" >
<span>{{ formatInquiryStatus(modalForm.inquiry_status) }}</span>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24" >
<a-col :span="12">
<a-form-item field="user.created_at" label="下单时间:">
<span >{{modalForm.created_at}}</span>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item field="pay_time" label="支付时间:">
<span >{{modalForm.pay_time}}</span>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="12">
<a-form-item field="amount_total" label="订单金额:">
<span>{{modalForm.amount_total}}</span>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item field="coupon_amount_total" label="优惠卷:">
<span>{{modalForm.coupon_amount_total}}</span>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24">
<a-col :span="12">
<a-form-item field="payment_amount_total" label="实付金额:">
<span>{{modalForm.payment_amount_total}}</span>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item field="inquiry_type" label="问诊类型:">
<span>{{formatInquiryType(modalForm.inquiry_type)}}</span>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24" v-if="modalForm.cancel_remarks">
<a-col :span="24">
<a-form-item field="department_custom_name" label="备 注 :">
<span>{{ modalForm.cancel_remarks}}</span>
</a-form-item>
</a-col>
</a-row>
<a-divider />
<div class="titlebox" v-if="modalForm.order_inquiry_refund">
<div class="bar"></div>
<div class="name">退款信息</div>
</div>
<a-row :gutter="24" style="margin-top: 35px;" v-if="modalForm.order_inquiry_refund">
<a-col :span="12">
<a-form-item field="inquiry_refund_no" label="退款编号:">
<span>{{modalForm.order_inquiry_refund.inquiry_refund_no}}</span>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item field="escrow_trade_no" label=" 第三方订单编号:">
<span>{{modalForm.escrow_trade_no}}</span>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24" v-if="modalForm.order_inquiry_refund">
<a-col :span="12">
<a-form-item field="inquiry_refund_no" label="退款金额:">
<span>{{modalForm.order_inquiry_refund.refund_total}}</span>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item field="escrow_trade_no" label="退款状态:">
<span>{{formatRefundStatus(modalForm.order_inquiry_refund.inquiry_refund_status)}}</span>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24" v-if="modalForm.order_inquiry_refund">
<a-col :span="24">
<a-form-item field="inquiry_refund_no" label="退款时间:">
<span>{{modalForm.order_inquiry_refund.success_time}}</span>
</a-form-item>
</a-col>
</a-row>
<a-row :gutter="24" v-if="modalForm.order_inquiry_refund">
<a-col :span="24">
<a-form-item field="inquiry_refund_no" label="退款原因:">
<span>{{modalForm.order_inquiry_refund.refund_reason}}</span>
</a-form-item>
</a-col>
</a-row>
<a-divider v-if="modalForm.order_inquiry_refund"/>
<div class="titlebox" v-if="modalForm.user_doctor">
<div class="bar"></div>
<div class="name">医生信息</div>
<a-space style="margin-right: 8px;flex:1;display: flex;justify-content: flex-end;">
<a-button type="primary" @click="openDcotor">查看医生完整信息</a-button>
</a-space>
</div>
<a-row :gutter="24" style="margin-top: 35px;" v-if="modalForm.user_doctor">
<a-col :span="24">
<a-form-item field="license_cert" :hide-label="true" >
<div class="doctorInfo">
<a-space size="large">
<a-image width="80" height="80" class="headImg" :src="modalForm.user_doctor.avatar" v-if="modalForm.user_doctor.avatar">
</a-image>
<a-image width="80" height="80" class="headImg" src="https://img.applets.igandanyiyuan.com/basic/file/doctor_avatar.png" v-else>
</a-image>
</a-space>
<div class="infobox">
<div class="name">{{modalForm.user_doctor.user_name}}&nbsp;&nbsp;{{modalForm.user_doctor.doctor_title}}</div>
<div class="hospital">{{modalForm.user_doctor.hospital.hospital_name}}&nbsp;&nbsp;{{modalForm.user_doctor.department_custom_name}}</div>
</div>
</div>
</a-form-item>
</a-col>
</a-row>
<a-divider v-if="modalForm.user_doctor"/>
<div class="titlebox">
<div class="bar"></div>
<div class="name">就诊人信息</div>
<a-space style="margin-right: 8px;flex:1;display: flex;justify-content: flex-end;">
<a-button type="primary" status="warning" @click="openPatient">查看就诊人完整信息</a-button>
</a-space>
</div>
<a-row :gutter="24" style="margin-top: 35px;" v-if="modalForm.user_doctor">
<a-col :span="24">
<a-form-item field="license_cert" :hide-label="true" >
<div class="doctorInfo">
<div class="infobox">
<div class="row">
<div class="nameDesc">就诊人姓名:</div>
<div class="desc">{{modalForm.patient_name_mask}}&nbsp;&nbsp;({{modalForm.patient_sex=1?'男':'女'}}&nbsp;&nbsp;{{modalForm.patient_age}}岁)</div>
</div>
<div class="row">
<div class="nameDesc">确诊疾病:</div>
<div class="desc">{{modalForm.order_inquiry_case.disease_class_name}}&nbsp;&nbsp;{{modalForm.user_doctor.department_custom_name}}</div>
</div>
<div class="row">
<div class="nameDesc">病情描述:</div>
<div class="desc">{{modalForm.order_inquiry_case.disease_desc}}&nbsp;&nbsp;{{modalForm.user_doctor.department_custom_name}}</div>
</div>
</div>
</div>
</a-form-item>
</a-col>
</a-row>
</a-form>
<a-divider v-if="modalForm.user_doctor"/>
<div class="titlebox" v-if="modalForm.order_evaluation">
<div class="bar"></div>
<div class="name">评价信息</div>
</div>
<a-row :gutter="24" style="margin-top: 35px;" v-if="modalForm.order_evaluation">
<a-col :span="24">
<a-form-item field="" label="" no-style>
<div class="infobox commentbox">
<div class="row">
<div class="nameDesc">回复质量:</div>
<div class="desc"><a-rate :default-value="modalForm.order_evaluation.reply_quality" readonly /></div>
</div>
<div class="row">
<div class="nameDesc">服务态度:</div>
<div class="desc"><a-rate :default-value="modalForm.order_evaluation.service_attitude" readonly /></div>
</div>
<div class="row">
<div class="nameDesc">回复速度:</div>
<div class="desc"><a-rate :default-value="modalForm.order_evaluation.reply_progress" readonly /></div>
</div>
<div class="row">
<div class="nameDesc">评价内容:</div>
<div class="desc">{{ modalForm.order_evaluation.content }}</div>
</div>
</div>
</a-form-item>
</a-col>
</a-row>
<a-divider v-if="modalForm.order_evaluation"/>
<div class="titlebox" >
<div class="bar"></div>
<div class="name">操作</div>
</div>
<a-row :gutter="24" style="margin-top: 35px;" >
<a-col :span="24">
<a-form-item field="" label="" no-style>
<a-space style="margin-right: 8px;">
<a-button type="primary" @click="()=>okVisible=true">问诊记录</a-button>
</a-space>
<a-space style="margin-right: 8px;">
<a-button type="primary" status="danger" @click="()=>okVisible=true">删除订单</a-button>
</a-space>
</a-form-item>
</a-col>
</a-row>
</a-modal>
<!-- 医生详情弹框 -->
<doctorModal :doctorVisible="doctorVisible" :doctor_id="doctor_id" @doctorVisibleChange="() => {doctorVisible = false;doctor_id='';}"></doctorModal>
</div>
</template>
<script setup>
import { reactive, ref, getCurrentInstance, onMounted, nextTick, watch } from 'vue';
import { getOrderList,getOrderDetail} from '@/api/order/list';
import { parseTime } from '@/utils/parseTime';
// Akiraka 20230210 删除数据
const deleteData = ref([])
// Akiraka 20230210 删除对话框
const deleteVisible = ref(false)
const doctorVisible=ref(false);
const doctor_id=ref('');
// Akiraka 20230210 监听删除事件
watch(() => deleteVisible.value ,(value) => {
if ( value == false ) {
getOrderInfo(pager);
}
})
const { proxy } = getCurrentInstance();
const currentPage = ref(1);
// Pager
const pager = {
total: 0,
page: 1,
page_size: 10,
};
// form
const queryForm = reactive({});
const modalForm = reactive({
sort: 0,
status: 1,
order_inquiry_refund:{},
order_evaluation:null
});
// Rules
const rules = {
post_name: [{ required: true, message: '请输入岗位名称' }]
};
// Modal
const modalVisible = ref(false);
const modalTitle = ref('默认标题');
// Batch Del List
let batchList = [];
// Table Columns
const columns = [
{ title: '排序', dataIndex: 'post_id',slotName: 'post_id' },
{ title: '订单编号', dataIndex: 'inquiry_no' },
{ title: '医生姓名', dataIndex: 'doctor_name' },
{ title: '就诊人姓名', dataIndex: 'patient_name' },
{ title: '联系电话', dataIndex: 'patient_name' },
{ title: '订单金额', dataIndex: 'amount_total' },
{ title: '实付金额', dataIndex: 'payment_amount_total' },
{ title: '支付方式', dataIndex: 'inquiry_pay_channel',slotName: 'inquiry_pay_channel'},
{ title: '订单状态', dataIndex: 'inquiry_status', slotName:'inquiry_status' },
{ title: '支付时间', dataIndex: 'pay_time', slotName: 'pay_time' },
{ title: '操作', slotName: 'action' },
];
// Table Data
const tableData = ref([]);
// 新增
const handleAdd = () => {
modalVisible.value = true;
modalTitle.value = '新增岗位';
};
// 修改
const handleUpdate = async (record) => {
modalVisible.value = true;
modalTitle.value = '修改岗位';
await nextTick();
Object.assign(modalForm, record);
};
// Modal ok
// 异步关闭Modal需要调用 done()
const handleSubmit = (done) => {
proxy.$refs.modalFormRef.validate(async (valid) => {
if (!valid) {
let res;
if (!modalForm.post_id) {
const { code, message } = await addPost(modalForm);
if (code == 200 ) {
proxy.$notification.success('新增成功');
} else {
proxy.$notification.error(message);
}
} else {
console.log("post_id:"+modalForm.post_id)
const { code, message } = await updatePost(modalForm, modalForm.post_id);
if (code == 200 ) {
proxy.$notification.success('更新成功');
} else {
proxy.$notification.error(message);
}
}
done();
getOrderInfo(pager);
} else {
proxy.$message.error('表单校验失败');
done(false);
}
});
};
/**
* 分页改变
* @param {Number} [page]
*/
const handlePageChange = (page) => {
pager.page = page;
// 修改当前页码
currentPage.value = page;
getOrderInfo({ ...pager, ...queryForm });
};
// 每页数据量
const handlepage_sizeChange = (page_size) => {
pager.page_size = page_size;
getOrderInfo({ ...pager, ...queryForm });
};
// 获取岗位信息
const getOrderInfo = async (params = {}) => {
const { data, code, message } = await getOrderList(params);
if ( code == 200 ) {
tableData.value = data.data;
Object.assign(pager, { total: data.total, page: data.page, page_size: data.page_size });
} else {
proxy.$notification.error(message);
}
};
// 查询岗位信息
const handleQuery = async () => {
pager.page=1;
const params = {
page: pager.page,
page_size: pager.page_size,
...queryForm,
};
getOrderInfo(params);
};
//获取订单详情
const handleDetail = async (record) => {
modalVisible.value = true;
modalTitle.value = '订单详情';
const { code, data, message } = await getOrderDetail(record.order_inquiry_id);
if (code == 200) {
Object.assign(modalForm, data);
}
};
const formatInquiryStatus=(val)=>{
//问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
let data={1:'待支付', 2:'待分配', 3:'待接诊', 4:'已接诊', 5:'已完成', 6:'已结束', 7:'已取消'}
if(val){
return data[val]
}else{
return ''
}
}
const formatRefundStatus=(val)=>{
//问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常)
let data={0:'无退款', 1:'申请退款', 2:'退款中',3:'退款成功', 4:'拒绝退款', 5:'退款关闭', 6:'退款异常'}
if(val || val==0){
return data[val]
}else{
return ''
}
}
const formatInquiryType=(val)=>{
//订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测)
let data={1:'专家问诊', 2:'快速问诊', 3:'公益问诊', 4:'问诊购药', 5:'糖组检测'}
if(val){
return data[val]
}else{
return ''
}
}
const openDcotor=()=>{
doctor_id.value=modalForm.doctor_id;
doctorVisible.value=true;
}
const openPatient=()=>{
alert('开发中')
}
// 重置搜索
const handleResetQuery = () => {
proxy.$refs.queryFormRef.resetFields();
getOrderInfo(queryForm);
}
onMounted(() => {
getOrderInfo(pager);
});
</script>
<style lang="scss">
.action {
margin-bottom: 12px;
}
.doctorInfo{
display: flex;
align-items: center;
}
.row{
line-height:32px;
display: flex;
}
.row .nameDesc{
text-align: right;
width:120px;
color:#000;
}
.row .desc{
color:#666;
}
.infobox{
display: flex;
flex-direction: column;
justify-content: space-between;
}
.headImg {
margin-right: 20px;
border-radius: 50%;
width: 80px;
height: 80px;
}
</style>