Browse Source

1. 聊天室增加撤回功能

2. 客户uat问题处理
main
kola-web 3 months ago
parent
commit
3a42cea45e
  1. 10
      README.md
  2. 7
      project.private.config.json
  3. 3
      src/app.ts
  4. 21
      src/echart/components/homeLevel1/index.ts
  5. 96
      src/echart/components/homeLevel1/index.wxml
  6. 14
      src/echart/components/homeLevel2/index.scss
  7. 23
      src/echart/components/homeLevel2/index.ts
  8. 151
      src/echart/components/homeLevel2/index.wxml
  9. 14
      src/echart/components/homeLevel3/index.scss
  10. 15
      src/echart/components/homeLevel3/index.ts
  11. 87
      src/echart/components/homeLevel3/index.wxml
  12. 20
      src/echart/components/homeLevel4/index.scss
  13. 17
      src/echart/components/homeLevel4/index.ts
  14. 211
      src/echart/components/homeLevel4/index.wxml
  15. BIN
      src/images/recall.png
  16. 40
      src/module1/pages/chatRoom/index.scss
  17. 86
      src/module1/pages/chatRoom/index.ts
  18. 106
      src/module1/pages/chatRoom/index.wxml
  19. 19
      src/module1/pages/chatRoomInfo/index.wxml
  20. 3
      src/module1/pages/doctorRankList/index.json
  21. 3
      src/module1/pages/doctorRankList/index.scss
  22. 14
      src/module1/pages/doctorRankList/index.ts
  23. 41
      src/module1/pages/doctorRankList/index.wxml
  24. 7
      src/module1/pages/entryCases/index.scss
  25. 21
      src/module1/pages/entryCases/index.ts
  26. 97
      src/module1/pages/entryCases/index.wxml
  27. 2
      src/module1/pages/setChatDoctor/index.ts
  28. 4
      src/module1/pages/setInfo/index.ts
  29. 3
      src/pages/cases/index.scss
  30. 19
      src/pages/cases/index.ts
  31. 13
      src/pages/cases/index.wxml
  32. 3
      src/pages/chatRoomList/index.ts
  33. 3
      src/pages/home/index.ts
  34. 3
      typings/index.d.ts

10
README.md

@ -3,6 +3,7 @@ @@ -3,6 +3,7 @@
3. 图像识别模糊 可以反向确认 通过ocr识别接口 接入ocr同时识别不到 姓名,年龄等字样,及判断该病历已被涂抹
<!--占位图像-->
https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567
images svn 地址
@ -24,3 +25,12 @@ wx.showModal({ @@ -24,3 +25,12 @@ wx.showModal({
cancelColor: "#141515",
});
```
医生待审核 /module1/pages/auditDoctorList/index
医生端首页 /pages/home/index
身份信息编辑页 /module1/pages/userInfo/index
医院信息编辑页面 /module1/pages/cHostipal/index
我的病历列表 /pages/cases/index
病历详情页 /module1/pages/casesDetail/index?id=病例id
病历编辑页面 /module1/pages/entryCases/index?id=病例id
聊天室互动页 /module1/pages/chatRoom/index?id=聊天室id

7
project.private.config.json

@ -9,6 +9,13 @@ @@ -9,6 +9,13 @@
"miniprogram": {
"list": [
{
"name": "module1/pages/chatRoom/index",
"pathName": "module1/pages/chatRoom/index",
"query": "id=28",
"launchMode": "default",
"scene": null
},
{
"name": "注销",
"pathName": "module1/pages/loginOut/index",
"query": "",

3
src/app.ts

@ -36,6 +36,9 @@ App<IAppOption>({ @@ -36,6 +36,9 @@ App<IAppOption>({
needDeal: "",
caseNav: "0",
caseStatus: "",
caseStatusName: "全部",
newFeedback: "",
},
onLaunch() {
Page = page as WechatMiniprogram.Page.Constructor;

21
src/echart/components/homeLevel1/index.ts

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
const _app = getApp<IAppOption>();
const app = getApp<IAppOption>();
// pages/story/a.ts
Component({
@ -88,6 +88,7 @@ Component({ @@ -88,6 +88,7 @@ Component({
});
},
handleCaseUpdate() {
app.globalData.newFeedback = "1";
wx.switchTab({
url: "/pages/cases/index",
});
@ -101,6 +102,24 @@ Component({ @@ -101,6 +102,24 @@ Component({
const { index } = e.currentTarget.dataset;
this.triggerEvent("question", index);
},
handleCase(e) {
const { type } = e.currentTarget.dataset;
const name = {
0: "全部",
2: "新病历",
3: "讨论中",
4: "已归档",
}[type];
app.globalData.caseStatus = type === "0" ? "" : type;
app.globalData.caseStatusName = name;
wx.switchTab({
url: "/pages/cases/index",
});
},
handleCooperateDetail(e) {
const { index } = e.currentTarget.dataset;
this.selectComponent(`#cooperate${index}`).handleDetail();
},
},
});

96
src/echart/components/homeLevel1/index.wxml

@ -1,6 +1,11 @@ @@ -1,6 +1,11 @@
<view class="page">
<view class="user">
<doctorAvatar did="{{userInfo.DoctorId}}" class="avatar" src="{{userInfo.Img}}" level="{{userInfo.DoctorLevel}}"></doctorAvatar>
<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>
@ -17,10 +22,7 @@ @@ -17,10 +22,7 @@
</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 class="title" style="background: url({{imageUrl}}home-banner-title-bg.png?r={{Timestamp}}) no-repeat top center/262rpx 116rpx;">
待处理事项
</view>
<view class="bg">
@ -46,31 +48,66 @@ @@ -46,31 +48,66 @@
<view class="s-container">
<view class="item">
<view class="name">总数</view>
<view class="num">{{case.totalCaseCount}}</view>
<view
class="num"
bind:tap="handleCase"
data-type="0"
>{{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)" />
<van-icon
bind:tap="handleQuestion"
data-index="1"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="2"
>{{case.newCaseCount}}
</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)" />
<van-icon
bind:tap="handleQuestion"
data-index="2"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="3"
>{{case.feedbackCaseCount}}
</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)" />
<van-icon
bind:tap="handleQuestion"
data-index="3"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="4"
>{{case.archiveCaseCount}}
</view>
<view class="num">{{case.archiveCaseCount}}</view>
</view>
</view>
</view>
@ -100,9 +137,25 @@ @@ -100,9 +137,25 @@
</block>
</view>
</view>
<view id="fold1" class="doctor-list {{fold1 && 'doctor-list-fold'}}" style="--fold-height: {{foldHeight1}}px;">
<view class="doctor" wx:for="{{cooperateList}}" wx:key="DoctorId">
<doctorAvatar did="{{item.DoctorId}}" class="avatar" src="{{item.DoctorImg}}" level="{{item.DoctorLevel}}"></doctorAvatar>
<view
id="fold1"
class="doctor-list {{fold1 && 'doctor-list-fold'}}"
style="--fold-height: {{foldHeight1}}px;"
>
<view
class="doctor"
wx:for="{{cooperateList}}"
wx:key="DoctorId"
bind:tap="handleCooperateDetail"
data-index="{{index}}"
>
<doctorAvatar
id="cooperate{{index}}"
did="{{item.DoctorId}}"
class="avatar"
src="{{item.DoctorImg}}"
level="{{item.DoctorLevel}}"
></doctorAvatar>
<view class="wrap">
<view class="w-header">
<view class="name">{{item.DoctorName}}</view>
@ -123,8 +176,17 @@ @@ -123,8 +176,17 @@
</view>
</view>
<view class="w-footer" wx:if="{{item.specialty.length}}">
<image class="wf-label" src="{{imageUrl}}text-specialty.png?t={{Timestamp}}" mode="aspectFit"></image>
<view class="wf-tag" wx:for="{{item.specialty}}" wx:key="SpecialtyId">{{item.SpecialtyName}}</view>
<image
class="wf-label"
src="{{imageUrl}}text-specialty.png?t={{Timestamp}}"
mode="aspectFit"
></image>
<view
class="wf-tag"
wx:for="{{item.specialty}}"
wx:key="SpecialtyId"
>{{item.SpecialtyName}}
</view>
</view>
</view>
</view>

