Browse Source

v4.0.0新版开发

210plan
aBin 3 years ago
parent
commit
dc65ffa6eb
  1. 8
      .env.development
  2. 6
      .env.production
  3. 9
      src/apis/carbasics.js
  4. 13
      src/apis/project.js
  5. 5
      src/apis/role.js
  6. 3
      src/apis/tall.js
  7. 16
      src/apis/task.js
  8. 42
      src/components/NewRole/NewRole.vue
  9. 197
      src/components/PatientList/PatientList.vue
  10. 2
      src/components/Service/Service.vue
  11. 149
      src/components/Test/Test.vue
  12. 31
      src/components/Volume/Volume.vue
  13. 47
      src/components/VolumeProject/VolumeProject.vue
  14. 2
      src/main.js
  15. 14
      src/pages.json
  16. BIN
      src/pages/Apply/img/0.png
  17. BIN
      src/pages/Apply/img/1.png
  18. BIN
      src/pages/Apply/img/2.png
  19. BIN
      src/pages/Apply/img/kefu.jpg
  20. BIN
      src/pages/Apply/img/weixin.png
  21. 443
      src/pages/Apply/index.vue
  22. 294
      src/pages/Statistics/components/Title.vue
  23. 104
      src/pages/Statistics/index.vue
  24. 300
      src/pages/index/index.vue
  25. 61
      src/pages/info/info.vue
  26. 62
      src/pages/inner/inner.vue
  27. 12
      src/pages/inner/mixin.js
  28. 79
      src/pages/patient/patient.vue
  29. 98
      src/pages/patientLine/patientLine.vue
  30. 23
      src/pages/task-page/task-page.vue
  31. BIN
      src/static/news/car.png
  32. BIN
      src/static/news/logo.png
  33. BIN
      src/static/news/news.png
  34. BIN
      src/static/news/role.png
  35. BIN
      src/static/news/top-bg.png

8
.env.development

@ -1,8 +1,8 @@
VUE_APP_NODE_ENV=development VUE_APP_NODE_ENV=development
VUE_APP_BASE_URL=https://www.tall.wiki VUE_APP_BASE_URL=https://test.tall.wiki
VUE_APP_API_URL=https://www.tall.wiki/gateway VUE_APP_API_URL=https://test.tall.wiki/gateway1
VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws
VUE_APP_PROJECT_PATH=https://www.tall.wiki/carBasicTall VUE_APP_PROJECT_PATH=https://test.tall.wiki/carBasicTall
VUE_APP_QUESTION_PATH=https://www.tall.wiki/carbasics VUE_APP_QUESTION_PATH=https://test.tall.wiki/carbasics
VUE_APP_VERSION=v3.1.0 VUE_APP_VERSION=v3.1.0
VUE_APP_PUBLIC_PATH=/carBasicCalendar/ VUE_APP_PUBLIC_PATH=/carBasicCalendar/

6
.env.production

@ -1,8 +1,8 @@
VUE_APP_NODE_ENV=production VUE_APP_NODE_ENV=production
VUE_APP_BASE_URL=https://www.tall.wiki VUE_APP_BASE_URL=https://test.tall.wiki
VUE_APP_API_URL=https://www.tall.wiki/gateway VUE_APP_API_URL=https://test.tall.wiki/gateway1
VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws VUE_APP_MSG_URL=wss://www.tall.wiki/websocket/message/v4.0/ws
VUE_APP_PROJECT_PATH=https://www.tall.wiki/carBasicTall VUE_APP_PROJECT_PATH=https://test.tall.wiki/carBasicTall
VUE_APP_QUESTION_PATH=https://www.tall.wiki/carbasics VUE_APP_QUESTION_PATH=https://www.tall.wiki/carbasics
VUE_APP_VERSION=v3.1.0 VUE_APP_VERSION=v3.1.0
VUE_APP_PUBLIC_PATH=/carBasicCalendar/ VUE_APP_PUBLIC_PATH=/carBasicCalendar/

9
src/apis/carbasics.js

