Browse Source

组织架构跳转

main
kola-web 3 months ago
parent
commit
1fc3ea8335
  1. 7
      project.private.config.json
  2. 3
      src/app.json
  3. 2
      src/components/customAudioBar/index.wxml
  4. 25
      src/components/customRecord/index.ts
  5. 4
      src/components/customRecord/index.wxml
  6. 4
      src/components/popupDoctorDetail/index.wxml
  7. 7
      src/echart/components/doctorLevel1/index.json
  8. 364
      src/echart/components/doctorLevel1/index.scss
  9. 73
      src/echart/components/doctorLevel1/index.ts
  10. 93
      src/echart/components/doctorLevel1/index.wxml
  11. 7
      src/echart/components/doctorLevel2/index.json
  12. 482
      src/echart/components/doctorLevel2/index.scss
  13. 81
      src/echart/components/doctorLevel2/index.ts
  14. 124
      src/echart/components/doctorLevel2/index.wxml
  15. 7
      src/echart/components/doctorLevel3/index.json
  16. 250
      src/echart/components/doctorLevel3/index.scss
  17. 82
      src/echart/components/doctorLevel3/index.ts
  18. 142
      src/echart/components/doctorLevel3/index.wxml
  19. 8
      src/echart/components/doctorLevel4/index.json
  20. 489
      src/echart/components/doctorLevel4/index.scss
  21. 115
      src/echart/components/doctorLevel4/index.ts
  22. 140
      src/echart/components/doctorLevel4/index.wxml
  23. BIN
      src/images/icon-clsoe-green.png
  24. BIN
      src/images/invite-title.png
  25. 16
      src/module1/pages/casesFeedback/index.scss
  26. 12
      src/module1/pages/casesFeedback/index.wxml
  27. 6
      src/module1/pages/chatRoom/index.wxml
  28. 17
      src/module1/pages/doctorHome/index.json
  29. 47
      src/module1/pages/doctorHome/index.scss
  30. 96
      src/module1/pages/doctorHome/index.ts
  31. 38
      src/module1/pages/doctorHome/index.wxml
  32. 16
      src/module1/pages/entryCases/index.scss
  33. 12
      src/module1/pages/entryCases/index.wxml
  34. 2
      src/module1/pages/login/index.scss
  35. 6
      src/module1/pages/org3/index.ts
  36. 26
      src/module1/pages/org3/index.wxml
  37. 8
      src/module1/pages/org4/index.ts
  38. 24
      src/module1/pages/org4/index.wxml
  39. 10
      src/pages/home/index.ts

7
project.private.config.json

@ -9,6 +9,13 @@ @@ -9,6 +9,13 @@
"miniprogram": {
"list": [
{
"name": "module1/pages/doctorHome/index",
"pathName": "module1/pages/doctorHome/index",
"query": "id=100",
"launchMode": "default",
"scene": null
},
{
"name": "医生认证-选择医生",
"pathName": "module1/pages/setInfoDoctor/index",
"query": "",

3
src/app.json

@ -33,7 +33,8 @@ @@ -33,7 +33,8 @@
"pages/casesFeedback/index",
"pages/chatRoom/index",
"pages/chatRoomInfo/index",
"pages/setChatDoctor/index"
"pages/setChatDoctor/index",
"pages/doctorHome/index"
]
}
],

2
src/components/customAudioBar/index.wxml

@ -9,5 +9,5 @@ @@ -9,5 +9,5 @@
<image wx:else class="wave" src="{{imageUrl}}wave.png?t={{Timestamp}}"></image>
</view>
</view>
<view class="time">{{time}}</view>
<view class="time">{{time}}</view>
</view>

25
src/components/customRecord/index.ts