14
src/echart/components/homeLevel2/index.scss

@ -135,6 +135,20 @@ @@ -135,6 +135,20 @@
font-size: 56rpx;
color: #fff;
line-height: 56rpx;
display: flex;
justify-content: center;
.num-center {
position: relative;
.dot {
position: absolute;
top: -10rpx;
right: -10rpx;
width: 16rpx;
height: 16rpx;
background-color: #ed4f39;
border-radius: 50%;
}
}
}
}
.line {

23
src/echart/components/homeLevel2/index.ts

@ -130,6 +130,21 @@ Component({ @@ -130,6 +130,21 @@ Component({
});
},
handleCaseUpdate() {
app.globalData.newFeedback = "1";
wx.switchTab({
url: "/pages/cases/index",
});
},
handleCase(e) {
const { type } = e.currentTarget.dataset;
const name = {
0: "全部",
2: "新病历",
3: "讨论中",
4: "已归档",
}[type];
app.globalData.caseStatus = type === "0" ? "" : type;
app.globalData.caseStatusName = name;
wx.switchTab({
url: "/pages/cases/index",
});
@ -159,6 +174,14 @@ Component({ @@ -159,6 +174,14 @@ Component({
newCaseShow: false,
});
},
handleCooperateDetail(e) {
const { index } = e.currentTarget.dataset;
this.selectComponent(`#cooperate${index}`).handleDetail();
},
handleInviteDetail(e) {
const { index } = e.currentTarget.dataset;
this.selectComponent(`#invite${index}`).handleDetail();
},
},
});

151
src/echart/components/homeLevel2/index.wxml

@ -6,7 +6,11 @@ @@ -6,7 +6,11 @@
src="{{userInfo.Img}}"
level="{{userInfo.DoctorLevel}}"
></doctorAvatar>
<image class="code" bind:tap="handleInvite" src="{{imageUrl}}icon-code.png?t={{Timestamp}}"></image>
<image
class="code"
bind:tap="handleInvite"
src="{{imageUrl}}icon-code.png?t={{Timestamp}}"
></image>
<view class="wrap">
<view class="w-header">
<view class="name">{{userInfo.Name}}</view>
@ -27,26 +31,34 @@ @@ -27,26 +31,34 @@
</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>
<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 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="b-container" wx:if="{{take.dealCaseCount>0 || take.notReadFeedBackCount>0 || take.notReadChatRoomCount>0 || take.toAuditDoctorCount>0}}">
<view class="item" bind:tap="handlePendCase">
<view class="name">待处理病历</view>
<view class="num">{{take.dealCaseCount*1 || '--'}}</view>
<view class="num">
<view class="num-center">
{{take.dealCaseCount*1 || '--'}}
<view class="dot" wx:if="{{take.dealCaseCount*1}}"></view>
</view>
</view>
</view>
<view class="item" bind:tap="handleCaseUpdate">
<view class="name">病历更新</view>
@ -77,17 +89,36 @@ @@ -77,17 +89,36 @@
<view class="s-container">
<view class="item">
<view class="name">全部</view>
<view class="num">{{case.totalCaseCount}}</view>
<view
class="num"
bind:tap="handleCase"
data-type="0"
>{{case.totalCaseCount}}
</view>
</view>
<view class="line"></view>
<view class="item" bind:tap="handleNewCase">
<view class="name">
<view class="item">
<view class="name" bind:tap="handleNewCase">
新病历
<van-icon catch:tap="handleQuestion" data-index="1" name="question" color="rgba(224, 224, 224, 1)" />
<van-icon
catch:tap="handleQuestion"
data-index="1"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="2"
>{{case.newCaseCount}}
</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>
<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>
@ -97,17 +128,37 @@ @@ -97,17 +128,37 @@
<view class="item">
<view class="name">
讨论中
<van-icon catch:tap="handleQuestion" data-index="2" name="question" color="rgba(224, 224, 224, 1)" />
<van-icon
catch:tap="handleQuestion"
data-index="2"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="3"
>{{case.feedbackCaseCount}}
</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)" />
<van-icon
bind:tap="handleQuestion"
data-index="3"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="4"
>{{case.archiveCaseCount}}
</view>
<view class="num">{{case.archiveCaseCount}}</view>
</view>
</view>
</view>
@ -137,9 +188,20 @@ @@ -137,9 +188,20 @@
</block>
</view>
</view>
<view id="fold1" class="doctor-list {{fold1 && 'doctor-list-fold'}}" style="--fold-height: {{foldHeight1}}px;">
<view class="doctor" wx:for="{{cooperateList}}" wx:key="DoctorId">
<view
id="fold1"
class="doctor-list {{fold1 && 'doctor-list-fold'}}"
style="--fold-height: {{foldHeight1}}px;"
>
<view
class="doctor"
wx:for="{{cooperateList}}"
wx:key="DoctorId"
bind:tap="handleCooperateDetail"
data-index="{{index}}"
>
<doctorAvatar
id="cooperate{{index}}"
did="{{item.DoctorId}}"
class="avatar"
src="{{item.DoctorImg}}"
@ -165,8 +227,17 @@ @@ -165,8 +227,17 @@
</view>
</view>
<view class="w-footer" wx:if="{{item.specialty.length}}">
<image class="wf-label" src="{{imageUrl}}text-specialty.png?t={{Timestamp}}" mode="aspectFit"></image>
<view class="wf-tag" wx:for="{{item.specialty}}" wx:key="SpecialtyId">{{item.SpecialtyName}}</view>
<image
class="wf-label"
src="{{imageUrl}}text-specialty.png?t={{Timestamp}}"
mode="aspectFit"
></image>
<view
class="wf-tag"
wx:for="{{item.specialty}}"
wx:key="SpecialtyId"
>{{item.SpecialtyName}}
</view>
</view>
</view>
</view>
@ -198,9 +269,20 @@ @@ -198,9 +269,20 @@
</block>
</view>
</view>
<view id="fold2" class="doctor-list {{fold2 && 'doctor-list-fold'}}" style="--fold-height: {{foldHeight2}}px;">
<view class="doctor" wx:for="{{inviteList}}" wx:key="DoctorId">
<view
id="fold2"
class="doctor-list {{fold2 && 'doctor-list-fold'}}"
style="--fold-height: {{foldHeight2}}px;"
>
<view
class="doctor"
wx:for="{{inviteList}}"
wx:key="DoctorId"
bind:tap="handleInviteDetail"
data-index="{{index}}"
>
<doctorAvatar
id="invite{{index}}"
did="{{item.DoctorId}}"
class="avatar"
src="{{item.DoctorImg}}"
@ -227,8 +309,17 @@ @@ -227,8 +309,17 @@
</view>
</view>
<view class="w-footer" wx:if="{{item.specialty.length}}">
<image class="wf-label" src="{{imageUrl}}text-specialty.png?t={{Timestamp}}" mode="aspectFit"></image>
<view class="wf-tag" wx:for="{{item.specialty}}" wx:key="SpecialtyId">{{item.SpecialtyName}}</view>
<image
class="wf-label"
src="{{imageUrl}}text-specialty.png?t={{Timestamp}}"
mode="aspectFit"
></image>
<view
class="wf-tag"
wx:for="{{item.specialty}}"
wx:key="SpecialtyId"
>{{item.SpecialtyName}}
</view>
</view>
</view>
</view>

