zzc 3 months ago
parent
commit
5e3bdfa565
  1. 28
      acupuncture-前台/src/api/medicalFile.js
  2. 13
      acupuncture-前台/src/views/indexCom/JM.vue
  3. 59
      acupuncture-前台/src/views/medicalFile/components/posture/SRS22.vue
  4. 111
      acupuncture-前台/src/views/medicalFile/details.vue
  5. 67
      acupuncture-前台/src/views/medicalFile/index.vue
  6. 2
      acupuncture-前台/src/views/screening/qrCode.vue
  7. 12
      acupuncture-后台/src/api/medicalFile.js
  8. 77
      acupuncture-后台/src/api/screening.js
  9. 21
      acupuncture-后台/src/views/indexCom/JM.vue
  10. 1
      acupuncture-后台/src/views/medicalFile/components/insomnia/PHQ-9.vue
  11. 1
      acupuncture-后台/src/views/medicalFile/components/insomnia/PSQI.vue
  12. 0
      acupuncture-后台/src/views/medicalFile/components/insomnia/epworth.vue
  13. 394
      acupuncture-后台/src/views/medicalFile/components/posture/SRS22.vue
  14. BIN
      acupuncture-后台/src/views/medicalFile/components/posture/TAPS.png
  15. 146
      acupuncture-后台/src/views/medicalFile/components/posture/TAPS.vue
  16. 146
      acupuncture-后台/src/views/medicalFile/components/posture/TRACE.vue
  17. 1266
      acupuncture-后台/src/views/medicalFile/details.vue
  18. 241
      acupuncture-后台/src/views/medicalFile/index.vue
  19. 758
      acupuncture-后台/src/views/screening/h5.vue
  20. 362
      acupuncture-后台/src/views/screening/index.vue
  21. 375
      acupuncture-后台/src/views/screening/qrCode.vue

28
acupuncture-前台/src/api/medicalFile.js

@ -39,7 +39,7 @@ export function queryRecord(data) {
method: "post",
data: data,
});
}// 档案详情
} // 档案详情
export function saveAidRecord(data) {
return request({
url: "/treatment/saveAidRecord",
@ -55,4 +55,28 @@ export function queueAdd(data) {
method: "post",
data: data,
});
}
}
// 同步人体成分数据
export function selectByMemberId(data) {
return request({
url: "/api/http/selectByMemberId",
method: "post",
data: data,
});
}
// 同步人体成分报告
export function selectReportByMemberId(data) {
return request({
url: "/api/http/selectReportByMemberId",
method: "post",
data: data,
});
}
// 评估报告单
export function exportTreatmentPg(data) {
return request({
url: "/treatment/exportTreatmentPg",
method: "post",
data: data,
});
}

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

@ -16,26 +16,27 @@
<div style="flex: 1; margin-right: 20px">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">分布</span>
<span class="header-title">分布</span>
<div class="dis"></div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="system" style="width: 100%"></div>
<div id="physique" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1; margin-right: 20px">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">分布</span>
<span class="header-title">分布</span>
<div class="dis"></div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="physique" style="width: 100%"></div>
<div id="system" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1; margin-right: 20px">
<!-- <div style="flex: 1; margin-right: 20px">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">体态评估TAPS</span>
@ -45,7 +46,7 @@
<div id="posture" style="width: 100%"></div>
</div>
</el-card>
</div>
</div> -->
<div style="flex: 1">
<el-card shadow="always">
<div class="dis title-box">

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

@ -308,17 +308,60 @@ export default {
// 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}`];
}
}
// / 59121518
// 1281117
// / 46101419
// 37131620
// 2122
// 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", score, this.scaleCode);
// //
this.$emit("getScaleResult", totalScore, this.scaleCode);
},
},
};

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