@ -10,6 +10,10 @@ Component({ @@ -10,6 +10,10 @@ Component({
type: Boolean,
value: false,
},
doubleConform: {
type: Boolean,
value: false,
},
},
externalClasses: ["custom-record"],
@ -60,16 +64,19 @@ Component({ @@ -60,16 +64,19 @@ Component({
}
},
handleHide() {
const { recorderManager, startShow } = this.data;
const { recorderManager, startShow, doubleConform } = this.data;
if (startShow) {
recorderManager?.stop();
}
this.setData({
// startShow: false,
// show: false,
});
if (!doubleConform) {
this.setData({
startShow: false,
show: false,
});
}
},
recorderManagerListen(recorderManager: WechatMiniprogram.RecorderManager) {
const { doubleConform } = this.data;
recorderManager.onStart(() => {
this.setData({
time: 0,
@ -90,12 +97,18 @@ Component({ @@ -90,12 +97,18 @@ Component({
return;
}
this.setData({
record: false,
audioObj: {
...res,
duration: Number.parseInt(String(res.duration / 1000)),
},
});
if (doubleConform) {
this.setData({
record: false,
});
} else {
this.handleConform();
}
});
},
handleCancel() {

4
src/components/customRecord/index.wxml

@ -4,8 +4,8 @@ @@ -4,8 +4,8 @@
bind:longtap="handleShow"
bind:touchend="handleHide"
bind:touchcancel="handleHide"
catchtouchmove="noneEnoughPeople"
>
<!-- catchtouchmove="noneEnoughPeople" -->
<slot wx:if="{{slotIcon}}"></slot>
<image wx:else class="icon" src="{{imageUrl}}record.png?t={{Timestamp}}"></image>
<view
@ -15,7 +15,7 @@ @@ -15,7 +15,7 @@
<block wx:if="{{record}}">
<view class="record-line">
<image class="wave" src="{{imageUrl}}wave-white.gif?t={{Timestamp}}"></image>
<view class="time">{{time}}</view>
<view class="time">{{time}}</view>
</view>
<view class="record-page-icon-wrap">
<image class="record-page-icon" src="{{imageUrl}}record.png?t={{Timestamp}}" mode="scaleToFill"></image>

4
src/components/popupDoctorDetail/index.wxml

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
<van-popup show="{{ show }}" bind:close="onClose" custom-style="background:transparent">
<van-popup show="{{ show }}" catch:close="onClose" custom-style="background:transparent">
<view class="doctor-detail">
<van-icon class="close" name="cross" bind:tap="onClose" />
<van-icon class="close" name="cross" catch:tap="onClose" />
<view class="title">医生详情</view>
<view class="user">
<view class="avatar">

7
src/echart/components/doctorLevel1/index.json

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
{
"component": true,
"usingComponents": {
"doctorAvatar": "/components/doctorAvatar/index",
"van-icon": "@vant/weapp/icon/index"
}
}

364
src/echart/components/doctorLevel1/index.scss

@ -0,0 +1,364 @@ @@ -0,0 +1,364 @@
.page {
padding: 36rpx 32rpx 200rpx;
.user {
display: flex;
gap: 24rpx;
align-items: center;
.avatar {
flex-shrink: 0;
width: 112rpx;
height: 112rpx;
}
.wrap {
.w-header {
display: flex;
flex-wrap: wrap;
align-items: baseline;
gap: 16rpx;
.name {
font-size: 36rpx;
color: rgba(0, 180, 197, 1);
font-weight: bold;
}
.desc {
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
}
.w-footer {
margin-top: 24rpx;
.hostipal {
margin-right: 12rpx;
display: inline;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.tag {
margin-right: 12rpx;
display: inline-block;
padding: 0 8rpx;
border-radius: 4rpx;
background-color: rgba(0, 180, 197, 1);
font-size: 24rpx;
color: #fff;
}
.site {
display: inline-block;
padding: 0 8rpx;
font-size: 24rpx;
line-height: 32rpx;
color: rgba(148, 87, 30, 1);
border-radius: 4rpx;
background-color: rgba(250, 229, 206, 1);
}
}
}
}
.banner {
margin-top: 32rpx;
.title {
position: relative;
z-index: 1;
padding: 22rpx 30rpx 18rpx;
width: 262rpx;
height: 116rpx;
font-size: 28rpx;
font-weight: bold;
color: rgba(0, 180, 197, 1);
line-height: 1;
box-sizing: border-box;
}
.bg {
padding-top: 40rpx;
border-radius: 24rpx;
background-color: rgba(250, 229, 206, 1);
margin-top: -95rpx;
.b-container {
position: relative;
z-index: 2;
border: 1px solid #ffffff;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
display: flex;
align-items: center;
.item {
padding: 32rpx 0;
flex: 1;
text-align: center;
.name {
font-size: 28rpx;
color: #fff;
line-height: 1;
}
.num {
margin-top: 24rpx;
font-size: 56rpx;
color: #fff;
line-height: 56rpx;
}
}
.line {
flex-shrink: 0;
height: 108rpx;
border-right: 1rpx dashed #ffffff;
opacity: 0.5;
}
}
.b-container-none {
position: relative;
z-index: 1;
width: 686rpx;
height: 172rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx;
color: #fff;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 1px solid #ffffff;
}
}
}
.stat {
position: relative;
margin-top: 24rpx;
padding: 96rpx 0 32rpx;
border-radius: 16rpx;
.title {
position: absolute;
top: 0;
left: 0;
padding: 16rpx 30rpx;
font-size: 28rpx;
color: #fff;
font-weight: bold;
}
.s-container {
display: flex;
.item {
flex: 1;
text-align: center;
.name {
font-size: 28rpx;
color: rgba(128, 128, 128, 1);
line-height: 1;
}
.num {
margin-top: 24rpx;
font-size: 48rpx;
color: rgba(20, 21, 21, 1);
line-height: 56rpx;
}
}
.line {
flex-shrink: 0;
height: 108rpx;
border-right: 1rpx dashed rgba(224, 224, 224, 0.5);
}
}
}
.stat-none {
position: relative;
margin-top: 24rpx;
padding: 96rpx 0 32rpx;
border-radius: 16rpx;
.title {
position: absolute;
top: 0;
left: 0;
padding: 16rpx 30rpx;
font-size: 28rpx;
color: #fff;
font-weight: bold;
}
.s-container {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 38rpx 0;
.none {
width: 102rpx;
height: 102rpx;
}
.tip {
padding: 0 26rpx;
flex: 1;
font-size: 28rpx;
color: rgba(128, 128, 128, 1);
}
.btn {
width: 184rpx;
height: 72rpx;
text-align: center;
line-height: 72rpx;
font-size: 30rpx;
color: rgba(255, 255, 255, 1);
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 44rpx 44rpx 44rpx 44rpx;
}
}
}
.cooperate {
margin-top: 24rpx;
background: linear-gradient(180deg, #f1feff 0%, #ffffff 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
&-header {
padding: 32rpx 20rpx;
display: flex;
align-items: center;
justify-content: space-between;
.name {
font-size: 32rpx;
color: rgba(20, 21, 21, 1);
font-weight: bold;
}
.fold {
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
display: flex;
align-items: center;
gap: 12rpx;
.icon {
width: 28rpx;
height: 28rpx;
}
}
}
.doctor-list {
padding: 0 20rpx 32rpx;
transition: 0.3s max-height;
max-height: var(--fold-height);
&-fold {
padding: 0;
max-height: 0;
overflow: hidden;
}
.doctor {
margin-bottom: 20rpx;
padding: 32rpx;
display: flex;
gap: 24rpx;
background: linear-gradient(180deg, #e5f5f7 0%, #ffffff 50%);
box-shadow: 0rpx 4rpx 20rpx 0rpx rgba(0, 0, 0, 0.1);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
&:last-of-type {
margin-bottom: 0;
}
.avatar {
flex-shrink: 0;
position: relative;
width: 112rpx;
height: 112rpx;
}
.wrap {
padding-top: 8rpx;
.w-header {
display: flex;
flex-wrap: wrap;
align-items: baseline;
gap: 16rpx;
line-height: 1;
.name {
font-size: 36rpx;
color: rgba(20, 21, 21, 1);
font-weight: bold;
}
.label {
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.line {
width: 1px;
height: 24rpx;
background-color: rgba(205, 205, 205, 1);
}
}
.w-container {
margin-top: 24rpx;
.hostipal {
margin-right: 12rpx;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.tag {
margin-right: 12rpx;
display: inline-block;
padding: 0 8rpx;
border-radius: 4rpx;
font-size: 24rpx;
color: rgba(255, 255, 255, 1);
line-height: 32rpx;
background-color: rgba(0, 180, 197, 1);
}
.site {
display: inline-block;
padding: 0 8rpx;
font-size: 24rpx;
color: rgba(148, 87, 30, 1);
line-height: 32rpx;
border-radius: 4rpx;
background-color: rgba(250, 229, 206, 1);
}
}
.w-footer {
margin-top: 16rpx;
display: flex;
gap: 12rpx;
flex-wrap: wrap;
.wf-label {
flex-shrink: 0;
width: 48rpx;
height: 32rpx;
}
.wf-tag {
flex-shrink: 0;
padding: 0 8rpx;
font-size: 22rpx;
color: rgba(0, 180, 197, 1);
line-height: 32rpx;
border: 1px solid rgba(191, 239, 244, 1);
}
}
}
}
}
}
.cooperate-none {
margin-top: 24rpx;
background: linear-gradient(180deg, #f1feff 0%, #ffffff 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
&-header {
padding: 32rpx 20rpx;
display: flex;
align-items: center;
justify-content: space-between;
.name {
font-size: 32rpx;
color: rgba(20, 21, 21, 1);
}
}
.none {
padding-bottom: 54rpx;
text-align: center;
.none-img {
width: 240rpx;
height: 200rpx;
}
.content {
margin-top: -70rpx;
text-align: center;
font-size: 32rpx;
color: rgba(153, 153, 153, 1);
line-height: 44rpx;
.sub-content {
font-size: 28rpx;
}
}
}
}
}

73
src/echart/components/doctorLevel1/index.ts

@ -0,0 +1,73 @@ @@ -0,0 +1,73 @@
const _app = getApp<IAppOption>();
// pages/story/a.ts
Component({
/**
*
*/
properties: {
userInfo: Object,
DoctorTitleType: Object,
hospitalClassification: Object,
hospitalLevel: Object,
did: String,
},
/**
*
*/
data: {
take: {},
case: {},
cooperateList: [],
},
lifetimes: {
attached() {
this.getTake();
this.getCase();
},
},
/**
*
*/
methods: {
handleEntryCase() {
wx.navigateTo({
url: "/module1/pages/entryCases/index",
});
},
getTake() {
wx.ajax({
method: "GET",
url: "?r=takeda/doctor/todo",
data: {
DoctorId: this.data.did,
},
}).then((res) => {
this.setData({
take: res,
});
});
},
getCase() {
wx.ajax({
method: "GET",
url: "?r=takeda/doctor/case",
data: {
DoctorId: this.data.did,
},
}).then((res) => {
this.setData({
case: res,
});
});
},
handleQuestion(e) {
const { index } = e.currentTarget.dataset;
this.triggerEvent("question", index);
},
},
});
export {};

93
src/echart/components/doctorLevel1/index.wxml

@ -0,0 +1,93 @@ @@ -0,0 +1,93 @@
<view class="page">
<view class="user">
<doctorAvatar
did="{{userInfo.DoctorId}}"
class="avatar"
src="{{userInfo.Img}}"
level="{{userInfo.DoctorLevel}}"
></doctorAvatar>
<view class="wrap">
<view class="w-header">
<view class="name">{{userInfo.Name}}</view>
<view class="desc" wx:if="{{userInfo.TitleType === 99}}">{{userInfo.OtherTitle}}</view>
<view class="desc" wx:else>{{DoctorTitleType[userInfo.TitleType]}}</view>
</view>
<view class="w-footer">
<view class="hostipal">{{userInfo.HospitalName}}</view>
<view class="tag">{{userInfo.HospitalClassificationName}}{{userInfo.HospitalLevelName}}</view>
<view class="site" wx:if="{{userInfo.CityName}}">
{{userInfo.CityName}}{{userInfo.CountyName?'/':''}}{{userInfo.CountyName}}
</view>
</view>
</view>
</view>
<view class="banner">
<view
class="title"
style="background: url({{imageUrl}}home-banner-title-bg.png?r={{Timestamp}}) no-repeat top center/262rpx 116rpx;"
>
待处理事项
</view>
<view class="bg">
<view class="b-container">
<view class="item">
<view class="name">病历更新</view>
<view class="num">{{take.notReadFeedBackCount*1 || '--'}}</view>
</view>
<view class="line"></view>
<view class="item">
<view class="name">学习窗消息</view>
<view class="num">{{take.notReadChatRoomCount*1 || '--'}}</view>
</view>
</view>
</view>
</view>
<view
class="stat"
style="background: url({{imageUrl}}home-stat-bg.png?r={{Timestamp}}) no-repeat top center/100% 100%;"
wx:if="{{case.totalCaseCount>0}}"
>
<view class="title">我提交的病历</view>
<view class="s-container">
<view class="item">
<view class="name">总数</view>
<view class="num">{{case.totalCaseCount}}</view>
</view>
<view class="line"></view>
<view class="item">
<view class="name">
新病历
<van-icon bind:tap="handleQuestion" data-index="1" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.newCaseCount}}</view>
</view>
<view class="line"></view>
<view class="item">
<view class="name">
讨论中
<van-icon bind:tap="handleQuestion" data-index="2" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.feedbackCaseCount}}</view>
</view>
<view class="line"></view>
<view class="item">
<view class="name">
已归档
<van-icon bind:tap="handleQuestion" data-index="3" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.archiveCaseCount}}</view>
</view>
</view>
</view>
<view
class="stat-none"
style="background: url({{imageUrl}}home-stat-bg.png?r={{Timestamp}}) no-repeat top center/100% 100%;"
wx:else
>
<view class="title">我提交的病历</view>
<view class="s-container">
<image class="none" src="{{imageUrl}}empty-3.png?t={{Timestamp}}"></image>
<view class="tip">还没有提交病历</view>
</view>
</view>
</view>

7
src/echart/components/doctorLevel2/index.json

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
{
"component": true,
"usingComponents": {
"doctorAvatar": "/components/doctorAvatar/index",
"van-icon": "@vant/weapp/icon/index"
}
}

482
src/echart/components/doctorLevel2/index.scss

@ -0,0 +1,482 @@ @@ -0,0 +1,482 @@
.page {
padding: 36rpx 32rpx 200rpx;
.user {
margin-top: 40rpx;
position: relative;
padding: 94rpx 32rpx 32rpx;
background: linear-gradient(180deg, #f1feff 0%, #ffffff 35%, #ffffff 100%);
box-shadow: 0rpx 8rpx 24rpx 0rpx rgba(0, 66, 73, 0.09);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
.avatar {
position: absolute;
top: -38rpx;
left: 32rpx;
width: 112rpx;
height: 112rpx;
}
.code {
position: absolute;
top: 38rpx;
right: 34rpx;
width: 60rpx;
height: 60rpx;
}
.wrap {
.w-header {
display: flex;
align-items: baseline;
flex-wrap: wrap;
gap: 16rpx;
.name {
font-size: 36rpx;
color: rgba(20, 21, 21, 1);
font-weight: bold;
}
.desc {
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
.line {
margin: 0 12rpx;
display: inline-block;
height: 24rpx;
width: 1rpx;
background-color: rgba(205, 205, 205, 1);
}
}
}
.w-container {
margin-top: 24rpx;
.hostipal {
margin-right: 12rpx;
display: inline;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.tag {
margin-right: 12rpx;
display: inline-block;
padding: 0 8rpx;
border-radius: 4rpx;
background-color: rgba(0, 180, 197, 1);
font-size: 24rpx;
color: #fff;
}
.site {
display: inline-block;
padding: 0 8rpx;
font-size: 24rpx;
line-height: 32rpx;
color: rgba(148, 87, 30, 1);
border-radius: 4rpx;
background-color: rgba(250, 229, 206, 1);
}
}
.w-footer {
margin-top: 16rpx;
display: flex;
gap: 12rpx;
flex-wrap: wrap;
.wf-label {
flex-shrink: 0;
width: 48rpx;
height: 32rpx;
}
.wf-tag {
flex-shrink: 0;
padding: 0 8rpx;
font-size: 22rpx;
color: rgba(0, 180, 197, 1);
line-height: 32rpx;
border: 1px solid rgba(191, 239, 244, 1);
border-radius: 4rpx;
}
}
}
}
.banner {
margin-top: 32rpx;
.title {
position: relative;
z-index: 1;
padding: 22rpx 30rpx 18rpx;
width: 262rpx;
height: 116rpx;
font-size: 28rpx;
font-weight: bold;
color: rgba(0, 180, 197, 1);
line-height: 1;
box-sizing: border-box;
}
.bg {
padding-top: 40rpx;
border-radius: 24rpx;
background-color: rgba(250, 229, 206, 1);
margin-top: -95rpx;
.b-container {
position: relative;
z-index: 2;
border: 1px solid #ffffff;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
display: flex;
align-items: center;
.item {
padding: 32rpx 0;
flex: 1;
text-align: center;
.name {
font-size: 26rpx;
color: #fff;
line-height: 1;
}
.num {
margin-top: 24rpx;
font-size: 56rpx;
color: #fff;
line-height: 56rpx;
}
}
.line {
flex-shrink: 0;
height: 108rpx;
border-right: 1rpx dashed #ffffff;
opacity: 0.5;
}
}
.b-container-none {
position: relative;
z-index: 1;
width: 686rpx;
height: 172rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx;
color: #fff;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 1px solid #ffffff;
}
}
}
.stat {
position: relative;
margin-top: 24rpx;
padding: 96rpx 0 32rpx;
border-radius: 16rpx;
.title {
position: absolute;
top: 0;
left: 0;
padding: 16rpx 30rpx;
font-size: 28rpx;
color: #fff;
font-weight: bold;
}
.more {
position: absolute;
top: 0;
right: 0;
padding: 14rpx 20rpx;
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
}
.s-container {
display: flex;
.item {
position: relative;
flex: 1;
text-align: center;
.name {
font-size: 28rpx;
color: rgba(128, 128, 128, 1);
line-height: 1;
}
.num {
margin-top: 24rpx;
font-size: 48rpx;
color: rgba(20, 21, 21, 1);
line-height: 56rpx;
}
.item-toast {
position: absolute;
left: -80rpx;
top: -20rpx;
transform: translate(0, -100%);
padding: 28rpx 0;
border-radius: 16rpx;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
display: flex;
align-items: center;
white-space: nowrap;
font-size: 28rpx;
color: #fff;
.i-row {
padding: 0 56rpx;
}
.i-line {
width: 2rpx;
height: 32rpx;
background-color: rgba(255, 255, 255, 0.29);
}
.i-clsoe {
position: absolute;
top: -10rpx;
right: -10rpx;
width: 32rpx;
height: 32rpx;
}
&::after {
position: absolute;
left: 134rpx;
bottom: -10rpx;
content: "";
width: 0;
height: 0;
border-style: solid;
border-width: 18rpx 18rpx 0 18rpx;
border-color: #4abfc0 transparent transparent transparent;
}
}
}
.line {
flex-shrink: 0;
height: 108rpx;
border-right: 1rpx dashed rgba(224, 224, 224, 0.5);
}
}
}
.stat-none {
position: relative;
margin-top: 24rpx;
padding: 96rpx 0 32rpx;
border-radius: 16rpx;
.title {
position: absolute;
top: 0;
left: 0;
padding: 16rpx 30rpx;
font-size: 28rpx;
color: #fff;
font-weight: bold;
}
.s-container {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 38rpx 0;
.none {
width: 102rpx;
height: 102rpx;
}
.tip {
padding: 0 26rpx;
flex: 1;
font-size: 28rpx;
color: rgba(128, 128, 128, 1);
}
.btn {
width: 184rpx;
height: 72rpx;
text-align: center;
line-height: 72rpx;
font-size: 30rpx;
color: rgba(255, 255, 255, 1);
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 44rpx 44rpx 44rpx 44rpx;
}
}
}
.cooperate,
.invite {
margin-top: 24rpx;
background: linear-gradient(180deg, #f1feff 0%, #ffffff 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
&-header {
padding: 32rpx 20rpx;
display: flex;
align-items: center;
justify-content: space-between;
.name {
font-size: 32rpx;
color: rgba(20, 21, 21, 1);
font-weight: bold;
}
.fold {
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
display: flex;
align-items: center;
gap: 12rpx;
.icon {
width: 28rpx;
height: 28rpx;
}
}
}
.doctor-list {
padding: 0 20rpx 32rpx;
transition: 0.3s max-height;
max-height: var(--fold-height);
&-fold {
padding: 0;
max-height: 0;
overflow: hidden;
}
.doctor {
position: relative;
margin-bottom: 20rpx;
padding: 32rpx;
display: flex;
gap: 24rpx;
background: linear-gradient(180deg, #e5f5f7 0%, #ffffff 50%);
box-shadow: 0rpx 4rpx 20rpx 0rpx rgba(0, 0, 0, 0.1);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
&:last-of-type {
margin-bottom: 0;
}
.invite-doctor {
position: absolute;
top: 0;
right: 0;
padding: 2rpx 16rpx;
font-size: 22rpx;
color: #00b4c5;
line-height: 28rpx;
border-radius: 0 16rpx 0 16rpx;
background-color: #d7edee;
}
.avatar {
flex-shrink: 0;
position: relative;
width: 112rpx;
height: 112rpx;
}
.assign {
position: absolute;
top: 0;
right: 0;
padding: 2rpx 16rpx;
line-height: 28rpx;
font-size: 22rpx;
color: rgba(0, 180, 197, 1);
background-color: rgba(215, 237, 238, 1);
border-radius: 0 16rpx 0 16rpx;
}
.wrap {
padding-top: 8rpx;
.w-header {
display: flex;
align-items: baseline;
flex-wrap: wrap;
gap: 16rpx;
line-height: 1;
.name {
font-size: 36rpx;
color: rgba(20, 21, 21, 1);
font-weight: bold;
}
.label {
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.line {
width: 1px;
height: 24rpx;
background-color: rgba(205, 205, 205, 1);
}
}
.w-container {
margin-top: 24rpx;
.hostipal {
margin-right: 12rpx;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.tag {
margin-right: 12rpx;
display: inline-block;
padding: 0 8rpx;
border-radius: 4rpx;
font-size: 24rpx;
color: rgba(255, 255, 255, 1);
line-height: 32rpx;
background-color: rgba(0, 180, 197, 1);
}
.site {
display: inline-block;
padding: 0 8rpx;
font-size: 24rpx;
color: rgba(148, 87, 30, 1);
line-height: 32rpx;
border-radius: 4rpx;
background-color: rgba(250, 229, 206, 1);
}
}
.w-footer {
margin-top: 16rpx;
display: flex;
gap: 12rpx;
flex-wrap: wrap;
.wf-label {
flex-shrink: 0;
width: 48rpx;
height: 32rpx;
}
.wf-tag {
flex-shrink: 0;
padding: 0 8rpx;
font-size: 22rpx;
color: rgba(0, 180, 197, 1);
line-height: 32rpx;
border: 1px solid rgba(191, 239, 244, 1);
border-radius: 4rpx;
}
}
}
}
}
}
.cooperate-none,
.invite-none {
margin-top: 24rpx;
background: linear-gradient(180deg, #f1feff 0%, #ffffff 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
&-header {
padding: 32rpx 20rpx;
display: flex;
align-items: center;
justify-content: space-between;
.name {
font-size: 32rpx;
color: rgba(20, 21, 21, 1);
}
}
.none {
padding-bottom: 54rpx;
text-align: center;
.none-img {
width: 240rpx;
height: 200rpx;
}
.none-img1 {
width: 230rpx;
height: 184rpx;
}
.content {
margin-top: -70rpx;
text-align: center;
font-size: 32rpx;
color: rgba(153, 153, 153, 1);
line-height: 44rpx;
.sub-content {
font-size: 28rpx;
}
}
}
}
}

81
src/echart/components/doctorLevel2/index.ts

@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
const app = getApp<IAppOption>();
// pages/story/a.ts
Component({
/**
*
*/
properties: {
userInfo: Object,
DoctorTitleType: Object,
hospitalClassification: Object,
hospitalLevel: Object,
did: String,
},
/**
*
*/
data: {
take: {},
case: {} as any,
cooperateList: [],
inviteList: [],
newCaseShow: false,
},
lifetimes: {
attached() {
this.getTake();
this.getCase();
},
},
/**
*
*/
methods: {
getTake() {
wx.ajax({
method: "GET",
url: "?r=takeda/doctor/todo",
data: {
DoctorId: this.data.did,
},
}).then((res) => {
this.setData({
take: res,
});
});
},
getCase() {
wx.ajax({
method: "GET",
url: "?r=takeda/doctor/case",
data: {
DoctorId: this.data.did,
},
}).then((res) => {
this.setData({
case: res,
});
});
},
handleQuestion(e) {
const { index } = e.currentTarget.dataset;
this.triggerEvent("question", index);
},
handleNewCase() {
this.setData({
newCaseShow: true,
});
},
handleNewCaseClose() {
this.setData({
newCaseShow: false,
});
},
},
});
export {};

124
src/echart/components/doctorLevel2/index.wxml

@ -0,0 +1,124 @@ @@ -0,0 +1,124 @@
<view class="page">
<view class="user">
<doctorAvatar
did="{{userInfo.DoctorId}}"
class="avatar"
src="{{userInfo.Img}}"
level="{{userInfo.DoctorLevel}}"
></doctorAvatar>
<view class="wrap">
<view class="w-header">
<view class="name">{{userInfo.Name}}</view>
<view class="desc">
<block wx:if="{{userInfo.TitleType === 99}}">{{userInfo.OtherTitle}}</block>
<block wx:else>{{DoctorTitleType[userInfo.TitleType]}}</block>
<block wx:for="{{userInfo.Department}}" wx:key="DepartmentId">
<view class="line"></view>
{{item.DepartmentName}}
</block>
</view>
</view>
<view class="w-container">
<view class="hostipal">{{userInfo.HospitalName}}</view>
<view class="tag">{{userInfo.HospitalClassificationName}}{{userInfo.HospitalLevelName}}</view>
<view class="site" wx:if="{{userInfo.CityName}}">
{{userInfo.CityName}}{{userInfo.CountyName?'/':''}}{{userInfo.CountyName}}
</view>
</view>
<view class="w-footer" wx:if="{{userInfo.Specialty.length}}">
<image class="wf-label" src="{{imageUrl}}text-specialty.png?t={{Timestamp}}" mode="aspectFit"></image>
<view class="wf-tag" wx:for="{{userInfo.Specialty}}" wx:key="SpecialtyId">{{item.SpecialtyName}}</view>
</view>
</view>
</view>
<view class="banner">
<view
class="title"
style="background: url({{imageUrl}}home-banner-title-bg.png?r={{Timestamp}}) no-repeat top center/262rpx 116rpx;"
>
待处理事项
</view>
<view class="bg">
<view
class="b-container"
wx:if="{{take.dealCaseCount>0 || take.notReadFeedBackCount>0 || take.notReadChatRoomCount>0 || take.toAuditDoctorCount>0}}"
>
<view class="item">
<view class="name">待处理病历</view>
<view class="num">{{take.dealCaseCount*1 || '--'}}</view>
</view>
<view class="item">
<view class="name">病历更新</view>
<view class="num">{{take.notReadFeedBackCount*1 || '--'}}</view>
</view>
<view class="item">
<view class="name">学习窗消息</view>
<view class="num">{{take.notReadChatRoomCount*1 || '--'}}</view>
</view>
<view class="item">
<view class="name">医生待审核</view>
<view class="num">{{take.toAuditDoctorCount*1 || '--'}}</view>
</view>
</view>
<view class="b-container-none" wx:else>暂时没有需要处理的事项哦~</view>
</view>
</view>
<view
class="stat"
wx:if="{{case.totalCaseCount>0}}"
style="background: url({{imageUrl}}home-stat-bg.png?r={{Timestamp}}) no-repeat top center/100% 100%;"
>
<view class="title">我管理的病历</view>
<view class="s-container">
<view class="item">
<view class="name">全部</view>
<view class="num">{{case.totalCaseCount}}</view>
</view>
<view class="line"></view>
<view class="item" bind:tap="handleNewCase">
<view class="name">
新病历
<van-icon catch:tap="handleQuestion" data-index="1" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.newCaseCount}}</view>
<view class="item-toast" wx:if="{{newCaseShow}}">
<image
class="i-clsoe"
src="{{imageUrl}}icon-close.png?r={{Timestamp}}"
catch:tap="handleNewCaseClose"
></image>
<view class="i-row">本人提交:{{case.newOneCaseCount}}</view>
<view class="i-line"></view>
<view class="i-row">他人提交:{{case.newTwoCaseCount}}</view>
</view>
</view>
<view class="line"></view>
<view class="item">
<view class="name">
讨论中
<van-icon catch:tap="handleQuestion" data-index="2" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.feedbackCaseCount}}</view>
</view>
<view class="line"></view>
<view class="item">
<view class="name">
已归档
<van-icon bind:tap="handleQuestion" data-index="3" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.archiveCaseCount}}</view>
</view>
</view>
</view>
<view
class="stat-none"
style="background: url({{imageUrl}}home-stat-bg.png?r={{Timestamp}}) no-repeat top center/100% 100%;"
wx:else
>
<view class="title">我管理病历</view>
<view class="s-container">
<image class="none" src="{{imageUrl}}empty-3.png?t={{Timestamp}}"></image>
<view class="tip">还没有提交病历</view>
</view>
</view>
</view>

7
src/echart/components/doctorLevel3/index.json

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
{
"component": true,
"usingComponents": {
"doctorAvatar": "/components/doctorAvatar/index",
"van-icon": "@vant/weapp/icon/index"
}
}

250
src/echart/components/doctorLevel3/index.scss

@ -0,0 +1,250 @@ @@ -0,0 +1,250 @@
.page {
padding: 36rpx 32rpx 200rpx;
.user {
margin-top: 40rpx;
position: relative;
padding: 94rpx 32rpx 32rpx;
background: linear-gradient(180deg, #f1feff 0%, #ffffff 35%, #ffffff 100%);
box-shadow: 0rpx 8rpx 24rpx 0rpx rgba(0, 66, 73, 0.09);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
.avatar {
position: absolute;
top: -38rpx;
left: 32rpx;
width: 112rpx;
height: 112rpx;
}
.code {
position: absolute;
top: 38rpx;
right: 34rpx;
width: 60rpx;
height: 60rpx;
}
.wrap {
.w-header {
display: flex;
flex-wrap: wrap;
align-items: baseline;
gap: 16rpx;
.name {
font-size: 36rpx;
color: rgba(20, 21, 21, 1);
font-weight: bold;
}
.desc {
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
.line {
margin: 0 12rpx;
display: inline-block;
height: 24rpx;
width: 1rpx;
background-color: rgba(205, 205, 205, 1);
}
}
}
.w-container {
margin-top: 24rpx;
.hostipal {
margin-right: 12rpx;
display: inline;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.tag {
margin-right: 12rpx;
display: inline-block;
padding: 0 8rpx;
border-radius: 4rpx;
background-color: rgba(0, 180, 197, 1);
font-size: 24rpx;
color: #fff;
}
.site {
display: inline-block;
padding: 0 8rpx;
font-size: 24rpx;
line-height: 32rpx;
color: rgba(148, 87, 30, 1);
border-radius: 4rpx;
background-color: rgba(250, 229, 206, 1);
}
}
.w-footer {
margin-top: 16rpx;
display: flex;
gap: 12rpx;
flex-wrap: wrap;
.wf-label {
flex-shrink: 0;
width: 48rpx;
height: 32rpx;
}
.wf-tag {
flex-shrink: 0;
padding: 0 8rpx;
font-size: 22rpx;
color: rgba(0, 180, 197, 1);
line-height: 32rpx;
border: 1px solid rgba(191, 239, 244, 1);
border-radius: 4rpx;
}
}
}
}
.banner {
margin-top: 32rpx;
.title {
position: relative;
z-index: 1;
padding: 22rpx 30rpx 18rpx;
width: 262rpx;
height: 116rpx;
font-size: 28rpx;
font-weight: bold;
color: rgba(0, 180, 197, 1);
line-height: 1;
box-sizing: border-box;
}
.bg {
padding-top: 40rpx;
border-radius: 24rpx;
background-color: rgba(250, 229, 206, 1);
margin-top: -95rpx;
.b-container {
position: relative;
z-index: 2;
border: 1px solid #ffffff;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
display: flex;
align-items: center;
.item {
padding: 32rpx 0;
flex: 1;
text-align: center;
.name {
font-size: 26rpx;
color: #fff;
line-height: 1;
}
.num {
margin-top: 24rpx;
font-size: 56rpx;
color: #fff;
line-height: 56rpx;
}
}
.line {
flex-shrink: 0;
height: 108rpx;
border-right: 1rpx dashed #ffffff;
opacity: 0.5;
}
}
.b-container-none {
position: relative;
z-index: 1;
width: 686rpx;
height: 172rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx;
color: #fff;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 1px solid #ffffff;
}
}
}
.stat {
position: relative;
margin-top: 24rpx;
padding: 96rpx 0 32rpx;
border-radius: 16rpx;
.title {
position: absolute;
top: 0;
left: 0;
padding: 16rpx 24rpx;
font-size: 28rpx;
font-weight: bold;
color: #fff;
}
.more {
position: absolute;
top: 0;
right: 0;
padding: 14rpx 20rpx;
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
}
.s-container {
display: flex;
.item {
flex: 1;
text-align: center;
.name {
font-size: 28rpx;
color: rgba(128, 128, 128, 1);
line-height: 1;
}
.num {
margin-top: 24rpx;
font-size: 48rpx;
color: rgba(20, 21, 21, 1);
line-height: 56rpx;
}
}
.line {
flex-shrink: 0;
height: 108rpx;
border-right: 1rpx dashed rgba(224, 224, 224, 0.5);
}
}
}
.stat-none {
position: relative;
margin-top: 24rpx;
padding: 96rpx 0 32rpx;
border-radius: 16rpx;
.title {
position: absolute;
top: 0;
left: 0;
padding: 16rpx 30rpx;
font-size: 28rpx;
color: #fff;
font-weight: bold;
}
.s-container {
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 38rpx 0;
.none {
width: 102rpx;
height: 102rpx;
}
.tip {
padding: 0 26rpx;
flex: 1;
font-size: 28rpx;
color: rgba(128, 128, 128, 1);
}
.btn {
width: 184rpx;
height: 72rpx;
text-align: center;
line-height: 72rpx;
font-size: 30rpx;
color: rgba(255, 255, 255, 1);
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 44rpx 44rpx 44rpx 44rpx;
}
}
}
}

82
src/echart/components/doctorLevel3/index.ts

@ -0,0 +1,82 @@ @@ -0,0 +1,82 @@
const app = getApp<IAppOption>();
// pages/story/a.ts
Component({
/**
*
*/
properties: {
userInfo: Object,
DoctorTitleType: Object,
hospitalClassification: Object,
hospitalLevel: Object,
did: String,
},
/**
*
*/
data: {
take: {},
case: {} as any,
doctorCount: {},
},
lifetimes: {
attached() {
this.getTake();
this.getCase();
this.getManageDoctor();
},
},
/**
*
*/
methods: {
getTake() {
wx.ajax({
method: "GET",
url: "?r=takeda/doctor/todo",
data: {
DoctorId: this.data.did,
},
}).then((res) => {
this.setData({
take: res,
});
});
},
getCase() {
wx.ajax({
method: "GET",
url: "?r=takeda/doctor/case",
data: {
DoctorId: this.data.did,
},
}).then((res) => {
this.setData({
case: res,
});
});
},
getManageDoctor() {
wx.ajax({
method: "GET",
url: "?r=takeda/doctor/manage-doctor-count",
data: {
DoctorId: this.data.did,
},
}).then((res) => {
this.setData({
doctorCount: res.count,
});
});
},
handleQuestion(e) {
const { index } = e.currentTarget.dataset;
this.triggerEvent("question", index);
},
},
});
export {};

142
src/echart/components/doctorLevel3/index.wxml

@ -0,0 +1,142 @@ @@ -0,0 +1,142 @@
<view class="page">
<view class="user">
<doctorAvatar
did="{{userInfo.DoctorId}}"
class="avatar"
src="{{userInfo.Img}}"
level="{{userInfo.DoctorLevel}}"
></doctorAvatar>
<view class="wrap">
<view class="w-header">
<view class="name">{{userInfo.Name}}</view>
<view class="desc">
<block wx:if="{{userInfo.TitleType === 99}}">{{userInfo.OtherTitle}}</block>
<block wx:else>{{DoctorTitleType[userInfo.TitleType]}}</block>
<block wx:for="{{userInfo.Department}}" wx:key="DepartmentId">
<view class="line"></view>
{{item.DepartmentName}}
</block>
</view>
</view>
<view class="w-container">
<view class="hostipal">{{userInfo.HospitalName}}</view>
<view class="tag">{{userInfo.HospitalClassificationName}}{{userInfo.HospitalLevelName}}</view>
<view class="site" wx:if="{{userInfo.CityName}}">
{{userInfo.CityName}}{{userInfo.CountyName?'/':''}}{{userInfo.CountyName}}
</view>
</view>
<view class="w-footer" wx:if="{{userInfo.Specialty.length}}">
<image class="wf-label" src="{{imageUrl}}text-specialty.png?t={{Timestamp}}" mode="aspectFit"></image>
<view class="wf-tag" wx:for="{{userInfo.Specialty}}" wx:key="SpecialtyId">{{item.SpecialtyName}}</view>
</view>
</view>
</view>
<view class="banner">
<view
class="title"
style="background: url({{imageUrl}}home-banner-title-bg.png?r={{Timestamp}}) no-repeat top center/262rpx 116rpx;"
>
待处理事项
</view>
<view class="bg">
<view class="b-container">
<view class="item">
<view class="name">待处理病历</view>
<view class="num">{{take.dealCaseCount*1 || '--'}}</view>
</view>
<view class="item">
<view class="name">病历更新</view>
<view class="num">{{take.notReadFeedBackCount*1 || '--'}}</view>
</view>
<view class="item">
<view class="name">学习窗消息</view>
<view class="num">{{take.notReadChatRoomCount*1 || '--'}}</view>
</view>
<view class="item">
<view class="name">医生待审核</view>
<view class="num">{{take.toAuditDoctorCount*1 || '--'}}</view>
</view>
</view>
</view>
</view>
<view
class="stat"
wx:if="{{case.totalCaseCount>0}}"
style="background: url({{imageUrl}}home-stat-bg.png?r={{Timestamp}}) no-repeat top center/100% 100%;"
>
<view class="title">我管理的病历</view>
<view class="s-container">
<view class="item">
<view class="name">全部</view>
<view class="num">{{case.totalCaseCount}}</view>
</view>
<view class="line"></view>
<view class="item">
<view class="name">
新病历
<van-icon catch:tap="handleQuestion" data-index="1" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.newCaseCount}}</view>
</view>
<view class="item">
<view class="name">
讨论中
<van-icon catch:tap="handleQuestion" data-index="2" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.feedbackCaseCount}}</view>
</view>
<view class="item">
<view class="name">
已归档
<van-icon bind:tap="handleQuestion" data-index="3" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.archiveCaseCount}}</view>
</view>
</view>
</view>
<view
class="stat-none"
style="background: url({{imageUrl}}home-stat-bg.png?r={{Timestamp}}) no-repeat top center/100% 100%;"
wx:else
>
<view class="title">我管理的病历</view>
<view class="s-container">
<image class="none" src="{{imageUrl}}empty-3.png?t={{Timestamp}}"></image>
<view class="tip">还没有提交病历</view>
<view></view>
</view>
</view>
<view
class="stat"
wx:if="{{doctorCount.TotalCount>0}}"
style="background: url({{imageUrl}}home-stat-bg.png?r={{Timestamp}}) no-repeat top center/100% 100%;"
>
<view class="title">我管理的医生</view>
<view class="s-container">
<view class="item">
<view class="name">全部</view>
<view class="num">{{doctorCount.TotalCount}}</view>
</view>
<view class="line"></view>
<view class="item">
<view class="name">二级医生</view>
<view class="num">{{doctorCount.TwoCount}}</view>
</view>
<view class="item">
<view class="name">一级医生</view>
<view class="num">{{doctorCount.OneCount}}</view>
</view>
</view>
</view>
<view
class="stat-none"
style="background: url({{imageUrl}}home-stat-bg.png?r={{Timestamp}}) no-repeat top center/100% 100%;"
wx:else
>
<view class="title">我管理的医生</view>
<view class="s-container">
<image class="none" src="{{imageUrl}}empty-3.png?t={{Timestamp}}"></image>
<view class="tip">还没有邀约的医生</view>
</view>
</view>
</view>

8
src/echart/components/doctorLevel4/index.json

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
{
"component": true,
"usingComponents": {
"doctorAvatar": "/components/doctorAvatar/index",
"van-icon": "@vant/weapp/icon/index",
"ec-canvas": "../ec-canvas/ec-canvas"
}
}

489
src/echart/components/doctorLevel4/index.scss

@ -0,0 +1,489 @@ @@ -0,0 +1,489 @@
.page {
padding: 36rpx 32rpx 100rpx;
.user {
margin-top: 40rpx;
position: relative;
padding: 94rpx 32rpx 32rpx;
background: linear-gradient(180deg, #f1feff 0%, #ffffff 35%, #ffffff 100%);
box-shadow: 0rpx 8rpx 24rpx 0rpx rgba(0, 66, 73, 0.09);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
.avatar {
position: absolute;
top: -38rpx;
left: 32rpx;
width: 112rpx;
height: 112rpx;
}
.code {
position: absolute;
top: 38rpx;
right: 34rpx;
width: 60rpx;
height: 60rpx;
}
.wrap {
.w-header {
display: flex;
align-items: baseline;
gap: 16rpx;
.name {
font-size: 36rpx;
color: rgba(20, 21, 21, 1);
font-weight: bold;
}
.desc {
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
.line {
margin: 0 12rpx;
display: inline-block;
height: 24rpx;
width: 1rpx;
background-color: rgba(205, 205, 205, 1);
}
}
}
.w-container {
margin-top: 24rpx;
.hostipal {
margin-right: 12rpx;
display: inline;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.tag {
margin-right: 12rpx;
display: inline-block;
padding: 0 8rpx;
border-radius: 4rpx;
background-color: rgba(0, 180, 197, 1);
font-size: 24rpx;
color: #fff;
}
.site {
display: inline-block;
padding: 0 8rpx;
font-size: 24rpx;
line-height: 32rpx;
color: rgba(148, 87, 30, 1);
border-radius: 4rpx;
background-color: rgba(250, 229, 206, 1);
}
}
.w-footer {
margin-top: 16rpx;
display: flex;
gap: 12rpx;
flex-wrap: wrap;
.wf-label {
flex-shrink: 0;
width: 48rpx;
height: 32rpx;
}
.wf-tag {
flex-shrink: 0;
padding: 0 8rpx;
font-size: 22rpx;
color: rgba(0, 180, 197, 1);
line-height: 32rpx;
border: 1px solid rgba(191, 239, 244, 1);
border-radius: 4rpx;
}
}
}
}
.banner {
margin-top: 32rpx;
.title {
position: relative;
z-index: 1;
padding: 22rpx 30rpx 18rpx;
width: 262rpx;
height: 116rpx;
font-size: 28rpx;
font-weight: bold;
color: rgba(0, 180, 197, 1);
line-height: 1;
box-sizing: border-box;
}
.bg {
padding-top: 40rpx;
border-radius: 24rpx;
background-color: rgba(250, 229, 206, 1);
margin-top: -95rpx;
.b-container {
position: relative;
z-index: 2;
border: 1px solid #ffffff;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
display: flex;
align-items: center;
.item {
padding: 32rpx 0;
flex: 1;
text-align: center;
.name {
font-size: 26rpx;
color: #fff;
line-height: 1;
}
.num {
margin-top: 24rpx;
font-size: 56rpx;
color: #fff;
line-height: 56rpx;
}
}
.line {
flex-shrink: 0;
height: 108rpx;
border-right: 1rpx dashed #ffffff;
opacity: 0.5;
}
}
.b-container-none {
position: relative;
z-index: 1;
width: 686rpx;
height: 172rpx;
display: flex;
align-items: center;
justify-content: center;
font-size: 28rpx;
color: #fff;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 1px solid #ffffff;
}
}
}
.stat {
position: relative;
margin-top: 24rpx;
padding: 96rpx 0 32rpx;
border-radius: 16rpx;
.title {
position: absolute;
top: 0;
left: 0;
padding: 16rpx 30rpx;
font-size: 26rpx;
color: #fff;
font-weight: bold;
}
.picker {
position: absolute;
top: 8rpx;
left: 296rpx;
.picker-content {
padding: 8rpx 24rpx;
display: flex;
gap: 18rpx;
font-size: 28rpx;
line-height: 40rpx;
color: rgba(133, 133, 133, 1);
background: #ffffff;
border-radius: 98rpx 98rpx 98rpx 98rpx;
border: 1px solid #f6f6f6;
}
}
.more {
position: absolute;
top: 0;
right: 0;
padding: 14rpx 20rpx;
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
}
.s-container {
display: flex;
.item {
position: relative;
flex: 1;
text-align: center;
.name {
font-size: 28rpx;
color: rgba(128, 128, 128, 1);
line-height: 1;
}
.num {
margin-top: 24rpx;
font-size: 48rpx;
color: rgba(20, 21, 21, 1);
line-height: 56rpx;
}
.item-toast {
position: absolute;
left: -80rpx;
top: -20rpx;
transform: translate(0, -100%);
padding: 28rpx 0;
border-radius: 16rpx;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
display: flex;
align-items: center;
white-space: nowrap;
font-size: 28rpx;
color: #fff;
.i-row {
padding: 0 56rpx;
}
.i-line {
width: 2rpx;
height: 32rpx;
background-color: rgba(255, 255, 255, 0.29);
}
.i-clsoe {
position: absolute;
top: -10rpx;
right: -10rpx;
width: 32rpx;
height: 32rpx;
}
&::after {
position: absolute;
left: 134rpx;
bottom: -10rpx;
content: "";
width: 0;
height: 0;
border-style: solid;
border-width: 18rpx 18rpx 0 18rpx;
border-color: #4abfc0 transparent transparent transparent;
}
}
}
.line {
flex-shrink: 0;
height: 108rpx;
border-right: 1rpx dashed rgba(224, 224, 224, 0.5);
}
}
.s-container-none {
padding: 4rpx 0;
display: flex;
align-items: center;
justify-content: center;
gap: 26rpx;
.none {
width: 102rpx;
height: 102rpx;
}
.tip {
font-size: 28rpx;
color: rgba(128, 128, 128, 1);
}
}
}
.department {
margin-top: 24rpx;
padding: 0 20rpx;
background: linear-gradient(180deg, #f1feff 0%, #ffffff 35%, #ffffff 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
.d-header {
padding: 32rpx 0;
display: flex;
align-items: center;
justify-content: space-between;
.name {
font-size: 32rpx;
color: rgba(20, 21, 21, 1);
font-weight: bold;
}
.more {
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
}
}
.d-container {
padding: 32rpx 0;
background: linear-gradient(180deg, #f3fbfd 0%, #ffffff 50%);
box-shadow: 0rpx 4rpx 20rpx 0rpx rgba(0, 0, 0, 0.08);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
display: flex;
justify-content: space-between;
.item {
flex: 1;
text-align: center;
.name {
font-size: 28rpx;
color: rgba(128, 128, 128, 1);
line-height: 1;
}
.num {
margin-top: 24rpx;
font-size: 48rpx;
color: rgba(20, 21, 21, 1);
line-height: 56rpx;
}
}
}
.tip {
padding: 20rpx 0;
font-size: 22rpx;
color: rgba(153, 153, 153, 1);
text-align: right;
}
}
.department-none {
margin-top: 24rpx;
padding: 0 20rpx;
background: linear-gradient(180deg, #f1feff 0%, #ffffff 35%, #ffffff 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
.d-header {
padding: 32rpx 0;
display: flex;
align-items: center;
justify-content: space-between;
.name {
font-size: 32rpx;
color: rgba(20, 21, 21, 1);
}
}
.d-container {
padding: 24rpx;
text-align: center;
.none-img {
width: 240rpx;
height: 200rpx;
}
.none-title {
margin-top: -80rpx;
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
line-height: 44rpx;
}
}
}
.chart-card {
margin-top: 24rpx;
background: linear-gradient(180deg, #f1feff 0%, #ffffff 35%, #ffffff 100%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
.c-header {
padding: 32rpx 20rpx;
display: flex;
align-items: center;
justify-content: space-between;
.name {
font-size: 32rpx;
color: rgba(20, 21, 21, 1);
font-weight: bold;
}
.picker {
.picker-content {
padding: 8rpx 24rpx;
display: flex;
gap: 18rpx;
font-size: 28rpx;
color: rgba(133, 133, 133, 1);
background: #ffffff;
border-radius: 98rpx 98rpx 98rpx 98rpx;
border: 1px solid #f6f6f6;
}
}
}
.chart {
height: 450rpx;
}
.tip {
padding: 24rpx 20rpx 32rpx;
font-size: 22rpx;
color: rgba(153, 153, 153, 1);
text-align: right;
}
.chart-none {
padding: 24rpx;
text-align: center;
.none-img {
width: 240rpx;
height: 200rpx;
}
.none-title {
margin-top: -80rpx;
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
line-height: 44rpx;
}
}
}
.rank {
margin: 24rpx -32rpx 0;
padding: 0 32rpx 100rpx;
background: linear-gradient(180deg, #f1feff 0%, #ffffff 14%, #ffffff 100%);
border-radius: 32rpx 32rpx 0 0;
border: 2rpx solid #ffffff;
.r-header {
padding: 32rpx 0;
display: flex;
align-items: center;
justify-content: space-between;
.title {
font-size: 32rpx;
color: rgba(20, 21, 21, 1);
font-weight: bold;
}
.more {
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
}
}
.table {
.thead {
padding: 22rpx 0;
display: flex;
font-size: 28rpx;
color: rgba(0, 180, 197, 1);
background-color: rgba(233, 246, 247, 1);
text-align: center;
border-radius: 8rpx;
.th1 {
width: 338rpx;
}
.th2,
.th3,
.th4,
.th5 {
width: 96rpx;
white-space: nowrap;
}
}
.tbody {
border-bottom: 1rpx solid rgba(224, 224, 224, 0.5);
.tr {
display: flex;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
text-align: center;
padding: 18rpx 0;
line-height: 32rpx;
border-radius: 8rpx;
&:nth-child(even) {
background-color: rgba(248, 248, 248, 1);
}
.td1 {
padding: 12rpx 10rpx;
width: 338rpx;
text-align-last: left;
}
.td2,
.td3,
.td4,
.td5 {
padding: 12rpx 0;
width: 96rpx;
border-left: 1px dashed rgba(224, 224, 224, 1);
}
.td2 {
color: rgba(0, 180, 197, 1);
}
}
}
}
}
}

115
src/echart/components/doctorLevel4/index.ts

@ -0,0 +1,115 @@ @@ -0,0 +1,115 @@
import dayjs from "dayjs";
const app = getApp<IAppOption>();
const echarts = require("../ec-canvas/echarts.js");
// pages/story/a.ts
Component({
/**
*
*/
properties: {
userInfo: Object,
DoctorTitleType: Object,
hospitalClassification: Object,
hospitalLevel: Object,
did: String,
},
/**
*
*/
data: {
take: {},
case: {} as any,
doctorCount: {},
DepartmentId: "",
DepartmentName: "",
newCaseShow: false,
},
lifetimes: {
attached() {
const { DepartmentId, DepartmentName } = this.data.userInfo.Department[0];
this.setData({
Department: this.data.userInfo.Department,
DepartmentId,
DepartmentName,
});
this.getTake();
this.getCase();
this.getManageDoctor();
},
},
/**
*
*/
methods: {
getTake() {
wx.ajax({
method: "GET",
url: "?r=takeda/doctor/todo",
data: {
DoctorId: this.data.did,
},
}).then((res) => {
this.setData({
take: res,
});
});
},
handleChangeDept(e) {
const index = e.detail.value;
const { DepartmentId, DepartmentName } = this.data.userInfo.Department[index];
this.setData({
DepartmentId,
DepartmentName,
});
this.getCase();
this.getManageDoctor();
},
getCase() {
wx.ajax({
method: "GET",
url: "?r=takeda/doctor/case",
data: {
DepartmentId: this.data.DepartmentId,
DoctorId: this.data.did,
},
}).then((res) => {
this.setData({
case: res,
});
});
},
getManageDoctor() {
wx.ajax({
method: "GET",
url: "?r=takeda/doctor/manage-doctor-count",
data: { DepartmentId: this.data.DepartmentId, DoctorId: this.data.did },
}).then((res) => {
this.setData({
doctorCount: res.count,
});
});
},
handleQuestion(e) {
const { index } = e.currentTarget.dataset;
this.triggerEvent("question", index);
},
handleNewCase() {
this.setData({
newCaseShow: true,
});
},
handleNewCaseClose() {
this.setData({
newCaseShow: false,
});
},
},
});
export {};

140
src/echart/components/doctorLevel4/index.wxml

@ -0,0 +1,140 @@ @@ -0,0 +1,140 @@
<view class="page">
<view class="user">
<doctorAvatar did="{{userInfo.DoctorId}}" class="avatar" src="{{userInfo.Img}}" level="4"></doctorAvatar>
<view class="wrap">
<view class="w-header">
<view class="name">{{userInfo.Name}}</view>
<view class="desc">
<block wx:if="{{userInfo.TitleType === 99}}">{{userInfo.OtherTitle}}</block>
<block wx:else>{{DoctorTitleType[userInfo.TitleType]}}</block>
<block wx:for="{{userInfo.Department}}" wx:key="DepartmentId">
<view class="line"></view>
{{item.DepartmentName}}
</block>
</view>
</view>
<view class="w-container">
<view class="hostipal">{{userInfo.HospitalName}}</view>
<view class="tag">{{userInfo.HospitalClassificationName}}{{userInfo.HospitalLevelName}}</view>
<view class="site" wx:if="{{userInfo.CityName}}">
{{userInfo.CityName}}{{userInfo.CountyName?'/':''}}{{userInfo.CountyName}}
</view>
</view>
<view class="w-footer" wx:if="{{userInfo.Specialty.length}}">
<image class="wf-label" src="{{imageUrl}}text-specialty.png?t={{Timestamp}}" mode="aspectFit"></image>
<view class="wf-tag" wx:for="{{userInfo.Specialty}}" wx:key="SpecialtyId">{{item.SpecialtyName}}</view>
</view>
</view>
</view>
<view class="banner">
<view
class="title"
style="background: url({{imageUrl}}home-banner-title-bg.png?r={{Timestamp}}) no-repeat top center/262rpx 116rpx;"
>
待处理事项
</view>
<view class="bg">
<view class="b-container">
<view class="item">
<view class="name">待处理病历</view>
<view class="num">{{take.dealCaseCount*1 || '--'}}</view>
</view>
<view class="item">
<view class="name">学习窗消息</view>
<view class="num">{{take.notReadChatRoomCount*1 || '--'}}</view>
</view>
<view class="item">
<view class="name">医生待审核</view>
<view class="num">{{take.toAuditDoctorCount*1 || '--'}}</view>
</view>
</view>
</view>
</view>
<view
class="stat"
style="background: url({{imageUrl}}home-stat-bg.png?r={{Timestamp}}) no-repeat top center/100% 100%;"
>
<view class="title">本科室全部病历</view>
<picker class="picker" range="{{Department}}" range-key="DepartmentName" bind:change="handleChangeDept">
<view class="picker-content">
<view class="text">{{DepartmentName}}</view>
<van-icon name="arrow-down" />
</view>
</picker>
<view class="s-container" wx:if="{{case.totalCaseCount>0}}">
<view class="item">
<view class="name">全部</view>
<view class="num">{{case.totalCaseCount}}</view>
</view>
<view class="line"></view>
<view class="item" bind:tap="handleNewCase">
<view class="name">
新病历
<van-icon catch:tap="handleQuestion" data-index="1" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.newCaseCount}}</view>
<view class="item-toast" wx:if="{{newCaseShow}}">
<image
class="i-clsoe"
src="{{imageUrl}}icon-close.png?r={{Timestamp}}"
catch:tap="handleNewCaseClose"
></image>
<view class="i-row">本科室:{{case.newOneCaseCount}}</view>
<view class="i-line"></view>
<view class="i-row">无科室:{{case.newTwoCaseCount}}</view>
</view>
</view>
<view class="item">
<view class="name">
讨论中
<van-icon catch:tap="handleQuestion" data-index="2" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.feedbackCaseCount}}</view>
</view>
<view class="item">
<view class="name">
已归档
<van-icon bind:tap="handleQuestion" data-index="3" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<view class="num">{{case.archiveCaseCount}}</view>
</view>
</view>
<view class="s-container-none" wx:else>
<image class="none" src="{{imageUrl}}empty-3.png?t={{Timestamp}}"></image>
<view class="tip">暂时还没有医生提交病历哦~</view>
</view>
</view>
<view class="department" wx:if="{{doctorCount.TotalCount>0}}">
<view class="d-header">
<view class="name">本科室医生</view>
</view>
<view class="d-container">
<view class="item">
<view class="name">医生总数</view>
<view class="num">{{doctorCount.TotalCount}}</view>
</view>
<view class="item">
<view class="name">质控医生</view>
<view class="num">{{doctorCount.ThreeCount}}</view>
</view>
<view class="item">
<view class="name">核心医生</view>
<view class="num">{{doctorCount.TwoCount}}</view>
</view>
<view class="item">
<view class="name">一级医生</view>
<view class="num">{{doctorCount.OneCount}}</view>
</view>
</view>
<view class="tip">注:一级医生为平台全部医生,不区分科室</view>
</view>
<view class="department-none" wx:else>
<view class="d-header">
<view class="name">本科室医生</view>
</view>
<view class="d-container">
<image class="none-img" src="{{imageUrl}}empty-4.png?t={{Timestamp}}"></image>
<view class="none-title">暂无数据</view>
</view>
</view>
</view>

BIN
src/images/icon-clsoe-green.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
src/images/invite-title.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 42 KiB

16
src/module1/pages/casesFeedback/index.scss

@ -121,27 +121,31 @@ page { @@ -121,27 +121,31 @@ page {
.audio-list {
margin-top: 32rpx;
.row {
position: relative;
margin-bottom: 24rpx;
display: flex;
gap: 28rpx;
align-items: center;
.audio-bar {
flex: 1;
border-radius: 104rpx;
border-radius: 16rpx;
background-color: rgba(246, 246, 246, 1);
}
.del {
position: absolute;
top: -16rpx;
right: 100rpx;
width: 32rpx;
height: 32rpx;
}
.options {
flex-shrink: 0;
gap: 20rpx;
display: flex;
align-items: center;
.del {
width: 36rpx;
height: 36rpx;
}
.trans {
font-size: 28rpx;
color: rgba(128, 128, 128, 1);
color: #01b4c5;
}
}
}

12
src/module1/pages/casesFeedback/index.wxml

@ -16,13 +16,13 @@ @@ -16,13 +16,13 @@
<view class="audio-list">
<view class="row" wx:for="{{audios}}" wx:key="index">
<customAudioBar class="audio-bar" url="{{item.url}}" time="{{item.duration}}"></customAudioBar>
<image
class="del"
src="{{imageUrl}}icon-clsoe-green.png?t={{Timestamp}}"
bind:tap="handleDelAudio"
data-index="{{index}}"
></image>
<view class="options">
<image
class="del"
src="{{imageUrl}}icon-del.png?t={{Timestamp}}"
bind:tap="handleDelAudio"
data-index="{{index}}"
></image>
<customAudioText class="trans" url="{{item.url}}">转文字</customAudioText>
</view>
</view>

6
src/module1/pages/chatRoom/index.wxml

@ -61,7 +61,7 @@ @@ -61,7 +61,7 @@
mode="aspectFit"
></image>
<image wx:else class="icon" src="{{imageUrl}}/audio-right.png?t={{Timestamp}}" mode="aspectFit"></image>
{{message.content.duration}}''
{{message.content.duration}}
<view style="width:{{message.content.duration*3}}px;height: 10px;"></view>
</view>
<view class="photo" wx:elif="{{message.contentType==='3'}}">
@ -91,7 +91,7 @@ @@ -91,7 +91,7 @@
<view class="message" wx:if="{{message.contentType==='1'}}">{{message.content}}</view>
<view class="audio" wx:elif="{{message.contentType==='2'}}" bind:tap="handleAudio" data-index="{{mIndex}}">
<view style="width:{{message.content.duration*3}}px;height: 10px;"></view>
{{message.content.duration}}''
{{message.content.duration}}
<image
class="icon"
wx:if="{{message.isPlay}}"
@ -159,7 +159,7 @@ @@ -159,7 +159,7 @@
/>
<view class="place" wx:else bind:tap="handleFocus">{{sendMessage}}</view>
</block>
<customRecord wx:else class="custom-record" bind:file="handleSendAudio" slotIcon>按住说话</customRecord>
<customRecord wx:else class="custom-record" bind:file="handleSendAudio" slotIcon doubleConform>按住说话</customRecord>
<image
class="icon-add"
src="{{imageUrl}}icon-circle-add.png?t={{Timestamp}}"

17
src/module1/pages/doctorHome/index.json

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
{
"navigationStyle": "default",
"navigationBarTitleText": "医生看板",
"usingComponents": {
"doctorLevel1": "../../../echart/components/doctorLevel1/index",
"doctorLevel2": "../../../echart/components/doctorLevel2/index",
"doctorLevel3": "../../../echart/components/doctorLevel3/index",
"doctorLevel4": "../../../echart/components/doctorLevel4/index",
"van-popup": "@vant/weapp/popup/index"
},
"componentPlaceholder": {
"doctorLevel1": "view",
"doctorLevel2": "view",
"doctorLevel3": "view",
"doctorLevel4": "view"
}
}

47
src/module1/pages/doctorHome/index.scss

@ -0,0 +1,47 @@ @@ -0,0 +1,47 @@
page {
background-color: rgba(250, 250, 250, 1);
}
.page {
.logo {
margin-left: 32rpx;
width: 160rpx;
height: 36rpx;
}
}
.popup1 {
width: 750rpx;
height: 752rpx;
.container {
padding: 322rpx 0 0;
.title {
font-size: 32rpx;
color: rgba(20, 21, 21, 1);
line-height: 42rpx;
text-align: center;
font-weight: bold;
.name {
font-size: 36rpx;
color: rgba(0, 180, 197, 1);
}
}
.content {
text-align: center;
margin-top: 16rpx;
font-size: 28rpx;
color: rgba(133, 133, 133, 1);
line-height: 44rpx;
}
.sure {
margin: 32rpx auto 0;
width: 476rpx;
height: 72rpx;
font-size: 32rpx;
color: rgba(255, 255, 255, 1);
text-align: center;
line-height: 72rpx;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 84rpx 84rpx 84rpx 84rpx;
}
}
}

96
src/module1/pages/doctorHome/index.ts

@ -0,0 +1,96 @@ @@ -0,0 +1,96 @@
const app = getApp<IAppOption>();
export {};
Page({
data: {
level: 0,
hide: true,
show1: false,
bindDoctorName: "",
id: "",
userInfo: {},
DoctorTitleType: {},
hospitalClassification: {},
hospitalLevel: {},
},
onLoad(options) {
app.waitLogin().then(() => {
this.getDoctorDict();
this.getHostipalDict();
this.getDoctorDetail(options.id, (res) => {
this.setData({
id: options.id,
level: res.IsSuper === 1 ? 4 : res.DoctorLevel,
userInfo: res,
});
});
});
},
onShow() {
this.setData({
hide: false,
});
},
onHide() {
this.setData({
hide: true,
});
},
getDoctorDetail(id, callback) {
wx.ajax({
method: "GET",
url: "?r=takeda/doctor/detail",
data: {
DoctorId: id,
},
}).then((res) => {
callback(res);
});
},
getDoctorDict() {
wx.ajax({
method: "GET",
url: "?r=takeda/reg/doctor-dict",
data: {},
}).then((res) => {
this.setData({
DoctorTitleType: res.DoctorTitleType,
});
});
},
getHostipalDict() {
wx.ajax({
method: "GET",
url: "?r=takeda/reg/hospital-dict",
data: {},
}).then((res) => {
this.setData({
hospitalClassification: res.hospitalClassification,
hospitalLevel: res.hospitalLevel,
});
});
},
handleQuestion(e) {
const index = e.detail;
const tip = {
1: "无任何医生反馈、以及操作的病历",
2: "有医生反馈且未归档的病历",
3: "设为归档的病历,病历参与者不可反馈,仅可访问",
4: "科室医生入驻情况:按月统计所在科室注册平台的医生数,并以堆叠图显示一级医生、二级医生、三级医生数;其中,一级医生为全平台的一级医生,不区分科室",
5: "累计病历统计:按月统计所在科室累计提交的病历数,并以堆叠图显示一级医生、核心医生提交病历数",
6: "科室新增病历统计:按月统计所在科室新提交的病历 数,并以堆叠图显示一级医生、核心医生提交的病历数",
7: "医院活跃排行榜:按医院入驻医生数进行活跃排序,入驻医生数越多则活跃度越高,排序则越靠前",
}[index];
wx.showModal({
content: tip,
confirmColor: "#00B4C5",
cancelColor: "#141515",
showCancel: false,
});
},
});

38
src/module1/pages/doctorHome/index.wxml

@ -0,0 +1,38 @@ @@ -0,0 +1,38 @@
<view class="page" wx:if="{{!hide}}">
<doctorLevel1
wx:if="{{level===1}}"
hospitalClassification="{{hospitalClassification}}"
hospitalLevel="{{hospitalLevel}}"
DoctorTitleType="{{DoctorTitleType}}"
userInfo="{{userInfo}}"
did="{{id}}"
bind:question="handleQuestion"
></doctorLevel1>
<doctorLevel2
wx:elif="{{level===2}}"
hospitalClassification="{{hospitalClassification}}"
hospitalLevel="{{hospitalLevel}}"
DoctorTitleType="{{DoctorTitleType}}"
userInfo="{{userInfo}}"
did="{{id}}"
bind:question="handleQuestion"
></doctorLevel2>
<doctorLevel3
wx:elif="{{level===3}}"
hospitalClassification="{{hospitalClassification}}"
hospitalLevel="{{hospitalLevel}}"
DoctorTitleType="{{DoctorTitleType}}"
userInfo="{{userInfo}}"
did="{{id}}"
bind:question="handleQuestion"
></doctorLevel3>
<doctorLevel4
wx:elif="{{level===4}}"
hospitalClassification="{{hospitalClassification}}"
hospitalLevel="{{hospitalLevel}}"
DoctorTitleType="{{DoctorTitleType}}"
userInfo="{{userInfo}}"
did="{{id}}"
bind:question="handleQuestion"
></doctorLevel4>
</view>

16
src/module1/pages/entryCases/index.scss

@ -121,27 +121,31 @@ page { @@ -121,27 +121,31 @@ page {
.audio-list {
margin-top: 32rpx;
.row {
position: relative;
margin-bottom: 24rpx;
display: flex;
gap: 28rpx;
align-items: center;
.audio-bar {
flex: 1;
border-radius: 104rpx;
border-radius: 16rpx;
background-color: rgba(246, 246, 246, 1);
}
.del {
position: absolute;
top: -16rpx;
right: 100rpx;
width: 32rpx;
height: 32rpx;
}
.options {
flex-shrink: 0;
gap: 20rpx;
display: flex;
align-items: center;
.del {
width: 36rpx;
height: 36rpx;
}
.trans {
font-size: 28rpx;
color: rgba(128, 128, 128, 1);
color: #01B4C5;
}
}
}

12
src/module1/pages/entryCases/index.wxml

@ -42,13 +42,13 @@ @@ -42,13 +42,13 @@
<view class="audio-list">
<view class="row" wx:for="{{audios}}" wx:key="index">
<customAudioBar class="audio-bar" url="{{item.url}}" time="{{item.duration}}"></customAudioBar>
<image
class="del"
src="{{imageUrl}}icon-clsoe-green.png?t={{Timestamp}}"
bind:tap="handleDelAudio"
data-index="{{index}}"
></image>
<view class="options">
<image
class="del"
src="{{imageUrl}}icon-del.png?t={{Timestamp}}"
bind:tap="handleDelAudio"
data-index="{{index}}"
></image>
<customAudioText class="trans" url="{{item.url}}">转文字</customAudioText>
</view>
</view>

2
src/module1/pages/login/index.scss

@ -20,6 +20,7 @@ @@ -20,6 +20,7 @@
.tel {
.input {
padding: 24rpx 32rpx;
display: block;
font-size: 32rpx;
color: #000;
line-height: 44rpx;
@ -36,6 +37,7 @@ @@ -36,6 +37,7 @@
align-items: center;
gap: 30rpx;
.input {
display: block;
padding: 24rpx 32rpx;
font-size: 32rpx;
color: #000;

6
src/module1/pages/org3/index.ts

@ -113,6 +113,12 @@ Page({ @@ -113,6 +113,12 @@ Page({
return item;
});
},
handleDoctrDetail(e) {
const { id } = e.currentTarget.dataset;
wx.navigateTo({
url: `/module1/pages/doctorHome/index?id=${id}`,
});
},
});
export {};

26
src/module1/pages/org3/index.wxml

@ -34,13 +34,13 @@ @@ -34,13 +34,13 @@
<block wx:for="{{tree}}" wx:key="DoctorId">
<view class="container" wx:if="{{userInfo.DoctorId == item.DoctorId}}">
<view class="level-three {{item.active && 'active'}}">
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{item.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
src="{{item.DoctorInfo.doctorImg}}"
level="{{item.DoctorInfo.doctorLevel}}"
did="{{item.DoctorInfo.DoctorId}}"
did="{{item.DoctorInfo.doctorId}}"
></doctorAvatar>
<block wx:if="{{item.Children.length}}">
<view class="num">{{item.ChildCount}}人</view>
@ -60,7 +60,7 @@ @@ -60,7 +60,7 @@
<view class="label">{{dept.DepartmentName}}</view>
</block>
</view>
<view class="fold" bind:tap="handleFoldAll">
<view class="fold" catch:tap="handleFoldAll">
{{item.fold ? '全部展开':'全部收起'}}
<image class="f-icon" src="{{imageUrl}}fold-{{item.fold?'down':'top'}}.png?t={{Timestamp}}"></image>
</view>
@ -86,7 +86,7 @@ @@ -86,7 +86,7 @@
</view>
<view class="container" wx:elif="{{item.DoctorLevel=='3'}}">
<view class="level-three {{item.active && 'active'}}">
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{item.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -112,7 +112,7 @@ @@ -112,7 +112,7 @@
<view class="label">{{dept.DepartmentName}}</view>
</block>
</view>
<view class="fold" bind:tap="handleFold" data-index="{{index}}">
<view class="fold" catch:tap="handleFold" data-index="{{index}}">
{{item.fold ? '展开':'收起'}}
<image class="f-icon" src="{{imageUrl}}fold-{{item.fold?'down':'top'}}.png?t={{Timestamp}}"></image>
</view>
@ -149,7 +149,7 @@ @@ -149,7 +149,7 @@
<view class="vertical"></view>
<view class="across"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{subItem.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -175,7 +175,7 @@ @@ -175,7 +175,7 @@
<view class="label">{{dept.DepartmentName}}</view>
</block>
</view>
<view class="fold" bind:tap="handleSubFold" data-index="{{index}}" data-subindex="{{subIndex}}">
<view class="fold" catch:tap="handleSubFold" data-index="{{index}}" data-subindex="{{subIndex}}">
{{subItem.fold ? '展开':'收起'}}
<image
class="f-icon"
@ -219,7 +219,7 @@ @@ -219,7 +219,7 @@
<view class="across"></view>
<view class="vertical-grow" wx:if="{{subItem.Children.length > index+1}}"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{subSubItem.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -274,7 +274,7 @@ @@ -274,7 +274,7 @@
<view class="vertical"></view>
<view class="across"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{subItem.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -329,7 +329,7 @@ @@ -329,7 +329,7 @@
<view class="vertical"></view>
<view class="across"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{item.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -355,7 +355,7 @@ @@ -355,7 +355,7 @@
<view class="label">{{dept.DepartmentName}}</view>
</block>
</view>
<view class="fold" bind:tap="handleFold" data-index="{{index}}">
<view class="fold" catch:tap="handleFold" data-index="{{index}}">
{{item.fold ? '展开':'收起'}}
<image class="f-icon" src="{{imageUrl}}fold-{{item.fold?'down':'top'}}.png?t={{Timestamp}}"></image>
</view>
@ -390,7 +390,7 @@ @@ -390,7 +390,7 @@
<view class="across"></view>
<view class="vertical-grow"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{subSubItem.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -445,7 +445,7 @@ @@ -445,7 +445,7 @@
<view class="vertical"></view>
<view class="across"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{item.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"

8
src/module1/pages/org4/index.ts

@ -59,7 +59,7 @@ Page({ @@ -59,7 +59,7 @@ Page({
DepartmentName,
});
this.getManageDoctor();
this.getTree()
this.getTree();
},
handleInvite() {
wx.navigateTo({
@ -133,6 +133,12 @@ Page({ @@ -133,6 +133,12 @@ Page({
return item;
});
},
handleDoctrDetail(e) {
const { id } = e.currentTarget.dataset;
wx.navigateTo({
url: `/module1/pages/doctorHome/index?id=${id}`,
});
},
});
export {};

24
src/module1/pages/org4/index.wxml

@ -47,7 +47,7 @@ @@ -47,7 +47,7 @@
<block wx:for="{{tree}}" wx:key="DoctorId">
<view class="container" wx:if="{{userInfo.DoctorId == item.DoctorId}}">
<view class="level-three {{item.active && 'active'}}">
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{item.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -73,7 +73,7 @@ @@ -73,7 +73,7 @@
<view class="label">{{dept.DepartmentName}}</view>
</block>
</view>
<view class="fold" bind:tap="handleFoldAll">
<view class="fold" catch:tap="handleFoldAll">
{{item.fold ? '全部展开':'全部收起'}}
<image class="f-icon" src="{{imageUrl}}fold-{{item.fold?'down':'top'}}.png?t={{Timestamp}}"></image>
</view>
@ -99,7 +99,7 @@ @@ -99,7 +99,7 @@
</view>
<view class="container" wx:elif="{{item.DoctorLevel=='3'}}">
<view class="level-three {{item.active && 'active'}}">
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{item.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -125,7 +125,7 @@ @@ -125,7 +125,7 @@
<view class="label">{{dept.DepartmentName}}</view>
</block>
</view>
<view class="fold" bind:tap="handleFold" data-index="{{index}}">
<view class="fold" catch:tap="handleFold" data-index="{{index}}">
{{item.fold ? '展开':'收起'}}
<image class="f-icon" src="{{imageUrl}}fold-{{item.fold?'down':'top'}}.png?t={{Timestamp}}"></image>
</view>
@ -162,7 +162,7 @@ @@ -162,7 +162,7 @@
<view class="vertical"></view>
<view class="across"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{subItem.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -188,7 +188,7 @@ @@ -188,7 +188,7 @@
<view class="label">{{dept.DepartmentName}}</view>
</block>
</view>
<view class="fold" bind:tap="handleSubFold" data-index="{{index}}" data-subindex="{{subIndex}}">
<view class="fold" catch:tap="handleSubFold" data-index="{{index}}" data-subindex="{{subIndex}}">
{{subItem.fold ? '展开':'收起'}}
<image
class="f-icon"
@ -232,7 +232,7 @@ @@ -232,7 +232,7 @@
<view class="across"></view>
<view class="vertical-grow" wx:if="{{subItem.Children.length > index+1}}"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{subSubItem.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -287,7 +287,7 @@ @@ -287,7 +287,7 @@
<view class="vertical"></view>
<view class="across"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{subItem.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -342,7 +342,7 @@ @@ -342,7 +342,7 @@
<view class="vertical"></view>
<view class="across"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{item.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -368,7 +368,7 @@ @@ -368,7 +368,7 @@
<view class="label">{{dept.DepartmentName}}</view>
</block>
</view>
<view class="fold" bind:tap="handleFold" data-index="{{index}}">
<view class="fold" catch:tap="handleFold" data-index="{{index}}">
{{item.fold ? '展开':'收起'}}
<image class="f-icon" src="{{imageUrl}}fold-{{item.fold?'down':'top'}}.png?t={{Timestamp}}"></image>
</view>
@ -403,7 +403,7 @@ @@ -403,7 +403,7 @@
<view class="across"></view>
<view class="vertical-grow"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{subSubItem.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"
@ -458,7 +458,7 @@ @@ -458,7 +458,7 @@
<view class="vertical"></view>
<view class="across"></view>
</view>
<view class="doctor">
<view class="doctor" bind:tap="handleDoctrDetail" data-id="{{item.DoctorInfo.doctorId}}">
<view class="avatar-wrap">
<doctorAvatar
class="avatar"

10
src/pages/home/index.ts

@ -16,7 +16,10 @@ Page({ @@ -16,7 +16,10 @@ Page({
hospitalClassification: {},
hospitalLevel: {},
},
onLoad() {
onShow() {
this.setData({
hide: false,
});
this.getTabBar().setData({
active: 1,
});
@ -36,11 +39,6 @@ Page({ @@ -36,11 +39,6 @@ Page({
this.getNotice();
});
},
onShow() {
this.setData({
hide: false,
});
},
onHide() {
this.setData({
hide: true,

Loading…
Cancel
Save