Browse Source

聊天部分页面

main
kola 4 months ago
parent
commit
01930ccc66
  1. 21
      project.private.config.json
  2. 10
      src/app.json
  3. 8
      src/custom-tab-bar/index.ts
  4. 7
      src/module1/pages/chatRoom/index.json
  5. 82
      src/module1/pages/chatRoom/index.scss
  6. 6
      src/module1/pages/chatRoom/index.ts
  7. 39
      src/module1/pages/chatRoom/index.wxml
  8. 8
      src/module1/pages/chatRoomInfo/index.json
  9. 44
      src/module1/pages/chatRoomInfo/index.scss
  10. 6
      src/module1/pages/chatRoomInfo/index.ts
  11. 15
      src/module1/pages/chatRoomInfo/index.wxml
  12. 8
      src/pages/chatRoomList/index.json
  13. 290
      src/pages/chatRoomList/index.scss
  14. 14
      src/pages/chatRoomList/index.ts
  15. 133
      src/pages/chatRoomList/index.wxml
  16. 4
      wxmlComponent/index.json
  17. 0
      wxmlComponent/index.scss
  18. 25
      wxmlComponent/index.ts
  19. 2
      wxmlComponent/index.wxml
  20. 3
      wxmlPage/index.json
  21. 0
      wxmlPage/index.scss
  22. 6
      wxmlPage/index.ts
  23. 2
      wxmlPage/index.wxml

21
project.private.config.json