@ -79,7 +79,16 @@
<div>
<a name="病情评估"></a>
<div class="div-title1">病情评估</div>
<div class="div-title2">人体成分</div>
<div class="div-title2">
人体成分
<span @click="getHumanBody" class="foem-item-pg">同步</span>
<!-- <span
style="margin-left: 10px"
@click="getHumanBodyReport"
class="foem-item-pg"
>报告</span
> -->
</div>
</div>
<div class="human-body">
<el-form-item label="体重" prop="PG_RTCF_TZ">
@ -166,18 +175,17 @@
placeholder="请输入"
/>
</el-form-item>
<el-form-item label="身体各成分百分比" prop="PG_RTCF_STGCFBFB">
<!-- <el-form-item label="身体各成分百分比" prop="PG_RTCF_STGCFBFB">
<el-input
:disabled="form.status != 0 && form.status != 3"
v-model="detailsForm['PG_RTCF_STGCFBFB']"
placeholder="请输入"
/>
</el-form-item>
</el-form-item> -->
<el-form-item label="体型类型" prop="PG_RTCF_TXLX">
<el-select
:disabled="form.status != 0 && form.status != 3"
v-model="detailsForm['PG_RTCF_TXLX']"
multiple
collapse-tags
placeholder="请选择"
>
@ -266,10 +274,10 @@
评估
</span>
</template>
<el-input
:disabled="form.status != 0 && form.status != 3"
v-model="detailsForm['PG_TT_TAPS_DF']"
type="number"
placeholder="请输入"
/>
</el-form-item>
@ -288,6 +296,7 @@
<el-input
:disabled="form.status != 0 && form.status != 3"
v-model="detailsForm['PG_TT_TRACE_DF']"
type="number"
placeholder="请输入"
/>
</el-form-item>
@ -306,6 +315,7 @@
<el-input
:disabled="form.status != 0 && form.status != 3"
v-model="detailsForm['PG_TT_SRS22_DF']"
type="number"
placeholder="请输入"
/>
</el-form-item>
@ -330,6 +340,7 @@
<el-input
:disabled="form.status != 0 && form.status != 3"
v-model="detailsForm['PG_SM_PHQ-9_DF']"
type="number"
placeholder="请输入"
/>
</el-form-item>
@ -348,6 +359,7 @@
<el-input
:disabled="form.status != 0 && form.status != 3"
v-model="detailsForm['PG_SM_EPSW_DF']"
type="number"
placeholder="请输入"
/>
</el-form-item>
@ -370,6 +382,7 @@
<el-input
:disabled="form.status != 0 && form.status != 3"
v-model="detailsForm['PG_SM_PSQI_DF']"
type="number"
placeholder="请输入"
/>
</el-form-item>
@ -379,7 +392,6 @@
<el-form-item prop="PG_JL_HAMD-24_DF">
<template v-slot:label>
<span>汉密尔顿抑郁评估HAMD-24得分(0-96)</span>
<span
class="foem-item-pg"
@click="
@ -393,7 +405,9 @@
</span>
</template>
<el-input
:disabled="form.status != 0 && form.status != 3"
v-model="detailsForm['PG_JL_HAMD-24_DF']"
type="number"
placeholder="请输入"
/>
</el-form-item>
@ -410,6 +424,7 @@
<el-input
:disabled="form.status != 0 && form.status != 3"
v-model="detailsForm['PG_JL_SAS_DF']"
type="number"
placeholder="请输入"
/>
</el-form-item>
@ -663,11 +678,26 @@
:is="componentsCode"
></component>
</el-dialog>
<!-- 人体成分报告 -->
<el-dialog
class="popup"
title="人体成分报告"
:visible.sync="humanBodyOpen"
width="640px"
append-to-body
>
<img width="560" :src="selectReportUrl" />
</el-dialog>
</div>
</template>
<script>
import { queryRecord, saveAidRecord } from "@/api/medicalFile";
import {
queryRecord,
saveAidRecord,
selectByMemberId,
selectReportByMemberId,
} from "@/api/medicalFile";
import { followupQuery } from "@/api/followupFile";
//
import TAPS from "./components/posture/TAPS"; // TAPS
@ -1177,6 +1207,9 @@ export default {
SFDL: [], //访
}, //
qzUrl: process.env.VUE_APP_API_QZURL, //
selectReportUrl: "",
humanBodyOpen: false,
};
},
created() {
@ -1187,6 +1220,68 @@ export default {
this.getFollowupQuery(); // 访
},
methods: {
//
getHumanBodyReport() {
selectReportByMemberId({
memberId: this.form.visitNumber,
}).then((res) => {
if (!res.data.id) {
this.$modal.msgError("暂无报告");
return;
}
this.humanBodyOpen = true;
this.selectReportUrl = `${this.qzUrl}acupuncture${res.data.fileName}`;
});
},
//
getHumanBody() {
selectByMemberId({
memberId: this.form.visitNumber,
}).then((res) => {
if (!res.data.id) {
this.$modal.msgError("暂无数据");
return;
}
this.$modal.msgSuccess("同步成功");
const {
weight, //
fat, //
bone, //
protein, //
water, //
muscle, //
smm, //
pbf, //
bmi, //
whr, //2
vfi, //
bodyAge, //
score, //
bodyType, //
lbm, //
} = res.data;
console.log("人体成分");
this.detailsForm.PG_RTCF_TZ = weight; //
this.detailsForm.PG_RTCF_QZTZ = lbm; //
this.detailsForm.PG_RTCF_JRL = muscle; //
this.detailsForm.PG_RTCF_TBW = water; // TBW
this.detailsForm.PG_RTCF_DBZ = protein; //
this.detailsForm.PG_RTCF_GZ = bone; // GZ
this.detailsForm.PG_RTCF_ZF = fat; //
this.detailsForm.PG_RTCF_PBF = pbf; //
this.detailsForm.PG_RTCF_GGJ = smm; //
this.detailsForm.PG_RTCF_BMI = bmi; // BMI
this.detailsForm.PG_RTCF_WHR = whr; // WHR
this.detailsForm.PG_RTCF_NZZFSP = vfi; //
// this.detailsForm.PG_RTCF_STGCFBFB = ""; //
this.detailsForm.PG_RTCF_TXLX = bodyType; //
this.detailsForm.PG_RTCF_STNL = bodyAge; //
this.detailsForm.PG_RTCF_JKPF = score; //
});
},
//
getzzffShow(_title) {
const { JBXX_ZYZD, JBXX_ZYZD_QT } = this.detailsForm;
if (_title == "肥胖症" && JBXX_ZYZD.includes("肥胖症")) {
@ -1298,7 +1393,7 @@ export default {
PG_RTCF_BMI: "", //BMI
PG_RTCF_WHR: "", //WHR
PG_RTCF_NZZFSP: "", //
PG_RTCF_STGCFBFB: "", //
PG_RTCF_STGCFBFB: "", //
PG_RTCF_TXLX: "", //
PG_RTCF_STNL: "", //
PG_RTCF_JKPF: "", //

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

@ -173,7 +173,6 @@
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column
fixed
label="门诊/住院"
align="center"
show-overflow-tooltip
@ -185,7 +184,6 @@
</template>
</el-table-column>
<el-table-column
fixed
label="门诊号/住院号"
align="center"
prop="visitNumber"
@ -193,7 +191,6 @@
min-width="180"
/>
<el-table-column
fixed
label="责任医生"
align="center"
prop="doctor"
@ -201,7 +198,6 @@
min-width="100"
/>
<el-table-column
fixed
label="主要诊断"
align="center"
prop="diagnosisName"
@ -209,7 +205,6 @@
min-width="200"
/>
<el-table-column
fixed
label="姓名"
align="center"
prop="name"
@ -350,11 +345,11 @@
label="操作"
align="center"
class-name="small-padding fixed-width"
width="200"
width="300"
>
<template slot-scope="scope">
<!-- :disabled="scope.row.status == 1" -->
<!-- <el-button
<el-button
:disabled="scope.row.status != 0 && scope.row.status != 3"
size="mini"
type="text"
icon="el-icon-edit"
@ -363,6 +358,7 @@
>修改</el-button
>
<el-button
:disabled="scope.row.status != 0 && scope.row.status != 3"
size="mini"
type="text"
icon="el-icon-delete"
@ -387,44 +383,12 @@
>随访记录</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"
@click="handleUpdate(scope.row)"
>修改</el-button
>
<el-button
:disabled="scope.row.status != 0 && scope.row.status != 3"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
>删除</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-tickets"
@click="handleDetails(scope.row)"
>档案详情</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-notebook-2"
@click="handleEecorde(scope.row)"
>随访记录</el-button
icon="el-icon-document-copy"
@click="handleReport(scope.row)"
v-hasPermi="['medicalFile:index:report']"
>评估报告单</el-button
>
<el-button
:disabled="scope.row.status != 0 && scope.row.status != 3"
@ -432,6 +396,7 @@
type="text"
icon="el-icon-s-promotion"
@click="handleExamine(scope.row, 1)"
v-hasPermi="['medicalFile:index:examine']"
>
提交审核
</el-button>
@ -442,6 +407,7 @@
type="text"
icon="el-icon-s-check"
@click="handleExamine(scope.row, 2)"
v-hasPermi="['medicalFile:index:pass']"
>
通过
</el-button>
@ -451,6 +417,7 @@
type="text"
icon="el-icon-s-check"
@click="handleExamine(scope.row, 3)"
v-hasPermi="['medicalFile:index:reject']"
>
驳回
</el-button>
@ -637,6 +604,7 @@ import {
queryRecord,
saveAidRecord,
queueAdd,
exportTreatmentPg,
} from "@/api/medicalFile";
import { getToken } from "@/utils/auth";
import { followupQuery } from "@/api/followupFile";
@ -645,6 +613,7 @@ export default {
dicts: ["sys_normal_disable", "sys_user_sex"],
data() {
return {
qzUrl: process.env.VUE_APP_API_QZURL, //
//
ethnicityList: [
{ label: "汉族", value: "01" },
@ -1458,6 +1427,12 @@ export default {
this.title = "修改诊疗档案";
this.form = JSON.parse(JSON.stringify(row));
},
//
handleReport(row) {
exportTreatmentPg({ treatmentId: row.id }).then((res) => {
window.open(`${process.env.VUE_APP_API_QZURL}acupuncture${res.data}`);
});
},
/** 提交审核 */
handleExamine(row, _status) {
let form = JSON.parse(JSON.stringify(row));
@ -1465,8 +1440,10 @@ export default {
...JSON.parse(JSON.stringify(row)),
};
form.status = _status;
let title = this.status[_status];
title = title == "待审核" ? "提交" : title;
this.$modal
.confirm(`是否确认提交当前选择的数据(${row.name})?`)
.confirm(`是否确认${title}当前选择的数据(${row.name})?`)
.then(function () {
return treatmentUpd(form);
})

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

@ -241,7 +241,7 @@ export default {
Original(_url) {
this.imgUrl = [];
if (_url) {
this.imgUrl.push(this.imgPrefix + _url);
this.imgUrl.push(this.qzUrl + "/acupuncture" + _url);
}
this.$refs.preview.clickHandler();
},

12
acupuncture-后台/src/api/medicalFile.js

@ -39,7 +39,7 @@ export function queryRecord(data) {
method: "post",
data: data,
});
}// 档案详情
} // 档案详情
export function saveAidRecord(data) {
return request({
url: "/admin/treatment/saveAidRecord",
@ -55,4 +55,12 @@ export function queueAdd(data) {
method: "post",
data: data,
});
}
}
// 评估报告单
export function exportTreatmentPg(data) {
return request({
url: "/admin/treatment/exportTreatmentPg",
method: "post",
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: "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,
});
}

21
acupuncture-后台/src/views/indexCom/JM.vue

@ -16,26 +16,27 @@
<div style="flex: 1; margin-right: 20px">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">分布</span>
<span class="header-title">分布</span>
<div class="dis"></div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="system" style="width: 100%"></div>
<div id="physique" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1; margin-right: 20px">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">分布</span>
<span class="header-title">分布</span>
<div class="dis"></div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="physique" style="width: 100%"></div>
<div id="system" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1; margin-right: 20px">
<!-- <div style="flex: 1; margin-right: 20px">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">体态评估TAPS</span>
@ -45,8 +46,8 @@
<div id="posture" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1; margin-right: 20px">
</div> -->
<div style="flex: 1">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">失眠评估PHQ-9</span>
@ -57,7 +58,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 +68,7 @@
<div id="anxiety" style="width: 100%"></div>
</div>
</el-card>
</div>
</div> -->
</div>
</div>
<!-- <div class="app-container">
@ -413,7 +414,7 @@ export default {
display: inline-block;
height: 20px;
width: 6px;
background: #4f8bff;
background: #70483e;
margin-right: 10px;
border-radius: 8px;
}

1
acupuncture-后台/src/views/medicalFile/components/posture/PHQ-9.vue → acupuncture-后台/src/views/medicalFile/components/insomnia/PHQ-9.vue

@ -141,7 +141,6 @@ export default {
};
},
created() {
console.log("this.scaleCode", this.scaleCode);
this.treatmentId = this.$route.query.treatmentId; // id
let scaleData = localStorage.getItem("scaleData"); //
// scaleData

1
acupuncture-后台/src/views/medicalFile/components/posture/PSQI.vue → acupuncture-后台/src/views/medicalFile/components/insomnia/PSQI.vue

@ -123,7 +123,6 @@ export default {
if (!this.scaleData[this.treatmentId]) {
this.scaleData[this.treatmentId] = {};
}
this.form = this.scaleData[this.treatmentId][this.scaleCode] || {}; // form
},
methods: {

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

394
acupuncture-后台/src/views/medicalFile/components/posture/SRS22.vue

@ -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;
// / 59121518
// 1281117
// / 46101419
// 37131620
// 2122
// 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>

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>

1266
acupuncture-后台/src/views/medicalFile/details.vue

File diff suppressed because it is too large

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

@ -116,13 +116,14 @@
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['medicalFile:index:add']"
>新增</el-button
>
</el-col>
@ -134,18 +135,21 @@
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['medicalFile:index:del']"
>删除</el-button
>
</el-col>
<el-col :span="1.5">
</el-col> -->
<!-- <el-col :span="1.5">
<el-button
type="info"
plain
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
@ -154,9 +158,10 @@
icon="el-icon-upload2"
size="mini"
@click="handleImport"
v-hasPermi="['medicalFile:index:import']"
>导入</el-button
>
</el-col>
</el-col> -->
<el-col :span="1.5">
<el-button
type="warning"
@ -164,6 +169,7 @@
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['medicalFile:index:export']"
>导出</el-button
>
</el-col>
@ -180,6 +186,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="姓名"
@ -188,7 +230,6 @@
min-width="100"
/>
<el-table-column
fixed
label="性别"
align="center"
prop="gender"
@ -201,7 +242,6 @@
</template>
</el-table-column>
<el-table-column
fixed
label="年龄"
align="center"
prop="age"
@ -290,20 +330,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"
@ -339,40 +366,30 @@
}}</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="操作"
align="center"
class-name="small-padding fixed-width"
width="200"
width="300"
>
<template slot-scope="scope">
<!-- <el-button
:disabled="scope.row.status != 0 && scope.row.status != 3"
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['medicalFile:index:edit']"
>修改</el-button
>
<el-button
:disabled="scope.row.status != 0 && scope.row.status != 3"
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['medicalFile:index:del']"
>删除</el-button
> -->
<el-button
@ -380,6 +397,7 @@
type="text"
icon="el-icon-tickets"
@click="handleDetails(scope.row)"
v-hasPermi="['medicalFile:index:details']"
>档案详情</el-button
>
<el-button
@ -387,38 +405,48 @@
type="text"
icon="el-icon-notebook-2"
@click="handleEecorde(scope.row)"
v-hasPermi="['medicalFile:index:ecorde']"
>随访记录</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-document-copy"
@click="handleReport(scope.row)"
v-hasPermi="['medicalFile:index:report']"
>评估报告单</el-button
>
<!-- <el-button
:disabled="scope.row.status != 0"
: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> -->
<!-- 审核 -->
<!-- <div>
<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>
</div> -->
<!-- <el-button
:disabled="scope.row.status != 1"
size="mini"
type="text"
icon="el-icon-s-check"
@click="handleExamine(scope.row, 2)"
v-hasPermi="['medicalFile:index:pass']"
>
通过
</el-button>
<el-button
:disabled="scope.row.status != 1"
size="mini"
type="text"
icon="el-icon-s-check"
@click="handleExamine(scope.row, 3)"
v-hasPermi="['medicalFile:index:reject']"
>
驳回
</el-button> -->
</template>
</el-table-column>
</el-table>
@ -466,17 +494,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="请选择">
@ -535,7 +572,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"
@ -545,7 +582,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>
@ -593,6 +630,7 @@ import {
queryRecord,
saveAidRecord,
queueAdd,
exportTreatmentPg,
} from "@/api/medicalFile";
import { tenantsList } from "@/api/member";
import { getToken } from "@/utils/auth";
@ -602,7 +640,67 @@ export default {
dicts: ["sys_normal_disable", "sys_user_sex"],
data() {
return {
tenantsListData: [], //
tenantsListData: [],
qzUrl: process.env.VUE_APP_API_QZURL, //
//
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: "住院",
@ -1232,7 +1330,6 @@ export default {
let idCard = this.$route.query.idCard;
this.queryParams.param.keywords = idCard || "";
this.getList();
this.getFollowupQuery(); // 访
this.getTenantsList(); //
},
methods: {
@ -1326,7 +1423,6 @@ export default {
doctor: "",
status: 0,
queueIdList: [],
tenantId: "",
};
this.resetForm("form");
},
@ -1367,24 +1463,23 @@ 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));
},
//
handleReport(row) {
exportTreatmentPg({ treatmentId: row.id }).then((res) => {
window.open(`${process.env.VUE_APP_API_QZURL}acupuncture${res.data}`);
});
},
/** 提交审核 */
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;
let title = this.status[_status];
this.$modal
.confirm(`是否确认${title}当前选择的数据(${row.name})?`)
.confirm(`是否确认提交当前选择的数据(${row.name})?`)
.then(function () {
return treatmentUpd(form);
})

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.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…
Cancel
Save