Files
gzh/src/views/Guke.vue
2026-01-06 15:03:14 +08:00

448 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="home">
<nav-bar />
<div class="bj"></div>
<ul class="timeSlelct">
<li v-for="(item, index) in same_week" :class="{ active: same_day == item.date }" @click="timeSlelct(item)"
:key="index">
<div>{{ item.week }}</div>
<div>{{ item.name }}</div>
<span></span>
</li>
</ul>
<div class="list" v-if="list.length > 0">
<ul>
<li v-for="(item, index) in list" :key="index" @click="handleDetail(item)">
<a>
<h2> <img :src="item.img || require('../assets/member_tx.png')" /></h2>
<!-- <h2><img :src="item.img" /></h2> -->
<!-- :class="{'on':item.APPOINT_COUNT=='0'}" -->
<h3>
{{ item.DOCTORNAME }}
<span>{{ item.DOCTORTITLE }}</span>
<!-- <em>{{ item.APPOINT_COUNT.__text || '1000' }}</em> -->
<p>{{ displayLabel(item) }}</p>
<p class="expertise" v-if="item.ysjj">
<span class="label">擅长</span>
<span class="content-wrapper">
<span class="content">{{ item.ysjj }}</span>
</span>
</p>
</h3>
<!-- <h3 class="on" v-else-if="item.on == 0">
{{ item.name }}<span>{{ item.grade }}</span
><em>{{ item.ticket }}</em>
<p>{{ item.jianj }}</p>
</h3>-->
</a>
</li>
</ul>
</div>
<van-empty description="暂无数据" v-else style="padding-top: 90px" />
<van-overlay :show="overshow" z-index="999" />
</div>
</template>
<script>
// @ is an alias to /src
import {
apiGetPbList,
apiGetAppointSchedulesMark,
apiGetRegistSchedulesMark,
apiGetAppointHidsMark,
getinfoByName
} from "@/request/api.js";
import Vue from "vue";
import { Toast, Popup, overlay } from "vant";
export default {
data() {
return {
active: 0,
title: "",
flag: false,
checked: false,
time: "",
list: [],
istoday: false,
yuyue: {},
today: "",
week: [],
same_week: [], //保存当前最新的时间
same_day: "", //当天的时间
overshow: false,
};
},
computed: {
displayLabel() {
return (item) => {
return item.CLINICLABEL === '内科便民' ? item.CLINICLABEL + ' : 只开药,不看诊。' : item.DEPTNAME;
}
}
},
created() {
//console.log(this.$route.meta.title);
this.title = this.$route.meta.title;
this.list = [];
this.yuyue = JSON.parse(sessionStorage.getItem("yuyue"));
this.title = this.yuyue.DeptName;
console.log(this.yuyue);
this.getWeek();
},
methods: {
timeSlelct(item) {
this.same_day = item.date;
this.yuyue.t = item.date2;
if (item.date == this.today) {
this.yuyue.z = 1;
} else {
this.yuyue.z = 2;
}
// console.log(this.yuyue);
this.getList();
// console.log(item);
// console.log(this.same_day.replace(new RegExp('/','g'),'-'))
},
getWeek() {
// 默认显示当天前一周的数据
let data = [];
this.start = this.getDay(+7);
this.end = this.getDay();
for (let i = 13; i >= 0; i--) {
data.push(this.getDay(+i));
}
var date = data.reverse(); //得出一周的日期进行排序
this.week = date;
var date = this.week;
var pkc = []; /* 用于存储展示的日期数据 */
var weekday = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
date.forEach((item, index) => {
//循坏日期
var f = new Date(item);
var week = f.getDay(); //计算出星期几
var str1 = item.split("/");
var strs =
(str1[1] >= 10 ? str1[1] : "0" + str1[1]) +
"." +
(str1[2] >= 10 ? str1[2] : "0" + str1[2]);
var yyyyddmmdate =
str1[0] +
"-" +
(str1[1] >= 10 ? str1[1] : "0" + str1[1]) +
"-" +
(str1[2] >= 10 ? str1[2] : "0" + str1[2]);
var weeks = weekday[week]; /* 将计算出来的时间带入数字得出中文 */
var time = Math.round(new Date(item) / 1000); //时间戳转换
var s = {}; //用于存储每个日期对象
s.date = item;
s.date2 = yyyyddmmdate;
s.name = strs;
s.week = weeks;
s.times = time;
pkc.push(s);
});
this.same_week = pkc;
// console.log(this.same_week)
//pkc存储着今天的年月日星期几时间戳等
this.same_day = this.today = pkc[0].date; //今天的数据
this.yuyue.t = pkc[0].date2;
console.log(this.yuyue.t);
// console.log(this.same_day)
this.yuyue.z = 1;
this.getList();
// console.log(this.same_day)
},
getDay(day) {
var today = new Date();
var targetday_milliseconds = today.getTime() + 1000 * 60 * 60 * 24 * day;
today.setTime(targetday_milliseconds);
var tYear = today.getFullYear();
var tMonth = today.getMonth();
var tDate = today.getDate();
tMonth = this.doHandleMonth(tMonth + 1);
tDate = this.doHandleMonth(tDate);
return tYear + "/" + tMonth + "/" + tDate;
},
doHandleMonth(month) {
var m = month;
if (month.toString().length == 1) {
m = month;
}
return m;
},
handleDetail(data) {
// 检查医生编码和姓名是否为空
if (!data.DOCTORCODE || !data.DOCTORNAME) {
Toast('当前科室暂无医生排班,不支持挂号,请线下缴费处询问');
return;
}
this.yuyue.DoctorCode = data.DOCTORCODE;
this.yuyue.DoctorName = data.DOCTORNAME;
this.yuyue.DoctorTitle = data.DOCTORTITLE;
this.yuyue.HisCostCode = data.HISCOSTCODE;
this.yuyue.YBCostCode = data.YBCOSTCODE;
this.yuyue.YBDept = data.YBDEPT;
this.yuyue.YBDoc = data.YBDOC;
this.yuyue.h = data.CLINICLABEL;
this.yuyue.DoctorImg = data.img
sessionStorage.setItem("yuyue", JSON.stringify(this.yuyue));
this.$router.push({ path: "/Ysgh" });
},
getList() {
let _this = this;
_this.list = [];
console.log(_this.yuyue.t);//第几天
console.log(_this.yuyue.z);//周几
console.log(_this.yuyue.DeptCode);
_this.overshow = true;
// var pbxx="<response> <returnresult> <returncode>1</returncode> <errormsg>查询成功</errormsg> </returnresult> <data> <data_row> <SubHospitalID>0000</SubHospitalID> <ScheduleId>AAASJ6AAEAACmG5AAn</ScheduleId> <OutpDate>2021/8/27 0:00:00</OutpDate> <TimeInterval>PM</TimeInterval> <DepartCode>10010011</DepartCode> <ParentDepartCode /> <DeptName>心血管内科</DeptName> <Level>1</Level> <Location>测试位置</Location> <SectionType /> <DoctorCode>000179</DoctorCode> <DoctorName>李晓龙</DoctorName> <DoctorTitle>医师</DoctorTitle> <Specialty /> <DoctorDes /> <ClinicTypeName>普通</ClinicTypeName> <ClinicFee>0.01</ClinicFee> <RegistrationFee>0.00</RegistrationFee> <RegistrationLimit>50</RegistrationLimit> <ReserveLimit>20</ReserveLimit> <RegistrationNum>0</RegistrationNum> <ReserveNum /> <ValidFlag>1</ValidFlag> </data_row> <data_row> <SubHospitalID>0000</SubHospitalID> <ScheduleId>AAASJ6AAEAACmG5AAm</ScheduleId> <OutpDate>2021/8/27 0:00:00</OutpDate> <TimeInterval>AM</TimeInterval> <DepartCode>10010011</DepartCode> <ParentDepartCode /> <DeptName>心血管内科</DeptName> <Level>1</Level> <Location>测试位置</Location> <SectionType /> <DoctorCode>000179</DoctorCode> <DoctorName>李晓龙</DoctorName> <DoctorTitle>医师</DoctorTitle> <Specialty /> <DoctorDes /> <ClinicTypeName>普通</ClinicTypeName> <ClinicFee>0.01</ClinicFee> <RegistrationFee>0.00</RegistrationFee> <RegistrationLimit>20</RegistrationLimit> <ReserveLimit>0</ReserveLimit> <RegistrationNum>0</RegistrationNum> <ReserveNum /> <ValidFlag>1</ValidFlag> </data_row> </data> </response></string>";
// let jsonObj2 = this.$x2js.xml2js(pbxx);
// this.list =jsonObj2.response.data.data_row;
// _this.overshow=false;
let chargeType = JSON.parse(sessionStorage.getItem("card")).chargetype
console.log(chargeType)
apiGetAppointHidsMark({
StartTime: _this.yuyue.t + " 00:00:00",
EndTime: _this.yuyue.t + " 23:59:59",
DepartCode: _this.yuyue.DeptCode,
chargeType: chargeType,
DoctorCode: "",
})
.then(async (res) => {
_this.overshow = false;
console.log(res.data);
let jsonObj = this.$x2js.xml2js(res.data);
console.log(jsonObj);
let jsonObj2 = this.$x2js.xml2js(
jsonObj.Envelope.Body.MOP_OutpScheduleQueryResponse
.MOP_OutpScheduleQueryResult
);
console.log(jsonObj2);
let arr = jsonObj2.response.data.data_row;
console.log("arr是",arr);
//过滤出 OFFLINE_FLAG 为 '0' 的数据
if (arr && Array.isArray(arr)) {
// 过滤出 OFFLINE_FLAG 为 '0' 的数据
arr = arr.filter(item => item.OFFLINE_FLAG === '0');
} else if (arr && arr.OFFLINE_FLAG === '0') {
// 如果只有一个对象且符合条件,则放入数组中
arr = [arr];
} else {
// 如果没有符合条件的对象,则设为空数组
arr = [];
}
// 使用 async/await 处理图片获取
if (arr.length >= 1) {
for (let i = 0; i < arr.length; i++) {
const ysinfo = await this.getDocImg(arr[i].DOCTORNAME, arr[i].DOCTORCODE);
arr[i].img = ysinfo.img;
arr[i].ysjj = ysinfo.ysjj;
}
_this.list = arr;
}
_this.overshow = false;
console.log(_this.list);
})
.catch(() => {
// 添加"稍后再试"提示
// Toast("网络异常,请稍后再试");
_this.overshow = false;
});
},
typeFilter(data) {
return data.filter((item) => {
return typeof item.DoctorName == "string";
});
},
// dataFilter(arr) {
// const res = new Map();
// return arr.filter(
// (arr) => !res.has(arr.DoctorName) && res.set(arr.DoctorName, 1)
// );
// },
getDocImg(docName, docCode) {
let param = {
name: docName,
doct_code: docCode // 传递医生编码以唯一标识医生
}
return getinfoByName(param).then(res => {
console.log('医生信息:', res);
// 提取 <p> 标签中的内容
let ysjj = res.data.grsc;
if (ysjj) {
// 移除所有 HTML 标签,只保留文本内容
ysjj = ysjj.replace(/<[^>]+>/g, '');
}
let params = {
img: res.data.img,
ysjj: ysjj
}
return params;
})
},
showPopup() {
this.show = true;
},
showMode() {
this.showe = true;
},
},
};
</script>
<style scoped lang="scss">
::-webkit-scrollbar {
width: 0 !important;
}
ul.timeSlelct {
display: flex;
justify-content: space-between;
position: fixed;
z-index: 10;
width: 100%;
height: 1.8rem;
overflow-x: auto;
li {
padding: 0.25rem;
display: flex;
flex-wrap: wrap;
align-items: center;
justify-content: center;
background-color: rgba(22, 104, 204, 0.2);
position: relative;
border-left: 1px solid #f5f5f5;
border-radius: 0.25rem;
margin: 0.05rem;
}
li:nth-child(1) {
border-left: 0;
}
.active {
background-color: #166bcc;
color: #fff;
}
}
.bj {
background: #f5f5f5;
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
z-index: -1;
}
.list {
margin-top: 1.75rem;
position: relative;
z-index: 1;
}
.list ul li {
background: #fff;
margin-bottom: 0.25rem;
a {
display: flex;
box-sizing: border-box;
padding: 0.375rem;
h2 img {
width: 1.5rem;
height: 1.5rem;
border-radius: 50%;
margin-right: 0.25rem;
}
h3 {
color: #333;
font-size: 30px;
position: relative;
// width: calc(100% - 118px);
width: 100%;
span {
font-size: 0.28rem;
color: #666;
// padding-left: 0.125rem;
}
p {
font-size: 0.375rem;
color: #999;
display: block;
padding-top: 0.25rem;
}
em {
width: 1rem;
height: 0.375rem;
line-height: 0.375rem;
background: linear-gradient(-90deg, #ff464f, #ff6e77);
border-radius: 0.125rem;
position: absolute;
right: 0;
top: 0;
font-size: 0.25rem;
text-align: center;
color: #fff;
}
p.expertise {
font-size: 0.375rem;
color: #666;
display: flex;
align-items: center;
padding-top: 0.15rem;
line-height: 1.4;
white-space: nowrap;
overflow: hidden;
.label {
font-weight: bold;
color: #333;
flex-shrink: 0;
margin-right: 0.1rem;
}
.content-wrapper {
overflow: hidden;
position: relative;
flex: 1;
}
.content {
display: inline-block;
animation: scroll-left 15s linear infinite;
margin-left: 170px;
}
@keyframes scroll-left {
0% {
transform: translateX(0);
}
100% {
transform: translateX(-100%);
}
}
}
}
h3.on em {
background: #999999;
}
}
}
</style>