zzc 3 months ago
parent
commit
56ae2a427b
  1. 2
      acupuncture-前台/.env.development
  2. 3
      acupuncture-前台/.env.production
  3. 106
      acupuncture-前台/src/api/member.js
  4. 77
      acupuncture-前台/src/api/screening.js
  5. BIN
      acupuncture-前台/src/assets/images/idcard.png
  6. BIN
      acupuncture-前台/src/assets/images/screen.png
  7. 7
      acupuncture-前台/src/layout/components/Sidebar/SidebarItem.vue
  8. 2
      acupuncture-前台/src/permission.js
  9. 27
      acupuncture-前台/src/router/index.js
  10. 33
      acupuncture-前台/src/views/followFile/work.vue
  11. 6
      acupuncture-前台/src/views/index.vue
  12. 8
      acupuncture-前台/src/views/indexCom/JM.vue
  13. 2
      acupuncture-前台/src/views/indexCom/XGZL.vue
  14. 2
      acupuncture-前台/src/views/indexCom/follow.vue
  15. 2
      acupuncture-前台/src/views/indexCom/patient.vue
  16. 7
      acupuncture-前台/src/views/indexCom/query.vue
  17. 0
      acupuncture-前台/src/views/medicalFile/components/insomnia/PHQ-9.vue
  18. 0
      acupuncture-前台/src/views/medicalFile/components/insomnia/PSQI.vue
  19. 0
      acupuncture-前台/src/views/medicalFile/components/insomnia/epworth.vue
  20. 351
      acupuncture-前台/src/views/medicalFile/components/posture/SRS22.vue
  21. BIN
      acupuncture-前台/src/views/medicalFile/components/posture/TAPS.png
  22. 146
      acupuncture-前台/src/views/medicalFile/components/posture/TAPS.vue
  23. 146
      acupuncture-前台/src/views/medicalFile/components/posture/TRACE.vue
  24. 1150
      acupuncture-前台/src/views/medicalFile/details.vue
  25. 225
      acupuncture-前台/src/views/medicalFile/index.vue
  26. 82
      acupuncture-前台/src/views/patientFile/index.vue
  27. 758
      acupuncture-前台/src/views/screening/h5.vue
  28. 362
      acupuncture-前台/src/views/screening/index.vue
  29. 375
      acupuncture-前台/src/views/screening/qrCode.vue
  30. 4
      acupuncture-后台/src/views/medicalFile/index.vue
  31. 1
      acupuncture-后台/src/views/patientFile/index.vue
  32. 12
      针灸减重失眠筛查倡议书.docx

2
acupuncture-前台/.env.development

@ -8,6 +8,8 @@ ENV = 'development'
VUE_APP_BASE_API = '/dev-api'
VUE_APP_IMG_URL = 'https://test.tall.wiki/acupuncture'
VUE_APP_API_QZURL = 'https://test.tall.wiki/'
# 筛查访问地址
VUE_APP_H5_URL = 'https://test.tall.wiki/acupunctureClient/screening/h5'
# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true
# 访问路径

3
acupuncture-前台/.env.production

@ -6,6 +6,7 @@ NODE_ENV = 'production'
# 因孚生产
VUE_APP_BASE_API = 'https://test.tall.wiki/acupuncture'
VUE_APP_API_QZURL = 'https://test.tall.wiki/'
# 筛查访问地址
VUE_APP_H5_URL = 'https://test.tall.wiki/acupunctureClient/screening/h5'
# 访问路径
VUE_APP_PUBLIC_PATH = '/acupunctureClient/'

106
acupuncture-前台/src/api/member.js

@ -0,0 +1,106 @@
import request from "@/utils/request";
// 获取租户列表
export function tenantsList(data) {
return request({
url: "/tenants/list",
method: "post",
data: data,
});
}
// 新增租户
export function tenantsAdd(data) {
return request({
url: "/tenants/add",
method: "post",
data: data,
});
}
// 修改租户
export function tenantsUpd(data) {
return request({
url: "/tenants/upd",
method: "post",
data: data,
});
}
// 删除租户
export function tenantsDel(data) {
return request({
url: "/tenants/del",
method: "post",
data: data,
});
}
// ------ 数据源 ------
// 获取数据源列表
export function dataSourcesList(data) {
return request({
url: "/dataSources/list",
method: "post",
data: data,
});
}// 新增数据源
export function dataSourcesAdd(data) {
return request({
url: "/dataSources/add",
method: "post",
data: data,
});
}
// 修改数据源
export function dataSourcesUpd(data) {
return request({
url: "/dataSources/upd",
method: "post",
data: data,
});
}
// 删除数据源
export function dataSourcesDel(data) {
return request({
url: "/dataSources/del",
method: "post",
data: data,
});
}
// ------ 用户 ------
export function tenantUsersList(data) {
return request({
url: "/tenantUsers/list",
method: "post",
data: data,
});
}// 新增数据源
export function tenantUsersAdd(data) {
return request({
url: "/tenantUsers/add",
method: "post",
data: data,
});
}
// 修改数据源
export function tenantUsersUpd(data) {
return request({
url: "/tenantUsers/upd",
method: "post",
data: data,
});
}
// 删除数据源
export function tenantUsersDel(data) {
return request({
url: "/tenantUsers/del",
method: "post",
data: data,
});
}
//
export function resetPwd(data) {
return request({
url: "/web/resetPwd",
method: "put",
data: data,
});
}

77
acupuncture-前台/src/api/screening.js

@ -0,0 +1,77 @@
import request from "@/utils/request";
// ------ 筛查上报相关接口 ------
// 通过组织id查询医院信息
export function queryHospitalNoToken(data) {
return request({
url: "web/queryTenantById",
method: "post",
data: data,
});
}
// 创建筛查
export function create(data) {
return request({
url: "screening/createNoToken",
method: "post",
data: data,
});
}
// 通过code提交数据
export function screenSave(data) {
return request({
url: "screening/save",
method: "post",
data: data,
});
}
// 提交筛查上报数据
export function screenSubmit(data) {
return request({
url: "screening/submitNoToken",
method: "post",
data: data,
});
}
// ------ 筛查二维码相关接口 ------
// 筛查二维码 列表
export function queryScreenList(data) {
return request({
url: "/wxQrCode/queryScreenList",
method: "post",
data: data,
});
}
// 添加筛查二维码
export function addScreen(data) {
return request({
url: "/wxQrCode/addScreen",
method: "post",
data: data,
});
}
// 删除筛查二维码
export function deleteScreen(data) {
return request({
url: "/wxQrCode/deleteScreen",
method: "post",
data: data,
});
}
// // 导出二维码
export function exportQr(data) {
return request({
url: "/wxQrCode/exportScreen",
method: "post",
data: data,
});
}
// ------ 筛查列表 ------
export function queryDetail(data) {
return request({
url: "/screening/queryDetail",
method: "post",
data: data,
});
}

BIN
acupuncture-前台/src/assets/images/idcard.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
acupuncture-前台/src/assets/images/screen.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

7
acupuncture-前台/src/layout/components/Sidebar/SidebarItem.vue

@ -96,6 +96,7 @@ export default {
患者档案: require("@/assets/images/dangan_n@1x.png"),
诊疗档案: require("@/assets/images/zhenliao_n@1x.png"),
随访档案: require("@/assets/images/suifang_n@1x.png"),
社区筛查: require("@/assets/images/screen.png"),
我的: require("@/assets/images/me_n@1x.png"),
},
itmeIcon1: {
@ -103,6 +104,7 @@ export default {
患者档案: require("@/assets/images/dangan_s@1x.png"),
诊疗档案: require("@/assets/images/zhenliao_s@1x.png"),
随访档案: require("@/assets/images/suifang_s@1x.png"),
社区筛查: require("@/assets/images/screen.png"),
我的: require("@/assets/images/me_s@1x.png"),
},
};
@ -151,6 +153,11 @@ export default {
};
</script>
<style scoped>
.div-img img,
.div-img-gl img {
max-width: 44px;
}
.div-img-gl {
display: none;
}

2
acupuncture-前台/src/permission.js

@ -9,7 +9,7 @@ import { isRelogin } from '@/utils/request'
NProgress.configure({ showSpinner: false })
const whiteList = ['/login', '/register']
const whiteList = ['/login', '/register','/screening/h5']
const isWhiteList = (path) => {
return whiteList.some(pattern => isPathMatch(pattern, path))

27
acupuncture-前台/src/router/index.js

@ -133,6 +133,26 @@ export const constantRoutes = [
},
],
},
{
path: "/screening",
meta: { title: "社区筛查", icon: "dashboard" },
component: Layout,
redirect: "screening",
children: [
{
path: "/screeningQR",
component: () => import("@/views/screening/qrCode"),
name: "screeningQR",
meta: { title: "二维码", icon: "dashboard" },
},
{
path: "/screeningIndex",
component: () => import("@/views/screening/index"),
name: "screeningIndex",
meta: { title: "筛查列表", icon: "dashboard" },
},
],
},
{
path: "/user",
component: Layout,
@ -146,6 +166,13 @@ export const constantRoutes = [
},
],
},
// 筛查基本信息
{
path: "/screening/h5",
component: () => import("@/views/screening/h5.vue"),
hidden: true,
},
];
// 动态路由,基于用户权限动态去加载

33
acupuncture-前台/src/views/followFile/work.vue

