21 changed files with 3490 additions and 590 deletions
@ -0,0 +1,77 @@ |
|||||
|
import request from "@/utils/request"; |
||||
|
// ------ 筛查上报相关接口 ------
|
||||
|
// 通过组织id查询医院信息
|
||||
|
export function queryHospitalNoToken(data) { |
||||
|
return request({ |
||||
|
url: "admin/web/queryTenantById", |
||||
|
method: "post", |
||||
|
data: data, |
||||
|
}); |
||||
|
} |
||||
|
// 创建筛查
|
||||
|
export function create(data) { |
||||
|
return request({ |
||||
|
url: "admin/screening/createNoToken", |
||||
|
method: "post", |
||||
|
data: data, |
||||
|
}); |
||||
|
} |
||||
|
// 通过code提交数据
|
||||
|
export function screenSave(data) { |
||||
|
return request({ |
||||
|
url: "admin/screening/save", |
||||
|
method: "post", |
||||
|
data: data, |
||||
|
}); |
||||
|
} |
||||
|
// 提交筛查上报数据
|
||||
|
export function screenSubmit(data) { |
||||
|
return request({ |
||||
|
url: "admin/screening/submitNoToken", |
||||
|
method: "post", |
||||
|
data: data, |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// ------ 筛查二维码相关接口 ------
|
||||
|
// 筛查二维码 列表
|
||||
|
export function queryScreenList(data) { |
||||
|
return request({ |
||||
|
url: "admin/wxQrCode/queryScreenList", |
||||
|
method: "post", |
||||
|
data: data, |
||||
|
}); |
||||
|
} |
||||
|
// 添加筛查二维码
|
||||
|
export function addScreen(data) { |
||||
|
return request({ |
||||
|
url: "admin/wxQrCode/addScreen", |
||||
|
method: "post", |
||||
|
data: data, |
||||
|
}); |
||||
|
} |
||||
|
// 删除筛查二维码
|
||||
|
export function deleteScreen(data) { |
||||
|
return request({ |
||||
|
url: "admin/wxQrCode/deleteScreen", |
||||
|
method: "post", |
||||
|
data: data, |
||||
|
}); |
||||
|
} |
||||
|
// // 导出二维码
|
||||
|
export function exportQr(data) { |
||||
|
return request({ |
||||
|
url: "admin/wxQrCode/exportScreen", |
||||
|
method: "post", |
||||
|
data: data, |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
// ------ 筛查列表 ------
|
||||
|
export function queryDetail(data) { |
||||
|
return request({ |
||||
|
url: "admin/screening/queryDetail", |
||||
|
method: "post", |
||||
|
data: data, |
||||
|
}); |
||||
|
} |
@ -0,0 +1,394 @@ |
|||||
|
<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; |
||||
|
// 功能/活动 第5、9、12、15、18题 |
||||
|
// 疼痛 第1、2、8、11、17题 |
||||
|
// 自我形象/外观 第4、6、10、14、19题 |
||||
|
// 心理健康 第3、7、13、16、20题 |
||||
|
// 治疗满意度 第21、22题 |
||||
|
|
||||
|
// 2. 维度得分计算: |
||||
|
// 每个维度的得分是该维度内所有问题得分的平均值。例如,功能维度包含多个问题,将这些问题的得分相加后除以问题数量,得到该维度的平均得分。 |
||||
|
// 计算各维度得分 |
||||
|
const calculateDimensionScore = (questionIndices) => { |
||||
|
let sum = 0; |
||||
|
let count = 0; |
||||
|
questionIndices.forEach((index) => { |
||||
|
if (this.form[`topic${index}`] !== undefined) { |
||||
|
sum += this.form[`topic${index}`]; |
||||
|
count++; |
||||
|
} |
||||
|
}); |
||||
|
return count > 0 ? sum / count : 0; |
||||
|
}; |
||||
|
// 各维度对应的题号 |
||||
|
const dimensions = { |
||||
|
function: [5, 9, 12, 15, 18], // 功能/活动 |
||||
|
pain: [1, 2, 8, 11, 17], // 疼痛 |
||||
|
appearance: [4, 6, 10, 14, 19], // 自我形象/外观 |
||||
|
mentalHealth: [3, 7, 13, 16, 20], // 心理健康 |
||||
|
satisfaction: [21, 22], // 治疗满意度 |
||||
|
}; |
||||
|
// 计算各维度得分 |
||||
|
const dimensionScores = { |
||||
|
function: calculateDimensionScore(dimensions.function), |
||||
|
pain: calculateDimensionScore(dimensions.pain), |
||||
|
appearance: calculateDimensionScore(dimensions.appearance), |
||||
|
mentalHealth: calculateDimensionScore(dimensions.mentalHealth), |
||||
|
satisfaction: calculateDimensionScore(dimensions.satisfaction), |
||||
|
}; |
||||
|
|
||||
|
// 3. 总得分计算: |
||||
|
// SRS-22量表的总得分是五个维度得分的平均值 |
||||
|
// 计算总得分 |
||||
|
const totalScore = |
||||
|
(dimensionScores.function + |
||||
|
dimensionScores.pain + |
||||
|
dimensionScores.appearance + |
||||
|
dimensionScores.mentalHealth + |
||||
|
dimensionScores.satisfaction) / |
||||
|
5; |
||||
|
console.log("totalScore", totalScore); |
||||
|
|
||||
|
// 存储数据 |
||||
|
this.scaleData[this.treatmentId][this.scaleCode] = this.form; |
||||
|
localStorage.setItem("scaleData", JSON.stringify(this.scaleData)); |
||||
|
// // 将数据传递给父组件 |
||||
|
this.$emit("getScaleResult", totalScore, 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> |
After Width: | Height: | Size: 21 KiB |
@ -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> |
@ -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> |
File diff suppressed because it is too large
@ -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; |
||||
|
} --> |
@ -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; |
||||
|
} --> |
@ -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.qzUrl + "/acupuncture" + _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; |
||||
|
} --> |
Loading…
Reference in new issue