@ -6,6 +6,7 @@ const patient = `${carbasics}/patient`; // 患者相关接口
const firstAid = `${carbasics}/firstAid`; // 急救数据相关接口 const firstAid = `${carbasics}/firstAid`; // 急救数据相关接口
const screening = `${carbasics}/screening`; // 高危人群筛查相关接口 const screening = `${carbasics}/screening`; // 高危人群筛查相关接口
const questionnaire = `${carbasics}/questionnaire`; // 调查问卷相关接口 const questionnaire = `${carbasics}/questionnaire`; // 调查问卷相关接口
const account = `${carbasics}/account`; // 用户管理相关接口
// 获取急救/出院数据列表 // 获取急救/出院数据列表
export const querySelf = { export const querySelf = {
@ -112,6 +113,14 @@ const install = (Vue, vm) => {
vm.$u.api.generalBasic = params => vm.$u.post(`${carbasics}/ocr/general/basic`, params); vm.$u.api.generalBasic = params => vm.$u.post(`${carbasics}/ocr/general/basic`, params);
// 上传文件 // 上传文件
vm.$u.api.uploadFile = `${filedeal}/file/upload/multiple`; vm.$u.api.uploadFile = `${filedeal}/file/upload/multiple`;
// 查询我的申请列表;
vm.$u.api.queryMyApply = params => vm.$u.post(`${account}/queryMyApply`, params);
// 查询部门与职位
vm.$u.api.queryDepartment = params => vm.$u.post(`${account}/queryDepartment`, params);
// 查询医院列表
vm.$u.api.queryHospital = params => vm.$u.post(`${account}/queryHospital`, params);
// 提交申请
vm.$u.api.submitAccount = params => vm.$u.post(`${account}/submitAccount`, params);
}; };
export default { install }; export default { install };

13
src/apis/project.js

@ -1,19 +1,22 @@
const apiUrl = process.env.VUE_APP_API_URL;
export const carbasics = `${apiUrl}/carbasics/v4.0`;
const install = (Vue, vm) => { const install = (Vue, vm) => {
vm.$u.api = { ...vm.$u.api } || {}; vm.$u.api = { ...vm.$u.api } || {};
//根据id获取项目信息 //根据id获取项目信息
vm.$u.api.findProjectById = param => vm.$u.post(`${uni.$t.domain}/project/findProjectById`, param); vm.$u.api.findProjectById = param => vm.$u.post(`${carbasics}/project/findProjectById`, param);
//创建分享连接 //创建分享连接
vm.$u.api.createShare = param => vm.$u.post(`${uni.$t.domain}/share/create`, param); vm.$u.api.createShare = param => vm.$u.post(`${carbasics}/share/create`, param);
//点击分享连接 //点击分享连接
vm.$u.api.clickShare = param => vm.$u.post(`${uni.$t.domain}/share/click`, param); vm.$u.api.clickShare = param => vm.$u.post(`${carbasics}/share/click`, param);
//查询医院是否填写了调查问卷 //查询医院是否填写了调查问卷
vm.$u.api.queryNotWrite = param => vm.$u.post(`${uni.$t.domain}/questionnaire/queryNotWrite`, param); vm.$u.api.queryNotWrite = param => vm.$u.post(`${carbasics}/questionnaire/queryNotWrite`, param);
// 根据项目id查询当前项目是不是 医院体验项目 // 根据项目id查询当前项目是不是 医院体验项目
vm.$u.api.getByProject = param => vm.$u.post(`${uni.$t.domain}/organization/getByProject`, param); vm.$u.api.getByProject = param => vm.$u.post(`${carbasics}/organization/getByProject`, param);
}; };
export default { install }; export default { install };

5
src/apis/role.js

@ -1,4 +1,5 @@
const url = process.env.VUE_APP_API_URL; const url = process.env.VUE_APP_API_URL;
export const carbasics = `${url}/carbasics/v4.0`;
// 查询首页按钮的名称及跳转 // 查询首页按钮的名称及跳转
export const queryMustShow = { export const queryMustShow = {
async index(params) { async index(params) {
@ -41,9 +42,9 @@ const install = (Vue, vm) => {
// 保存当前用户在当前项目最后一次选择的角色 // 保存当前用户在当前项目最后一次选择的角色
vm.$u.api.saveRoleRecord = params => saveRoleRecord.index(params); vm.$u.api.saveRoleRecord = params => saveRoleRecord.index(params);
// 根据项目id查找角色 // 根据项目id查找角色
vm.$u.api.findShowRole = param => vm.$u.post(`${uni.$t.domain}/role/show`, param); vm.$u.api.findShowRole = param => vm.$u.post(`${carbasics}/role/show`, param);
// 根据项目id查找所有成员 // 根据项目id查找所有成员
vm.$u.api.queryChecker = param => vm.$u.post(`${uni.$t.domain}/deliver/queryChecker`, param); vm.$u.api.queryChecker = param => vm.$u.post(`${carbasics}/deliver/queryChecker`, param);
}; };
export default { install }; export default { install };

3
src/apis/tall.js

@ -38,7 +38,8 @@ const install = (Vue, vm) => {
// 修改用户信息 // 修改用户信息
vm.$u.api.updateUserInfo = params => vm.$u.http.post(`${tall}/users/userInfo`, params); vm.$u.api.updateUserInfo = params => vm.$u.http.post(`${tall}/users/userInfo`, params);
// 获取项目列表 // 获取项目列表
vm.$u.api.getProjects = (startTime, endTime) => vm.$u.post(`${tall}/project/query`, { startTime, endTime }); // vm.$u.api.getProjects = (startTime, endTime) => vm.$u.post(`${tall}/project/query`, { startTime, endTime });
vm.$u.api.getProjects = (startTime, endTime) => vm.$u.post(`${carbasics}/project/queryProjectList`, { startTime, endTime });
// 查询首页的按钮展示及跳转 // 查询首页的按钮展示及跳转
vm.$u.api.getQueryButton = params => vm.$u.post(`${carbasics}/questionnaire/queryButton`, params); vm.$u.api.getQueryButton = params => vm.$u.post(`${carbasics}/questionnaire/queryButton`, params);
// 查询首页轮播图 // 查询首页轮播图

16
src/apis/task.js

@ -1,17 +1,19 @@
const url = process.env.VUE_APP_API_URL;
export const carbasics = `${url}/carbasics/v4.0`;
const install = (Vue, vm) => { const install = (Vue, vm) => {
vm.$u.api = { ...vm.$u.api } || {}; vm.$u.api = { ...vm.$u.api } || {};
vm.$u.api.getGlobal = param => vm.$u.post(`${uni.$t.domain}/task/global`, param); vm.$u.api.getGlobal = param => vm.$u.post(`${carbasics}/task/global`, param);
vm.$u.api.getPermanent = param => vm.$u.post(`${uni.$t.domain}/task/permanent`, param); vm.$u.api.getPermanent = param => vm.$u.post(`${carbasics}/task/permanent`, param);
//根据时间基准点和角色查找定期任务 //根据时间基准点和角色查找定期任务
vm.$u.api.getRegularTask = param => vm.$u.post(`${uni.$t.domain}/task/regular`, param); vm.$u.api.getRegularTask = param => vm.$u.post(`${carbasics}/task/regular`, param);
//修改任务状态 //修改任务状态
vm.$u.api.updateTaskType = param => vm.$u.post(`${uni.$t.domain}/task/type`, param); vm.$u.api.updateTaskType = param => vm.$u.post(`${carbasics}/task/type`, param);
//新建任务 //新建任务
vm.$u.api.saveTask = param => vm.$u.post(`${uni.$t.domain}/task/save`, param); vm.$u.api.saveTask = param => vm.$u.post(`${carbasics}/task/save`, param);
//克隆任务 //克隆任务
vm.$u.api.cloneTask = param => vm.$u.post(`${uni.$t.domain}/task/clone`, param); vm.$u.api.cloneTask = param => vm.$u.post(`${carbasics}/task/clone`, param);
//模糊查询 查找项目下的任务 //模糊查询 查找项目下的任务
vm.$u.api.queryTaskOfProject = param => vm.$u.post(`${uni.$t.domain}/task/queryTaskOfProject`, param); vm.$u.api.queryTaskOfProject = param => vm.$u.post(`${carbasics}/task/queryTaskOfProject`, param);
}; };
export default { install }; export default { install };

42
src/components/NewRole/NewRole.vue

@ -0,0 +1,42 @@
<template>
<view class="role-box">
<view class="role flex items-center justify-between">
<view class="flex items-center">
<img src="@/static/news/role.png" style="width: 44rpx; height: 44rpx" alt="" />
<view class="ml-2 role-name">医生</view>
</view>
<u-icon name="arrow-down" color="#4F8BFF" size="34"></u-icon>
</view>
</view>
</template>
<script>
export default {
data() {
return {};
},
};
</script>
<style scoped>
.role-name {
font-size: 32rpx;
font-weight: bold;
color: #5991ff;
}
.role {
height: 92rpx;
background: #e4edff;
box-shadow: 0px 0px 6rpx 0 #eeeeee;
border-radius: 24r 24r 0px 0px;
padding: 24rpx;
opacity: 1;
}
.role-box {
width: 686rpx;
margin: 32rpx;
height: 236rpx;
background: #ffffff;
box-shadow: 0px 4px 20px 0px rgba(39, 59, 97, 0.08);
border-radius: 24r;
opacity: 1;
}
</style>

197
src/components/PatientList/PatientList.vue

@ -1,48 +1,31 @@
<template> <template>
<div class="flex flex-1 flex-col patient-list"> <div class="flex flex-1 flex-col patient-list">
<div class="title flex justify-between items-center"> <view class="role-box">
<u-search <view class="role flex items-center justify-between">
style="width: 500rpx" <view class="flex items-center">
v-model="name" <img src="@/static/news/role.png" style="width: 44rpx; height: 44rpx" alt="" />
shape="round" <view class="ml-2 role-name">医生</view>
action-text=" " </view>
placeholder="请输入患者" <u-icon name="arrow-down" color="#4F8BFF" size="34"></u-icon>
@search="getData(true)" </view>
@blur="searchBlur" <div class="title flex justify-between items-center">
></u-search> <u-search v-model="name" shape="round" action-text=" " placeholder="搜索患者" @search="getData(true)" @blur="searchBlur"></u-search>
<select-lay <select-lay
:zindex="99" :zindex="99"
:showplaceholder="false" :showplaceholder="false"
:value="tval" :value="tval"
name="name" name="name"
placeholder="请选择类型" placeholder="请选择类型"
:options="provinces" :options="provinces"
@selectitem="changeSelect" @selectitem="changeSelect"
> >
</select-lay> </select-lay>
</div> </div>
<u-modal </view>
v-model="show"
:closeOnClickOverlay="true"
title="提示"
content="是否确定删除当前患者信息?"
show-cancel-button
confirm-text="删除"
@confirm="confirmDel"
></u-modal>
<u-modal
v-model="show1"
:closeOnClickOverlay="true"
title="提示"
content="退出当前病例后,其他医生可接诊。确定要退出吗?"
show-cancel-button
confirm-text="退出"
@confirm="confirmBack"
></u-modal>
<u-toast ref="uToast" />
<scroll-view scroll-y="true" :style="{ height: height }" :lower-threshold="50" scroll-with-animation @scrolltolower="scrolltolower"> <scroll-view scroll-y="true" :style="{ height: height }" :lower-threshold="50" scroll-with-animation @scrolltolower="scrolltolower">
<div v-if="patientList.length" class="white list-box w-full flex-1 flex-col"> <div v-if="patientList.length" class="white list-box w-full flex-1 flex-col">
<div class="patients flex flex-row"> <div class="patients flex items-center">
<view class="shu"></view>
<div>{{ tval === 0 ? '急救患者' : '出院患者' }}</div> <div>{{ tval === 0 ? '急救患者' : '出院患者' }}</div>
<div class="ml-2 card-total flex items-center justify-center">{{ total }}</div> <div class="ml-2 card-total flex items-center justify-center">{{ total }}</div>
</div> </div>
@ -66,23 +49,26 @@
<div :style="{ 'margin-left': outIndex === cardIndex && card.recordUserId - 0 ? '-68px' : '' }" class="w-full anima"> <div :style="{ 'margin-left': outIndex === cardIndex && card.recordUserId - 0 ? '-68px' : '' }" class="w-full anima">
<div class="crad-content"> <div class="crad-content">
<div class="status-wait" v-if="!(card.recordUserId - 0)"></div> <div class="status-wait" v-if="!(card.recordUserId - 0)"></div>
<div class="flex mb-2"> <div class="flex items-center justify-between">
<div class="pr-2 fw-bold"> <view class="flex">
<span v-if="card.name"> <view class="huanzhe-tip">患者</view>
{{ card.name }} <div class="pr-2 fw-bold">
</span> <span v-if="card.name">
<span v-else> 无名氏 </span> {{ card.name }}
</div> </span>
<div class="pr-2 fw-bold"> <span v-else> 无名氏 </span>
<span v-if="card.gender === 0"></span> </div>
<span v-else-if="card.gender === 1"></span> <div class="pr-2 fw-bold">
<span v-else>-</span> <span v-if="card.gender === 0"></span>
</div> <span v-else-if="card.gender === 1"></span>
<div class="pr-2 fw-bold"> <span v-else>-</span>
<span v-if="card.age || card.age === 0">{{ card.age }}</span> </div>
<span v-else>-</span> <div class="pr-2 fw-bold">
</div> <span v-if="card.age || card.age === 0">{{ card.age }}</span>
<u-tag style="z-index: 99; margin-right: 0" plain shape="circle" v-if="card.isJmrs - 0 === 1" text="静脉溶栓"> </u-tag> <span v-else>-</span>
</div>
</view>
<!-- <u-tag style="z-index: 99; margin-right: 0" plain shape="circle" v-if="card.isJmrs - 0 === 1" text="静脉溶栓"> </u-tag>
<u-tag <u-tag
class="ml-2 flex items-center justify-center" class="ml-2 flex items-center justify-center"
type="success" type="success"
@ -91,14 +77,17 @@
v-if="card.isXgzl - 0 === 1" v-if="card.isXgzl - 0 === 1"
text="血管内治疗" text="血管内治疗"
> >
</u-tag> </u-tag> -->
<div v-if="card.record2" style="color: rgba(79, 139, 255, 1)">
{{ $moment(+card.record2).format('YYYY-MM-DD HH:mm') }}
</div>
</div> </div>
<div class="flex"> <!-- <div class="flex">
<div>{{ tval === 0 ? '到院时间:' : '出院时间:' }}</div> <div>{{ tval === 0 ? '到院时间:' : '出院时间:' }}</div>
<div v-if="card.record2" style="color: rgba(0, 0, 0, 0.85)"> <div v-if="card.record2" style="color: rgba(0, 0, 0, 0.85)">
{{ $moment(+card.record2).format('YYYY-MM-DD HH:mm') }} {{ $moment(+card.record2).format('YYYY-MM-DD HH:mm') }}
</div> </div>
</div> </div> -->
</div> </div>
<img src="./icon/yanshi.png" class="img-box" v-if="card.demonstrate === 1" /> <img src="./icon/yanshi.png" class="img-box" v-if="card.demonstrate === 1" />
</div> </div>
@ -115,6 +104,25 @@
</div> </div>
</div> </div>
</scroll-view> </scroll-view>
<u-modal
v-model="show"
:closeOnClickOverlay="true"
title="提示"
content="是否确定删除当前患者信息?"
show-cancel-button
confirm-text="删除"
@confirm="confirmDel"
></u-modal>
<u-modal
v-model="show1"
:closeOnClickOverlay="true"
title="提示"
content="退出当前病例后,其他医生可接诊。确定要退出吗?"
show-cancel-button
confirm-text="退出"
@confirm="confirmBack"
></u-modal>
<u-toast ref="uToast" />
<div class="add-patient" @click="jump"> <div class="add-patient" @click="jump">
<u-icon color="#fff" size="40" name="plus"></u-icon> <u-icon color="#fff" size="40" name="plus"></u-icon>
</div> </div>
@ -159,7 +167,7 @@ export default {
}, },
mounted() { mounted() {
const system = uni.getSystemInfoSync(); const system = uni.getSystemInfoSync();
this.height = system.windowHeight - 33 - 38 - 52 + 'px'; this.height = system.windowHeight - 138 + 'px';
console.log('this.height: ', this.height); console.log('this.height: ', this.height);
}, },
@ -386,6 +394,39 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.huanzhe-tip {
padding: 2rpx 12rpx;
background: #e4edff;
border-radius: 2px 2px 2px 2px;
opacity: 1;
font-size: 24rpx;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
color: #5990ff;
margin-right: 20rpx;
}
.role-name {
font-size: 32rpx;
font-weight: bold;
color: #5991ff;
}
.role {
height: 92rpx;
background: #e4edff;
box-shadow: 0px 0px 6rpx 0 #eeeeee;
border-radius: 24r 24r 0px 0px;
padding: 24rpx;
opacity: 1;
}
.role-box {
width: 686rpx;
margin: 16px 32rpx 8px 32rpx;
height: 118px;
background: #ffffff;
box-shadow: 0px 4px 20px 0px rgba(39, 59, 97, 0.08);
border-radius: 24r;
opacity: 1;
}
.add-patient { .add-patient {
z-index: 10; z-index: 10;
border-radius: 50%; border-radius: 50%;
@ -403,19 +444,18 @@ export default {
background-color: #fff; background-color: #fff;
} }
.title { .title {
height: 52px; width: 100%;
width: 750rpx; padding: 32rpx 20rpx;
padding: 8px 16px;
// position: fixed; // position: fixed;
// top: 32px; // top: 32px;
background: #fff; background: #fff;
box-shadow: 0 0 4px 4px #ccc;
} }
.card-box { .card-box {
/* box-shadow: 0 0 5px #ccc; */ /* box-shadow: 0 0 5px #ccc; */
border: 2px solid #ccc; // border: 2px solid #ccc;
background: #f6f6f9;
margin: 16px 0; margin: 16px 0;
border-radius: 8px; border-radius: 24rpx;
overflow: hidden; overflow: hidden;
} }
.anima { .anima {
@ -425,7 +465,7 @@ export default {
.crad-content { .crad-content {
font-size: 14px; font-size: 14px;
color: #414141; color: #414141;
padding: 12px; padding: 44rpx 24rpx;
} }
.status-wait { .status-wait {
position: absolute; position: absolute;
@ -451,21 +491,30 @@ export default {
padding: 16px; padding: 16px;
} }
.patients { .patients {
font-size: 16px; font-size: 36rpx;
font-weight: bold; font-weight: bold;
padding: 10px 0; color: #3e3d4d;
font-family: OPPOSans-Bold, OPPOSans;
}
.shu {
width: 16rpx;
height: 40rpx;
margin-right: 16rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 40rpx;
opacity: 1;
} }
.card-total { .card-total {
padding: 0 8px; padding: 0 8px;
border-radius: 10px; border-radius: 10px;
background-color: #009dff; background-color: #4f8bff;
color: white; color: white;
} }
.img-box { .img-box {
position: absolute; position: absolute;
top: 14px; bottom: -20rpx;
width: 44px; width: 44px;
height: 44px; height: 44px;
right: 16px; right: -20rpx;
} }
</style> </style>

2
src/components/Service/Service.vue

@ -9,7 +9,7 @@
<!-- 客服 --> <!-- 客服 -->
<img style="height: 28px; width: 28px" src="./icon/tel-we.png" alt="" /> <img style="height: 28px; width: 28px" src="./icon/tel-we.png" alt="" />
</button> </button>
<view class="edition">v3.1.0</view> <view class="edition">v4.0.0</view>
</div> </div>
</template> </template>
<script> <script>

149
src/components/Test/Test.vue

@ -13,12 +13,20 @@
itemIsShow(listItem.Fcode, listItem.isShow, listItem.level) && itemNoShow(listItem.NFcode, listItem.noShow, listItem.level) itemIsShow(listItem.Fcode, listItem.isShow, listItem.level) && itemNoShow(listItem.NFcode, listItem.noShow, listItem.level)
" "
> >
<div class="w-full flex flex-nowrap justify-between items-center" :style="{ marginLeft: listItem.grade === 2 ? '' : '16px' }"> <div class="w-full flex flex-nowrap justify-between items-center">
<div class="flex items-center" v-if="listItem.title" style="font-size: 16px"> <div class="flex items-center" v-if="listItem.title" style="font-size: 16px">
{{ listItem.title }} <!-- {{ listItem.title }}
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span> <span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span> -->
<div class="flex items-center" v-if="listItem.type !== -1">
<view class="putong-title">{{ listItem.title }}</view>
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span>
</div>
<div class="flex items-center" v-else>
<view class="shu"></view>
<view class="shu-title">{{ listItem.title }}</view>
</div>
</div> </div>
<div class="flex flex-1 justify-end"> <div class="flex flex-1 justify-end" :style="{marginLeft: listItem.title ? '' : '24rpx'}">
<!-- 自动计算 --> <!-- 自动计算 -->
<span v-if="listItem.type === 0" style="color: rgba(0, 0, 0, 0.45)"> <span v-if="listItem.type === 0" style="color: rgba(0, 0, 0, 0.45)">
{{ listItem.code === 'JBXX-BMI' ? getBMI : getCount }} {{ listItem.code === 'JBXX-BMI' ? getBMI : getCount }}
@ -48,22 +56,26 @@
</u-radio-group> </u-radio-group>
<!-- 单选(竖向排列) --> <!-- 单选(竖向排列) -->
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 21" class="flex flex-col w-full"> <u-radio-group :value="listItem.value" v-else-if="listItem.type === 21" class="flex flex-col w-full">
<div v-for="radioValue in listItem.itemList" :key="radioValue"> <div v-for="radioValue in listItem.itemList" :key="radioValue" style="width: 105%">
<u-radio <view class="flex justify-between">
style="display: block; width: 100%; margin-left: 0; height: 40px; line-height: 40px" <view class="flex-1">
:name="radioValue" <span :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</span>
:key="radioValue" </view>
@change="changeRadio($event, listItem.code, index, listIndex)" <u-radio
> style="display: block;margin-left: 0; height: 40px; line-height: 40px"
<span :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }">{{ radioValue }}</span> :name="radioValue"
</u-radio> :key="radioValue"
@change="changeRadio($event, listItem.code, index, listIndex)"
>
</u-radio>
</view>
<div <div
v-if=" v-if="
listItem.code === 'ZLFA-FBJZ' && listItem.code === 'ZLFA-FBJZ' &&
listItem.value === '其他原因所致的缺血性卒中(SOE)' && listItem.value === '其他原因所致的缺血性卒中(SOE)' &&
radioValue === '其他原因所致的缺血性卒中(SOE)' radioValue === '其他原因所致的缺血性卒中(SOE)'
" "
class="flex ml-2" class="flex ml-2 mb-2 items-center"
> >
<div>是否烟雾病:</div> <div>是否烟雾病:</div>
<u-radio-group :value="listItem.ywbValue"> <u-radio-group :value="listItem.ywbValue">
@ -187,40 +199,41 @@
</u-radio-group> </u-radio-group>
<!-- 单选(竖向排列带分数输入框) --> <!-- 单选(竖向排列带分数输入框) -->
<u-radio-group :value="listItem.value" v-else-if="listItem.type === 24" class="flex flex-col w-full"> <u-radio-group :value="listItem.value" v-else-if="listItem.type === 24" class="flex flex-col w-full">
<div class="w-full flex" v-for="(radioValue, radioIndex) in listItem.itemList" :key="radioIndex"> <div class="flex items-center justify-between" style="width: 105%" v-for="(radioValue, radioIndex) in listItem.itemList" :key="radioIndex">
<view class="flex items-center flex-1" style="height: 78rpx">
<view>{{ radioValue.name }}</view>
<div v-if="radioValue.showIpt" class="flex items-center ml-1 mr-1">
<!-- :disabled="listItem.value !== radioValue.name" -->
<u-input
:clearable="false"
:value="radioValue.value"
:type="radioValue.unit ? 'number' : 'text'"
placeholder="请输入症状描述"
style="width: 300rpx !important"
@click="iptChangeRadio(radioValue.name, listItem.code, index, listIndex)"
@blur="
changeRadioScore(
$event,
radioValue.code,
index,
listIndex,
radioIndex,
radioValue.unit,
radioValue.min,
radioValue.max,
)
"
/>
<span>{{ radioValue.unit }}</span>
</div>
</view>
<u-radio <u-radio
class="flex items-center" class="flex items-center"
:style="{ color: listItem.value === radioValue ? '#1890ff' : '' }" :style="{ color: listItem.value === radioValue ? '#1890ff' : '' }"
:name="radioValue.name" :name="radioValue.name"
@change="changeRadio($event, listItem.code, index, listIndex)" @change="changeRadio($event, listItem.code, index, listIndex)"
> >
{{ radioValue.name }}
</u-radio> </u-radio>
<div v-if="radioValue.showIpt" class="flex items-center ml-1 mr-1">
<!-- :disabled="listItem.value !== radioValue.name" -->
<u-input
:border="true"
:clearable="false"
:value="radioValue.value"
:type="radioValue.unit ? 'number' : 'text'"
placeholder="请输入"
style="width: 150rpx !important"
@click="iptChangeRadio(radioValue.name, listItem.code, index, listIndex)"
@blur="
changeRadioScore(
$event,
radioValue.code,
index,
listIndex,
radioIndex,
radioValue.unit,
radioValue.min,
radioValue.max,
)
"
/>
<span>{{ radioValue.unit }}</span>
</div>
</div> </div>
</u-radio-group> </u-radio-group>
<!-- 多选 --> <!-- 多选 -->
@ -297,7 +310,7 @@
</span> </span>
<span class="mr-3 gray-text" v-else>请选择时间</span> <span class="mr-3 gray-text" v-else>请选择时间</span>
<!-- <img src="@/static/icon/time.png" style="height: 20px" /> --> <!-- <img src="@/static/icon/time.png" style="height: 20px" /> -->
<u-icon name="clock" color="#2979ff" size="28"></u-icon> <u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div> </div>
<!-- 展开底部下拉框 --> <!-- 展开底部下拉框 -->
<div <div
@ -309,7 +322,7 @@
<span style="margin-right: 10px" v-if="listItem.value">{{ listItem.value }}</span> <span style="margin-right: 10px" v-if="listItem.value">{{ listItem.value }}</span>
<span style="margin-right: 10px" v-else>请选择</span> <span style="margin-right: 10px" v-else>请选择</span>
<!-- <img src="@/static/icon/right.png" style="height: 20px" /> --> <!-- <img src="@/static/icon/right.png" style="height: 20px" /> -->
<u-icon name="arrow-right" color="#2979ff" size="28"></u-icon> <u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div> </div>
<!-- 带有最大最小值限制的输入框 --> <!-- 带有最大最小值限制的输入框 -->
<div v-else-if="listItem.type === 7" class="flex items-center"> <div v-else-if="listItem.type === 7" class="flex items-center">
@ -319,14 +332,14 @@
</div> </div>
<span v-if="listItem.beforeUnit">{{ listItem.beforeUnit }}</span> <span v-if="listItem.beforeUnit">{{ listItem.beforeUnit }}</span>
<u-input <u-input
:border="true" input-align="right"
:clearable="false" :clearable="false"
type="number" type="number"
:value="listItem.value" :value="listItem.value"
placeholder="请输入" placeholder="请输入"
style="width: 200rpx" style="width: 200rpx"
@change="changeNum($event, listItem.min, listItem.max, listItem.code, index, listIndex)" @change="changeNum($event, listItem.min, listItem.max, listItem.code, index, listIndex)"
@blur="inputNumBlur($event, listItem.code)" @blur="inputNumBlur($event, listItem.code, listItem.min, listItem.max, index, listIndex)"
/> />
<span v-if="listItem.unit">{{ listItem.unit }}</span> <span v-if="listItem.unit">{{ listItem.unit }}</span>
</div> </div>
@ -492,7 +505,7 @@ export default {
}, },
methods: { methods: {
changeHeigt() { changeHeigt() {
this.$emit('getCollaoseHeight', this.testIndex); // this.$emit('getCollaoseHeight', this.testIndex);
}, },
/** /**
* 判断当前 item 是否显示 * 判断当前 item 是否显示
@ -593,9 +606,9 @@ export default {
*/ */
changeRadio(e, code, index, itemIndex) { changeRadio(e, code, index, itemIndex) {
this.Rerender(e, index, itemIndex); this.Rerender(e, index, itemIndex);
if (this.canChange) { // if (this.canChange) {
this.$emit('getCollaoseHeight', this.testIndex); // this.$emit('getCollaoseHeight', this.testIndex);
} // }
this.setAnswer(code, e); this.setAnswer(code, e);
}, },
// , // ,
@ -609,6 +622,7 @@ export default {
Rerender(value, index, itemIndex) { Rerender(value, index, itemIndex) {
let Arr = [...this.test]; let Arr = [...this.test];
Arr[index][itemIndex].value = value; Arr[index][itemIndex].value = value;
console.log('Arr[index][itemIndex].value: ', Arr[index][itemIndex].value);
this.test = [...Arr]; this.test = [...Arr];
}, },
// //
@ -797,7 +811,8 @@ export default {
this.Rerender(num, index, itemIndex); this.Rerender(num, index, itemIndex);
}, },
// ,,/ // ,,/
inputNumBlur(e, code) { inputNumBlur(e, code, min, max, index, itemIndex) {
this.changeNum(e, min, max, code, index, itemIndex)
this.numIndex = null; this.numIndex = null;
this.numItemIndex = null; this.numItemIndex = null;
this.exceed = ''; this.exceed = '';
@ -911,7 +926,32 @@ export default {
}; };
</script> </script>
<style> <style scoped>
/deep/.u-radio__label {
margin-left: 0 !important;
margin-right: 0 !important;
}
.putong-title {
margin-left: 24rpx;
font-size: 32rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #3e3d4d;
}
.shu {
width: 16rpx;
height: 40rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 40rpx;
opacity: 1;
margin-right: 8rpx;
}
.shu-title {
font-size: 36rpx;
font-family: Open Sans-Bold, Open Sans;
font-weight: bold;
color: #3e3d4d;
}
.ipt-radio view { .ipt-radio view {
height: 40px; height: 40px;
line-height: 40px; line-height: 40px;
@ -921,7 +961,7 @@ export default {
overflow: hidden; overflow: hidden;
box-sizing: border-box; box-sizing: border-box;
margin: 0; margin: 0;
padding: 0; padding: 0 32rpx;
color: rgba(0, 0, 0, 0.65); color: rgba(0, 0, 0, 0.65);
font-size: 14px; font-size: 14px;
font-variant: tabular-nums; font-variant: tabular-nums;
@ -935,8 +975,7 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 12px 16px; padding: 24rpx 0;
border-bottom: 1px solid #e8e8e8; border-bottom: 1px solid #eee;
margin-top: 8px;
} }
</style> </style>

31
src/components/Volume/Volume.vue

@ -1,17 +1,26 @@
<template> <template>
<view class="volume-box"> <view class="volume-box">
<scroll-view scroll-x style="height: 100%; width: 100%"> <scroll-view scroll-x style="height: 100%; width: 100%">
<view class="flex justify-evenly"> <view class="flex justify-between">
<view class="flex flex-col items-center justify-center" style="flex-shrink: 0" @click="apply">
<!-- <img class="volume-img" src="@/static/image.png" alt="" /> -->
<img class="volume-img" src="@/static/image.png" alt="" />
<span class="mt-2" style="color: #70798c">申请</span>
</view>
<!-- <view class="flex flex-col items-center justify-center" style="flex-shrink: 0" @click="statistics">
<img class="volume-img" src="@/static/image.png" alt="" />
<span class="mt-2" style="color: #70798c">统计</span>
</view> -->
<view <view
class="flex flex-col items-center justify-center" class="flex flex-col items-center justify-center"
style="width: 159rpx; flex-shrink: 0" style="flex-shrink: 0"
v-for="(item, index) in btnList" v-for="(item, index) in btnList"
:key="index" :key="index"
@click="jumpV(item.url)" @click="jumpV(item.url)"
> >
<!-- <img class="volume-img" src="@/static/image.png" alt="" /> --> <!-- <img class="volume-img" src="@/static/image.png" alt="" /> -->
<img class="volume-img" :src="item.iconUrl || '@/static/image.png'" alt="" /> <img class="volume-img" :src="item.iconUrl || '@/static/image.png'" alt="" />
<span class="mt-2" style="color: #40adff">{{ item.name }}</span> <span class="mt-2" style="color: #70798c">{{ item.name }}</span>
</view> </view>
</view> </view>
</scroll-view> </scroll-view>
@ -36,6 +45,14 @@ export default {
this.getInfo(); this.getInfo();
}, },
methods: { methods: {
statistics() {
console.log('统计');
uni.navigateTo({ url: '/pages/Statistics/index' });
},
apply() {
console.log('申请');
uni.navigateTo({ url: '/pages/Apply/index' });
},
// //
async getInfo() { async getInfo() {
if (!this.user) { if (!this.user) {
@ -80,10 +97,10 @@ export default {
/* border-radius: 50%; */ /* border-radius: 50%; */
} }
.volume-box { .volume-box {
width: 700rpx; width: 670rpx;
margin: 25rpx; margin: 48rpx 32rpx 0 32rpx;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.125); /* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.125); */
border-radius: 8rpx; border-radius: 8rpx;
padding: 32rpx; /* padding: 32rpx; */
} }
</style> </style>

47
src/components/VolumeProject/VolumeProject.vue

@ -1,15 +1,8 @@
<template> <template>
<view class="volume-box" v-if="itemList.length"> <view class="volume-box" v-if="itemList.length">
<swiper <swiper class="swiper" circular :autoplay="autoplay" :interval="interval" :duration="duration" @change="changeCard">
class="swiper" <!-- previous-margin="45rpx"
circular next-margin="45rpx" -->
:autoplay="autoplay"
:interval="interval"
:duration="duration"
previous-margin="45rpx"
next-margin="45rpx"
@change="changeCard"
>
<swiper-item v-for="(item, index) in itemList" :key="item.id" @click="openProject(item)"> <swiper-item v-for="(item, index) in itemList" :key="item.id" @click="openProject(item)">
<view <view
class="swiper-item flex items-center justify-center" class="swiper-item flex items-center justify-center"
@ -71,20 +64,20 @@ export default {
openProject(project) { openProject(project) {
const { name, id, url, templateCode } = project; const { name, id, url, templateCode } = project;
url && (uni.$t.domain = url); url && (uni.$t.domain = url);
if (templateCode === 'carbasics') { // if (templateCode === 'carbasics') {
// , // ,
this.setGlobalData({}); this.setGlobalData({});
this.setPermanents(null); this.setPermanents(null);
this.setDailyTasks(null); this.setDailyTasks(null);
uni.navigateTo({ url: `/pages/task-page/task-page?u=${this.userId}&p=${id}&pname=${name}&url=${encodeURIComponent(url)}` }); uni.navigateTo({ url: `/pages/task-page/task-page?u=${this.userId}&p=${id}&pname=${name}&url=${encodeURIComponent(url)}` });
} else { // } else {
this.$u.route('pages/project-webview/project-webview', { // this.$u.route('pages/project-webview/project-webview', {
u: this.userId, // u: this.userId,
p: id, // p: id,
pname: name, // pname: name,
url: encodeURIComponent(url), // url: encodeURIComponent(url),
}); // });
} // }
}, },
}, },
}; };
@ -109,9 +102,9 @@ export default {
/* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); */ /* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2); */
} }
.volume-box { .volume-box {
width: 700rpx; width: calc(750rpx - 32px);
height: 120px; height: 240rpx;
margin: 25rpx; margin: 36rpx 32rpx 0 32rpx;
/* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); */ /* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); */
border-radius: 8rpx; border-radius: 8rpx;
/* overflow: hidden; */ /* overflow: hidden; */

2
src/main.js

@ -21,6 +21,8 @@ import wbs from '@/apis/wbs.js';
// import indexedDB from '@/utils/indexedDB'; // import indexedDB from '@/utils/indexedDB';
// Vue.use(indexedDB); // Vue.use(indexedDB);
//#endif //#endif
var quarterOfYear = require('dayjs/plugin/quarterOfYear');
dayjs.extend(quarterOfYear);
Vue.config.productionTip = false; Vue.config.productionTip = false;
Vue.prototype.$moment = dayjs; Vue.prototype.$moment = dayjs;

14
src/pages.json

@ -3,6 +3,8 @@
{ {
"path": "pages/index/index", "path": "pages/index/index",
"style": { "style": {
"navigationBarBackgroundColor": "#4F8BFF",
"navigationBarTextStyle": "white",
"navigationBarText": "暴风眼Typhoneye" "navigationBarText": "暴风眼Typhoneye"
} }
}, },
@ -91,6 +93,18 @@
"style": { "style": {
"navigationBarTitleText": "注册" "navigationBarTitleText": "注册"
} }
},
{
"path": "pages/Apply/index",
"style": {
"navigationBarTitleText": "申请加入"
}
},
{
"path": "pages/Statistics/index",
"style": {
"navigationBarTitleText": "数据统计"
}
} }
], ],
"globalStyle": { "globalStyle": {

BIN
src/pages/Apply/img/0.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

BIN
src/pages/Apply/img/1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
src/pages/Apply/img/2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

BIN
src/pages/Apply/img/kefu.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 KiB

BIN
src/pages/Apply/img/weixin.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 500 KiB

443
src/pages/Apply/index.vue

@ -0,0 +1,443 @@
<template>
<div class="flex flex-col">
<view class="bg-white flex flex-col" style="padding: 0" v-if="onceList.length">
<div class="w-full" style="max-height: 342px; overflow-y: scroll; padding: 16px 16px 0 16px">
<div class="w-full ver-box" v-for="item in onceList" :key="item.id">
<div class="flex ver-title items-center justify-between">
<div class="flex" style="font-size: 16px; font-weight: bold">
<div class="mr-2">{{ item.department }}</div>
<div>{{ item.position }}</div>
</div>
<div class="over-hidden" style="color: #70798c; text-align: right; font-size: 12px; font-weight: bold; width: 40%">
{{ item.hospitalName }}
</div>
</div>
<div class="flex flex-row flex-nowrap ver-content">
<div>
<div class="con-tip mt-2 mb-3">姓名</div>
<div class="con-tip">手机号</div>
</div>
<div>
<div class="con-tip mt-2 mb-3">
{{ item.name }}
</div>
<div class="con-tip">
{{ item.phone }}
</div>
</div>
</div>
<div v-if="item.auditStatus === 0" class="ver-over">
<img src="./img/0.png" style="height: 80px; width: 59px" alt="" />
</div>
<div v-else-if="item.auditStatus === 1" class="ver-over">
<img src="./img/1.png" style="height: 80px; width: 59px" alt="" />
</div>
<div v-else-if="item.auditStatus === 2" class="ver-over">
<img src="./img/2.png" style="height: 80px; width: 59px" alt="" />
</div>
</div>
</div>
</view>
<view class="bg-white">
<div class="apply-title w-full my-2">暴风眼Typhoneye小程序账户登记</div>
<div class="apply-control mb-2">暴风眼Typhoneye是急诊急救数字化管理平台基础版的简称</div>
<div class="apply-control mb-2">
暴风眼质控模式践行以病人为核心的理念医疗资源围绕病人运转尽量减少病人不必要的无效位移无效等待
</div>
<div class="apply-control mb-2">您的参与对我们非常重要有问题请联系首页客服</div>
<div class="w-full flex justify-center">
<img src="./img/kefu.jpg" style="width: 130px; margin: 8px auto" @click="showImg = true" />
</div>
</view>
<view class="bg-white">
<div class="w-full item-title flex align-start">医院</div>
<div class="w-full hos-box">
<u-radio-group v-model="value" class="w-full" wrap @change="onChange">
<div v-for="(item, index) in hosList" :key="index" class="mb-3 flex justify-between title">
{{ item.name }}
<u-radio :name="item.name"> </u-radio>
</div>
</u-radio-group>
<view v-if="value === '其他'" style="width: calc(100% - 32rpx)" class="pb-3 title">
<u-input class="w-full" @blur="iptBlur" border v-model="hosName" placeholder="请输入..." />
</view>
</div>
</view>
<view class="bg-white">
<div class="w-full item-title flex align-start">部门/职位</div>
<div class="w-full post-box">
<!-- <u-input v-model="departmentName" type="text" border disabled @click="showDep = true" placeholder="选择部门" class="mr-4" />
<u-input v-model="posiName" type="text" border disabled @click="showPositions" placeholder="选择职位" /> -->
<view class="mb-3 flex justify-between" @click="showDep = true">
<view class="title">部门</view>
<view>
{{ departmentName }}
<u-icon class="ml-2" name="arrow-down" color="#70798c"></u-icon>
</view>
</view>
<view class="flex justify-between" @click="showPositions">
<view class="title">职位</view>
<view>
{{ posiName }}
<u-icon class="ml-2" name="arrow-down" color="#70798c"></u-icon>
</view>
</view>
</div>
</view>
<view class="bg-white">
<div class="w-full item-title flex align-start">信息</div>
<div class="w-full info-box">
<!-- <u-input v-model="departmentName" type="text" border disabled @click="showDep = true" placeholder="选择部门" class="mr-4" />
<u-input v-model="posiName" type="text" border disabled @click="showPositions" placeholder="选择职位" /> -->
<view class="flex items-center justify-between" @click="showDep = true">
<view class="mb-1 title">姓名</view>
<view>
<u-input placeholder="请输入" input-align="right" v-model="FilledBy"></u-input>
</view>
</view>
<view class="flex justify-between" @click="showPositions">
<view class="title">手机号</view>
<view>
<span>{{ FilledTel }}</span>
</view>
</view>
</div>
</view>
<!-- <view class="bg-white mb-2 flex items-center justify-between">
<div class="col-title">姓名</div>
<div>
<u-input placeholder="请输入" border input-align="right" v-model="FilledBy"></u-input>
</div>
</view>
<view class="bg-white mb-2 flex items-center justify-between">
<div class="col-title">手机号</div>
<div>
<span>{{ FilledTel }}</span>
</div>
</view> -->
<u-button shape="circle" :disabled="waiting" type="primary" :custom-style="submitBtn" @click="submit">提交申请</u-button>
<u-select
v-model="showDep"
:list="departmentList"
value-name="departmentCode"
label-name="departmentName"
@confirm="handleChange"
></u-select>
<u-select v-model="showPos" :list="positions" value-name="positionCode" label-name="positionName" @confirm="handleChangePos"></u-select>
<div class="img-box flex items-center" v-if="showImg" @click="showImg = false">
<img src="./img/kefu.jpg" class="w-full h-full" />
</div>
</div>
</template>
<script>
import { mapState } from 'vuex';
export default {
name: 'Apply',
components: {},
props: {},
data() {
return {
value: '',
onceList: [], //
hosList: [],
departmentList: [],
positions: [],
hosName: '', //
departmentName: '', //
departmentCode: '', // code
posiName: '', //
posiCode: '', // Code
FilledBy: '', //
FilledTel: '', //
waiting: false,
showImg: false,
showDep: false,
showPos: false,
submitBtn: {
height: '46px',
margin: '32rpx 32rpx 48px 32rpx',
background: 'linear-gradient(136deg, #7BC0FF 0%, #4D88FF 100%)',
},
};
},
computed: {
...mapState('user', ['user']),
},
methods: {
// select
showPositions() {
if (!this.departmentCode) {
this.$t.ui.showToast('请先选择部门');
} else {
this.showPos = true;
}
},
//
async getMyApply() {
try {
const param = {
auditStatus: '',
name: '',
};
const res = await this.$u.api.queryMyApply(param);
this.onceList = res;
} catch (error) {
this.$t.ui.showToast('网络异常,查询申请列表失败,请稍后重试');
}
},
//
async getHosList() {
try {
const res = await this.$u.api.queryHospital({});
const other = { name: '其他' };
res.push(other);
this.hosList = res;
console.log('this.hosList: ', this.hosList);
} catch (error) {
this.$t.ui.showToast('网络异常,请稍后重试');
}
},
//
async getPosList() {
try {
const param = { name: this.hosName ? this.hosName : this.value };
const res = await this.$u.api.queryDepartment(param);
this.departmentList = res;
console.log('this.departmentList: ', this.departmentList);
} catch (error) {
this.$t.ui.showToast('网络异常,请稍后重试');
}
},
// ,,
onChange(e) {
if (e === '其他') {
this.hosName = '';
}
this.getPosList();
},
// ,
iptBlur() {
this.getPosList();
},
//
handleChange(e) {
this.departmentName = e[0].label;
this.departmentCode = e[0].value;
for (let i = 0; i < this.departmentList.length; i++) {
const item = this.departmentList[i];
if (item.departmentCode === e[0].value) {
this.positions = item.positions;
}
}
this.posiName = '';
this.posiCode = '';
},
//
handleChangePos(e) {
this.posiName = e[0].label;
this.posiCode = e[0].value;
},
//
async submit() {
this.waiting = true;
try {
if (!this.hosName && this.value === '其他') {
this.$t.ui.showToast('请输入医院名称');
this.waiting = false;
return;
}
if (!this.value) {
this.$t.ui.showToast('请选择医院');
this.waiting = false;
return;
}
if (!this.departmentName) {
this.$t.ui.showToast('请选择部门');
this.waiting = false;
return;
}
if (!this.posiName) {
this.$t.ui.showToast('请选择职位');
this.waiting = false;
return;
}
if (!this.FilledBy) {
this.$t.ui.showToast('请填写姓名');
this.waiting = false;
return;
}
if (!this.FilledTel) {
this.$t.ui.showToast('请填写手机号');
this.waiting = false;
return;
}
const param = {
departmentCode: this.departmentCode,
departmentName: this.departmentName,
hospitalName: this.hosName ? this.hosName : this.value,
positionCode: this.posiCode,
positionName: this.posiName,
submitter: this.FilledBy,
submitterPhone: this.FilledTel,
};
const res = await this.$u.api.submitAccount(param);
this.$t.ui.showToast('提交成功');
this.departmentCode = '';
this.departmentName = '';
// this.hosName = ''; //
this.posiCode = '';
this.posiName = '';
// this.FilledBy = ''; //
this.getMyApply();
uni.pageScrollTo({
scrollTop: 0,
duration: 100,
});
this.waiting = false;
} catch (error) {
this.$t.ui.showToast('网络异常,请稍后重试');
this.waiting = false;
}
},
},
watch: {},
// --
onLoad() {
if (this.user.phone) {
this.FilledTel = this.user.phone;
}
this.getMyApply();
this.getHosList();
this.getPosList();
},
// --
onReady() {},
// --(not-nvue)
onShow() {},
// --
onHide() {},
// --
onUnload() {},
// --
// onPullDownRefresh() { uni.stopPullDownRefresh(); },
// --
// onReachBottom() {},
// --(not-nvue)
// onPageScroll(event) {},
// --
// onShareAppMessage(options) {},
};
</script>
<style scoped>
.title {
color: #70798c;
font-size: 14px;
font-weight: bold;
}
.bg-white {
background-color: white;
/* margin-bottom: 12px; */
padding: 16px;
}
.img-box {
width: 100vw;
height: 100vh;
position: fixed;
top: 0;
left: 0;
background: rgba(0, 0, 0, 0.45);
z-index: 1000;
}
.over-hidden {
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.ver-over {
height: 80px;
width: 60px;
text-align: center;
line-height: 56px;
position: absolute;
right: 12px;
bottom: 16px;
}
.con-tip {
font-size: 16px;
color: #70798c;
min-width: 80px;
}
.ver-content {
padding: 16px;
height: 100px;
}
.ver-box {
border-left: 6rpx solid #1bb299;
box-shadow: 0 0 12px 1px #eee;
border-radius: 10rpx;
margin-bottom: 16px;
position: relative;
}
.hos-box {
height: auto;
border-left: 6rpx solid #4f8bff;
box-shadow: 0 0 12px 1px #eee;
border-radius: 10rpx;
/* margin-bottom: 16px; */
position: relative;
padding: 24rpx 0 0rpx 20rpx;
}
.post-box {
height: auto;
border-left: 6rpx solid #1bb299;
box-shadow: 0 0 12px 1px #eee;
border-radius: 10rpx;
position: relative;
padding: 24rpx 20rpx;
}
.info-box {
height: auto;
border-left: 6rpx solid #ff8833;
box-shadow: 0 0 12px 1px #eee;
border-radius: 10rpx;
position: relative;
padding: 8rpx 20rpx 24rpx 20rpx;
}
.ver-title {
height: 52px;
border-bottom: 1px solid #eee;
color: #3e3d4d;
font-weight: bold;
padding: 0 16px;
}
/deep/.ant-select {
width: 45%;
}
.item-title {
height: 40px;
/* border-bottom: 1px solid #eee; */
font-weight: bold;
font-size: 18px;
font-weight: bold;
color: #3e3d4d;
}
.col-title {
font-size: 16px;
font-weight: bold;
}
.apply-title {
font-size: 16px;
font-weight: bold;
color: #333;
text-align: center;
}
.apply-control {
font-size: 14px;
color: #666;
}
</style>

294
src/pages/Statistics/components/Title.vue

@ -0,0 +1,294 @@
<template>
<div class="title-box bg-white fill-width">
<!-- <a-tabs v-model="timeValue" @change="changeTab" size="small">
<a-tab-pane :key="0" tab="24h"></a-tab-pane>
<a-tab-pane :key="1" tab="周"></a-tab-pane>
<a-tab-pane :key="2" tab="月"></a-tab-pane>
<a-tab-pane :key="3" tab="季"></a-tab-pane>
<a-tab-pane :key="4" tab="年"></a-tab-pane>
</a-tabs> -->
<u-subsection :list="list" :current="timeValue" @change="changeTab"></u-subsection>
<div class="time-box">
<a-date-picker @change="changeDay" v-if="timeValue === 0" :popup-style="popupStyle">
<div style="color: #4b8aff; text-align: center; padding-left: 8px">
&lt;
{{ text }}
&gt;
</div>
</a-date-picker>
<a-week-picker @change="changeWeek" v-else-if="timeValue === 1" :popup-style="popupStyle">
<div style="color: #4b8aff; text-align: center; padding-left: 8px">
&lt;
{{ text }}
&gt;
</div>
</a-week-picker>
<a-month-picker @change="changeMonth" v-else-if="timeValue === 2" :popup-style="popupStyle">
<div style="color: #4b8aff; text-align: center; padding-left: 8px">
&lt;
{{ text }}
&gt;
</div>
</a-month-picker>
<div v-else-if="timeValue === 3" style="color: #4b8aff; text-align: center; padding-left: 8px" @click="showCal = !showCal">
&lt;
{{ text }}
&gt;
</div>
<div class="calendar-box" :style="{ height: timeValue === 3 && showCal ? '160px' : '0' }">
<div class="ant-calendar-year-panel-header">
<a type="left" class="ant-calendar-year-panel-prev-decade-btn" @click="quarterYear--" />
<span>{{ quarterYear }}</span>
<a type="right" class="ant-calendar-year-panel-next-decade-btn" @click="quarterYear++" />
</div>
<div class="ant-calendar-year-panel-tbody d-flex flex-column justify-space-between" style="height: 120px">
<div
class="quarter-box"
@click="changeQuarter(0, '第一季度')"
:style="{ background: isActive === 0 ? '#40a9ff' : '', color: isActive === 0 ? '#fff' : '' }"
>
第一季度
</div>
<div
class="quarter-box"
@click="changeQuarter(1, '第二季度')"
:style="{ background: isActive === 1 ? '#40a9ff' : '', color: isActive === 1 ? '#fff' : '' }"
>
第二季度
</div>
<div
class="quarter-box"
@click="changeQuarter(2, '第三季度')"
:style="{ background: isActive === 2 ? '#40a9ff' : '', color: isActive === 2 ? '#fff' : '' }"
>
第三季度
</div>
<div
class="quarter-box"
@click="changeQuarter(3, '第四季度')"
:style="{ background: isActive === 3 ? '#40a9ff' : '', color: isActive === 3 ? '#fff' : '' }"
>
第四季度
</div>
</div>
</div>
<a-date-picker @panelChange="changeYear" v-if="timeValue === 4" format="YYYY" mode="year" :popup-style="popupStyle">
<div style="color: #4b8aff; text-align: center; padding-left: 8px">
&lt;
{{ text }}
&gt;
</div>
</a-date-picker>
</div>
</div>
</template>
<script>
export default {
name: 'Title',
data() {
return {
// text: '24'
list: ['24h', '周', '月', '季', '年'],
text: '近24h',
startTime: 0,
endTime: 0,
timeUnit: 0,
timeValue: 0,
quarterYear: new Date().getFullYear(),
popupStyle: {
left: '0 !important',
top: '0 !important',
position: 'relative',
},
showCal: false,
isActive: 0,
};
},
watch: {
endTime() {
this.$emit('getTime', this.startTime, this.endTime, this.timeUnit);
},
quarterYear(val) {
if (this.isActive === 0) {
this.text = val + '-第一季度';
this.startTime = this.$moment(`${val}-01-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${val}-3-31 23:59:59`).valueOf();
} else if (this.isActive === 1) {
this.text = val + '-第二季度';
this.startTime = this.$moment(`${val}-04-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${val}-6-30 23:59:59`).valueOf();
} else if (this.isActive === 2) {
this.text = val + '-第三季度';
this.startTime = this.$moment(`${val}-07-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${val}-9-30 23:59:59`).valueOf();
} else if (this.isActive === 3) {
this.text = val + '-第四季度';
this.startTime = this.$moment(`${val}-10-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${val}-12-31 23:59:59`).valueOf();
}
},
},
methods: {
// changeTab(e) {
// this.$emit('getTime', e);
// },
// 
changeTab(e) {
console.log('e: ', e);
// this.endTime = new Date().valueOf();
this.showCal = false;
this.timeUnit = e;
if (e === 0) {
//
//
const dayDateStart = this.$moment(new Date().valueOf()).format('YYYY-MM-DD 00:00:00');
//
const dayDateEnd = this.$moment(new Date().valueOf()).format('YYYY-MM-DD 23:59:59');
// 0
this.startTime = this.$moment(dayDateStart).valueOf() - 3600 * 1000;
// 235959
this.endTime = this.$moment(dayDateEnd).valueOf();
this.text = '近24h';
} else if (e === 1) {
//
this.startTime = new Date().valueOf() - 7 * 24 * 3600 * 1000;
const weekDateStart = this.$moment(new Date()).week(this.$moment(new Date()).week()).startOf('week').format('YYYY-MM-DD 00:00:00');
this.startTime = this.$moment(weekDateStart).valueOf() - 24 * 3600 * 1000;
this.endTime = this.$moment(weekDateStart).valueOf() + 6 * 24 * 3600 * 1000;
this.text = '近一周';
} else if (e === 2) {
//
this.startTime =
this.$moment(this.$moment(new Date().valueOf()).startOf('month').format('YYYY-MM-DD HH:mm:ss')).valueOf() - 3600 * 1000;
this.endTime =
this.$moment(this.$moment(new Date().valueOf()).endOf('month').format('YYYY-MM-DD 23:59:59')).valueOf() + 3600 * 1000;
this.text = '近一月';
} else if (e === 3) {
//
this.startTime = new Date().valueOf() - 90 * 24 * 3600 * 1000;
const num = this.$moment().quarter() - 0;
if (num === 1) {
this.startTime = this.$moment(`${this.quarterYear}-01-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${this.quarterYear}-3-31 23:59:59`).valueOf();
} else if (num === 2) {
this.startTime = this.$moment(`${this.quarterYear}-04-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${this.quarterYear}-6-30 23:59:59`).valueOf();
} else if (num === 3) {
this.startTime = this.$moment(`${this.quarterYear}-07-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${this.quarterYear}-9-30 23:59:59`).valueOf();
} else if (num === 4) {
this.startTime = this.$moment(`${this.quarterYear}-10-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${this.quarterYear}-12-31 23:59:59`).valueOf();
}
this.text = '近一季度';
} else if (e === 4) {
//
const yearDate = this.$moment().year();
this.startTime = this.$moment(`${yearDate}-01-01 00:00:00`).valueOf() - 30 * 24 * 3600 * 1000;
this.endTime = this.$moment(`${yearDate}-12-31 23:59:59`).valueOf();
this.text = '近一年';
}
console.log(this.text);
// this.$emit('getTime', e);
},
//
changeDay(e, dateString) {
this.text = dateString;
this.startTime = this.$moment(`${this.text} 00:00:00`).valueOf() - 3600 * 1000;
this.endTime = this.$moment(`${this.text} 23:59:59`).valueOf();
},
//
changeWeek(e, dateString) {
this.text = dateString;
const startValue = this.$moment(e._d).week(this.$moment(e._d).week()).startOf('week').format('YYYY-MM-DD 00:00:00'); //
this.startTime = this.$moment(startValue).valueOf() - 24 * 3600 * 1000;
this.endTime = this.startTime + 7 * 24 * 3600 * 1000;
},
//
changeMonth(e, dateString) {
this.text = dateString;
console.log('e, dateString: ', e, dateString);
this.startTime = this.$moment(this.$moment(e._d).startOf('month').format('YYYY-MM-DD HH:mm:ss')).valueOf() - 3600 * 1000;
this.endTime = this.$moment(this.$moment(e._d).endOf('month').format('YYYY-MM-DD 23:59:59')).valueOf() + 3600 * 1000;
},
//
changeQuarter(num, str) {
this.isActive = num;
this.text = this.quarterYear + '-' + str;
if (num === 0) {
this.startTime = this.$moment(`${this.quarterYear}-01-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${this.quarterYear}-3-31 23:59:59`).valueOf();
} else if (num === 1) {
this.startTime = this.$moment(`${this.quarterYear}-04-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${this.quarterYear}-6-30 23:59:59`).valueOf();
} else if (num === 2) {
this.startTime = this.$moment(`${this.quarterYear}-07-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${this.quarterYear}-9-30 23:59:59`).valueOf();
} else if (num === 3) {
this.startTime = this.$moment(`${this.quarterYear}-10-01 00:00:00`).valueOf();
this.endTime = this.$moment(`${this.quarterYear}-12-31 23:59:59`).valueOf();
}
setTimeout(() => {
this.showCal = false;
}, 80);
},
//
changeYear(e) {
this.text = this.$moment(e).format('YYYY');
this.startTime = this.$moment(`${this.text}-01-01 00:00:00`).valueOf() - 30 * 24 * 3600 * 1000;
this.endTime = this.$moment(`${this.text}-12-31 23:59:59`).valueOf();
},
},
};
</script>
<style scoped>
/* .title-box {
height: 84px;
width: 100%;
text-align: center;
}
/deep/.ant-tabs-bar {
margin: 0 0 8px 0;
border-bottom: none;
}
*/
.time-box {
text-align: center;
margin: auto;
position: relative;
}
/deep/.ant-tabs-nav {
margin-right: auto;
}
/deep/.ant-tabs-tab {
margin-right: 0;
text-align: center;
}
/deep/.ant-tabs-nav {
width: 100%;
}
/deep/.ant-tabs-nav div {
width: 100%;
display: flex;
justify-content: center;
}
.calendar-box {
position: absolute;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 0 5px #ddd;
z-index: 10;
left: 50%;
margin-left: -140px;
width: 280px;
transition: all 0.2s;
overflow: hidden;
}
.quarter-box {
line-height: 30px;
}
</style>

104
src/pages/Statistics/index.vue

@ -0,0 +1,104 @@
<template>
<div class="flex flex-nowrap flex-col bg-white">
<u-collapse default-active-key="1" class="mb-2" :bordered="false" style="width: 100%" expand-icon-position="right">
<u-collapse-item key="1" :title="header" :style="customStyle">
<!-- <view class="bg-white"> -->
<Title @getTime="getTime" />
<!-- </view> -->
<view bordered class="mt-2" v-for="item in list" :key="item">
123
<!-- <runway v-if="item === 'run'" :start-time="startTime" :end-time="endTime" />
<DNT v-else-if="item === 'DNT'" :start-time="startTime" :end-time="endTime" />
<DPT v-else-if="item === 'DPT'" :start-time="startTime" :end-time="endTime" />
<Operation v-else-if="item === '手术方式'" :start-time="startTime" :end-time="endTime" />
<Hospital v-else-if="item === '来院方式'" :start-time="startTime" :end-time="endTime" /> -->
</view>
<view bordered class="mt-2">
456
<!-- <Data :start-time="startTime" :end-time="endTime" /> -->
</view>
</u-collapse-item>
</u-collapse>
<!-- <u-collapse class="mb-2" :bordered="false" style="width: 100%" expand-icon-position="right">
<template #expandIcon="props">
<a-icon type="down" :rotate="props.isActive ? 0 : -180" />
</template>
<a-collapse-panel key="1" header="单项数据统计" :style="customStyle">
<lineBarChart />
</a-collapse-panel>
</u-collapse>
<u-collapse class="mb-2" :bordered="false" style="width: 100%" expand-icon-position="right">
<template #expandIcon="props">
<a-icon type="down" :rotate="props.isActive ? 0 : -180" />
</template>
<a-collapse-panel key="1" header="各地市数据对比" :style="customStyle">
<cityChart />
</a-collapse-panel>
</u-collapse> -->
</div>
</template>
<script>
import Title from './components/Title.vue';
export default {
name: 'Statistics',
components: { Title },
props: {},
data() {
return {
customStyle: 'background: #fff;border-radius: 4px;border: 0;overflow: hidden',
list: ['run', 'DNT', 'DPT', '手术方式', '来院方式'],
startTime: 0,
endTime: 0,
header: '',
};
},
computed: {},
methods: {
getTime(startTime, endTime) {
this.startTime = startTime;
this.endTime = endTime;
},
},
watch: {},
// --
onLoad() {
this.startTime = this.$moment(this.$moment(new Date().valueOf()).format('YYYY-MM-DD 00:00:00')).valueOf() - 3600 * 1000;
this.endTime = this.$moment(this.$moment(new Date().valueOf()).format('YYYY-MM-DD 23:59:59')).valueOf() + 3600 * 1000;
// if (this.ptProps.projectRole - 0 === 0) {
this.header = '本院统计';
// } else if (this.ptProps.projectRole - 0 === 1) {
// this.header = '';
// } else if (this.ptProps.projectRole - 0 === 2) {
// this.header = '';
// } else {
// this.header = '';
// }
},
// --
onReady() {},
// --(not-nvue)
onShow() {},
// --
onHide() {},
// --
onUnload() {},
// --
// onPullDownRefresh() { uni.stopPullDownRefresh(); },
// --
// onReachBottom() {},
// --(not-nvue)
// onPageScroll(event) {},
// --
// onShareAppMessage(options) {},
};
</script>
<style scoped>
.bg-white {
background-color: white;
margin-bottom: 12px;
padding: 16px;
}
</style>

300
src/pages/index/index.vue

@ -1,33 +1,90 @@
<template> <template>
<!-- <view class="flex flex-col h-full bg-gray-50" @click="openAuth"> --> <!-- <view class="flex flex-col h-full bg-gray-50" @click="openAuth"> -->
<view class="flex flex-col h-screen bg-gray-50"> <view class="flex flex-col h-screen">
<scroll-view scroll-y style="height: calc(100vh - 50px)" :show-scrollbar="false"> <scroll-view scroll-y style="height: calc(100vh - 50px)" :show-scrollbar="false">
<view class="relative"> <img src="@/static/news/top-bg.png" style="width: 100%; height: 268rpx" class="top-bg" alt="" />
<view class="relative" style="padding: 32rpx 16px 0 16px">
<!-- 日历 --> <!-- 日历 -->
<!-- <Calendar @selected-change="onDateChange" :show-back="true" ref="calendar" @handleFindPoint="handleFindPoint" /> --> <!-- <Calendar @selected-change="onDateChange" :show-back="true" ref="calendar" @handleFindPoint="handleFindPoint" /> -->
<u-swiper :list="list" border-radius="0" height="400" @click="gitSwiper"></u-swiper> <u-swiper :list="list" border-radius="16" height="300" @click="gitSwiper"></u-swiper>
<!-- 上传 导入wbs --> <!-- 上传 导入wbs -->
<!-- <Upload @success="onUploadSuccess" @error="onUploadError" /> --> <!-- <Upload @success="onUploadSuccess" @error="onUploadError" /> -->
<!-- #ifdef H5 --> <!-- #ifdef H5 -->
<!-- #endif --> <!-- #endif -->
</view> </view>
<view class="tongzhi flex items-center">
<view class="tip flex items-center justify-center">绿道通知</view>
<view class="tongzhi-shu mr-2"></view>
<view class="tongzhi-info flex items-center flex-1">
<view class="mr-2">平车001</view>
<view class="mr-2">患者张辉</view>
<view class="mr-2"></view>
<view class="mr-2">34</view>
<view>高血压</view>
</view>
<u-icon name="arrow-right" color="#4f8bff" size="28"></u-icon>
</view>
<Volume /> <Volume />
<VolumeProject /> <VolumeProject />
<!-- <view style="height: 25rpx; width: 100%"></view> --> <view class="flex items-center title-box">
<view style="padding-top: 25rpx"> <view class="flex-1 flex items-center">
<view class="news-title"> 新闻中心 </view> <view class="title-shu"></view>
<view class="news-title"> 平车 </view>
</view>
<u-button shape="circle" size="mini">查看更多</u-button>
</view> </view>
<view class="news-content" v-for="(item, index) in newsList" :key="index" @click="jumpDetail(item)"> <scroll-view scroll-x style="height: 224rpx">
<view class="mb-2" style="font-weight: 600; color: rgba(0, 0, 0, 0.85)"> <view class="flex" style="width: min-content; padding: 24rpx 16rpx 0 32rpx">
{{ item.title }} <view v-for="item in carList" :key="item.id" class="car-card">
<img src="@/static/news/car.png" class="car-img" alt="" />
<view class="car-name flex items-center">
<view style="font-size: 28rpx; margin-right: 16rpx">{{ item.name }}</view>
<view style="font-size: 24rpx">{{ item.patient }}</view>
</view>
<view class="patient-info flex items-center">
<view class="info-con">{{ item.sex }}</view>
<view class="info-con">{{ item.age }}</view>
<view class="info-con">{{ item.disease }}</view>
</view>
<view class="patient-info flex items-center">
<view class="doctor-con">医生{{ item.doctor }}</view>
<view class="doctor-con">护士{{ item.nurse }}</view>
</view>
<u-button class="car-btn" size="mini" type="success" shape="circle">查看详情</u-button>
</view>
</view>
</scroll-view>
<view class="flex items-center title-box">
<view class="flex-1 flex items-center">
<view class="title-shu"></view>
<view class="news-title"> 新闻中心 </view>
</view> </view>
<view class="flex justify-between" style="font-size: 24rpx"> <u-button shape="circle" size="mini">查看更多</u-button>
<view> </view>
{{ item.publishName || '未知' }} <view class="news-content flex" v-for="(item, index) in newsList" :key="index" @click="jumpDetail(item)">
<img src="@/static/news/news.png" class="news-img" alt="" />
<view class="flex-1">
<view class="flex">
<view class="title-tip-1 flex items-center justify-center" v-if="index % 2 === 0">医学</view>
<view class="title-tip-2 flex items-center justify-center" v-else>新闻</view>
<view class="news-title flex-1">
{{ item.title }}
</view>
</view>
<view class="news-intro">
{{
item.intro || '简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介简介'
}}
</view> </view>
<view> <view class="flex items-center justify-between" style="font-size: 24rpx">
{{ $moment(+item.publishTime).format('YYYY-MM-DD') }} <img src="@/static/news/logo.png" class="news-logo" alt="" />
<view class="pub-name">
{{ item.publishName || '未知' }}
</view>
<view class="flex-1 flex justify-end">
{{ $moment(+item.publishTime).format('YYYY-MM-DD') }}
</view>
</view> </view>
</view> </view>
</view> </view>
@ -57,6 +114,29 @@ export default {
calendar: null, calendar: null,
days: [], days: [],
newsList: [], newsList: [],
carList: [
{
id: 1,
imgPath: '',
name: '平车001',
patient: '张辉',
sex: '男',
age: '34',
disease: '高血压',
doctor: '李兴',
nurse: '雪梅',
},
{
id: 2,
name: '平车002',
patient: '张辉',
sex: '男',
age: '34',
disease: '高血压',
doctor: '李兴',
nurse: '雪梅',
},
],
}; };
}, },
@ -281,28 +361,192 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.car-btn {
position: absolute;
right: 34rpx;
bottom: 28rpx;
}
.doctor-con {
font-size: 20rpx;
font-weight: 500;
margin-right: 16rpx;
color: #3dc195;
}
.info-con {
padding: 2rpx 12rpx;
color: #3dc195;
font-size: 20rpx;
font-weight: bold;
margin-right: 8rpx;
border-radius: 4rpx;
background: #d2fff0;
border-radius: 2px 2px 2px 2px;
opacity: 1;
}
.patient-info {
margin-left: 24rpx;
margin-top: 20rpx;
}
.car-name {
margin-left: 136rpx;
margin-top: 32rpx;
color: #3dc195;
font-weight: bold;
}
.car-img {
width: 96rpx;
height: 96rpx;
position: absolute;
left: 24rpx;
top: -24rpx;
}
.car-card {
position: relative;
width: 440rpx;
height: 200rpx;
background: #a1e5d9;
border-radius: 12rpx;
margin-right: 16rpx;
opacity: 1;
flex-shrink: 0;
}
.news-logo {
width: 32rpx;
height: 32rpx;
margin-right: 8rpx;
}
.pub-name {
width: 240rpx;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.news-intro {
width: 100%;
height: 72rpx;
margin: 16rpx 0;
background: #f7f7fa;
border-radius: 4px 4px 4px 4px;
padding: 6rpx;
line-height: 30rpx;
opacity: 1;
font-size: 10px;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
color: #70798c;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
}
.title-tip-2 {
width: 64rpx;
height: 48rpx;
padding: 2px 6px;
background: #cef4ff;
border-radius: 2px 2px 2px 2px;
opacity: 1;
font-size: 20rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #44bfe5;
}
.title-tip-1 {
width: 64rpx;
height: 48rpx;
padding: 2px 6px;
background: #e4edff;
border-radius: 2px 2px 2px 2px;
opacity: 1;
font-size: 20rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #5991ff;
}
.news-title {
font-size: 28rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #3e3d4d;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 1;
-webkit-box-orient: vertical;
}
.news-img {
width: 240rpx;
height: 176rpx;
border-radius: 14rpx;
margin-right: 16rpx;
}
.title-box {
margin: 48rpx 32rpx 36rpx 32rpx;
}
.title-shu {
width: 8px;
height: 20px;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 20px 20px 20px 20px;
opacity: 1;
}
.tongzhi-info {
font-size: 12px;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
color: #a3acbf;
}
.tongzhi-shu {
width: 0px;
height: 12px;
opacity: 0.5;
border: 1px solid #4f8bff;
margin-left: 16rpx;
}
.tip {
width: 120rpx;
height: 44rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 4px 4px 4px 4px;
opacity: 1;
font-size: 12px;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
color: #f6f6f9;
}
.tongzhi {
margin: 16px;
width: calc(750rpx - 32px);
height: 68rpx;
padding: 12rpx 24rpx;
background: #e4edff;
box-shadow: 0px 2px 8px 0px rgba(39, 59, 97, 0.08);
border-radius: 4px 4px 4px 4px;
opacity: 1;
}
.top-bg {
position: absolute;
top: 0;
z-index: 0;
}
page { page {
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
} }
.news-title { .news-title {
margin-top: 25rpx; color: #3e3d4d;
font-weight: bold;
font-size: 36rpx;
margin-left: 8px;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold; font-weight: bold;
font-size: 32rpx;
border-left: 4rpx solid #3dadff;
margin: 0 25rpx 25rpx 25rpx;
padding-left: 16rpx;
} }
.news-content { .news-content {
width: calc(100% - 50rpx); width: calc(100% - 64rpx);
font-size: 28rpx; font-size: 28rpx;
margin: 0 25rpx 25rpx 25rpx; margin: 0 32rpx 48rpx 32rpx;
padding: 16rpx 0;
border-bottom: 1px solid #ccc;
display: inline-block;
text-align: justify;
text-justify: distribute-all-lines; // ie
// text-align-last: justify;
text-align-last: left;
} }
</style> </style>

61
src/pages/info/info.vue

@ -5,13 +5,19 @@
<template v-for="(listItem, listIndex) in item"> <template v-for="(listItem, listIndex) in item">
<div class="list-item" :key="listIndex" v-if="getRadioValue(listItem.Fcode) === listItem.isShow"> <div class="list-item" :key="listIndex" v-if="getRadioValue(listItem.Fcode) === listItem.isShow">
<div class="w-full flex flex-nowrap justify-between items-center"> <div class="w-full flex flex-nowrap justify-between items-center">
<div class="flex items-center"> <view v-if="listItem.title">
{{ listItem.title }} <div class="flex items-center" v-if="listItem.type !== -1">
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span> <view class="putong-title">{{ listItem.title }}</view>
</div> <span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span>
</div>
<div class="flex items-center" v-else>
<view class="shu"></view>
<view class="shu-title">{{ listItem.title }}</view>
</div>
</view>
<div :style="{ marginRight: listItem.type === 2 ? '-24rpx' : '0' }"> <div :style="{ marginRight: listItem.type === 2 ? '-24rpx' : '0' }">
<u-input <u-input
:border="true" input-align="right"
:clearable="false" :clearable="false"
:value="JBXXZYH" :value="JBXXZYH"
v-if="listItem.type === 1" v-if="listItem.type === 1"
@ -37,7 +43,7 @@
{{ getTime(listItem.code) }} {{ getTime(listItem.code) }}
</span> </span>
<span class="mr-3 gray-text" v-else>请选择时间</span> <span class="mr-3 gray-text" v-else>请选择时间</span>
<u-icon name="clock" color="#2979ff" size="28"></u-icon> <u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div> </div>
<div <div
v-else-if="listItem.type === 4" v-else-if="listItem.type === 4"
@ -46,7 +52,7 @@
@click="openDropDown(listItem.title, listItem.itemList, listItem.dropType, getValue(listItem.code))" @click="openDropDown(listItem.title, listItem.itemList, listItem.dropType, getValue(listItem.code))"
> >
<span style="margin-right: 10px">{{ getValue(listItem.code) ? getValue(listItem.code) : '请选择' }}</span> <span style="margin-right: 10px">{{ getValue(listItem.code) ? getValue(listItem.code) : '请选择' }}</span>
<u-icon name="arrow-right" color="#2979ff" size="28"></u-icon> <u-icon name="arrow-right" color="#70798C" size="28"></u-icon>
</div> </div>
</div> </div>
</div> </div>
@ -75,17 +81,20 @@ export default {
second: false, second: false,
}, },
list: [ list: [
[{ title: '住院号', type: 1, code: 'JBXX-ZYH' }],
[ [
{
title: '信息填写',
type: -1,
isTrue: false,
},
{ title: '住院号', type: 1, code: 'JBXX-ZYH' },
{ title: '发病时间', type: 2, itemList: ['已知', '未知', '醒后卒中'], code: 'JBXX-FBSJ' }, { title: '发病时间', type: 2, itemList: ['已知', '未知', '醒后卒中'], code: 'JBXX-FBSJ' },
{ title: '发病时间', type: 3, Fcode: 'JBXX-FBSJ', isShow: '已知', code: 'JBXX-FBTime' }, { title: '发病时间', type: 3, Fcode: 'JBXX-FBSJ', isShow: '已知', code: 'JBXX-FBTime' },
{ title: '最后正常时间', type: 3, Fcode: 'JBXX-FBSJ', isShow: '醒后卒中', code: 'JBXX-ZHZC' }, { title: '最后正常时间', type: 3, Fcode: 'JBXX-FBSJ', isShow: '醒后卒中', code: 'JBXX-ZHZC' },
],
[
{ title: '是否院内卒中', type: 2, itemList: ['是', '否'], code: 'JBXX-YZCZ' }, { title: '是否院内卒中', type: 2, itemList: ['是', '否'], code: 'JBXX-YZCZ' },
{ title: '到院时间', type: 3, Fcode: 'JBXX-YZCZ', isShow: '否', code: 'JBXX-DYSJ' }, { title: '到院时间', type: 3, Fcode: 'JBXX-YZCZ', isShow: '否', code: 'JBXX-DYSJ' },
],
[
{ title: '办理住院手续时间', type: 3, code: 'JBXX-ZYSJ' }, { title: '办理住院手续时间', type: 3, code: 'JBXX-ZYSJ' },
{ title: '入院途径', type: 4, code: 'JBXX-RYTJ', dropType: 'one', itemList: ['急诊', '门诊', '其他医疗机构转入', '其他'] }, { title: '入院途径', type: 4, code: 'JBXX-RYTJ', dropType: 'one', itemList: ['急诊', '门诊', '其他医疗机构转入', '其他'] },
{ {
@ -95,8 +104,8 @@ export default {
dropType: 'two', dropType: 'two',
itemList: ['本院急救车', '当地120', '外院转院-网络协作医院', '外院转院-非网络协作医院', '自行来院'], itemList: ['本院急救车', '当地120', '外院转院-网络协作医院', '外院转院-非网络协作医院', '自行来院'],
}, },
{ title: '卒中团队到场时间', type: 3, code: 'JBXX-TDDCSJ' },
], ],
[{ title: '卒中团队到场时间', type: 3, code: 'JBXX-TDDCSJ' }],
], ],
JBXXZYH: null, JBXXZYH: null,
JBXXFBSJ: null, JBXXFBSJ: null,
@ -327,12 +336,33 @@ export default {
</script> </script>
<style> <style>
.putong-title {
margin-left: 24rpx;
font-size: 32rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #3e3d4d;
}
.shu {
width: 16rpx;
height: 40rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 40rpx;
opacity: 1;
margin-right: 8rpx;
}
.shu-title {
font-size: 36rpx;
font-family: Open Sans-Bold, Open Sans;
font-weight: bold;
color: #3e3d4d;
}
.list-box { .list-box {
border-radius: 4px; border-radius: 4px;
overflow: hidden; overflow: hidden;
box-sizing: border-box; box-sizing: border-box;
margin: 0 0 0.75rem 0; margin: 0 0 0.75rem 0;
padding: 0; padding: 0 32rpx;
color: rgba(0, 0, 0, 0.65); color: rgba(0, 0, 0, 0.65);
font-size: 14px; font-size: 14px;
font-variant: tabular-nums; font-variant: tabular-nums;
@ -346,6 +376,7 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 12px 16px; padding: 24rpx 0;
border-bottom: 1px solid #eee;
} }
</style> </style>

62
src/pages/inner/inner.vue

@ -1,5 +1,5 @@
<template> <template>
<div class="inner" style="padding-top: 28px"> <div class="inner" style="padding-top: 28px; padding-bottom: 50rpx">
<Demonstration /> <Demonstration />
<div class="w-full" v-for="(item, index) in testList" :key="index"> <div class="w-full" v-for="(item, index) in testList" :key="index">
<template v-if="item.testType === 1"> <template v-if="item.testType === 1">
@ -13,7 +13,14 @@
:list="item.content" :list="item.content"
/> />
</template> </template>
<u-collapse <template v-if="item.testType === 2">
<view class="list-item">
<view class="flex items-center">
<view class="shu"></view>
<view class="shu-title">{{ item.testTitle }}</view>
</view>
</view>
<!-- <u-collapse
:head-style="headerStyle" :head-style="headerStyle"
:item-style="itemStyle" :item-style="itemStyle"
class="mb-2 w-full" class="mb-2 w-full"
@ -21,22 +28,23 @@
:bordered="false" :bordered="false"
expand-icon-position="right" expand-icon-position="right"
:ref="'collapseView' + index" :ref="'collapseView' + index"
> > -->
<!-- <template #expandIcon="props"> <!-- <template #expandIcon="props">
<u-icon type="down" :rotate="props.isActive ? 0 : -180" /> <u-icon type="down" :rotate="props.isActive ? 0 : -180" />
</template> --> </template> -->
<u-collapse-item :open="true" class="w-full" :title="item.testTitle" :style="customStyle"> <!-- <u-collapse-item :open="true" class="w-full" :title="item.testTitle" :style="customStyle"> -->
<Test <Test
:testIndex="index" :testIndex="index"
@getCollaoseHeight="getCollaoseHeight" @getCollaoseHeight="getCollaoseHeight"
:can-change="true" :can-change="true"
:answer-list="answerList" :answer-list="answerList"
v-if="type" v-if="type"
class="w-full" class="w-full"
:list="item.content" :list="item.content"
/> />
</u-collapse-item> <!-- </u-collapse-item>
</u-collapse> </u-collapse> -->
</template>
</div> </div>
<div class="ocr-open-box" @click="openOcr">OCR</div> <div class="ocr-open-box" @click="openOcr">OCR</div>
<u-modal v-model="showBasic" title="确定选择后将提交识别到的内容" :show-cancel-button="true" @confirm="submitBasicData"> <u-modal v-model="showBasic" title="确定选择后将提交识别到的内容" :show-cancel-button="true" @confirm="submitBasicData">
@ -348,6 +356,28 @@ export default {
</script> </script>
<style> <style>
.list-item {
min-height: 54px;
display: flex;
align-items: center;
justify-content: space-between;
padding: 24rpx 32rpx;
border-bottom: 1px solid #eee;
}
.shu {
width: 16rpx;
height: 40rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 40rpx;
opacity: 1;
margin-right: 8rpx;
}
.shu-title {
font-size: 36rpx;
font-family: Open Sans-Bold, Open Sans;
font-weight: bold;
color: #3e3d4d;
}
.modal-content { .modal-content {
padding: 16px; padding: 16px;
} }
@ -372,7 +402,7 @@ export default {
box-shadow: 0 0 4px #1890ff; box-shadow: 0 0 4px #1890ff;
} }
.inner { .inner {
background-color: #ededed; /* background-color: #ededed; */
min-height: 100vh; min-height: 100vh;
} }
</style> </style>

12
src/pages/inner/mixin.js

@ -107,6 +107,11 @@ const mixin = {
testType: 1, testType: 1,
content: [ content: [
[ [
{
title: '信息填写',
type: -1,
isTrue: false,
},
{ title: '身高 cm', grade: 2, type: 7, min: 0, max: 350, code: 'RYPG-height', value: this.codeValue.RYPG['RYPG-height'] }, { title: '身高 cm', grade: 2, type: 7, min: 0, max: 350, code: 'RYPG-height', value: this.codeValue.RYPG['RYPG-height'] },
{ title: '体重 kg', grade: 2, type: 7, min: 0, max: 500, code: 'RYPG-weight', value: this.codeValue.RYPG['RYPG-weight'] }, { title: '体重 kg', grade: 2, type: 7, min: 0, max: 500, code: 'RYPG-weight', value: this.codeValue.RYPG['RYPG-weight'] },
{ title: 'BMI', grade: 2, type: 0, code: 'JBXX-BMI', value: null }, { title: 'BMI', grade: 2, type: 0, code: 'JBXX-BMI', value: null },
@ -229,8 +234,13 @@ const mixin = {
[ [
{ {
title: '初步诊断', title: '初步诊断',
grade: 2, type: -1,
isTrue: false,
}, },
// {
// title: '初步诊断',
// grade: 2,
// },
{ {
title: '', title: '',
grade: 2, grade: 2,

79
src/pages/patient/patient.vue

@ -9,11 +9,17 @@
:key="listIndex" :key="listIndex"
> >
<div class="w-full flex flex-nowrap justify-between items-center"> <div class="w-full flex flex-nowrap justify-between items-center">
<div class="flex items-center" v-if="listItem.title"> <view v-if="listItem.title">
{{ listItem.title }} <div class="flex items-center" v-if="listItem.type !== -1">
<span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span> <view class="putong-title">{{ listItem.title }}</view>
</div> <span v-if="listItem.isTrue" style="color: red; font-size: 20px">*</span>
<div> </div>
<div class="flex items-center" v-else>
<view class="shu"></view>
<view class="shu-title">{{ listItem.title }}</view>
</div>
</view>
<div class="flex-1 flex justify-end">
<!-- <u-switch v-if="listItem.type === 1" v-model="codeValue['CJBL-YLMS']" /> --> <!-- <u-switch v-if="listItem.type === 1" v-model="codeValue['CJBL-YLMS']" /> -->
<u-upload <u-upload
v-if="listItem.type === 2" v-if="listItem.type === 2"
@ -38,15 +44,23 @@
身份证号输入有误! 身份证号输入有误!
</div> </div>
</div> </div>
<u-radio-group :value="codeValue[listItem.code]" v-else-if="listItem.type === 4" name="radioGroup"> <u-radio-group class="w-full" :value="codeValue[listItem.code]" v-else-if="listItem.type === 4" name="radioGroup">
<div @click="clickRadio(listItem.code, radioItem.name)" v-for="radioItem in listItem.listItem" :key="radioItem.id"> <div
class="w-full flex justify-between items-center"
style="height: 78rpx"
@click="clickRadio(listItem.code, radioItem.name)"
v-for="radioItem in listItem.listItem"
:key="radioItem.id"
>
<view class="flex-1 putong-title">
{{ radioItem.name }}
</view>
<u-radio <u-radio
@change="changeRadio($event, listItem.code)" @change="changeRadio($event, listItem.code)"
:disabled="isDisabled(listItem.code, radioItem.name)" :disabled="isDisabled(listItem.code, radioItem.name)"
:key="radioItem.id" :key="radioItem.id"
:name="radioItem.id" :name="radioItem.id"
> >
{{ radioItem.name }}
</u-radio> </u-radio>
</div> </div>
</u-radio-group> </u-radio-group>
@ -58,11 +72,11 @@
> >
<u-radio <u-radio
@change="changeRadio($event, listItem.code)" @change="changeRadio($event, listItem.code)"
v-for="radioItem in listItem.listItem" v-for="(radioItem, radioIndex) in listItem.listItem"
:key="radioItem.id" :key="radioItem.id"
:name="radioItem.id" :name="radioItem.id"
> >
{{ radioItem.name }} <view class="ml-2" :class="radioIndex === listItem.listItem.length - 1 ? '' : 'mr-2'">{{ radioItem.name }}</view>
</u-radio> </u-radio>
</u-radio-group> </u-radio-group>
</div> </div>
@ -91,8 +105,13 @@ export default {
}, },
list: [ list: [
// [{ title: '', type: 1, isTrue: false }], // [{ title: '', type: 1, isTrue: false }],
[{ title: '扫描身份证', type: 2, isTrue: false }],
[ [
{
title: '信息填写',
type: -1,
isTrue: false,
},
{ title: '扫描身份证', type: 2, isTrue: false },
{ title: '姓名', type: 3, code: 'CJBL-NAME', isTrue: true }, { title: '姓名', type: 3, code: 'CJBL-NAME', isTrue: true },
{ {
title: '性别', title: '性别',
@ -109,7 +128,7 @@ export default {
{ {
title: '疑似诊断', title: '疑似诊断',
code: 'CJBL-YSBL', code: 'CJBL-YSBL',
type: 4, type: -1,
isTrue: false, isTrue: false,
}, },
{ {
@ -133,6 +152,7 @@ export default {
active: 0, active: 0,
role: '', role: '',
isFit: true, // isFit: true, //
isWatch: false,
}), }),
computed: { computed: {
...mapGetters('project', ['projectId']), ...mapGetters('project', ['projectId']),
@ -161,6 +181,9 @@ export default {
'CJBL-idCard': data.idcard, 'CJBL-idCard': data.idcard,
'CJBL-YSBL': data.suspected || 'AS急性脑卒中', 'CJBL-YSBL': data.suspected || 'AS急性脑卒中',
}; };
setTimeout(() => {
this.isWatch = true;
}, 100);
} }
} catch (error) { } catch (error) {
console.log('error: ', error); console.log('error: ', error);
@ -346,6 +369,7 @@ export default {
codeValue: { codeValue: {
handler(val) { handler(val) {
console.log('val: ', val); console.log('val: ', val);
if (!this.isWatch) return;
this.iptBlur(val['CJBL-idCard'], 'CJBL-idCard'); this.iptBlur(val['CJBL-idCard'], 'CJBL-idCard');
}, },
deep: true, deep: true,
@ -372,7 +396,32 @@ export default {
}; };
</script> </script>
<style> <style scoped>
/deep/.u-radio__label {
margin-left: 0 !important;
margin-right: 0 !important;
}
.putong-title {
margin-left: 24rpx;
font-size: 32rpx;
font-family: OPPOSans-Bold, OPPOSans;
font-weight: bold;
color: #3e3d4d;
}
.shu {
width: 16rpx;
height: 40rpx;
background: linear-gradient(136deg, #7bc0ff 0%, #4d88ff 100%);
border-radius: 40rpx;
opacity: 1;
margin-right: 8rpx;
}
.shu-title {
font-size: 36rpx;
font-family: Open Sans-Bold, Open Sans;
font-weight: bold;
color: #3e3d4d;
}
.img-icon { .img-icon {
height: 24px; height: 24px;
width: 24px; width: 24px;
@ -386,7 +435,7 @@ export default {
overflow: hidden; overflow: hidden;
box-sizing: border-box; box-sizing: border-box;
margin: 0 0 0.75rem 0; margin: 0 0 0.75rem 0;
padding: 0; padding: 0 32rpx;
color: rgba(0, 0, 0, 0.65); color: rgba(0, 0, 0, 0.65);
font-size: 14px; font-size: 14px;
font-variant: tabular-nums; font-variant: tabular-nums;
@ -400,6 +449,6 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 12px 16px; padding: 24rpx 0;
} }
</style> </style>

98
src/pages/patientLine/patientLine.vue

@ -1,23 +1,37 @@
<template> <template>
<div class="patient-line"> <div class="patient-line">
<template v-if="showLine"> <template v-if="showLine">
<div v-for="(item, index) in dataList" :key="index" class="flex flex-row item-box mb-2"> <div
<div class="flex flex-col items-center mr-1" style="width: 36px"> v-for="(item, index) in dataList"
:key="index"
class="flex flex-row item-box mb-2"
:class="index < 2 ? (index === 1 ? 'red' : 'green') : 'gray'"
@click="jump(item.code, item.path, item.name)"
>
<!-- <div class="flex flex-col items-center mr-1" style="width: 36px">
<img src="./png/播放.png" alt="" style="width: 36px; height: 36px" /> <img src="./png/播放.png" alt="" style="width: 36px; height: 36px" />
<div class="mt-1 flex-1" style="border-right: 2px solid rgb(209, 213, 219)"></div> <div class="mt-1 flex-1" style="border-right: 2px solid rgb(209, 213, 219)"></div>
<div v-if="index === innerList.length - 1" class="end-ric mt-2"></div> <div v-if="index === innerList.length - 1" class="end-ric mt-2"></div>
</div> </div> -->
<div class="flex-1 flex-col"> <view class="mulu-title"> 目录{{ getText(index + 1) }} </view>
<div class="w-full time-box flex items-center" style="height: 34px; padding-left: 12px"> <div class="flex flex-1 flex-col">
<div class="w-full time-box flex items-center">
<!-- {{ $moment(time).format('MM月DD日') }} --> <!-- {{ $moment(time).format('MM月DD日') }} -->
{{ item.time }} {{ item.time }}
</div> </div>
<div class="flex mt-2" style="height: 50px" @click="jump(item.code, item.path, item.name)"> <div class="flex mt-2">
<div class="name-box flex items-center time-box" style="padding-left: 16px; position: relative"> <div class="name-box flex justify-between items-center">
{{ item.name }} <view class="mulu-title" style="font-size: 32rpx">{{ item.name }}</view>
<u-icon name="arrow-right" size="28" color="#303133" style="position: absolute; right: 16px" /> <u-icon name="arrow-right" size="28" color="#70798C" />
</div> </div>
</div> </div>
<view
class="flex flex-nowrap items-center justify-center status-con mt-2"
:class="index < 2 ? (index === 0 ? 'color-1' : 'color-2') : 'color-3'"
>
<view v-if="index < 2">已填写</view>
<view v-else>未填写</view>
</view>
</div> </div>
</div> </div>
</template> </template>
@ -126,6 +140,24 @@ export default {
this.setInputCode(code ? code : 'RYPG'); this.setInputCode(code ? code : 'RYPG');
uni.navigateTo({ url: `${path}?name=${name}` }); uni.navigateTo({ url: `${path}?name=${name}` });
}, },
getText(index) {
switch (index) {
case 1:
return '一';
case 2:
return '二';
case 3:
return '三';
case 4:
return '四';
case 5:
return '五';
case 6:
return '六';
case 7:
return '七';
}
},
}, },
watch: {}, watch: {},
@ -151,6 +183,34 @@ export default {
</script> </script>
<style> <style>
.color-1 {
background: #d2fff0;
color: #3dc195;
}
.color-2 {
background: #ffece4;
color: #ff8833;
}
.color-3 {
background: #f6f6f9;
color: #a3acbf;
}
.status-con {
width: 84rpx;
padding: 2rpx 12rpx;
border-radius: 2px 2px 2px 2px;
opacity: 1;
font-size: 20rpx;
font-family: OPPOSans-Medium, OPPOSans;
font-weight: 500;
}
.mulu-title {
font-size: 36rpx;
font-family: Open Sans-Bold, Open Sans;
font-weight: bold;
color: #70798c;
margin-right: 32rpx;
}
.patient-line { .patient-line {
margin-top: 16px; margin-top: 16px;
} }
@ -162,25 +222,27 @@ export default {
} }
.name-box { .name-box {
background-color: #fff; background-color: #fff;
height: 50px;
width: 100%; width: 100%;
border-radius: 10px;
box-shadow: 0px 5px 15px 5px rgba(0, 0, 0, 0.1);
} }
.time-box { .time-box {
font-size: 14px; font-size: 14px;
font-weight: 500; font-weight: 500;
color: #303133; color: #a3acbf;
} }
.red { .red {
border: 1px solid red; border-left: 6rpx solid #ff8833;
} }
.green { .green {
border: 1px solid green; border-left: 6rpx solid #1bb299;
}
.gray {
border-left: 6rpx solid #a3acbf;
} }
.item-box { .item-box {
/* height: 110px; */ margin: 0 32rpx 32rpx 32rpx;
width: 100%; padding: 32rpx;
padding: 0 16px; box-shadow: 0px 0px 12rpx 1rpx #eeeeee;
border-radius: 12rpx;
background: #fff;
} }
</style> </style>

23
src/pages/task-page/task-page.vue

@ -1,22 +1,25 @@
<template> <template>
<view :style="{ height: height }" class="flex flex-col overflow-hidden u-font-14"> <view :style="{ height: height }" class="flex flex-col overflow-hidden u-font-14">
<view class="container flex flex-col flex-1 mx-auto overflow-hidden bg-gray-100"> <view class="container flex flex-col flex-1 mx-auto overflow-hidden">
<!-- 角色栏 --> <!-- 角色栏 -->
<Roles style="z-index: 100" /> <!-- <Roles style="z-index: 100" /> -->
<!-- <NewRole /> -->
<!-- 日常任务面板 --> <!-- 日常任务面板 -->
<Globals v-if="globals.length" /> <!-- <Globals v-if="globals.length" /> -->
<!-- 任务详情 --> <!-- 任务详情 -->
<view v-if="globalData && permanents.length" class="flex flex-1" style="overflow-y: auto"> <view v-if="globalData && permanents.length" class="flex flex-1" style="overflow-y: auto">
<PatientList ref="PatientList" v-if="showPage === 'function'" class="flex flex-1" /> <PatientList ref="PatientList" class="flex flex-1" />
<!-- <PatientList ref="PatientList" v-if="showPage === 'function'" class="flex flex-1" />
<Share v-else-if="showPage === 'share'" class="flex flex-1" /> <Share v-else-if="showPage === 'share'" class="flex flex-1" />
<StatisticsLists v-else-if="showPage === 'statistics-lists'" class="flex flex-1" /> <StatisticsLists v-else-if="showPage === 'statistics-lists'" class="flex flex-1" />
<StatisticsCards v-else-if="showPage === 'statistics-cards'" class="flex flex-1" /> <StatisticsCards v-else-if="showPage === 'statistics-cards'" class="flex flex-1" />
<view v-else class="flex flex-1 items-center justify-center flex-col"> <view v-else class="flex flex-1 items-center justify-center flex-col">
<view>详情内容在详情页内查看</view> <view>详情内容在详情页内查看</view>
<view class="text-blue-500" @click="jumpDetail">点击此处跳转</view> <view class="text-blue-500" @click="jumpDetail">点击此处跳转</view>
</view> </view> -->
</view> </view>
</view> </view>
<u-modal v-model="showModel" :content="content" @confirm="confirm"></u-modal>
</view> </view>
</template> </template>
@ -35,6 +38,8 @@ export default {
showStatus: 0, showStatus: 0,
showPage: '', showPage: '',
isBack: false, isBack: false,
showModel: false,
content: '当前不是神内医生,请前往首页申请',
}; };
}, },
@ -117,7 +122,9 @@ export default {
...mapMutations('user', ['setToken']), ...mapMutations('user', ['setToken']),
...mapMutations('project', ['setProject', 'setProjectName', 'setOrganData']), ...mapMutations('project', ['setProject', 'setProjectName', 'setOrganData']),
...mapMutations('role', ['setInvisibleRoles', 'setVisibleRoles', 'setRoleId']), ...mapMutations('role', ['setInvisibleRoles', 'setVisibleRoles', 'setRoleId']),
confirm() {
uni.navigateBack();
},
// //
jumpDetail() { jumpDetail() {
let url = `/pages/detail-webview/detail-webview?jumpUrl=`; let url = `/pages/detail-webview/detail-webview?jumpUrl=`;
@ -282,6 +289,10 @@ export default {
*/ */
getRoles(params) { getRoles(params) {
this.$t.$q.findShowRole(params, (err, data) => { this.$t.$q.findShowRole(params, (err, data) => {
if (data.invisibleList && !data.invisibleList.length && !data.visibleList.length) {
this.showModel = true;
return;
}
if (err) { if (err) {
console.error('err: ', err || '获取角色信息失败'); console.error('err: ', err || '获取角色信息失败');
} else { } else {

BIN
src/static/news/car.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
src/static/news/logo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 B

BIN
src/static/news/news.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

BIN
src/static/news/role.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 813 B

BIN
src/static/news/top-bg.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Loading…
Cancel
Save