@ -8,6 +8,27 @@
"miniprogram": { "miniprogram": {
"list": [ "list": [
{ {
"name": "聊天室",
"pathName": "module1/pages/chatRoom/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "聊天室信息",
"pathName": "module1/pages/chatRoomInfo/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "聊天室列表",
"pathName": "pages/chatRoomList/index",
"query": "",
"launchMode": "default",
"scene": null
},
{
"name": "病历反馈", "name": "病历反馈",
"pathName": "module1/pages/casesFeedback/index", "pathName": "module1/pages/casesFeedback/index",
"query": "", "query": "",

10
src/app.json

@ -1,6 +1,6 @@
{ {
"$schema": "https://dldir1.qq.com/WechatWebDev/editor-extension/wx-json/app.schema.json", "$schema": "https://dldir1.qq.com/WechatWebDev/editor-extension/wx-json/app.schema.json",
"pages": ["pages/start/index", "pages/home/index", "pages/cases/index", "pages/my/index"], "pages": ["pages/start/index", "pages/home/index", "pages/cases/index", "pages/my/index", "pages/chatRoomList/index"],
"subPackages": [ "subPackages": [
{ {
"root": "echart", "root": "echart",
@ -28,7 +28,9 @@
"pages/entryCases/index", "pages/entryCases/index",
"pages/entryCasesResult/index", "pages/entryCasesResult/index",
"pages/casesDetail/index", "pages/casesDetail/index",
"pages/casesFeedback/index" "pages/casesFeedback/index",
"pages/chatRoom/index",
"pages/chatRoomInfo/index"
] ]
} }
], ],
@ -52,6 +54,10 @@
"text": "病历" "text": "病历"
}, },
{ {
"pagePath": "pages/chatRoomList/index",
"text": "我的"
},
{
"pagePath": "pages/my/index", "pagePath": "pages/my/index",
"text": "我的" "text": "我的"
} }

8
src/custom-tab-bar/index.ts

@ -29,14 +29,14 @@ Component({
path: '/module1/pages/entryCases/index', path: '/module1/pages/entryCases/index',
}, },
{ {
path: '/pages/home/index', path: '/pages/chatRoomList/index',
name: '首页', name: '聊天室',
icon: 'tab3.png', icon: 'tab3.png',
iconActive: 'tab-active3.png', iconActive: 'tab-active3.png',
}, },
{ {
path: '/pages/home/index', path: '/pages/my/index',
name: '首页', name: '我的',
icon: 'tab4.png', icon: 'tab4.png',
iconActive: 'tab-active3.png', iconActive: 'tab-active3.png',
}, },

7
src/module1/pages/chatRoom/index.json

@ -0,0 +1,7 @@
{
"navigationBarTitleText": "聊天室",
"navigationStyle": "default",
"usingComponents": {
"van-icon": "@vant/weapp/icon/index"
}
}

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

@ -0,0 +1,82 @@
page {
background-color: rgba(246, 246, 246, 1);
}
.page {
.header {
padding: 26rpx 32rpx 30rpx;
background-color: #fff;
border-radius: 16rpx;
border-radius: 0 0 0 32rpx;
.info {
padding: 24rpx;
background: #f6f6f6;
box-shadow: 0rpx 4rpx 20rpx 0rpx rgba(0, 0, 0, 0.1);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
display: flex;
gap: 28rpx;
align-items: flex-start;
.photos {
padding: 4rpx;
display: grid;
grid-template-columns: repeat(2, 40rpx);
grid-template-rows: repeat(2, 40rpx);
background-color: #fff;
border-radius: 8rpx;
gap: 4rpx;
.photo {
width: 100%;
height: 100%;
}
}
.inner {
flex: 1;
padding-left: 24rpx;
border-left: 1px solid rgba(205, 205, 205, 0.5);
.c-header {
display: flex;
align-items: center;
justify-content: space-between;
.id {
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.detail {
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
}
}
.c-footer {
margin-top: 16rpx;
line-height: 28rpx;
.name {
display: inline-block;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.line {
margin: 0 10rpx;
display: inline;
font-size: 24rpx;
color: rgba(205, 205, 205, 0.5);
}
.hostipal {
margin-right: 10rpx;
display: inline;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.site {
display: inline-block;
padding: 0 8rpx;
font-size: 24rpx;
line-height: 32rpx;
color: rgba(148, 87, 30, 1);
background: #fae5ce;
border-radius: 4rpx 4rpx 4rpx 4rpx;
}
}
}
}
}
}

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

@ -0,0 +1,6 @@
const _app = getApp<IAppOption>();
Page({
data: {},
onLoad() {},
});

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

@ -0,0 +1,39 @@
<view class="page">
<view class="header">
<view class="info">
<view class="photos">
<image
class="photo"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
></image>
<image
class="photo"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
></image>
<image
class="photo"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
></image>
<image
class="photo"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
></image>
</view>
<view class="inner">
<view class="c-header">
<view class="id">ID:2024020913049204001</view>
<view class="detail">
详情
<van-icon name="arrow" />
</view>
</view>
<view class="c-footer">
<view class="name">刘欢</view>
<view class="line">|</view>
<view class="hostipal">广东省人民医院</view>
<view class="site">广州市/番禺区</view>
</view>
</view>
</view>
</view>
</view>

8
src/module1/pages/chatRoomInfo/index.json

@ -0,0 +1,8 @@
{
"navigationBarTitleText": "聊天室信息",
"navigationStyle": "default",
"usingComponents": {
"doctorAvatar": "/components/doctorAvatar/index",
"van-icon": "@vant/weapp/icon/index"
}
}

44
src/module1/pages/chatRoomInfo/index.scss

@ -0,0 +1,44 @@
page {
background-color: rgba(246, 246, 246, 1);
}
.page {
padding: 24rpx 32rpx;
.container {
padding: 32rpx;
border-radius: 16rpx;
background-color: #fff;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 28rpx;
.user {
flex-shrink: 0;
.avatar {
display: block;
width: 102rpx;
height: 102rpx;
}
.name {
margin-top: 14rpx;
text-align: center;
font-size: 24rpx;
color: rgba(133, 133, 133, 1);
line-height: 28rpx;
max-width: 4em;
}
}
.add {
flex-shrink: 0;
width: 102rpx;
height: 102rpx;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 50rpx;
font-weight: bold;
color: #cdcdcd;
border: 2rpx dashed #cdcdcd;
}
}
}

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

@ -0,0 +1,6 @@
const _app = getApp<IAppOption>();
Page({
data: {},
onLoad() {},
});

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

@ -0,0 +1,15 @@
<view class="page">
<view class="container">
<view class="user" wx:for="{{10}}" wx:key="index">
<doctorAvatar
class="avatar"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
level="{{2}}"
></doctorAvatar>
<view class="name">王鸿军</view>
</view>
<view class="add">
<van-icon name="plus" />
</view>
</view>
</view>

8
src/pages/chatRoomList/index.json

@ -0,0 +1,8 @@
{
"navigationStyle": "default",
"navigationBarTitleText": "聊天室",
"usingComponents": {
"van-icon": "@vant/weapp/icon/index",
"van-popup": "@vant/weapp/popup/index"
}
}

290
src/pages/chatRoomList/index.scss

@ -0,0 +1,290 @@
page {
background-color: rgba(246, 246, 246, 1);
}
.page {
padding-bottom: 240rpx;
.header {
background-color: #fff;
border-radius: 0 0 32rpx 32rpx;
.navbar {
display: flex;
align-items: center;
justify-content: space-between;
.nav {
padding: 20rpx;
flex: 1;
text-align: center;
font-size: 32rpx;
color: rgba(133, 133, 133, 1);
line-height: 44rpx;
&.active {
position: relative;
color: rgba(0, 180, 197, 1);
&::after {
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 48rpx;
height: 8rpx;
border-radius: 8rpx 8rpx 0 0;
content: '';
background-color: rgba(0, 180, 197, 1);
}
}
}
}
.search {
margin: 32rpx 32rpx 0;
padding: 16rpx 32rpx;
display: flex;
align-items: center;
border-radius: 122rpx;
background-color: rgba(246, 246, 246, 1);
.icon {
margin-right: 14rpx;
width: 32rpx;
height: 32rpx;
}
.input {
flex: 1;
font-size: 28rpx;
color: #000;
}
.place-input {
color: rgba(205, 205, 205, 1);
}
}
.form {
margin: 32rpx 32rpx 0;
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 18rpx 28rpx;
.row {
display: flex;
align-items: center;
gap: 16rpx;
.label {
flex-shrink: 0;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
}
.picker {
flex: 1;
}
.picker-content {
flex: 1;
padding: 16rpx 20rpx;
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
line-height: 32rpx;
background: #f6f6f6;
border-radius: 12rpx 12rpx 12rpx 12rpx;
display: flex;
align-items: center;
justify-content: space-between;
.content {
max-width: 6em;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
}
}
.station {
padding: 32rpx;
display: flex;
align-items: center;
justify-content: flex-end;
.fold {
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
}
}
}
.filter {
padding: 32rpx;
display: flex;
align-items: center;
justify-content: space-between;
.wrap {
display: flex;
align-items: center;
gap: 16rpx;
.btn {
padding: 8rpx 25rpx;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
line-height: 32rpx;
background: #ffffff;
border-radius: 40rpx 40rpx 40rpx 40rpx;
&.active {
color: #fff;
background-color: rgba(0, 180, 197, 1);
}
}
}
.all-read {
font-size: 28rpx;
color: rgba(0, 180, 197, 1);
}
}
.room-list {
padding: 0 32rpx;
.card {
margin-bottom: 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 32rpx 32rpx 0;
display: flex;
justify-content: space-between;
align-items: center;
.id {
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
line-height: 40rpx;
&::before {
margin-right: 22rpx;
display: inline-block;
content: '';
vertical-align: top;
width: 10rpx;
height: 40rpx;
background: #00b4c5;
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
}
.date {
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
}
}
.c-container {
margin: 0 32rpx;
padding: 24rpx;
background: #f6f6f6;
border-radius: 16rpx 16rpx 16rpx 16rpx;
display: flex;
gap: 28rpx;
align-items: flex-start;
.photos {
padding: 4rpx;
display: grid;
grid-template-columns: repeat(2, 36rpx);
grid-template-rows: repeat(2, 36rpx);
background-color: #fff;
border-radius: 8rpx;
gap: 4rpx;
.photo {
width: 100%;
height: 100%;
}
}
.inner {
.hostipal {
display: inline;
font-size: 32rpx;
color: rgba(20, 21, 21, 1);
font-weight: bold;
.site {
display: inline-block;
padding: 0 8rpx;
font-size: 24rpx;
color: rgba(148, 87, 30, 1);
background: #fae5ce;
border-radius: 4rpx 4rpx 4rpx 4rpx;
}
}
.content {
margin-top: 8rpx;
font-size: 28rpx;
color: rgba(133, 133, 133, 1);
line-height: 32rpx;
}
}
}
.c-footer {
padding: 32rpx;
display: flex;
justify-content: space-between;
.name {
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
line-height: 32rpx;
}
.tags {
padding-left: 24rpx;
flex: 1;
display: flex;
flex-wrap: wrap;
gap: 12rpx;
.tag {
padding: 2rpx 8rpx;
font-size: 22rpx;
color: rgba(0, 180, 197, 1);
line-height: 32rpx;
border-radius: 4rpx 4rpx 4rpx 4rpx;
border: 1rpx solid #bfeff4;
}
}
}
}
}
}
.popup1 {
padding: 48rpx 32rpx;
width: 580rpx;
background: linear-gradient(180deg, #e5f5f7 0%, #ffffff 17%);
border-radius: 16rpx 16rpx 16rpx 16rpx;
border: 2rpx solid #ffffff;
.title {
font-size: 36rpx;
color: rgba(20, 21, 21, 1);
line-height: 48rpx;
font-weight: bold;
text-align: center;
}
.scroll {
margin-top: 24rpx;
max-height: 680rpx;
overflow-y: auto;
overflow-x: hidden;
.s-title {
margin-top: 24rpx;
font-size: 28rpx;
color: rgba(20, 21, 21, 1);
line-height: 56rpx;
font-weight: bold;
}
.s-content {
font-size: 28rpx;
color: rgba(133, 133, 133, 1);
line-height: 48rpx;
}
}
.tip {
margin-top: 24rpx;
padding: 16rpx;
border-radius: 10rpx;
text-align: center;
font-size: 24rpx;
color: rgba(255, 125, 0, 1);
line-height: 40rpx;
background-color: rgba(255, 247, 232, 1);
}
.btn {
margin-top: 24rpx;
height: 72rpx;
font-size: 32rpx;
color: rgba(255, 255, 255, 1);
display: flex;
align-items: center;
justify-content: center;
background: linear-gradient(90deg, #00b4c5 0%, #54e2b4 100%);
border-radius: 60rpx 60rpx 60rpx 60rpx;
}
}

14
src/pages/chatRoomList/index.ts

@ -0,0 +1,14 @@
const _app = getApp<IAppOption>()
Page({
data: {
fold: true,
show1: false,
},
onLoad() {},
handleRoom() {
wx.navigateTo({
url: '/module1/pages/chatRoom/index',
})
},
})

133
src/pages/chatRoomList/index.wxml

@ -0,0 +1,133 @@
<view class="page">
<view class="header">
<view class="search">
<image class="icon" src="/images/icon-search.png"></image>
<input class="input" placeholder-class="place-input" type="text" placeholder="支持档案编号、医生姓名进行搜索" />
</view>
<view class="form">
<view class="row">
<view class="label">状态</view>
<view class="picker-content">
<view class="content">全全部全部全部全部全部全部全部全部全部全部部</view>
<van-icon name="arrow-down" />
</view>
</view>
<view class="row">
<view class="label">医院</view>
<view class="picker-content">
<view class="content">全全部全部全部全部全部全部全部全部全部全部部</view>
<van-icon name="arrow-down" />
</view>
</view>
<view class="row">
<view class="label">创建</view>
<picker class="picker">
<view class="picker-content">
<view class="content">全全部全部全部全部全部全部全部全部全部全部部</view>
<van-icon name="arrow-down" />
</view>
</picker>
</view>
<view class="row">
<view class="label">更新</view>
<picker class="picker">
<view class="picker-content">
<view class="content">全全部全部全部全部全部全部全部全部全部全部部</view>
<van-icon name="arrow-down" />
</view>
</picker>
</view>
<view class="row">
<view class="label">标签</view>
<view class="picker-content">
<view class="content">全全部全部全部全部全部全部全部全部全部全部部</view>
<van-icon name="arrow-down" />
</view>
</view>
<view class="row">
<view class="label">地区</view>
<picker class="picker">
<view class="picker-content">
<view class="content">全全部全部全部全部全部全部全部全部全部全部部</view>
<van-icon name="arrow-down" />
</view>
</picker>
</view>
</view>
<view class="station">
<view class="fold">
收起
<van-icon class="v-icon" name="arrow-down" />
</view>
</view>
</view>
<view class="filter">
<view class="wrap">
<view class="btn active">全部</view>
<view class="btn">未读</view>
<view class="btn">已读</view>
</view>
<view class="all-read">全部标为已读</view>
</view>
<view class="room-list">
<view class="card" bind:tap="handleRoom">
<view class="c-header">
<view class="id">ID:2024020913049204001</view>
<view class="date">10:34</view>
</view>
<view class="c-container">
<view class="photos">
<image
class="photo"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
></image>
<image
class="photo"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
></image>
<image
class="photo"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
></image>
<image
class="photo"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
></image>
</view>
<view class="inner">
<view class="hostipal">
广东省人民医院
<view class="site">广州市/番禺区</view>
</view>
<view class="content">好的,那我们就按照这种方式来进医院</view>
</view>
</view>
<view class="c-footer">
<view class="name">杨梦 副主任医师</view>
<view class="tags">
<view class="tag">心律失常</view>
<view class="tag">心律失常</view>
<view class="tag">心律失常</view>
</view>
</view>
</view>
</view>
</view>
<van-popup show="{{ show1 }}" bind:close="onClose" closeable round>
<view class="popup1">
<view class="title">用户须知</view>
<view class="scroll">
<view class="s-content">
为了确保患者隐私得到充分保护,我们要求所有使用本小程序的医疗保健专业人士(HCP)遵守以下协议。
</view>
<view class="s-title">一、用户同意</view>
<view class="s-content">
在使用本小程序上传患者档案之前,您必须同意以下条款:隐私保护:我确认我已经阅读并理解了本小程序的隐私政策,并将严格遵守所有相关的隐私保护规定。
信息处理:我保证在上传任何患者档案信息之前,已经彻底去除了所有患者的敏感隐私信息,包括但不限于姓名、地址、身份证号、电话
</view>
</view>
<view class="tip">聊天室自动将此病历讨论医生拉入讨论</view>
<view class="btn">确定</view>
</view>
</van-popup>

4
wxmlComponent/index.json

@ -0,0 +1,4 @@
{
"component": true,
"usingComponents": {}
}

0
wxmlComponent/index.scss

25
wxmlComponent/index.ts

@ -0,0 +1,25 @@
const _app = getApp<IAppOption>();
// pages/story/a.ts
Component({
/**
*
*/
properties: {
},
/**
*
*/
data: {
},
/**
*
*/
methods: {
}
})

2
wxmlComponent/index.wxml

@ -0,0 +1,2 @@
<!--pages/story/a.wxml-->
<text>pages/story/a.wxml</text>

3
wxmlPage/index.json

@ -0,0 +1,3 @@
{
"usingComponents": {}
}

0
wxmlPage/index.scss

6
wxmlPage/index.ts

@ -0,0 +1,6 @@
const _app = getApp<IAppOption>();
Page({
data: {},
onLoad() {},
});

2
wxmlPage/index.wxml

@ -0,0 +1,2 @@
<!--pages/story/index.wxml-->
<text>pages/story/index.wxml</text>
Loading…
Cancel
Save