14
src/echart/components/homeLevel3/index.scss

@ -135,6 +135,20 @@ @@ -135,6 +135,20 @@
font-size: 56rpx;
color: #fff;
line-height: 56rpx;
display: flex;
justify-content: center;
.num-center {
position: relative;
.dot {
position: absolute;
top: -10rpx;
right: -10rpx;
width: 16rpx;
height: 16rpx;
background-color: #ed4f39;
border-radius: 50%;
}
}
}
}
.line {

15
src/echart/components/homeLevel3/index.ts

@ -88,6 +88,7 @@ Component({ @@ -88,6 +88,7 @@ Component({
});
},
handleCaseUpdate() {
app.globalData.newFeedback = "1";
wx.switchTab({
url: "/pages/cases/index",
});
@ -106,6 +107,20 @@ Component({ @@ -106,6 +107,20 @@ Component({
const { index } = e.currentTarget.dataset;
this.triggerEvent("question", index);
},
handleCase(e) {
const { type } = e.currentTarget.dataset;
const name = {
0: "全部",
2: "新病历",
3: "讨论中",
4: "已归档",
}[type];
app.globalData.caseStatus = type === "0" ? "" : type;
app.globalData.caseStatusName = name;
wx.switchTab({
url: "/pages/cases/index",
});
},
},
});

87
src/echart/components/homeLevel3/index.wxml

@ -1,7 +1,16 @@ @@ -1,7 +1,16 @@
<view class="page">
<view class="user">
<doctorAvatar did="{{userInfo.DoctorId}}" class="avatar" src="{{userInfo.Img}}" level="{{userInfo.DoctorLevel}}"></doctorAvatar>
<image class="code" bind:tap="handleInvite" src="{{imageUrl}}icon-code.png?t={{Timestamp}}"></image>
<doctorAvatar
did="{{userInfo.DoctorId}}"
class="avatar"
src="{{userInfo.Img}}"
level="{{userInfo.DoctorLevel}}"
></doctorAvatar>
<image
class="code"
bind:tap="handleInvite"
src="{{imageUrl}}icon-code.png?t={{Timestamp}}"
></image>
<view class="wrap">
<view class="w-header">
<view class="name">{{userInfo.Name}}</view>
@ -22,23 +31,34 @@ @@ -22,23 +31,34 @@
</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>
<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 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" bind:tap="handlePendCase">
<view class="name">待处理病历</view>
<view class="num">{{take.dealCaseCount*1 || '--'}}</view>
<view class="num">
<view class="num-center">
{{take.dealCaseCount*1 || '--'}}
<view class="dot" wx:if="{{take.dealCaseCount*1}}"></view>
</view>
</view>
</view>
<view class="item" bind:tap="handleCaseUpdate">
<view class="name">病历更新</view>
@ -68,29 +88,64 @@ @@ -68,29 +88,64 @@
<view class="s-container">
<view class="item">
<view class="name">全部</view>
<view class="num">{{case.totalCaseCount}}</view>
<view
class="num"
bind:tap="handleCase"
data-type="0"
>{{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)" />
<van-icon
catch:tap="handleQuestion"
data-index="1"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="2"
>{{case.newCaseCount}}
</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)" />
<van-icon
catch:tap="handleQuestion"
data-index="2"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="3"
>{{case.feedbackCaseCount}}
</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)" />
<van-icon
bind:tap="handleQuestion"
data-index="3"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="4"
>{{case.archiveCaseCount}}
</view>
<view class="num">{{case.archiveCaseCount}}</view>
</view>
</view>
</view>

20
src/echart/components/homeLevel4/index.scss

@ -134,6 +134,20 @@ @@ -134,6 +134,20 @@
font-size: 56rpx;
color: #fff;
line-height: 56rpx;
display: flex;
justify-content: center;
.num-center {
position: relative;
.dot {
position: absolute;
top: -10rpx;
right: -10rpx;
width: 16rpx;
height: 16rpx;
background-color: #ed4f39;
border-radius: 50%;
}
}
}
}
.line {
@ -451,6 +465,12 @@ @@ -451,6 +465,12 @@
.th5 {
width: 96rpx;
white-space: nowrap;
display: flex;
align-items: center;
justify-content: center;
.icon {
margin-left: 0rpx;
}
}
}
.tbody {

17
src/echart/components/homeLevel4/index.ts

@ -657,7 +657,7 @@ Component({ @@ -657,7 +657,7 @@ Component({
url: "/module1/pages/invite/index",
});
},
handleCase() {
handleAllCase() {
app.globalData.caseNav = "3";
wx.switchTab({
url: "/pages/cases/index",
@ -699,6 +699,21 @@ Component({ @@ -699,6 +699,21 @@ Component({
newCaseShow: false,
});
},
handleCase(e) {
const { type } = e.currentTarget.dataset;
const name = {
0: "全部",
2: "新病历",
3: "讨论中",
4: "已归档",
}[type];
app.globalData.caseNav = "3";
app.globalData.caseStatus = type === "0" ? "" : type;
app.globalData.caseStatusName = name;
wx.switchTab({
url: "/pages/cases/index",
});
},
},
});

211
src/echart/components/homeLevel4/index.wxml

@ -1,7 +1,16 @@ @@ -1,7 +1,16 @@
<view class="page">
<view class="user">
<doctorAvatar did="{{userInfo.DoctorId}}" class="avatar" src="{{userInfo.Img}}" level="4"></doctorAvatar>
<image class="code" bind:tap="handleInvite" src="{{imageUrl}}icon-code.png?t={{Timestamp}}"></image>
<doctorAvatar
did="{{userInfo.DoctorId}}"
class="avatar"
src="{{userInfo.Img}}"
level="4"
></doctorAvatar>
<image
class="code"
bind:tap="handleInvite"
src="{{imageUrl}}icon-code.png?t={{Timestamp}}"
></image>
<view class="wrap">
<view class="w-header">
<view class="name">{{userInfo.Name}}</view>
@ -22,23 +31,34 @@ @@ -22,23 +31,34 @@
</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>
<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 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" bind:tap="handlePendCase">
<view class="name">待处理病历</view>
<view class="num">{{take.dealCaseCount*1 || '--'}}</view>
<view class="num">
<view class="num-center">
{{take.dealCaseCount*1 || '--'}}
<view class="dot" wx:if="{{take.dealCaseCount*1}}"></view>
</view>
</view>
</view>
<view class="item" bind:tap="handleChat">
<view class="name">学习窗消息</view>
@ -51,33 +71,50 @@ @@ -51,33 +71,50 @@
</view>
</view>
</view>
<view
class="stat"
style="background: url({{imageUrl}}home-stat-bg.png?r={{Timestamp}}) no-repeat top center/100% 100%;"
>
<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">
<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="more" bind:tap="handleCase">
<view class="more" bind:tap="handleAllCase">
查看全部
<van-icon name="arrow" />
</view>
<view class="s-container" wx:if="{{case.totalCaseCount>0}}">
<view class="item">
<view class="name">全部</view>
<view class="num">{{case.totalCaseCount}}</view>
<view
class="num"
bind:tap="handleCase"
data-type="0"
>{{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)" />
<van-icon
catch:tap="handleQuestion"
data-index="1"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="2"
>{{case.newCaseCount}}
</view>
<view class="num">{{case.newCaseCount}}</view>
<view class="item-toast" wx:if="{{newCaseShow}}">
<image
class="i-clsoe"
@ -92,16 +129,36 @@ @@ -92,16 +129,36 @@
<view class="item">
<view class="name">
讨论中
<van-icon catch:tap="handleQuestion" data-index="2" name="question" color="rgba(224, 224, 224, 1)" />
<van-icon
catch:tap="handleQuestion"
data-index="2"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="3"
>{{case.feedbackCaseCount}}
</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)" />
<van-icon
bind:tap="handleQuestion"
data-index="3"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view
class="num"
bind:tap="handleCase"
data-type="4"
>{{case.archiveCaseCount}}
</view>
<view class="num">{{case.archiveCaseCount}}</view>
</view>
</view>
<view class="s-container-none" wx:else>
@ -150,9 +207,20 @@ @@ -150,9 +207,20 @@
<view class="c-header">
<view class="name">
科室医生入驻情况
<van-icon bind:tap="handleQuestion" data-index="4" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<picker class="picker" mode="date" end="{{endYear}}" fields="year" bindchange="handleYear1">
<van-icon
bind:tap="handleQuestion"
data-index="4"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<picker
class="picker"
mode="date"
end="{{endYear}}"
fields="year"
bindchange="handleYear1"
>
<view class="picker-content">
<view class="text">{{year1}}年</view>
<van-icon name="arrow-down" />
@ -167,7 +235,11 @@ @@ -167,7 +235,11 @@
</view>
<block wx:else>
<view class="chart">
<ec-canvas id="chart1" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
<ec-canvas
id="chart1"
canvas-id="mychart-bar"
ec="{{ ec }}"
></ec-canvas>
</view>
<view class="tip">注:一级医生为平台全部医生,不区分科室</view>
</block>
@ -176,9 +248,20 @@ @@ -176,9 +248,20 @@
<view class="c-header">
<view class="name">
累计病历统计
<van-icon bind:tap="handleQuestion" data-index="5" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<picker class="picker" mode="date" end="{{endYear}}" fields="year" bindchange="handleYear2">
<van-icon
bind:tap="handleQuestion"
data-index="5"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<picker
class="picker"
mode="date"
end="{{endYear}}"
fields="year"
bindchange="handleYear2"
>
<view class="picker-content">
<view class="text">{{year2}}年</view>
<van-icon name="arrow-down" />
@ -192,16 +275,31 @@ @@ -192,16 +275,31 @@
</view>
</view>
<view class="chart" wx:else>
<ec-canvas id="chart2" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
<ec-canvas
id="chart2"
canvas-id="mychart-bar"
ec="{{ ec }}"
></ec-canvas>
</view>
</view>
<view class="chart-card">
<view class="c-header">
<view class="name">
科室新增病历统计
<van-icon bind:tap="handleQuestion" data-index="6" name="question" color="rgba(224, 224, 224, 1)" />
</view>
<picker class="picker" mode="date" end="{{endYear}}" fields="year" bindchange="handleYear3">
<van-icon
bind:tap="handleQuestion"
data-index="6"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<picker
class="picker"
mode="date"
end="{{endYear}}"
fields="year"
bindchange="handleYear3"
>
<view class="picker-content">
<view class="text">{{year3}}年</view>
<van-icon name="arrow-down" />
@ -215,14 +313,23 @@ @@ -215,14 +313,23 @@
</view>
</view>
<view class="chart" wx:else>
<ec-canvas id="chart3" canvas-id="mychart-bar" ec="{{ ec }}"></ec-canvas>
<ec-canvas
id="chart3"
canvas-id="mychart-bar"
ec="{{ ec }}"
></ec-canvas>
</view>
</view>
<view class="rank">
<view class="r-header">
<view class="title">
医院活跃排行榜
<van-icon bind:tap="handleQuestion" data-index="7" name="question" color="rgba(224, 224, 224, 1)" />
<van-icon
bind:tap="handleQuestion"
data-index="7"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view class="more" bind:tap="handleRankDetail">
查看全部
@ -233,12 +340,38 @@ @@ -233,12 +340,38 @@
<view class="thead">
<view class="th1">医院</view>
<view class="th2">医生总数</view>
<view class="th3">S1</view>
<view class="th4">S2</view>
<view class="th5">S3</view>
<view class="th3">S1
<van-icon
class="icon"
catch:tap="handleQuestion"
data-index="8"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view class="th4">S2
<van-icon
catch:tap="handleQuestion"
data-index="9"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view class="th5">S3
<van-icon
catch:tap="handleQuestion"
data-index="10"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
</view>
<view class="tbody">
<view class="tr" wx:for="{{rankList}}" wx:key="HospitalId">
<view
class="tr"
wx:for="{{rankList}}"
wx:key="HospitalId"
>
<view class="td1">{{index+1}} {{item.HospitalName}}</view>
<view class="td2">{{item.TotalDoctorCount}}</view>
<view class="td3">{{item.DoctorLevel1Count}}</view>

BIN
src/images/recall.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 693 B

40
src/module1/pages/chatRoom/index.scss

@ -109,7 +109,14 @@ page { @@ -109,7 +109,14 @@ page {
color: rgba(173, 179, 180, 1);
text-align: center;
}
.create {
.create,
.recall {
padding-top: 20rpx;
font-size: 28rpx;
color: rgba(173, 179, 180, 1);
text-align: center;
}
.recall {
padding-top: 20rpx;
font-size: 28rpx;
color: rgba(173, 179, 180, 1);
@ -232,6 +239,36 @@ page { @@ -232,6 +239,36 @@ page {
display: flex;
flex-direction: column;
align-items: flex-end;
position: relative;
.longpress {
position: absolute;
top: 30rpx;
transform: translate(0, -100%);
background-color: #4c4c4c;
padding: 22rpx 40rpx;
border-radius: 16rpx;
font-size: 28rpx;
color: #ffffff;
display: flex;
align-items: center;
gap: 12rpx;
.icon {
width: 40rpx;
height: 40rpx;
}
&::after {
position: absolute;
bottom: -14rpx;
left: 50%;
transform: translateX(-50%);
content: "";
width: 0;
height: 0;
border-style: solid;
border-width: 24rpx 24rpx 0 24rpx;
border-color: #4c4c4c transparent transparent transparent;
}
}
.user {
padding: 12rpx 0;
font-size: 28rpx;
@ -321,6 +358,7 @@ page { @@ -321,6 +358,7 @@ page {
border-radius: 212rpx 212rpx 212rpx 212rpx;
font-size: 28rpx;
color: #000;
height: 40rpx;
&:empty::after {
content: "请输入";
color: rgba(205, 205, 205, 1);

86
src/module1/pages/chatRoom/index.ts

@ -4,7 +4,7 @@ const app = getApp<IAppOption>(); @@ -4,7 +4,7 @@ const app = getApp<IAppOption>();
interface IMessageItem {
msgId: string;
contentType: "1" | "2" | "3" | "4" | "5"; // 1:文本 2: 语音 3. 图片 4. 视频 5. 提示信息
contentType: "1" | "2" | "3" | "4" | "5" | "6"; // 1:文本 2: 语音 3. 图片 4. 视频 5. 提示信息
content: any;
fromDoctorId: string;
doctorImg: string;
@ -17,6 +17,7 @@ interface IMessageItem { @@ -17,6 +17,7 @@ interface IMessageItem {
showTime?: boolean;
isPlay?: boolean;
uniqueCode?: string;
longpress?: boolean;
}
Page({
@ -179,6 +180,7 @@ Page({ @@ -179,6 +180,7 @@ Page({
lastMsgId: res[0].msgId,
isLoad: false,
});
this.formatRecall();
this.filterCreateTime();
if (!lastMsgId) {
@ -290,6 +292,44 @@ Page({ @@ -290,6 +292,44 @@ Page({
},
});
},
handleRecall(e) {
const { index } = e.currentTarget.dataset;
const { messageList } = this.data;
const message = messageList[index];
this.delMessage(message);
this.senRecallMessage(index);
},
delMessage(message) {
const { id } = this.data;
wx.ajax({
method: "POST",
url: "?r=takeda/chat/del-message",
data: {
roomId: id,
msgId: message.msgId,
uniqueCode: message.uniqueCode,
},
});
},
senRecallMessage(index) {
const { userInfo, messageList } = this.data;
const message: IMessageItem = {
msgId: "",
contentType: "6",
content: "你撤回了一条消息",
fromDoctorId: userInfo.DoctorId,
createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
isSelf: 1,
isRead: 2,
doctorImg: userInfo.Img,
doctorName: userInfo.Name,
hospitalName: userInfo.HospitalName,
};
messageList.splice(index, 1, message);
this.setData({
messageList,
});
},
WebIMLogin() {
const { chatDoctor } = this.data;
wx.WebIM.conn
@ -317,9 +357,10 @@ Page({ @@ -317,9 +357,10 @@ Page({
wx.WebIM.conn
.send(msg)
.then((res) => {
this.sendMessage({ ...message, uniqueCode: res.serverMsgId });
const uniqueCodeMessage = { ...message, uniqueCode: res.serverMsgId };
this.sendMessage(uniqueCodeMessage);
this.setData({
messageList: [...this.data.messageList, this.formatMessage(message)],
messageList: [...this.data.messageList, this.formatMessage(uniqueCodeMessage)],
});
this.handleView();
})
@ -348,6 +389,7 @@ Page({ @@ -348,6 +389,7 @@ Page({
}),
],
});
this.formatRecall();
this.handleReadAll();
this.handleView();
}
@ -397,6 +439,20 @@ Page({ @@ -397,6 +439,20 @@ Page({
messageList,
});
},
formatRecall() {
const { messageList } = this.data;
messageList.forEach((item) => {
// if (item.contentType === "6" && item.isSelf === 2) {
// item.content = `"${item.doctorName}"撤回了一条消息`;
// }
if (item.contentType === "6" && item.isSelf === 1) {
item.content = `你撤回了一条消息`;
}
});
this.setData({
messageList,
});
},
handleFooter() {
this.setData({
fold: !this.data.fold,
@ -436,12 +492,12 @@ Page({ @@ -436,12 +492,12 @@ Page({
messageList,
});
});
this.innerAudioContext.onStop(()=>{
this.innerAudioContext.onStop(() => {
messageItem.isPlay = false;
this.setData({
messageList,
});
})
});
this.setData({
messageList,
});
@ -498,4 +554,24 @@ Page({ @@ -498,4 +554,24 @@ Page({
focus: !this.data.record,
});
},
handleLongpress(e) {
const { index } = e.currentTarget.dataset;
const { messageList } = this.data;
if (["1", "2", "3", "4"].includes(messageList[index].contentType)) {
messageList[index].longpress = true;
this.setData({
messageList,
});
}
},
handleNoLongPress() {
const { messageList } = this.data;
messageList.map((item) => {
item.longpress = false;
return item;
});
this.setData({
messageList,
});
},
});

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

@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
<view class="page">
<view class="page" bind:tap="handleNoLongPress">
<view class="page-header">
<view class="info">
<view class="photos" bind:tap="handleRoomDetail">
@ -40,11 +40,22 @@ @@ -40,11 +40,22 @@
bindscrolltoupper="scrolltoupper"
>
<van-loading wx:if="{{isLoad && !isFinish}}" />
<view wx:for="{{messageList}}" wx:key="msgId" wx:for-item="message" wx:for-index="mIndex" id="view{{mIndex}}">
<view
wx:for="{{messageList}}"
wx:key="msgId"
wx:for-item="message"
wx:for-index="mIndex"
id="view{{mIndex}}"
>
<view class="date" wx:if="{{message.showTime}}">{{message.createTimeName}}</view>
<view class="create" wx:if="{{message.contentType==='5'}}">{{message.content}}</view>
<view class="recall" wx:elif="{{message.contentType==='6'}}">{{message.content}}</view>
<view class="doctor" wx:elif="{{message.isSelf===2}}">
<doctorAvatar did="{{message.fromDoctorId}}" class="avatar" src="{{message.doctorImg}}"></doctorAvatar>
<doctorAvatar
did="{{message.fromDoctorId}}"
class="avatar"
src="{{message.doctorImg}}"
></doctorAvatar>
<view class="d-container">
<view class="user">{{message.doctorName}} {{message.hospitalName}}</view>
<view class="message" wx:if="{{message.contentType==='1'}}">{{message.content}}</view>
@ -60,7 +71,12 @@ @@ -60,7 +71,12 @@
src="{{imageUrl}}/audio-right.gif?t={{Timestamp}}"
mode="aspectFit"
></image>
<image wx:else class="icon" src="{{imageUrl}}/audio-right.png?t={{Timestamp}}" mode="aspectFit"></image>
<image
wx:else
class="icon"
src="{{imageUrl}}/audio-right.png?t={{Timestamp}}"
mode="aspectFit"
></image>
{{message.content.duration}}″
<view style="width:{{message.content.duration*3}}px;height: 10px;"></view>
</view>
@ -69,7 +85,6 @@ @@ -69,7 +85,6 @@
class="p-img"
src="{{message.content.url}}"
mode="aspectFit"
show-menu-by-longpress
bind:tap="handlePreview"
data-url="{{message.content.url}}"
></image>
@ -80,16 +95,42 @@ @@ -80,16 +95,42 @@
bind:tap="handleVideo"
data-url="{{message.content.url}}"
>
<image class="v-img" src="{{message.content.imgUrl}}" mode="aspectFill"></image>
<image
class="v-img"
src="{{message.content.imgUrl}}"
mode="aspectFill"
></image>
<image class="play" src="{{imageUrl}}icon-video-play.png?t={{Timestamp}}"></image>
</view>
</view>
</view>
<view class="patient" wx:elif="{{message.isSelf===1}}">
<view class="p-container">
<view
class="p-container"
bind:longpress="handleLongpress"
data-index="{{mIndex}}"
>
<view
class="longpress"
wx:if="{{message.longpress}}"
bind:tap="handleRecall"
data-index="{{mIndex}}"
>
<image
class="icon"
src="{{imageUrl}}/recall.png?t={{Timestamp}}"
mode="aspectFit"
></image>
撤回
</view>
<view class="user">{{message.doctorName}} {{message.hospitalName}}</view>
<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
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}}″
<image
@ -98,14 +139,18 @@ @@ -98,14 +139,18 @@
src="{{imageUrl}}/audio-left.gif?t={{Timestamp}}"
mode="aspectFit"
></image>
<image class="icon" wx:else src="{{imageUrl}}/audio-left.png?t={{Timestamp}}" mode="aspectFit"></image>
<image
class="icon"
wx:else
src="{{imageUrl}}/audio-left.png?t={{Timestamp}}"
mode="aspectFit"
></image>
</view>
<view class="photo" wx:elif="{{message.contentType==='3'}}">
<image
class="p-img"
src="{{message.content.url}}"
mode="aspectFit"
show-menu-by-longpress
bind:tap="handlePreview"
data-url="{{message.content.url}}"
></image>
@ -116,11 +161,19 @@ @@ -116,11 +161,19 @@
bind:tap="handleVideo"
data-url="{{message.content.url}}"
>
<image class="v-img" src="{{message.content.imgUrl}}" mode="aspectFill"></image>
<image
class="v-img"
src="{{message.content.imgUrl}}"
mode="aspectFill"
></image>
<image class="play" src="{{imageUrl}}icon-video-play.png?t={{Timestamp}}"></image>
</view>
</view>
<doctorAvatar did="{{message.fromDoctorId}}" class="avatar" src="{{message.doctorImg}}"></doctorAvatar>
<doctorAvatar
did="{{message.fromDoctorId}}"
class="avatar"
src="{{message.doctorImg}}"
></doctorAvatar>
</view>
</view>
<view id="place" class="place"></view>
@ -157,9 +210,21 @@ @@ -157,9 +210,21 @@
bindblur="handleBlur"
bindfocus="handleFocus"
/>
<view class="place" wx:else bind:tap="handleFocus">{{sendMessage}}</view>
<view
class="place"
wx:else
bind:tap="handleFocus"
>{{sendMessage}}
</view>
</block>
<customRecord wx:else class="custom-record" bind:file="handleSendAudio" slotIcon doubleConform>按住说话</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}}"
@ -172,7 +237,11 @@ @@ -172,7 +237,11 @@
<image class="icon" src="{{imageUrl}}icon-picture.png?t={{Timestamp}}"></image>
<view class="name">照片</view>
</uploadFile>
<uploadFile class="f-item" accept="video" bind:file="handleSendVideo">
<uploadFile
class="f-item"
accept="video"
bind:file="handleSendVideo"
>
<image class="icon" src="{{imageUrl}}icon-video.png?t={{Timestamp}}"></image>
<view class="name">视频</view>
</uploadFile>
@ -181,7 +250,12 @@ @@ -181,7 +250,12 @@
<video id="video" src="{{videoUrl}}"></video>
</view>
<van-popup show="{{ show1 }}" bind:close="onAgreeClose" closeable round>
<van-popup
show="{{ show1 }}"
bind:close="onAgreeClose"
closeable
round
>
<view class="popup1">
<view class="title">用户须知</view>
<view class="scroll">

19
src/module1/pages/chatRoomInfo/index.wxml

@ -1,10 +1,23 @@ @@ -1,10 +1,23 @@
<view class="page">
<view class="container">
<view class="user" wx:for="{{list}}" wx:key="doctorId">
<doctorAvatar did="{{item.doctorId}}" class="avatar" src="{{item.doctorImg}}" level="{{item.doctorLevel}}"></doctorAvatar>
<view
class="user"
wx:for="{{list}}"
wx:key="doctorId"
>
<doctorAvatar
did="{{item.doctorId}}"
class="avatar"
src="{{item.doctorImg}}"
level="{{item.doctorLevel}}"
></doctorAvatar>
<view class="name">{{item.doctorName}}</view>
</view>
<view wx:if="{{canInvite}}" class="add" bind:tap="handleDoctor">
<view
wx:if="{{canInvite}}"
class="add"
bind:tap="handleDoctor"
>
<van-icon name="plus" />
</view>
</view>

3
src/module1/pages/doctorRankList/index.json

@ -2,6 +2,7 @@ @@ -2,6 +2,7 @@
"navigationBarTitleText": "医院活跃排行榜",
"navigationStyle": "default",
"usingComponents": {
"pagination": "/components/pagination/index"
"pagination": "/components/pagination/index",
"van-icon": "@vant/weapp/icon/index"
}
}

3
src/module1/pages/doctorRankList/index.scss

@ -25,6 +25,9 @@ page { @@ -25,6 +25,9 @@ page {
.th3,
.th4,
.th5 {
display: flex;
align-items: center;
justify-content: center;
width: 96rpx;
white-space: nowrap;
}

14
src/module1/pages/doctorRankList/index.ts

@ -40,6 +40,20 @@ Page({ @@ -40,6 +40,20 @@ Page({
this.getList(page + 1);
}
},
handleQuestion(e) {
const index = e.detail;
const tip = {
0: "一级医生",
1: "核心医生",
2: "质控医生",
}[index];
wx.showModal({
content: tip,
confirmColor: "#00B4C5",
cancelColor: "#141515",
showCancel: false,
});
},
});
export {};

41
src/module1/pages/doctorRankList/index.wxml

@ -1,18 +1,43 @@ @@ -1,18 +1,43 @@
<view
class="page"
style="background: url({{imageUrl}}doctor-rank-bg.png?r={{Timestamp}}) no-repeat top center/100% 326rpx;"
>
<view class="page" style="background: url({{imageUrl}}doctor-rank-bg.png?r={{Timestamp}}) no-repeat top center/100% 326rpx;">
<view class="container">
<view class="table" wx:if="{{list.length}}">
<view class="thead">
<view class="th1">医院</view>
<view class="th2">医生总数</view>
<view class="th3">S1</view>
<view class="th4">S2</view>
<view class="th5">S3</view>
<view class="th3">S1
<van-icon
class="icon"
catch:tap="handleQuestion"
data-index="0"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view class="th4">S2
<van-icon
class="icon"
catch:tap="handleQuestion"
data-index="1"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
<view class="th5">S3
<van-icon
class="icon"
catch:tap="handleQuestion"
data-index="2"
name="question"
color="rgba(224, 224, 224, 1)"
/>
</view>
</view>
<view class="tbody">
<view class="tr" wx:for="{{list}}" wx:key="HospitalId">
<view
class="tr"
wx:for="{{list}}"
wx:key="HospitalId"
>
<view class="td1">{{index+1}} {{item.HospitalName}}</view>
<view class="td2">{{item.TotalDoctorCount}}</view>
<view class="td3">{{item.DoctorLevel1Count}}</view>

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

@ -145,7 +145,7 @@ page { @@ -145,7 +145,7 @@ page {
align-items: center;
.trans {
font-size: 28rpx;
color: #01B4C5;
color: #01b4c5;
}
}
}
@ -298,10 +298,11 @@ page { @@ -298,10 +298,11 @@ page {
display: flex;
align-items: center;
justify-content: space-between;
gap: 32rpx;
background-color: #fff;
box-shadow: 0 -10rpx 20rpx rgba(0, 0, 0, 0.1);
.cancel {
width: 332rpx;
flex: 1;
height: 84rpx;
text-align: center;
line-height: 88rpx;
@ -314,7 +315,7 @@ page { @@ -314,7 +315,7 @@ page {
opacity: 0.3;
}
.submit {
width: 330rpx;
flex: 1;
height: 88rpx;
text-align: center;
line-height: 88rpx;

21
src/module1/pages/entryCases/index.ts

@ -24,6 +24,7 @@ Page({ @@ -24,6 +24,7 @@ Page({
edit: true,
DeleteAttachmentIds: [] as any,
auth: {} as any,
},
onLoad(options) {
app.waitLogin().then(async () => {
@ -40,6 +41,7 @@ Page({ @@ -40,6 +41,7 @@ Page({
caseId: options.id,
});
this.getDetail();
this.getAuth();
}
});
},
@ -383,7 +385,11 @@ Page({ @@ -383,7 +385,11 @@ Page({
handleSave() {},
handleSubmit() {},
handleBack() {
const { images, description, audios, files, deptId, labelIds } = this.data;
const { images, description, audios, files, deptId, labelIds, auth, caseId } = this.data;
if (caseId && !auth.canDraft) {
wx.navigateBack();
return;
}
if (!images.length && !description && !audios.length && !files.length && !deptId && !labelIds.length) {
wx.navigateBack();
return;
@ -411,6 +417,19 @@ Page({ @@ -411,6 +417,19 @@ Page({
current: url,
});
},
getAuth() {
wx.ajax({
method: "GET",
url: "?r=takeda/case/get-case-detail-op-auth",
data: {
caseId: this.data.caseId,
},
}).then((res) => {
this.setData({
auth: res,
});
});
},
});
export {};

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

@ -1,6 +1,15 @@ @@ -1,6 +1,15 @@
<wxs src="/utils/util.wxs" module="tools" />
<van-nav-bar title="录入病历" fixed bind:click-left="handleBack" bind:click-right="onClickRight">
<van-icon name="arrow-left" slot="left" size="18px" />
<van-nav-bar
title="录入病历"
fixed
bind:click-left="handleBack"
bind:click-right="onClickRight"
>
<van-icon
name="arrow-left"
slot="left"
size="18px"
/>
</van-nav-bar>
<view class="page" style="padding-top:{{menuButtonInfo.top + 60}}px;">
<view class="card">
@ -9,9 +18,23 @@ @@ -9,9 +18,23 @@
<text class="limit">({{images.length}}/9)</text>
</view>
<view class="image-files">
<view class="photo" wx:for="{{images}}" wx:key="index" bind:tap="handlePreviewImage" data-url="{{item.url}}">
<image class="p-img" src="{{item.url}}" mode="aspectFill"></image>
<view class="del" catch:tap="handleDelPhoto" data-index="{{index}}">
<view
class="photo"
wx:for="{{images}}"
wx:key="index"
bind:tap="handlePreviewImage"
data-url="{{item.url}}"
>
<image
class="p-img"
src="{{item.url}}"
mode="aspectFill"
></image>
<view
class="del"
catch:tap="handleDelPhoto"
data-index="{{index}}"
>
<van-icon name="cross" />
</view>
<view class="repeat" wx:if="{{item.repeat}}">
@ -19,7 +42,12 @@ @@ -19,7 +42,12 @@
<view class="r-title">重复图片</view>
</view>
</view>
<uploadFile obscure edit="{{edit}}" bind:file="handlePhoto" wx:if="{{images.length<9}}">
<uploadFile
obscure
edit="{{edit}}"
bind:file="handlePhoto"
wx:if="{{images.length<9}}"
>
<view class="upload-file">
<van-icon class="add" name="plus" />
</view>
@ -40,8 +68,16 @@ @@ -40,8 +68,16 @@
<view class="limit">{{description.length}}/3000</view>
</view>
<view class="audio-list">
<view class="row" wx:for="{{audios}}" wx:key="index">
<customAudioBar class="audio-bar" url="{{item.url}}" time="{{item.duration}}"></customAudioBar>
<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}}"
@ -61,7 +97,11 @@ @@ -61,7 +97,11 @@
<view class="card">
<view class="card-title">
病历相关文件
<uploadFile class="message-select-wrap" chooseMessage bind:file="handleFile">
<uploadFile
class="message-select-wrap"
chooseMessage
bind:file="handleFile"
>
<view class="message-select">从聊天记录选择文件</view>
</uploadFile>
</view>
@ -120,13 +160,33 @@ @@ -120,13 +160,33 @@
</view>
</view>
<view class="footer">
<view class="cancel" bind:tap="handleCache">存为草稿</view>
<view wx:if="{{isInvite}}" class="submit" bind:tap="handleInvite">保存并提交</view>
<view wx:else class="submit disabled" bind:tap="handleNoInvite">保存并提交</view>
<view
class="cancel"
wx:if="{{ !caseId || auth.canDraft }}"
bind:tap="handleCache"
>存为草稿
</view>
<view
wx:if="{{isInvite}}"
class="submit"
bind:tap="handleInvite"
>保存并提交
</view>
<view
wx:else
class="submit disabled"
bind:tap="handleNoInvite"
>保存并提交
</view>
</view>
</view>
<van-popup show="{{ show1 }}" bind:close="onClose" round closeable>
<van-popup
show="{{ show1 }}"
bind:close="onClose"
round
closeable
>
<view class="popup1">
<view class="title">确认提交您的反馈信息</view>
<view class="btn1" bind:tap="handleSubmit">直接提交我的反馈信息</view>
@ -137,12 +197,19 @@ @@ -137,12 +197,19 @@
</view>
</van-popup>
<van-popup show="{{ show2 }}" bind:close="onClose" round closeable>
<van-popup
show="{{ show2 }}"
bind:close="onClose"
round
closeable
>
<view class="popup2">
<view class="title">您的病历没有进行涂抹</view>
<!-- prettier-ignore -->
<view class="content">
请<text class="link">确认</text>上传的病历 已不包含患者的隐私信息
<text class="link">确认</text>
上传的病历 已不包含患者的隐私信息
</view>
<view class="btn">确认继续提交</view>
<view class="cancel">返回</view>

2
src/module1/pages/setChatDoctor/index.ts

@ -251,7 +251,6 @@ Page({ @@ -251,7 +251,6 @@ Page({
});
return;
}
const url = create ? "?r=takeda/chat/create-room" : "?r=takeda/chat/invite-doctor";
wx.ajax({
method: "POST",
@ -262,6 +261,7 @@ Page({ @@ -262,6 +261,7 @@ Page({
inviteDoctorId: DoctorId,
doctorId: DoctorId,
},
loading: true,
}).then((res) => {
if (create) {
wx.reLaunch({

4
src/module1/pages/setInfo/index.ts

@ -132,11 +132,11 @@ Page({ @@ -132,11 +132,11 @@ Page({
content: "您没有邀约医生,可能会影响您的审核",
confirmColor: "#00B4C5",
cancelColor: "#141515",
confirmText: "继续提交",
confirmText: "绑定医生",
cancelText: "取消",
success: (res) => {
if (res.confirm) {
this.handleSubmit();
this.handleBindDoctor();
}
},
});

3
src/pages/cases/index.scss

@ -167,6 +167,7 @@ page { @@ -167,6 +167,7 @@ page {
color: rgba(0, 180, 197, 1);
.wx-radio-input {
transform: scale(0.7);
border-color: #00b4c5 !important;
}
}
}
@ -224,7 +225,7 @@ page { @@ -224,7 +225,7 @@ page {
color: rgba(153, 153, 153, 1);
}
&.status4 {
color: #54E2B4;
color: #54e2b4;
}
}
}

19
src/pages/cases/index.ts

@ -61,6 +61,7 @@ Page({ @@ -61,6 +61,7 @@ Page({
isHighQuality: "",
isOpen: "",
needDeal: "",
newFeedback: "",
orderType: "feedbackTime",
myCaseCount: 0,
@ -82,8 +83,23 @@ Page({ @@ -82,8 +83,23 @@ Page({
});
return;
}
this.handleNav({ currentTarget: { dataset: { nav: app.globalData.caseNav, noSearch: true } } });
this.handleNav({
currentTarget: {
dataset: {
nav: app.globalData.caseNav,
noSearch: true,
},
},
});
this.setData({
caseStatus: app.globalData.caseStatus ? app.globalData.caseStatus.split(",") : "",
caseStatusName: app.globalData.caseStatusName,
newFeedback: app.globalData.newFeedback,
});
app.globalData.caseNav = "0";
app.globalData.caseStatus = "";
app.globalData.caseStatusName = "全部";
app.globalData.newFeedback = "";
this.setData({
needDeal: app.globalData.needDeal,
});
@ -170,6 +186,7 @@ Page({ @@ -170,6 +186,7 @@ Page({
isHighQuality: this.data.isHighQuality,
isOpen: this.data.isOpen,
needDeal: this.data.needDeal,
newFeedback: this.data.newFeedback,
orderType: this.data.orderType,
},
}).then((res) => {

13
src/pages/cases/index.wxml

@ -173,13 +173,22 @@ @@ -173,13 +173,22 @@
<view class="sort-line">
<view class="wrap">
<view class="btn {{orderType==='feedbackTime' && 'active'}}" bind:tap="handleOrder" data-value="feedbackTime">
更新时间排序
更新时间
</view>
<view class="btn {{orderType==='submitTime' && 'active'}}" bind:tap="handleOrder" data-value="submitTime">
提交时间排序
提交时间
</view>
</view>
<radio
class="feedback"
color="rgba(0, 180, 197, 1)"
checked="{{newFeedback==='1'}}"
bind:tap="handleRadio"
data-key="newFeedback"
>
病历更新
</radio>
<radio
wx:if="{{userInfo.DoctorLevel>1 && (nav==='0' || nav==='3')}}"
class="feedback"
color="rgba(0, 180, 197, 1)"

3
src/pages/chatRoomList/index.ts

@ -157,6 +157,9 @@ Page({ @@ -157,6 +157,9 @@ Page({
if (item.createTime) {
item.createTime = dayjs(item.createTime).format("YYYY-MM-DD HH:mm");
}
if (item.msgContentType === "6" && item.isSelfMsg === 1) {
item.content = `你撤回了一条消息`;
}
});
const list = res.page === 1 ? res.list : [...this.data.list, ...res.list];
this.setData({

3
src/pages/home/index.ts

@ -115,6 +115,9 @@ Page({ @@ -115,6 +115,9 @@ Page({
5: "累计病历统计:按月统计所在科室累计提交的病历数,并以堆叠图显示一级医生、核心医生提交病历数",
6: "科室新增病历统计:按月统计所在科室新提交的病历 数,并以堆叠图显示一级医生、核心医生提交的病历数",
7: "医院活跃排行榜:按医院入驻医生数进行活跃排序,入驻医生数越多则活跃度越高,排序则越靠前",
8: "一级医生",
9: "核心医生",
10: "质控医生",
}[index];
wx.showModal({
content: tip,

3
typings/index.d.ts vendored

@ -11,6 +11,9 @@ interface IAppOption { @@ -11,6 +11,9 @@ interface IAppOption {
needDeal: "" | "1";
caseNav: "0" | "1" | "2" | "3";
caseStatus: string;
caseStatusName: string;
newFeedback: string;
};
userInfoReadyCallback?: WechatMiniprogram.GetUserInfoSuccessCallback;
waitLogin: (waitLoginState?: boolean) => Promise<any>;

Loading…
Cancel
Save