@ -33,6 +33,21 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item label="随访队列" prop="queueId">
<el-select
v-model="queryParams.param.queueId"
clearable
placeholder="请选择"
>
<el-option
v-for="item in followupList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
@ -330,11 +345,13 @@ import {
updStatus,
followPatient,
followStatus,
followupQuery,
} from "@/api/followupFile";
export default {
name: "Notice",
data() {
return {
followupList: [],
options: [
{
label: "患者原因",
@ -517,8 +534,24 @@ export default {
let idCard = this.$route.query.idCard;
this.queryParams.param.keywords = idCard || "";
this.getList();
this.getFollowupQuery();
},
methods: {
// 访
getFollowupQuery() {
followupQuery({
pageNum: -1,
param: {
status: 1,
},
}).then((res) => {
this.followupList = res.data.list;
let commonQueue = JSON.parse(localStorage.getItem("commonQueue"));
commonQueue?.forEach((i) => {
this.followupList.unshift(i);
});
});
},
handleClick(tab, event) {
this.queryParams.param.childStatus = "";
this.getList();

6
acupuncture-前台/src/views/index.vue

@ -1,6 +1,5 @@
<template>
<div class="app-container home" v-resize="resize">
<div></div>
<div>
<el-card shadow="always">
<search
@ -11,6 +10,7 @@
</el-card>
<patient ref="patient"></patient>
</div>
<div style="height: 14px"></div>
<div>
<el-card shadow="always">
<search
@ -21,6 +21,7 @@
</el-card>
<JM ref="JM"></JM>
</div>
<div style="height: 14px"></div>
<div>
<el-card shadow="always">
<search
@ -31,6 +32,7 @@
</el-card>
<XGZL ref="XGZL"></XGZL>
</div>
<div style="height: 14px"></div>
<div>
<el-card shadow="always">
<search @picker-change="pickerChage" title="随访统计" type="4"></search>
@ -202,7 +204,7 @@ export default {
</style>
<style scoped>
>>> .el-card {
margin-bottom: 16px;
margin-bottom: 8px;
}
>>> .el-card__body {

8
acupuncture-前台/src/views/indexCom/JM.vue

@ -46,7 +46,7 @@
</div>
</el-card>
</div>
<div style="flex: 1; margin-right: 20px">
<div style="flex: 1">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">失眠评估PHQ-9</span>
@ -57,7 +57,7 @@
</div>
</el-card>
</div>
<div style="flex: 1">
<!-- <div style="flex: 1">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">焦虑HAMD-24</span>
@ -67,7 +67,7 @@
<div id="anxiety" style="width: 100%"></div>
</div>
</el-card>
</div>
</div> -->
</div>
</div>
<!-- <div class="app-container">
@ -413,7 +413,7 @@ export default {
display: inline-block;
height: 20px;
width: 6px;
background: #4f8bff;
background: #70483e;
margin-right: 10px;
border-radius: 8px;
}

2
acupuncture-前台/src/views/indexCom/XGZL.vue

@ -381,7 +381,7 @@ export default {
display: inline-block;
height: 20px;
width: 6px;
background: #4f8bff;
background: #70483e;
margin-right: 10px;
border-radius: 8px;
}

2
acupuncture-前台/src/views/indexCom/follow.vue

@ -254,7 +254,7 @@ export default {
display: inline-block;
height: 20px;
width: 6px;
background: #4f8bff;
background: #70483e;
margin-right: 10px;
border-radius: 8px;
}

2
acupuncture-前台/src/views/indexCom/patient.vue

@ -366,7 +366,7 @@ export default {
display: inline-block;
height: 20px;
width: 6px;
background: #4f8bff;
background: #70483e;
margin-right: 10px;
border-radius: 8px;
}

7
acupuncture-前台/src/views/indexCom/query.vue

@ -147,7 +147,10 @@ export default {
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
. >>> .el-radio--small.is-bordered {
>>> .el-card {
margin-bottom: 0 !important;
}
>>> .el-radio--small.is-bordered {
margin-right: 20px !important;
margin-left: 0 !important;
}
@ -172,7 +175,7 @@ export default {
display: inline-block;
height: 20px;
width: 6px;
background: #4f8bff;
background: #70483e;
margin-right: 10px;
border-radius: 8px;
}

0
acupuncture-前台/src/views/medicalFile/components/posture/PHQ-9.vue → acupuncture-前台/src/views/medicalFile/components/insomnia/PHQ-9.vue

0
acupuncture-前台/src/views/medicalFile/components/posture/PSQI.vue → acupuncture-前台/src/views/medicalFile/components/insomnia/PSQI.vue

0
acupuncture-前台/src/views/medicalFile/components/posture/epworth.vue → acupuncture-前台/src/views/medicalFile/components/insomnia/epworth.vue

351
acupuncture-前台/src/views/medicalFile/components/posture/SRS22.vue

@ -0,0 +1,351 @@
<template>
<div>
<div>
<div
class="item-container"
v-for="(item, index) in questions"
:key="index"
>
<div class="item-title">{{ item.index }}. {{ item.question }}</div>
<div class="item-radio-box">
<el-radio-group v-model="form[`topic${item.index}`]">
<el-radio
v-for="(criteria, index) in item.criteria"
:key="index"
:label="criteria.value"
>{{ criteria.label }}
</el-radio>
</el-radio-group>
</div>
</div>
<div class="submit-box">
<el-button class="submit-box-but" type="primary" @click="submitForm"
>提交</el-button
>
</div>
</div>
</div>
</template>
<script>
export default {
name: "PHQ9",
props: ["scaleCode"],
data() {
return {
form: {},
questions: [
{
index: 1,
question: "以下哪一项能够最准确描述你在过去六个月所感受到的疼痛",
criteria: [
{ label: "无疼痛", value: 1 },
{ label: "轻微", value: 2 },
{ label: "中等", value: 3 },
{ label: "中等至严重", value: 4 },
{ label: "严重", value: 5 },
],
},
{
index: 2,
question: "以下哪一项能够最准确描述你在过去一个月所感受到的疼痛",
criteria: [
{ label: "无疼痛", value: 1 },
{ label: "轻微", value: 2 },
{ label: "中等", value: 3 },
{ label: "中等至严重", value: 4 },
{ label: "严重", value: 5 },
],
},
{
index: 3,
question: "总体来说,在过去六个月期间你感到十分焦虑吗",
criteria: [
{ label: "完全没有", value: 1 },
{ label: "小部分时间", value: 2 },
{ label: "有时", value: 3 },
{ label: "大部分时间", value: 4 },
{ label: "全部时间", value: 5 },
],
},
{
index: 4,
question:
"如果你必须在背部维持现状不变的情况下继续生活,你会有什么感受",
criteria: [
{ label: "十分愉快", value: 1 },
{ label: "某种程度上愉快", value: 2 },
{ label: "没有愉快或不愉快", value: 3 },
{ label: "某种程度不愉快", value: 4 },
{ label: "十分不愉快", value: 5 },
],
},
{
index: 5,
question: "你现时的活动能力如何",
criteria: [
{ label: "只限于床上", value: 1 },
{ label: "基本上不活动", value: 2 },
{ label: "轻度的运动及劳动,如家务活", value: 3 },
{ label: "中度的运动及劳动,如骑车", value: 4 },
{ label: "活动不受限制", value: 5 },
],
},
{
index: 6,
question: "你在穿上衣服后的外观如何",
criteria: [
{ label: "很好", value: 1 },
{ label: "好", value: 2 },
{ label: "可以接受", value: 3 },
{ label: "差劲", value: 4 },
{ label: "十分差劲", value: 5 },
],
},
{
index: 7,
question:
"在过去六个月期间你曾感到十分沮丧以至于任何事物也不能让你开心吗",
criteria: [
{ label: "总是", value: 1 },
{ label: "经常", value: 2 },
{ label: "有时", value: 3 },
{ label: "很少数时间", value: 4 },
{ label: "完全没有", value: 5 },
],
},
{
index: 8,
question: "你在休息时背部有疼痛吗",
criteria: [
{ label: "总是有", value: 1 },
{ label: "经常有", value: 2 },
{ label: "有时有", value: 3 },
{ label: "很少数时间有", value: 4 },
{ label: "完全没有", value: 5 },
],
},
{
index: 9,
question: "你现阶段在工作单位/学校的活动能力为多少",
criteria: [
{ label: "正常的100%", value: 1 },
{ label: "正常的75%", value: 2 },
{ label: "正常的50%", value: 3 },
{ label: "正常的25%", value: 4 },
{ label: "正常的0%", value: 5 },
],
},
{
index: 10,
question: "以下哪一项最能够描述你躯干的外观",
criteria: [
{ label: "很好", value: 1 },
{ label: "好", value: 2 },
{ label: "可以接受", value: 3 },
{ label: "差劲", value: 4 },
{ label: "十分差劲", value: 5 },
],
},
{
index: 11,
question: "下列哪一项最能准确地描述你因背部疼痛而所需要服用的药物",
criteria: [
{ label: "无", value: 1 },
{ label: "一般止痛药(每星期服用一次或更少)", value: 2 },
{ label: "一般止痛药(天天服用)", value: 3 },
{ label: "特效止痛药(每星期服用一次或更少)", value: 4 },
{ label: "特效止痛药(天天服用)", value: 5 },
],
},
{
index: 12,
question: "你的背部疼痛是否影响你做家务的能力",
criteria: [
{ label: "没有影响", value: 1 },
{ label: "少许影响", value: 2 },
{ label: "有时有影响", value: 3 },
{ label: "常有影响", value: 4 },
{ label: "总是有影响", value: 5 },
],
},
{
index: 13,
question: "总体来说,你在过去六个月期间感到安宁和平静吗",
criteria: [
{ label: "一直", value: 1 },
{ label: "大多数时间", value: 2 },
{ label: "有时", value: 3 },
{ label: "很少数时间", value: 4 },
{ label: "完全没有", value: 5 },
],
},
{
index: 14,
question: "你是否感到你背部的状况对你的人际关系构成影响",
criteria: [
{ label: "没有影响", value: 1 },
{ label: "少许影响", value: 2 },
{ label: "某种程度上有影响", value: 3 },
{ label: "很大程度上有影响", value: 4 },
{ label: "非常有影响", value: 5 },
],
},
{
index: 15,
question: "你以及/或你家人是否因为你背部的问题而在经济方面遇到困难",
criteria: [
{ label: "极有", value: 1 },
{ label: "很大程度上有", value: 2 },
{ label: "某种程度上有", value: 3 },
{ label: "少许", value: 4 },
{ label: "没有", value: 5 },
],
},
{
index: 16,
question: "总体来说,在过去六个月时间你是否感到失落和灰心",
criteria: [
{ label: "完全没有", value: 1 },
{ label: "很少数时间", value: 2 },
{ label: "有时", value: 3 },
{ label: "经常", value: 4 },
{ label: "绝大多数时间", value: 5 },
],
},
{
index: 17,
question:
"在过去三个月时间你是否因背痛而向学校/公司请假?如有,共有多少天",
criteria: [
{ label: "0天", value: 1 },
{ label: "1天", value: 2 },
{ label: "2天", value: 3 },
{ label: "3天", value: 4 },
{ label: "4天或以上", value: 5 },
],
},
{
index: 18,
question: "你背部的状况是否阻碍你和家人/朋友外出",
criteria: [
{ label: "从来没有", value: 1 },
{ label: "很少数时间", value: 2 },
{ label: "有时", value: 3 },
{ label: "经常", value: 4 },
{ label: "总是", value: 5 },
],
},
{
index: 19,
question: "你现在背部的状况是否让你觉得自己仍有吸引力",
criteria: [
{ label: "是,很有吸引力", value: 1 },
{ label: "是,某种程度上有吸引力", value: 2 },
{ label: "可能有,也可能没有", value: 3 },
{ label: "否,没有什么吸引力", value: 4 },
{ label: "否,完全没有吸引力", value: 5 },
],
},
{
index: 20,
question: "总体来说,你在过去的六个月里感到愉快吗",
criteria: [
{ label: "完全没有", value: 1 },
{ label: "很少数时间", value: 2 },
{ label: "有时", value: 3 },
{ label: "大多数时间", value: 4 },
{ label: "所有时间", value: 5 },
],
},
{
index: 21,
question: "你对你背部治疗的成效感到满意吗",
criteria: [
{ label: "十分满意", value: 1 },
{ label: "满意", value: 2 },
{ label: "满意,也可能不满意", value: 3 },
{ label: "不满意", value: 4 },
{ label: "非常不满意", value: 5 },
],
},
{
index: 22,
question: "如果你的背部再次遇到同类情况你是否接受同样的治疗",
criteria: [
{ label: "一定会", value: 1 },
{ label: "可能会", value: 2 },
{ label: "不清楚", value: 3 },
{ label: "可能不会", value: 4 },
{ label: "一定不会", value: 5 },
],
},
],
scaleData: {},
};
},
created() {
this.treatmentId = this.$route.query.treatmentId; // id
let scaleData = localStorage.getItem("scaleData"); //
// scaleData
this.scaleData = scaleData
? JSON.parse(scaleData)
: {
[this.treatmentId]: {},
};
// scaleData[this.treatmentId]
if (!this.scaleData[this.treatmentId]) {
this.scaleData[this.treatmentId] = {};
}
this.form = this.scaleData[this.treatmentId][this.scaleCode] || {}; // form
},
methods: {
//
//
//
// SRS-22
submitForm() {
let score = 0;
// , topic${i}
for (let i = 1; i <= 9; i++) {
if (this.form[`topic${i}`] !== undefined) {
score += this.form[`topic${i}`];
}
}
//
this.scaleData[this.treatmentId][this.scaleCode] = this.form;
localStorage.setItem("scaleData", JSON.stringify(this.scaleData));
//
this.$emit("getScaleResult", score, this.scaleCode);
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
.item-title {
font-size: 20px;
font-weight: bold;
color: #3d3d3d;
line-height: 26px;
}
.item-radio-box {
margin: 16px 0px;
}
>>> .el-radio__label {
font-size: 18px;
color: #555555;
line-height: 20px;
}
.submit-box {
display: flex;
justify-content: center;
align-items: center;
.submit-box-but {
width: 200px;
}
}
</style>

BIN
acupuncture-前台/src/views/medicalFile/components/posture/TAPS.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

146
acupuncture-前台/src/views/medicalFile/components/posture/TAPS.vue

@ -0,0 +1,146 @@
<template>
<div>
<!--
1. 后方视角SET 1
图形1 图形2 图形3 图形4 图形5
2. 弯腰时从上方视角SET 2
图形1 图形2 图形3 图形4 图形5
3. 前方视角根据性别选择 SET 3
图形1 图形2 图形3 图形4 图形5
-->
<div>
<div style="">
<img src="./TAPS.png" alt="" />
</div>
<div
class="item-container"
v-for="(item, index) in questions"
:key="index"
>
<div class="item-title">{{ item.index }}. {{ item.question }}</div>
<div class="item-radio-box">
<el-radio-group v-model="form[`topic${item.index}`]">
<el-radio
v-for="(criteria, index) in item.criteria"
:key="index"
:label="criteria.value"
>{{ criteria.label }}
</el-radio>
</el-radio-group>
</div>
</div>
<div class="submit-box">
<el-button class="submit-box-but" type="primary" @click="submitForm"
>提交</el-button
>
</div>
</div>
</div>
</template>
<script>
export default {
name: "phq",
props: ["scaleCode"],
data() {
return {
form: {},
questions: [
{
index: 1,
question: "后方视角(SET 1)",
criteria: [
{ label: "图形1", value: 1 },
{ label: "图形2", value: 2 },
{ label: "图形3", value: 3 },
{ label: "图形4", value: 4 },
{ label: "图形5", value: 5 },
],
},
{
index: 2,
question: "弯腰时从上方视角(SET 2)",
criteria: [
{ label: "图形1", value: 1 },
{ label: "图形2", value: 2 },
{ label: "图形3", value: 3 },
{ label: "图形4", value: 4 },
{ label: "图形5", value: 5 },
],
},
{
index: 3,
question: "前方视角(根据性别选择 SET 3)",
criteria: [
{ label: "图形1", value: 1 },
{ label: "图形2", value: 2 },
{ label: "图形3", value: 3 },
{ label: "图形4", value: 4 },
{ label: "图形5", value: 5 },
],
},
],
scaleData: {},
};
},
created() {
this.treatmentId = this.$route.query.treatmentId; // id
let scaleData = localStorage.getItem("scaleData"); //
// scaleData
this.scaleData = scaleData
? JSON.parse(scaleData)
: {
[this.treatmentId]: {},
};
// scaleData[this.treatmentId]
if (!this.scaleData[this.treatmentId]) {
this.scaleData[this.treatmentId] = {};
}
this.form = this.scaleData[this.treatmentId][this.scaleCode] || {}; // form
},
methods: {
submitForm() {
let score = 0;
// , topic${i}
for (let i = 1; i <= 8; i++) {
if (this.form[`topic${i}`] !== undefined) {
score += this.form[`topic${i}`];
}
}
//
this.scaleData[this.treatmentId][this.scaleCode] = this.form;
localStorage.setItem("scaleData", JSON.stringify(this.scaleData));
//
this.$emit("getScaleResult", score, this.scaleCode);
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
.item-title {
font-size: 20px;
font-weight: bold;
color: #3d3d3d;
line-height: 26px;
}
.item-radio-box {
margin: 16px 0px;
}
>>> .el-radio__label {
font-size: 18px;
color: #555555;
line-height: 20px;
}
.submit-box {
display: flex;
justify-content: center;
align-items: center;
.submit-box-but {
width: 200px;
}
}
</style>

146
acupuncture-前台/src/views/medicalFile/components/posture/TRACE.vue

@ -0,0 +1,146 @@
<template>
<div>
<div>
<!--
1肩部
肩膀的不对称性轻微差异1分2分有差异3分差异性很大
2肩胛骨
肩胛骨的对称性轻微差异1分差异较大2分
3腰部
腰部的对称性轻微差异1分2分有差异3分差异性很大4分差异性很大
4半胸
上半身不对称的状况以上胸椎的区域为主主要看譬如肩胛骨的凸侧以及肋骨的变化轻微差异1分差异较大2分
-->
<div
class="item-container"
v-for="(item, index) in questions"
:key="index"
>
<div class="item-title">{{ item.index }}. {{ item.question }}</div>
<div class="item-radio-box">
<el-radio-group v-model="form[`topic${item.index}`]">
<el-radio
v-for="(criteria, index) in item.criteria"
:key="index"
:label="criteria.value"
>{{ criteria.label }}
</el-radio>
</el-radio-group>
</div>
</div>
<div class="submit-box">
<el-button class="submit-box-but" type="primary" @click="submitForm"
>提交</el-button
>
</div>
</div>
</div>
</template>
<script>
export default {
name: "PHQ9",
props: ["scaleCode"],
data() {
return {
form: {},
questions: [
{
index: 1,
question: "肩部-肩膀的不对称性",
criteria: [
{ label: "轻微差异", value: 1 },
{ label: "有差异", value: 2 },
{ label: "差异性很大", value: 3 },
],
},
{
index: 2,
question: "肩胛骨-肩胛骨的对称性",
criteria: [
{ label: "轻微差异", value: 1 },
{ label: "差异较大", value: 2 },
],
},
{
index: 3,
question: "腰部-腰部的对称性",
criteria: [
{ label: "轻微差异", value: 1 },
{ label: "有差异", value: 2 },
{ label: "差异性很大", value: 3 },
{ label: "差异性很大", value: 4 },
],
},
{
index: 4,
question: "半胸-上半身不对称的状况",
criteria: [
{ label: "轻微差异", value: 1 },
{ label: "差异较大", value: 2 },
],
},
],
scaleData: {},
};
},
created() {
this.treatmentId = this.$route.query.treatmentId; // id
let scaleData = localStorage.getItem("scaleData"); //
// scaleData
this.scaleData = scaleData
? JSON.parse(scaleData)
: {
[this.treatmentId]: {},
};
// scaleData[this.treatmentId]
if (!this.scaleData[this.treatmentId]) {
this.scaleData[this.treatmentId] = {};
}
this.form = this.scaleData[this.treatmentId][this.scaleCode] || {}; // form
},
methods: {
submitForm() {
let score = 0;
// , topic${i}
for (let i = 1; i <= 7; i++) {
if (this.form[`topic${i}`] !== undefined) {
score += this.form[`topic${i}`];
}
}
//
this.scaleData[this.treatmentId][this.scaleCode] = this.form;
localStorage.setItem("scaleData", JSON.stringify(this.scaleData));
//
this.$emit("getScaleResult", score, this.scaleCode);
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
.item-title {
font-size: 20px;
font-weight: bold;
color: #3d3d3d;
line-height: 26px;
}
.item-radio-box {
margin: 16px 0px;
}
>>> .el-radio__label {
font-size: 18px;
color: #555555;
line-height: 20px;
}
.submit-box {
display: flex;
justify-content: center;
align-items: center;
.submit-box-but {
width: 200px;
}
}
</style>

1150
acupuncture-前台/src/views/medicalFile/details.vue

File diff suppressed because it is too large

225
acupuncture-前台/src/views/medicalFile/index.vue

@ -102,12 +102,14 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<!-- .medicalFile -->
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['medicalFile:index:add']"
>新增</el-button
>
</el-col>
@ -119,6 +121,7 @@
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['medicalFile:index:del']"
>删除</el-button
>
</el-col>
@ -129,8 +132,10 @@
icon="el-icon-bottom"
size="mini"
@click="handleDownload"
>下载模版</el-button
v-hasPermi="['medicalFile:index:download']"
>
下载模版
</el-button>
</el-col>
<el-col :span="1.5">
<el-button
@ -139,6 +144,7 @@
icon="el-icon-upload2"
size="mini"
@click="handleImport"
v-hasPermi="['medicalFile:index:import']"
>导入</el-button
>
</el-col>
@ -149,6 +155,7 @@
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['medicalFile:index:export']"
>导出</el-button
>
</el-col>
@ -165,6 +172,42 @@
max-height="600"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column
fixed
label="门诊/住院"
align="center"
show-overflow-tooltip
min-width="100"
>
<template slot-scope="scope">
<span v-if="scope.row.visitType == 0">门诊</span>
<span v-if="scope.row.visitType == 1">住院</span>
</template>
</el-table-column>
<el-table-column
fixed
label="门诊号/住院号"
align="center"
prop="visitNumber"
show-overflow-tooltip
min-width="180"
/>
<el-table-column
fixed
label="责任医生"
align="center"
prop="doctor"
show-overflow-tooltip
min-width="100"
/>
<el-table-column
fixed
label="主要诊断"
align="center"
prop="diagnosisName"
show-overflow-tooltip
min-width="200"
/>
<el-table-column
fixed
label="姓名"
@ -173,7 +216,6 @@
min-width="100"
/>
<el-table-column
fixed
label="性别"
align="center"
prop="gender"
@ -186,7 +228,6 @@
</template>
</el-table-column>
<el-table-column
fixed
label="年龄"
align="center"
prop="age"
@ -275,20 +316,7 @@
</span>
</template>
</el-table-column>
<el-table-column
label="责任医生"
align="center"
prop="doctor"
show-overflow-tooltip
min-width="100"
/>
<el-table-column
label="主要诊断"
align="center"
prop="diagnosisName"
show-overflow-tooltip
min-width="200"
/>
<el-table-column
label="建档人"
align="center"
@ -317,20 +345,6 @@
}}</span>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="随访队列"
align="center"
prop=""
show-overflow-tooltip
width="200"
>
<template slot-scope="scope">
<div v-if="scope.row.queueVoList && scope.row.queueVoList.length">
{{ scope.row.queueVoList.map((i) => i.queueName).join(",") }}
</div>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
@ -340,7 +354,50 @@
>
<template slot-scope="scope">
<!-- :disabled="scope.row.status == 1" -->
<!-- <el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['medicalFile:index:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['medicalFile:index:del']"
>删除</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-tickets"
@click="handleDetails(scope.row)"
v-hasPermi="['medicalFile:index:details']"
>档案详情</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-notebook-2"
@click="handleEecorde(scope.row)"
v-hasPermi="['medicalFile:index:ecorde']"
>随访记录</el-button
>
<el-button
:disabled="scope.row.status != 0 && scope.row.status != 3"
size="mini"
type="text"
icon="el-icon-s-promotion"
@click="handleExamine(scope.row, 1)"
v-hasPermi="['medicalFile:index:examine']"
>
提交审核
</el-button> -->
<el-button
:disabled="scope.row.status != 0 && scope.row.status != 3"
size="mini"
type="text"
icon="el-icon-edit"
@ -348,6 +405,7 @@
>修改</el-button
>
<el-button
:disabled="scope.row.status != 0 && scope.row.status != 3"
size="mini"
type="text"
icon="el-icon-delete"
@ -377,6 +435,25 @@
>
提交审核
</el-button>
<!-- 审核 -->
<el-button
:disabled="scope.row.status != 1"
size="mini"
type="text"
icon="el-icon-s-check"
@click="handleExamine(scope.row, 2)"
>
通过
</el-button>
<el-button
:disabled="scope.row.status != 1"
size="mini"
type="text"
icon="el-icon-s-check"
@click="handleExamine(scope.row, 3)"
>
驳回
</el-button>
</template>
</el-table-column>
</el-table>
@ -424,17 +501,26 @@
</el-date-picker>
</el-form-item>
<el-form-item label="民族" prop="ethnicity">
<el-input v-model="form.ethnicity" placeholder="请输入" />
<el-select v-model="form.ethnicity" placeholder="请选择" filterable>
<el-option
v-for="item in ethnicityList"
:key="item.label"
:label="item.label"
:value="item.label"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="受教育年限" prop="educationYears">
<el-input
type="number"
v-model="form.educationYears"
placeholder="请输入"
:disabled="formDisabled"
/>
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input v-model="form.phone" placeholder="请输入" />
<el-input type="number" v-model="form.phone" placeholder="请输入" />
</el-form-item>
<el-form-item label="证件类型" prop="idCardType">
<el-select v-model="form.idCardType" placeholder="请选择">
@ -493,7 +579,7 @@
<el-input v-model="form.doctor" placeholder="请输入" />
</el-form-item>
<el-form-item label="随访队列" prop="queueIdList">
<!-- <el-form-item label="随访队列" prop="queueIdList">
<el-select v-model="form.queueIdList" multiple placeholder="请选择">
<el-option
v-for="item in followupList"
@ -503,7 +589,7 @@
>
</el-option>
</el-select>
</el-form-item>
</el-form-item> -->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
@ -559,6 +645,65 @@ export default {
dicts: ["sys_normal_disable", "sys_user_sex"],
data() {
return {
//
ethnicityList: [
{ label: "汉族", value: "01" },
{ label: "蒙古族", value: "02" },
{ label: "回族", value: "03" },
{ label: "藏族", value: "04" },
{ label: "维吾尔族", value: "05" },
{ label: "苗族", value: "06" },
{ label: "彝族", value: "07" },
{ label: "壮族", value: "08" },
{ label: "布依族", value: "09" },
{ label: "朝鲜族", value: "10" },
{ label: "满族", value: "11" },
{ label: "侗族", value: "12" },
{ label: "瑶族", value: "13" },
{ label: "白族", value: "14" },
{ label: "土家族", value: "15" },
{ label: "哈尼族", value: "16" },
{ label: "哈萨克族", value: "17" },
{ label: "傣族", value: "18" },
{ label: "黎族", value: "19" },
{ label: "傈僳族", value: "20" },
{ label: "佤族", value: "21" },
{ label: "畲族", value: "22" },
{ label: "高山族", value: "23" },
{ label: "拉祜族", value: "24" },
{ label: "水族", value: "25" },
{ label: "东乡族", value: "26" },
{ label: "纳西族", value: "27" },
{ label: "景颇族", value: "28" },
{ label: "柯尔克孜族", value: "29" },
{ label: "土族", value: "30" },
{ label: "达斡尔族", value: "31" },
{ label: "仫佬族", value: "32" },
{ label: "羌族", value: "33" },
{ label: "布朗族", value: "34" },
{ label: "撒拉族", value: "35" },
{ label: "毛南族", value: "36" },
{ label: "仡佬族", value: "37" },
{ label: "锡伯族", value: "38" },
{ label: "阿昌族", value: "39" },
{ label: "普米族", value: "40" },
{ label: "塔吉克族", value: "41" },
{ label: "怒族", value: "42" },
{ label: "乌孜别克族", value: "43" },
{ label: "俄罗斯族", value: "44" },
{ label: "鄂温克族", value: "45" },
{ label: "德昂族", value: "46" },
{ label: "保安族", value: "47" },
{ label: "裕固族", value: "48" },
{ label: "京族", value: "49" },
{ label: "塔塔尔族", value: "50" },
{ label: "独龙族", value: "51" },
{ label: "鄂伦春族", value: "52" },
{ label: "赫哲族", value: "53" },
{ label: "门巴族", value: "54" },
{ label: "珞巴族", value: "55" },
{ label: "基诺族", value: "56" },
],
visitType: {
0: "门诊",
1: "住院",
@ -1187,7 +1332,7 @@ export default {
let idCard = this.$route.query.idCard;
this.queryParams.param.keywords = idCard || "";
this.getList();
this.getFollowupQuery();
// this.getFollowupQuery();
},
methods: {
// 访
@ -1311,19 +1456,13 @@ export default {
handleUpdate(row) {
this.open = true;
this.title = "修改诊疗档案";
let queueList = row.queueVoList?.map((item) => item.queueId) || [];
this.form = {
...JSON.parse(JSON.stringify(row)),
queueIdList: queueList,
};
this.form = JSON.parse(JSON.stringify(row));
},
/** 提交审核 */
handleExamine(row, _status) {
let form = JSON.parse(JSON.stringify(row));
let queueList = row.queueVoList?.map((item) => item.queueId) || [];
form = {
...JSON.parse(JSON.stringify(row)),
queueIdList: queueList,
};
form.status = _status;
this.$modal

82
acupuncture-前台/src/views/patientFile/index.vue

@ -319,14 +319,24 @@
</el-date-picker>
</el-form-item>
<el-form-item label="民族" prop="ethnicity">
<el-input
<el-select
v-model="form.ethnicity"
placeholder="请输入"
placeholder="请选择"
:disabled="formDisabled"
/>
filterable
>
<el-option
v-for="item in ethnicityList"
:key="item.label"
:label="item.label"
:value="item.label"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="受教育年限" prop="educationYears">
<el-input
type="number"
v-model="form.educationYears"
placeholder="请输入"
:disabled="formDisabled"
@ -334,6 +344,7 @@
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input
type="number"
v-model="form.phone"
placeholder="请输入"
:disabled="formDisabled"
@ -366,7 +377,11 @@
v-model="form.currentIllnessHistory"
:disabled="formDisabled"
>
<el-checkbox v-for="(item, index) in medicalHistory" :label="item">
<el-checkbox
v-for="(item, index) in medicalHistory"
:label="item"
:key="index"
>
</el-checkbox>
</el-checkbox-group>
<el-input
@ -433,6 +448,65 @@ export default {
uploadFileUrl1:
process.env.VUE_APP_API_QZURL + "/acupuncture/patient/import", //
fileList: [],
//
ethnicityList: [
{ label: "汉族", value: "01" },
{ label: "蒙古族", value: "02" },
{ label: "回族", value: "03" },
{ label: "藏族", value: "04" },
{ label: "维吾尔族", value: "05" },
{ label: "苗族", value: "06" },
{ label: "彝族", value: "07" },
{ label: "壮族", value: "08" },
{ label: "布依族", value: "09" },
{ label: "朝鲜族", value: "10" },
{ label: "满族", value: "11" },
{ label: "侗族", value: "12" },
{ label: "瑶族", value: "13" },
{ label: "白族", value: "14" },
{ label: "土家族", value: "15" },
{ label: "哈尼族", value: "16" },
{ label: "哈萨克族", value: "17" },
{ label: "傣族", value: "18" },
{ label: "黎族", value: "19" },
{ label: "傈僳族", value: "20" },
{ label: "佤族", value: "21" },
{ label: "畲族", value: "22" },
{ label: "高山族", value: "23" },
{ label: "拉祜族", value: "24" },
{ label: "水族", value: "25" },
{ label: "东乡族", value: "26" },
{ label: "纳西族", value: "27" },
{ label: "景颇族", value: "28" },
{ label: "柯尔克孜族", value: "29" },
{ label: "土族", value: "30" },
{ label: "达斡尔族", value: "31" },
{ label: "仫佬族", value: "32" },
{ label: "羌族", value: "33" },
{ label: "布朗族", value: "34" },
{ label: "撒拉族", value: "35" },
{ label: "毛南族", value: "36" },
{ label: "仡佬族", value: "37" },
{ label: "锡伯族", value: "38" },
{ label: "阿昌族", value: "39" },
{ label: "普米族", value: "40" },
{ label: "塔吉克族", value: "41" },
{ label: "怒族", value: "42" },
{ label: "乌孜别克族", value: "43" },
{ label: "俄罗斯族", value: "44" },
{ label: "鄂温克族", value: "45" },
{ label: "德昂族", value: "46" },
{ label: "保安族", value: "47" },
{ label: "裕固族", value: "48" },
{ label: "京族", value: "49" },
{ label: "塔塔尔族", value: "50" },
{ label: "独龙族", value: "51" },
{ label: "鄂伦春族", value: "52" },
{ label: "赫哲族", value: "53" },
{ label: "门巴族", value: "54" },
{ label: "珞巴族", value: "55" },
{ label: "基诺族", value: "56" },
],
//
medicalHistory: [
"高血压",

758
acupuncture-前台/src/views/screening/h5.vue

@ -0,0 +1,758 @@
<template>
<div class="app-container" v-loading="loading">
<div class="hospital">{{ tenantName || "- - - -" }}</div>
<el-form
v-if="stepNum == 1"
:rules="rules"
ref="form"
:model="form"
label-width="110px"
>
<!-- 姓名性别单选出生日期年龄联系方式 -->
<div class="card">
<div class="card-title">基本信息</div>
<div>
<!-- <el-upload
name="file"
accept=".img,.png,.jpg"
:action="uploadFileUrl"
list-type="picture-card"
class="idcardupd"
:show-file-list="false"
:on-success="changeFile"
:on-change="uploader"
:on-progress="handleProgress"
>
<div slot="trigger" class="idcardupd-but">
<img
src="@/assets/images/idcard.png"
class="img-icon"
style="margin-right: 5px"
/>
<span>扫描身份证</span>
</div>
</el-upload> -->
<el-form-item label="姓名" prop="SCWJ-NAME">
<el-input
v-model="form['SCWJ-NAME']"
placeholder="请输入姓名"
></el-input>
</el-form-item>
<el-form-item label="性别" prop="SCWJ-SEX">
<el-radio-group v-model="form['SCWJ-SEX']">
<el-radio label="男"></el-radio>
<el-radio label="女"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="出生日期" prop="SCWJ-BIRTH">
<el-date-picker
v-model="form['SCWJ-BIRTH']"
type="date"
placeholder="选择日期"
@change="calculateAge"
>
</el-date-picker>
</el-form-item>
<el-form-item label="年龄" prop="SCWJ-AGE">
<el-input
v-model="form['SCWJ-AGE']"
type="number"
placeholder="请输入年龄"
></el-input>
</el-form-item>
<el-form-item label="联系方式" prop="SCWJ-PHONE">
<el-input
v-model="form['SCWJ-PHONE']"
type="number"
placeholder="请输入联系方式"
></el-input>
</el-form-item>
</div>
</div>
<!-- 身高体重BMI -->
<div class="card">
<div class="card-title">体重自评</div>
<el-form-item label="身高cm" prop="SCWJ-HEIGHT">
<el-input
@blur="calculateBMI"
v-model="form['SCWJ-HEIGHT']"
type="number"
placeholder="请输入身高"
></el-input>
</el-form-item>
<el-form-item label="体重kg" prop="SCWJ-WEIGHT">
<el-input
@blur="calculateBMI"
v-model="form['SCWJ-WEIGHT']"
type="number"
placeholder="请输入体重"
></el-input>
</el-form-item>
<el-form-item label="BMI" prop="SCWJ-BMI">
<el-input
:disabled="true"
v-model="form['SCWJ-BMI']"
type="number"
placeholder="BMI"
></el-input>
</el-form-item>
<el-form-item label="结论" prop="SCWJ-JL">
<span :class="`BIMTips${BMIVerdict[form['SCWJ-JL']]}`">
{{ form["SCWJ-JL"] || "- - -" }}</span
>
</el-form-item>
</div>
</el-form>
<div v-if="stepNum == 2">
<div class="card">
<div class="card-title">失眠自评SRSS</div>
<div
class="item-container"
v-for="(item, index) in scaleList"
:key="index"
>
<div class="item-title">{{ index + 1 }}. {{ item.question }}</div>
<div class="item-radio-box">
<el-radio-group v-model="form[`topic${index + 1}`]">
<el-radio
class="item-radio"
v-for="(criteria, index) in item.options"
:key="index"
:label="criteria.score"
>{{ criteria.label }}
</el-radio>
</el-radio-group>
</div>
</div>
<div class="card-tips">
SRSS共有10个项目每个项目分5级评分1~5总分为每个项目得分之和评分愈高说明睡眠问题愈严重此量表最低分为10分基本无睡眠问题最高分为50分最严重
</div>
</div>
<div class="card">
<div class="card-title">可接受的治疗方式</div>
<el-checkbox-group v-model="form['SCWJ-ZLFS']">
<el-checkbox label="饮食治疗" class="item-radio">
饮食治疗中药代饮减脂餐营养制剂
</el-checkbox>
<el-checkbox label="运动治疗" class="item-radio">
运动治疗功率踏车有氧运动跑步
</el-checkbox>
<el-checkbox label="中医治疗" class="item-radio">
中医治疗针灸拔罐埋线
</el-checkbox>
</el-checkbox-group>
</div>
<div class="card">
<div class="card-title">可接受的治疗周期</div>
<el-radio-group v-model="form['SCWJ-ZLZQ']">
<el-radio class="item-radio" :label="1">1个月</el-radio>
<el-radio class="item-radio" :label="2">2个月</el-radio>
<el-radio class="item-radio" :label="3">3个月</el-radio>
</el-radio-group>
</div>
</div>
<div class="submit-box" v-if="stepNum == 1">
<el-button type="primary" class="submit-box-but" @click="submitForm">
下一步
</el-button>
</div>
<div class="submit-box" v-if="stepNum == 2 && disabled">
<el-button type="primary" class="submit-box-but" @click="scaleSubmitForm">
提交
</el-button>
</div>
<div class="hospital1">{{ tenantName || "- - - -" }}</div>
</div>
</template>
<script>
import {
create,
screenSave,
screenSubmit,
queryHospitalNoToken,
} from "@/api/screening.js";
export default {
name: "Notice",
data() {
return {
loading: false,
disabled: true,
tenantId: "",
tenantName: "",
stepNum: 1, //
uploadFileUrl: process.env.VUE_APP_BASE_URL + "/baidu/ocr/idcardInfo", //
fileList: [],
BMITips: [
{
label: "体重过轻",
score: 18.5,
},
{
label: "正常",
score: 23.9,
},
{
label: "超重",
score: 27.9,
},
{
label: "肥胖",
score: 28,
},
],
BMIVerdict: {
体重过轻: "1",
正常: "2",
超重: "3",
肥胖: "4",
},
// 1. ?
//
// 2. ?
//
// 3., ?
// 0~5 6~12 13~18 ) 19~24 25~31
// 4. ?
// 9 7~8 5~6 3~4 1~2
// 5. ?
// 0~5 6~12 13~18 19~24 25~31
// 6. ?
// 0~5 6~12 13~18 19~24 25~31
// 7. ?
// 0~5 61~2 13~18 19~24 25~31
// 8. ?
// 0~5 61~2 13~18 19~24 25~31
// 9. , ?
// 0~5 61~2 13~18 19~24 25~31
// 10. ?
//
scaleList: [
{
question: "您觉得平时睡眠足够吗 ?",
options: [
{ label: "睡眠过多了", score: 1 },
{ label: "睡眠正好", score: 2 },
{ label: "睡眠欠一些", score: 3 },
{ label: "睡眠不够", score: 4 },
{ label: "睡眠时间远远不够", score: 5 },
],
},
{
question: "您在睡眠后是否已觉得充分休息过了 ?",
options: [
{ label: "觉得充分休息过了", score: 1 },
{ label: "觉得休息过了", score: 2 },
{ label: "觉得休息了一点", score: 3 },
{ label: "不觉得休息过了", score: 4 },
{ label: "觉得一点儿也没休息", score: 5 },
],
},
{
question: "您晚上已睡过觉,白天是否打瞌睡 ?",
options: [
{ label: "0~5 天", score: 1 },
{ label: "很少 (6~12 天)", score: 2 },
{ label: "有时 (13~18 天)", score: 3 },
{ label: "经常(19~24 天)", score: 4 },
{ label: "总是(25~31 天)", score: 5 },
],
},
{
question: "您平均每个晚上大约能睡几小时 ?",
options: [
{ label: "≥9小时", score: 1 },
{ label: "7~8 小时", score: 2 },
{ label: "5~6 小时", score: 3 },
{ label: "3~4 小时", score: 4 },
{ label: "1~2 小时", score: 5 },
],
},
{
question: "您是否有入睡困难 ?",
options: [
{ label: "0~5 天", score: 1 },
{ label: "很少 (6~12 天)", score: 2 },
{ label: "有时(13~18 天 )", score: 3 },
{ label: "经常(19~24 天)", score: 4 },
{ label: "总是(25~31 天)", score: 5 },
],
},
{
question: "您入睡后中间是否易醒 ?",
options: [
{ label: "0~5 天", score: 1 },
{ label: "很少(6~12 天)", score: 2 },
{ label: "有时(13~18 天)", score: 3 },
{ label: "经常 (19~24 天)", score: 4 },
{ label: "总是(25~31 天)", score: 5 },
],
},
{
question: "您在醒后是否难于再入睡 ?",
options: [
{ label: "0~5天", score: 1 },
{ label: "很少(6~12 天)", score: 2 },
{ label: "有时 (13~18 天)", score: 3 },
{ label: "经常 (19~24 天)", score: 4 },
{ label: "总是 (25~31 天)", score: 5 },
],
},
{
question: "您是否多梦或常被恶梦惊醒 ?",
options: [
{ label: "0~5天", score: 1 },
{ label: "很少(6~12 天)", score: 2 },
{ label: "有时 (13~18 天)", score: 3 },
{ label: "经常 (19~24 天)", score: 4 },
{ label: "总是 (25~31 天)", score: 5 },
],
},
{
question: "为了睡眠 , 您是否吃安眠药 ?",
options: [
{ label: "0~5天", score: 1 },
{ label: "很少(6~12 天)", score: 2 },
{ label: "有时 (13~18 天)", score: 3 },
{ label: "经常 (19~24 天)", score: 4 },
{ label: "总是 (25~31 天)", score: 5 },
],
},
{
question: "您失眠后心情(心境)如何 ?",
options: [
{ label: "无不适", score: 1 },
{ label: "无所谓", score: 2 },
{ label: "有时心烦、急躁", score: 3 },
{ label: "心慌、气短", score: 4 },
{ label: "乏力、没精神、做事效率低", score: 5 },
],
},
], //
form: {
"SCWJ-NAME": "",
"SCWJ-SEX": "男",
"SCWJ-BIRTH": "",
"SCWJ-AGE": "",
"SCWJ-PHONE": "",
"SCWJ-HEIGHT": "",
"SCWJ-WEIGHT": "",
"SCWJ-BMI": "",
"SCWJ-JL": "",
"SCWJ-ZLFS": [],
// "SCWJ-NAME": "2",
// "SCWJ-SEX": "",
// "SCWJ-BIRTH": "1945-01-01",
// "SCWJ-AGE": "70",
// "SCWJ-PHONE": "18534353638",
// "SCWJ-HEIGHT": "170",
// "SCWJ-WEIGHT": "80",
// "SCWJ-BMI": "24.56",
// "SCWJ-JL": "",
// "SCWJ-ZLFS": [],
},
//
rules: {
"SCWJ-NAME": [
{
required: true,
message: "姓名不能为空",
trigger: "blur",
},
],
"SCWJ-SEX": [
{
required: true,
message: "性别不能为空",
trigger: "change",
},
],
"SCWJ-BIRTH": [
{
required: true,
message: "出生日期不能为空",
trigger: "change",
},
],
"SCWJ-AGE": [
{
required: true,
message: "年龄不能为空",
trigger: "change",
},
],
"SCWJ-PHONE": [
{
required: true,
message: "联系方式不能为空",
trigger: "blur",
},
{
pattern: /^1[3456789]\d{9}$/,
message: "格式不正确",
trigger: "change",
},
],
"SCWJ-HEIGHT": [
{
required: true,
message: "身高不能为空",
trigger: "blur",
},
],
"SCWJ-WEIGHT": [
{
required: true,
message: "体重不能为空",
trigger: "blur",
},
],
"SCWJ-BMI": [
{
required: false,
message: "BMI不能为空",
trigger: "blur",
},
],
},
loading: false,
};
},
created() {
this.tenantId = this.$route.query.tenantId;
console.log("this.tenantId", this.tenantId);
this.getQueryHospitalNoToken(); // id
},
methods: {
//
calculateAge() {
const birthDate = new Date(this.form["SCWJ-BIRTH"]);
const today = new Date();
let age = today.getFullYear() - birthDate.getFullYear();
const monthDiff = today.getMonth() - birthDate.getMonth();
if (
monthDiff < 0 ||
(monthDiff === 0 && today.getDate() < birthDate.getDate())
) {
age--;
}
this.form["SCWJ-AGE"] = age;
},
// ,
async changeFile(e) {
this.loading = false;
console.log("上传身份信息: ", e);
const { code, data } = e;
console.log("data: ", data);
if (code === 200) {
this.spinning = false;
this.codeValue["SCWJ-NAME"] = data.name;
this.codeValue["SCWJ-SEX"] = data.sex;
this.codeValue["SCWJ-idCard"] = data.idcard;
this.codeValue["SCWJ-AGE"] = data.age;
await this.setValueByIdCard(data.idcard);
// await this.saveAnswer(data.name, "SCWJ-NAME");
// await this.saveAnswer(data.idcard, "SCWJ-idCard");
}
},
handleProgress() {
this.loading = true;
},
uploader(res) {
this.loading = false;
},
// id
getQueryHospitalNoToken() {
let params = {
id: this.$route.query.tenantId,
};
queryHospitalNoToken(params).then((response) => {
this.tenantName = response.data.name || "";
});
},
// BIM
calculateBMI() {
if (this.form["SCWJ-WEIGHT"] && this.form["SCWJ-HEIGHT"]) {
const weight = parseFloat(this.form["SCWJ-WEIGHT"]);
const height = parseFloat(this.form["SCWJ-HEIGHT"]);
const bmi = weight / (height / 100) ** 2;
this.form["SCWJ-BMI"] = bmi.toFixed(2);
this.getBMITips(bmi);
}
},
// BIM
// <18.5
// 18.5~23.9
// 24~27.9
// 28
getBMITips(bmi) {
let tips = "";
if (bmi < 18.5) {
tips = "体重过轻";
}
if (bmi >= 18.5 && bmi < 23.9) {
tips = "正常";
}
if (bmi >= 24 && bmi < 27.9) {
tips = "超重";
}
if (bmi >= 28) {
tips = "肥胖";
}
this.form["SCWJ-JL"] = tips;
},
// - pdg
handleUploadPdfAdd1(res) {
if (res.code == 200) {
this.importOpen = false;
this.getList();
this.$modal.msgSuccess("导入成功");
} else {
this.$message.error(res.msg || "导入失败");
this.fileList = [];
}
},
// -
handleBeforeUpload1(file) {
const isLt2M = file.size / 1024 / 1024 < 100;
//
if (!isLt2M) {
this.$message.error("上传文件大小不能超过 100MB!");
}
return isLt2M;
},
// -
handleBeforePdfUpload1(file) {
const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
const whiteList = ["xlsx", "xls"];
if (whiteList.indexOf(fileSuffix) === -1) {
this.$message.error("上传文件只能是.xlsx, .xls");
return false;
}
},
/** 查询公告列表 */
getList() {
this.loading = true;
queryPatient(this.queryParams).then((res) => {
this.listDat = res.data.list;
this.total = res.data.total;
this.loading = false;
});
},
/** 基本信息 */
submitForm: function () {
this.$refs["form"].validate(async (valid) => {
if (valid) {
//
window.scrollTo(0, 0);
this.stepNum++;
}
});
},
//
async scaleSubmitForm() {
try {
// ------ ------
let score = 0;
// , topic${i}
for (let i = 1; i <= 24; i++) {
if (this.form[`topic${i}`] !== undefined) {
score += this.form[`topic${i}`];
}
}
// ------ ------
const params = {
param: {
type: 33,
tenantId: this.tenantId,
centerId: this.tenantId,
},
};
create(params).then(async (res) => {
this.loading = true;
this.detailId = res.data.detailId;
this.id = res.data.id;
// ------ ------
//
await this.saveAnswer(this.form["SCWJ-NAME"], "SCWJ-NAME");
await this.saveAnswer(this.form["SCWJ-SEX"], "SCWJ-SEX");
await this.saveAnswer(this.form["SCWJ-BIRTH"], "SCWJ-BIRTH");
await this.saveAnswer(this.form["SCWJ-AGE"], "SCWJ-AGE");
await this.saveAnswer(this.form["SCWJ-PHONE"], "SCWJ-PHONE");
await this.saveAnswer(this.form["SCWJ-HEIGHT"], "SCWJ-HEIGHT");
await this.saveAnswer(this.form["SCWJ-WEIGHT"], "SCWJ-WEIGHT");
await this.saveAnswer(this.form["SCWJ-BMI"], "SCWJ-BMI");
await this.saveAnswer(this.form["SCWJ-JL"], "SCWJ-JL");
//
await this.saveAnswer(score, "SCWJ-RESULT");
await this.saveAnswer(this.form["SCWJ-ZLFS"].toString(), "SCWJ-ZLFS"); //
await this.saveAnswer(this.form["SCWJ-ZLZQ"], "SCWJ-ZLZQ"); //
// ------ ------
const submitParams = { param: { detailId: this.detailId } };
await screenSubmit(submitParams).then((response) => {
this.loading = false;
this.disabled = false;
this.$modal.msgSuccess("提交成功");
});
});
} catch (error) {
this.loading = false;
this.disabled = false;
console.log("提交失败:", error);
this.$message.error("提交失败,请稍后重试!");
}
},
//
async saveAnswer(value, str) {
try {
const params = {
param: {
answer: value,
code: str,
detailId: this.detailId,
},
};
await screenSave(params).then((response) => {});
} catch (error) {
this.loading = false;
this.disabled = false;
console.log("保存失败:", error);
this.$message.error("保存失败,请稍后重试!");
}
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
.idcardupd {
height: 44px;
margin-bottom: 14px;
}
.idcardupd-but {
height: 44px;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
}
.idcardupd-but span {
padding-top: 1px;
}
.idcardupd-but img {
width: 20px;
height: 20px;
}
.idcardupd >>> .el-upload {
height: 44px;
border: none;
background: #c6a268;
}
.hospital1 {
text-align: center;
font-size: 14px;
color: #999;
}
.hospital {
background: #fff;
font-size: 20px;
color: #70483e;
line-height: 50px;
font-weight: 600;
margin-bottom: 10px;
border-radius: 6px;
text-align: center;
}
.BIMTips1 {
color: #cccccc;
}
.BIMTips2 {
color: #66cc00;
}
.BIMTips3 {
color: #c3c300;
}
.BIMTips4 {
color: #ff9900;
}
.item-radio {
display: block;
margin-bottom: 10px;
}
.item-title {
font-size: 18px;
font-weight: bold;
color: #3d3d3d;
line-height: 26px;
}
.item-radio-box {
margin: 16px 0px;
}
>>> .el-radio__label {
font-size: 16px;
color: #555555;
line-height: 20px;
}
.submit-box {
display: flex;
justify-content: center;
align-items: center;
}
.submit-box .submit-box-but {
background: #c6a268;
width: 100%;
font-size: 16px;
margin-bottom: 10px;
}
.card {
padding: 16px;
background: #fff;
border-radius: 6px;
margin-bottom: 14px;
}
.card-title {
font-weight: 600;
font-size: 20px;
margin-bottom: 16px;
}
.card-tips {
font-size: 14px;
color: #999999;
}
/* */
.app-container {
/* background: linear-gradient(to bottom, #70483e, #f7f8fa); */
background: #70483e;
min-height: 100vh;
}
>>> .el-input__inner {
border: none;
border-bottom: 1px solid #dcdfe6;
border-radius: 0;
}
>>> .el-date-editor.el-input {
width: 100% !important;
}
>>> .el-form-item--medium .el-form-item__label {
padding-right: 30px;
}
>>> .el-radio input[aria-hidden="true"] {
display: none !important;
}
>>> .el-radio:focus:not(.is-focus):not(:active):not(.is-disabled)
.el-radio__inner {
box-shadow: none !important;
}
</style>
<!-- >>> .el-input__inner {
padding: 0 15px !important;
} -->

362
acupuncture-前台/src/views/screening/index.vue

@ -0,0 +1,362 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="" prop="noticeTitle">
<el-input
style="width: 300px"
v-model="queryParams.param.keywords"
placeholder="支持姓名、全拼、简拼、手机号码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="年龄范围" prop="createBy">
<div class="form-item-age">
<el-input
v-model="queryParams.param.startAge"
placeholder="最小年龄"
clearable
@keyup.enter.native="handleQuery"
/>
<span></span>
<el-input
v-model="queryParams.param.endAge"
placeholder="最大年龄"
clearable
@keyup.enter.native="handleQuery"
/>
</div>
</el-form-item>
<el-form-item label="建档组织" prop="tenantId">
<el-select
v-model="queryParams.param.tenantId"
placeholder="请选择"
clearable
filterable
>
<el-option
v-for="(item, index) in tenantsListData"
:label="item.name"
:value="item.id"
:key="index"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-form-item label="创建时间" prop="doctorNo">
<el-date-picker
v-model="queryTime"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
value-format="yyyy-MM-dd"
>
</el-date-picker>
</el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">
重置
</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>
导出
</el-button>
</el-col>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="listDat"
@selection-change="handleSelectionChange"
max-height="600"
row-key="id"
>
<el-table-column
type="selection"
width="55"
align="center"
:reserve-selection="true"
/>
<el-table-column
label="姓名"
align="center"
prop="SCWJ-NAME"
min-width="100"
show-overflow-tooltip
fixed
/>
<el-table-column
label="性别"
align="center"
prop="SCWJ-SEX"
min-width="100"
/>
<el-table-column
label="出生日期"
align="center"
prop="SCWJ-BIRTH"
min-width="100"
/>
<el-table-column
label="年龄"
align="center"
prop="SCWJ-AGE"
min-width="100"
/>
<el-table-column
label="联系方式"
align="center"
prop="SCWJ-PHONE"
min-width="120"
/>
<el-table-column
label="身高cm"
align="center"
prop="SCWJ-HEIGHT"
min-width="100"
/>
<el-table-column
label="体重kg"
align="center"
prop="SCWJ-WEIGHT"
min-width="100"
/>
<el-table-column
label="BMI"
align="center"
prop="SCWJ-BMI"
min-width="100"
/>
<el-table-column
show-overflow-tooltip
label="结论"
align="center"
prop="SCWJ-JL"
min-width="150"
>
</el-table-column>
<el-table-column
label="失眠自评(SRSS)"
align="center"
prop="SCWJ-RESULT"
min-width="150"
/>
<el-table-column
label="可接受的治疗方式"
align="center"
prop="SCWJ-ZLFS"
min-width="200"
/>
<el-table-column
label="可接受的治疗周期"
align="center"
prop="SCWJ-ZLZQ"
min-width="150"
/>
<el-table-column
fixed="right"
label="创建时间"
align="center"
min-width="140"
>
<template slot-scope="scope">
<span>{{
parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}")
}}</span>
</template>
</el-table-column>
<el-table-column
label="组织"
align="center"
prop="tenantName"
min-width="150"
show-overflow-tooltip
fixed="right"
/>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
</div>
</template>
<script>
import { queryDetail } from "@/api/screening.js";
import { tenantsList } from "@/api/member";
export default {
name: "Notice",
dicts: ["sys_notice_status", "sys_notice_type"],
data() {
return {
queryTime: [], //
tenantsListData: [], //
loading: false, //
ids: [], //
single: true, //
multiple: true, //
showSearch: true, //
total: 0, //
listDat: [], //
//
queryParams: {
pageNum: 1,
pageSize: 10,
param: {
keywords: "", //
startAge: "", //
endAge: "", //
tenantId: "", //
createBy: "", //
sourceId: "", //
},
},
};
},
created() {
// this.getLastWeekDays(); //
this.getList(); //
this.getTenantsList(); //
},
methods: {
//
getLastWeekDays() {
let obj = {
startTime: "",
endTime: "",
};
obj.startTime = this.$moment(
this.$moment()
.week(this.$moment().week() - 1)
.startOf("week")
.add(1, "days")
.valueOf()
).format("YYYY-MM-DD");
obj.endTime = this.$moment(
this.$moment()
.week(this.$moment().week() - 1)
.endOf("week")
.add(1, "days")
.valueOf()
).format("YYYY-MM-DD");
this.queryTime = [obj.startTime, obj.endTime];
},
//
getTenantsList() {
tenantsList({
pageNum: -1,
param: {},
}).then((res) => {
this.tenantsListData = res.data.list;
});
},
/** 查询公告列表 */
getList() {
this.loading = true;
//
this.queryParams.param.startTime = "";
this.queryParams.param.endTime = "";
if (this.queryTime?.length) {
this.queryParams.param.startTime = this.queryTime[0] + " " + "00:00:00";
this.queryParams.param.endTime = this.queryTime[1] + " " + "23:59:59";
}
queryDetail(this.queryParams).then((res) => {
this.listDat = res.data.list;
this.listDat.forEach((item) => {
if (item.detailList) {
item.detailList?.forEach((row) => {
item[row.questionCode] = row.answer;
});
}
});
this.total = res.data.total;
this.loading = false;
});
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams.param = {
keywords: "", //
startAge: "", //
endAge: "", //
tenantId: "", //
};
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length != 1;
this.multiple = !selection.length;
},
/** 导出按钮操作 */
handleExport() {
let data = JSON.parse(JSON.stringify(this.queryParams));
data.param.idList = this.ids;
this.download1(
"/screening/exportScreen",
{
...data,
},
`筛查列表.xlsx`
);
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
.form-item-age {
display: flex;
align-items: center;
}
.form-item-age span {
margin: 0 10px;
}
.form-item-age >>> .el-input {
width: 100px;
}
</style>
<!-- >>> .el-input__inner {
padding: 0 15px !important;
} -->

375
acupuncture-前台/src/views/screening/qrCode.vue

@ -0,0 +1,375 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="组织" prop="tenantId">
<el-select
v-model="queryParams.param.tenantId"
placeholder="请选择"
clearable
filterable
>
<el-option
v-for="(item, index) in tenantsListData"
:label="item.name"
:value="item.id"
:key="index"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button
>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">
重置
</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button
>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button
>
</el-col>
<!-- <el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button
>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="listDat"
@selection-change="handleSelectionChange"
max-height="600"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column
label="二维码"
align="center"
prop="name"
min-width="120"
>
<template slot-scope="scope">
<img
:src="qzUrl + '/acupuncture' + scope.row.url"
alt=""
width="100"
height="100"
@click="Original(scope.row.url)"
/>
</template>
</el-table-column>
<el-table-column
label="组织"
align="center"
prop="tenantName"
min-width="100"
/>
<el-table-column label="创建人/创建时间" align="center" min-width="140">
<template slot-scope="scope">
<div>{{ scope.row.createBy }}</div>
<span>{{
parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}")
}}</span>
</template>
</el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="150">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-download"
@click="handleExport(scope.row)"
>导出
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除
</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改公告对话框 -->
<el-dialog
class="popup"
:title="title"
:visible.sync="open"
width="780px"
append-to-body
>
<el-form
class="formStep"
ref="form"
:model="form"
:rules="rules"
label-width="60px"
>
<el-form-item label="组织" prop="tenantId">
<el-select
v-model="form.tenantId"
placeholder="请选择"
clearable
filterable
>
<el-option
v-for="(item, index) in tenantsListData"
:label="item.name"
:value="item.id"
:key="index"
/>
</el-select>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm"> </el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
<el-image
:preview-src-list="imgUrl"
ref="preview"
style="display: none"
></el-image>
</div>
</template>
<script>
import {
queryScreenList,
addScreen,
deleteScreen,
exportQr,
} from "@/api/screening.js";
import { tenantsList } from "@/api/member";
export default {
name: "Notice",
dicts: ["sys_notice_status", "sys_notice_type"],
data() {
return {
qzUrl: process.env.VUE_APP_API_QZURL, //
imgUrl: [],
tenantsListData: [], //
loading: false, //
ids: [], //
single: true, //
multiple: true, //
showSearch: true, //
total: 0, //
listDat: [], //
title: "", //
open: false, //
importOpen: false, //
//
queryParams: {
pageNum: 1,
pageSize: 10,
param: {
tenantId: "", //
},
},
//
form: {},
//
rules: {
tenantId: [
{
required: true,
message: "组织不能为空",
trigger: "blur",
},
],
},
};
},
created() {
this.getList(); //
this.getTenantsList(); //
},
methods: {
Original(_url) {
this.imgUrl = [];
if (_url) {
this.imgUrl.push(this.imgPrefix + _url);
}
this.$refs.preview.clickHandler();
},
//
getTenantsList() {
tenantsList({
pageNum: -1,
param: {},
}).then((res) => {
this.tenantsListData = res.data.list;
});
},
/** 查询公告列表 */
getList() {
this.loading = true;
queryScreenList(this.queryParams).then((res) => {
this.listDat = res.data.list;
this.total = res.data.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams.param = {
tenantId: "", //
};
this.handleQuery();
},
//
handleSelectionChange(selection) {
this.ids = selection.map((item) => item.id);
this.single = selection.length != 1;
this.multiple = !selection.length;
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.open = true;
this.title = "新增筛查二维码";
},
/** 提交按钮 */
submitForm: function () {
let path = process.env.VUE_APP_H5_URL;
this.$refs["form"].validate((valid) => {
if (valid) {
let data = JSON.parse(JSON.stringify(this.form));
let tenantName =
this.tenantsListData.filter((item) => item.id == data.tenantId)[0]
?.name || "";
data.path = `${path}?tenantId=${data.tenantId}&tenantName=${tenantName}`;
if (data.id != undefined) {
addScreen(data).then((response) => {
this.$modal.msgSuccess("二维码已重新生成,请及时更换");
this.open = false;
this.getList();
});
} else {
addScreen(data).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const idList = row.id ? [row.id] : this.ids;
this.$modal
.confirm("是否确认删除当前选择的数据?")
.then(function () {
return deleteScreen({
idList: idList,
});
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport(row) {
let data = {
tenantId: row.tenantId,
url: row.url,
};
exportQr(data).then((res) => {
window.open(`${process.env.VUE_APP_API_QZURL}/acupuncture/${res.data}`);
});
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
.form-item-age {
display: flex;
align-items: center;
}
.form-item-age span {
margin: 0 10px;
}
.form-item-age >>> .el-input {
width: 100px;
}
</style>
<!-- >>> .el-input__inner {
padding: 0 15px !important;
} -->

4
acupuncture-后台/src/views/medicalFile/index.vue

@ -399,7 +399,7 @@
提交审核
</el-button> -->
<!-- 审核 -->
<div>
<!-- <div>
<el-button
:disabled="scope.row.status != 1"
size="mini"
@ -418,7 +418,7 @@
>
驳回
</el-button>
</div>
</div> -->
</template>
</el-table-column>
</el-table>

1
acupuncture-后台/src/views/patientFile/index.vue

@ -45,6 +45,7 @@
<el-option label="HIS" :value="2" />
</el-select>
</el-form-item>
<el-form-item label="建档组织" prop="tenantId">
<el-select
v-model="queryParams.param.tenantId"

12
针灸减重失眠筛查倡议书.docx

@ -0,0 +1,12 @@
减重失眠筛查倡议书
--------------------------------------------------------------------------------
尊敬的社区成员、医疗机构、社会组织及所有关心健康的朋友们:
--------------------------------------------------------------------------------
大家好!
--------------------------------------------------------------------------------
近年来,随着生活方式的改变,减重和失眠已成为影响人们健康的突出问题。为了更早地发现和预防这些健康问题,我们倡议开展减重失眠筛查工作。
--------------------------------------------------------------------------------
健康是每个人的宝贵财富,也是我们共同的责任。让我们携手共进,通过筛查,为构建健康社区、实现全民健康贡献我们的力量!
健康是每个人的宝贵财富,也是我们共同的责任。让我们携手共进,开展减重失眠筛查工作,为构建健康社区、实现全民健康贡献我们的力量!您可通过扫描上方二维码参与减重失眠筛查工作。感谢您的参与,谢谢!
山西因孚第一医院
Loading…
Cancel
Save