Compare commits

...

7 Commits

  1. BIN
      web_admin/adminapi.zip
  2. 2
      web_admin/adminapi/index.html
  3. BIN
      web_admin/adminapi/index.html.gz
  4. 9
      web_admin/src/api/his/evaluation.js
  5. 38
      web_admin/src/api/reportTemplate/index.js
  6. 4
      web_admin/src/views/his/Evaluation/index.vue
  7. 116
      web_admin/src/views/his/Report/index.vue
  8. 9
      web_admin/src/views/index.vue
  9. BIN
      web_admin/src/views/report.zip
  10. 51
      web_admin/src/views/report/view.vue
  11. 558
      web_admin/src/views/reportTemplate/reportIndex.vue
  12. 4
      web_admin/vue.config.js
  13. 10
      web_client/src/api/ams.js
  14. 1
      web_client/src/views/Patient/config.js
  15. 351
      web_client/src/views/history/components/scaleInfor.vue
  16. 342
      web_client/src/views/history/components/scaleInforCopy.vue
  17. 4
      web_client/vue.config.js

BIN
web_admin/adminapi.zip

Binary file not shown.

2
web_admin/adminapi/index.html

File diff suppressed because one or more lines are too long

BIN
web_admin/adminapi/index.html.gz

Binary file not shown.

9
web_admin/src/api/his/evaluation.js

@ -95,6 +95,7 @@ export function positiveExport(data) {
data: data,
});
}
// 详情接口
export function queryReport(data) {
return request({
url: "/rms/queryReport",
@ -102,3 +103,11 @@ export function queryReport(data) {
data: data,
});
}
// 测评列表
export function queryEvaluation(data) {
return request({
url: "/rms/queryEvaluation",
method: "post",
data: data,
});
}

38
web_admin/src/api/reportTemplate/index.js

@ -45,3 +45,41 @@ export function reportConfDel(data) {
data: data,
});
}
// 报告单模版
export function reportTemplateList(data) {
return request({
url: "reportTemplateAll/list",
method: "post",
data: data,
});
}
export function reportTemplateAdd(data) {
return request({
url: "reportTemplateAll/add",
method: "post",
data: data,
});
}
export function reportTemplateDel(data) {
return request({
url: "reportTemplateAll/del",
method: "post",
data: data,
});
}
// 查看报告模板详情(不要token)
export function reportTemplateQuery(data) {
return request({
url: "reportTemplateAll/query",
method: "post",
data: data,
});
}
// 导出所有报告模板(不要token)
export function reportExportAll(data) {
return request({
url: "report/exportAll",
method: "post",
data: data,
});
}

4
web_admin/src/views/his/Evaluation/index.vue

@ -235,7 +235,7 @@
let { apiUrl, proxyUrl } = require("@/config/settings");
import { careers, pasis } from "./ReportDetail/config.js";
import {
queryReport,
queryEvaluation,
queryReportDetail,
updateScaleInitialImpression,
exportReport,
@ -351,7 +351,7 @@ export default {
this.queryParams.param.beginTime = this.queryParams.param.time[0];
this.queryParams.param.endTime = this.queryParams.param.time[1];
}
queryReport(this.queryParams).then((res) => {
queryEvaluation(this.queryParams).then((res) => {
console.log("res: ", res);
this.loading = false;
this.evaluationList = [...res.data.list];

116
web_admin/src/views/his/Report/index.vue

@ -91,28 +91,6 @@
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<!-- <el-col :span="1.5" v-hasPermi="['tms:evaluation:remove']">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除
</el-button>
</el-col> -->
<!-- <el-col :span="1.5" v-hasPermi="['tms:evaluation:report']">
<el-button
type="primary"
plain
icon="el-icon-document"
:disabled="single"
size="mini"
@click="handleReport"
>查看测评报告
</el-button>
</el-col> -->
<el-col :span="1.5" v-hasPermi="['tms:evaluation:export']">
<el-button
type="warning"
@ -240,56 +218,83 @@
</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" width="300" fixed="right">
<el-table-column label="操作" align="center" width="200" fixed="right">
<template slot-scope="scope">
<el-popover placement="bottom" trigger="click">
<el-button
slot="reference"
size="mini"
type="text"
icon="el-icon-upload2"
@click="handlePatientExport('医生版', true, scope.row)"
@click="getReportTemplate('PERSION')"
>
导出医生版
导出个人版
</el-button>
<div v-loading="reportTemplateLoading">
<div v-for="(item, index) in reportTemplateList" :key="index">
<el-button
@click="handleReportTemplate(scope.row, item.id, item.type)"
size="mini"
type="text"
icon="el-icon-printer"
@click="handlePrinting('医生版', scope.row)"
>
打印医生版
{{ item.name }}{{ item.type ? "pdf" : "word" }}
</el-button>
</div>
<div v-if="!reportTemplateList.length" style="text-align: center">
暂无报告模板
</div>
</div>
</el-popover>
<el-popover placement="bottom" trigger="click">
<el-button
slot="reference"
size="mini"
type="text"
icon="el-icon-upload2"
@click="handlePatientExport('阳性版', true, scope.row)"
@click="getReportTemplate('DOCTOR')"
>
导出阳性版
导出医生版
</el-button>
<div v-loading="reportTemplateLoading">
<div v-for="(item, index) in reportTemplateList" :key="index">
<el-button
@click="handleReportTemplate(scope.row, item.id, item.type)"
size="mini"
type="text"
icon="el-icon-printer"
@click="handlePrinting('阳性版', scope.row)"
>
打印阳性版
{{ item.name }}{{ item.type ? "pdf" : "word" }}
</el-button>
</div>
<div v-if="!reportTemplateList.length" style="text-align: center">
暂无报告模板
</div>
</div>
</el-popover>
<el-popover placement="bottom" trigger="click">
<el-button
slot="reference"
size="mini"
type="text"
icon="el-icon-upload2"
@click="handlePatientExport('个人版', true, scope.row)"
@click="getReportTemplate('POSITIVE')"
>
导出个人版
导出阳性
</el-button>
<div v-loading="reportTemplateLoading">
<div v-for="(item, index) in reportTemplateList" :key="index">
<el-button
@click="handleReportTemplate(scope.row, item.id, item.type)"
size="mini"
type="text"
icon="el-icon-printer"
@click="handlePrinting('个人版', scope.row)"
>
打印个人版
{{ item.name }}{{ item.type ? "pdf" : "word" }}
</el-button>
</div>
<div v-if="!reportTemplateList.length" style="text-align: center">
暂无报告模板
</div>
</div>
</el-popover>
<el-button
size="mini"
type="text"
@ -385,12 +390,17 @@
<script>
let { apiUrl, proxyUrl } = require("@/config/settings");
import { careers, pasis } from "./ReportDetail/config.js";
import {
reportTemplateQuery,
reportExportAll,
} from "@/api/reportTemplate/index.js";
import {
queryReportList,
queryReportDetail,
updateScaleInitialImpression,
exportReport,
personalExport,
queryReport,
doctorExport,
positiveExport,
} from "@/api/his/evaluation";
@ -464,6 +474,8 @@ export default {
deptOptions: [], //
versionList: [], //
workloadList: [], //
reportTemplateList: [], //
reportTemplateLoading: false, //
};
},
created() {
@ -478,6 +490,32 @@ export default {
this.getuserStatistics();
},
methods: {
//
getReportTemplate(_type) {
reportTemplateQuery({
pageNum: -1,
param: { code: _type },
}).then((response) => {
this.reportTemplateLoading = false;
this.reportTemplateList = response.data || [];
});
},
//
handleReportTemplate(row, id, type) {
this.loading = true;
reportExportAll({
templateId: id,
reportId: row.reportId,
})
.then((res) => {
this.loading = false;
let path = type ? res.data.path : res.data.word;
window.open(this.qzUrl + path);
})
.catch(() => {
this.loading = false;
});
},
//
getuserStatistics() {
userStatistics({}).then((res) => {
@ -628,7 +666,7 @@ export default {
const param = {
evaluationId: evaluationId || this.ids[0],
};
queryReportDetail(param).then((res) => {
queryReport(param).then((res) => {
console.log("res: ", res);
this.reportDetail1 = res.data;
this.reportDetail1.evaluationId = param.evaluationId;

9
web_admin/src/views/index.vue

@ -186,14 +186,14 @@
</div>
</div>
</div>
<div class="statistics-tap">
<!-- <div class="statistics-tap">
<div class="header-right-button" @click="handleClick('数字看板')">
数字看板
</div>
<div class="header-right-button" @click="handleClick('大屏统计')">
大屏统计
</div>
</div>
</div> -->
</div>
</template>
@ -282,11 +282,12 @@ export default {
handleClick(type) {
if (type == "数字看板") {
this.$router.push({
path: "/largeScreen",
path: "/largeScreen?deptId=" + localStorage.getItem("hospitalId"),
});
} else if (type == "大屏统计") {
this.$router.push({
path: "/bigScreenStatistics",
path:
"/bigScreenStatistics?deptId=" + localStorage.getItem("hospitalId"),
});
}
},

BIN
web_admin/src/views/report.zip

Binary file not shown.

51
web_admin/src/views/report/view.vue

@ -55,14 +55,30 @@
/>
<el-table-column label="操作" align="center" fixed="right">
<template slot-scope="scope">
<el-popover placement="bottom" trigger="click">
<el-button
slot="reference"
size="mini"
type="text"
icon="el-icon-document"
@click="handleReport(scope.row)"
>
查看报告单
</el-button>
<div>
<div v-for="(item, index) in reportTemplateList" :key="index">
<el-button
@click="handleReportTemplate(scope.row, item.id, item.type)"
size="mini"
type="text"
>
{{ item.name }}{{ item.type ? "pdf" : "word" }}
</el-button>
</div>
<div v-if="!reportTemplateList.length" style="text-align: center">
暂无报告模板
</div>
</div>
</el-popover>
</template>
</el-table-column>
</el-table>
@ -79,7 +95,10 @@
<script>
import { exportPdf, queryPdfUrl } from "@/api/report.js";
import {
reportTemplateQuery,
reportExportAll,
} from "@/api/reportTemplate/index.js";
export default {
name: "Notice",
@ -95,7 +114,9 @@ export default {
pageSize: 10,
param: {},
},
reportTemplateList: [],
qzUrl: process.env.VUE_APP_BASE_API,
templateLoading: false,
};
},
created() {
@ -108,8 +129,34 @@ export default {
};
this.getList();
this.getReportTemplate();
},
methods: {
//
getReportTemplate() {
reportTemplateQuery({
pageNum: -1,
param: { code: "DOCTOR" },
}).then((response) => {
this.reportTemplateList = response.data || [];
});
},
//
handleReportTemplate(row, id, type) {
this.loading = true;
reportExportAll({
templateId: id,
reportId: row.reportId,
})
.then((res) => {
this.loading = false;
let path = type ? res.data.path : res.data.word;
window.open(this.qzUrl + path);
})
.catch(() => {
this.loading = false;
});
},
//
handleReport(row) {
queryPdfUrl({

558
web_admin/src/views/reportTemplate/reportIndex.vue

@ -0,0 +1,558 @@
<template>
<div class="app-container">
<el-form
:model="queryParams"
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
>
<el-form-item label="报告单版本" prop="code">
<el-select
v-model="queryParams.param.code"
filterable
placeholder="请选择"
style="width: 100%"
clearable
>
<el-option
v-for="item in typeList"
:key="item.value"
:label="item.lable"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="导出类型" prop="type">
<el-select
v-model="queryParams.param.type"
filterable
placeholder="请选择"
style="width: 100%"
clearable
>
<el-option
v-for="item in versionList"
:key="item.value"
:label="item.lable"
:value="item.value"
>
</el-option>
</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>
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row>
<el-table
v-loading="loading"
:data="roleList"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="报告单版本" prop="code">
<template slot-scope="scope">
<span v-if="scope.row.code === 'PERSION'">个人版</span>
<span v-if="scope.row.code === 'DOCTOR'">医生版</span>
<span v-if="scope.row.code === 'POSITIVE'">阳性版</span>
</template>
</el-table-column>
<el-table-column label="报告单名称" prop="name" />
<el-table-column label="导出类型" prop="type">
<template slot-scope="scope">
<span v-if="scope.row.type === 0">word</span>
<span v-if="scope.row.type === 1">pdf</span>
</template>
</el-table-column>
<el-table-column label="创建人" prop="createBy" width="100" />
<el-table-column label="创建时间" align="center" prop="createTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
>
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-download"
@click="handleDownload(scope.row)"
>
下载报告单模板
</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:role:edit']"
>修改</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:role:remove']"
>删除</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 :title="title" :visible.sync="open" width="640px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="报告单版本" prop="code">
<el-select
v-model="form.code"
filterable
placeholder="请选择"
style="width: 100%"
>
<el-option
v-for="item in typeList"
:key="item.value"
:label="item.lable"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="报告单名称" prop="code">
<el-input v-model="form.name" placeholder="请输入"></el-input>
</el-form-item>
<el-form-item label="导出类型" prop="type">
<el-select
v-model="form.type"
filterable
placeholder="请选择"
style="width: 100%"
:multiple="title == '添加模板' ? true : false"
>
<el-option
v-for="item in versionList"
:key="item.value"
:label="item.lable"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="上传文件" prop="accessUrl">
<el-upload
:limit="1"
class="avatar-uploader wj-uploader"
:headers="headers"
:action="uploadFileUrl"
accept=".docx"
:before-upload="handleBeforePdfUpload"
:show-file-list="true"
:on-success="handleUploadPdfAdd"
:file-list="fileList"
:on-remove="handleUploadRemove"
:data="{ type: 2 }"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">
将文件拖到此处
<em>点击上传</em>
</div>
</el-upload>
</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>
</div>
</template>
<script>
import {
reportTemplateList,
reportTemplateAdd,
reportTemplateDel,
} from "@/api/reportTemplate/index.js";
import { getToken } from "@/utils/auth";
import { getScaleList } from "@/api/his/scale";
const settings = require("@/config/settings");
export default {
name: "Role",
data() {
var wordPath = (rule, value, callback) => {
if (!this.form.accessUrl) {
callback(new Error("文件不能为空"));
} else {
callback(); //
}
};
return {
reportList: [],
typeList: [
{
lable: "个人版",
value: "PERSION",
},
{
lable: "医生版",
value: "DOCTOR",
},
{
lable: "阳性版",
value: "POSITIVE",
},
],
versionList: [
{
lable: "word",
value: 0,
},
{
lable: "pdf",
value: 1,
},
],
headers: {
Authorization: "Bearer " + getToken(),
deptId: localStorage.getItem("hospitalId"),
},
fileList: [],
uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", //
//
loading: true,
//
ids: [],
//
single: true,
//
multiple: true,
//
showSearch: true,
//
total: 0,
//
roleList: [],
//
title: "",
//
open: false,
//
queryParams: {
pageNum: 1,
pageSize: 10,
param: { code: "", name: "" },
},
//
form: {
name: "",
code: "",
accessUrl: "",
type: "",
},
//
rules: {
name: [{ required: true, message: "名称不能为空", trigger: "blur" }],
type: [{ required: true, message: "类型不能为空", trigger: "change" }],
code: [{ required: true, message: "版本不能为空", trigger: "blur" }],
accessUrl: [{ required: true, validator: wordPath, trigger: "change" }],
},
};
},
created() {
this.queryScaleList();
this.getList();
},
methods: {
handleDownload(_item) {
window.open(settings.apiUrl + _item.accessUrl);
},
scaleChange(_item) {
this.form.name = _item.name;
this.form.code = _item.code;
},
/** 查询量表列表 */
queryScaleList() {
getScaleList({ pageNum: -1 }).then((response) => {
this.scaleList = response.data;
});
},
// -
handleBeforeUpload(file) {
const isLt2M = file.size / 1024 / 1024 < 100;
//
if (!isLt2M) {
this.$message.error("上传文件大小不能超过 100MB!");
}
return isLt2M;
},
// -
handleBeforePdfUpload(file) {
const fileSuffix = file.name.substring(file.name.lastIndexOf(".") + 1);
const whiteList = ["docx"];
if (whiteList.indexOf(fileSuffix) === -1) {
this.$message.error("上传文件只能是 docx");
return false;
}
},
handleUploadRemove() {
console.log("删除文件列表");
this.form.accessUrl = "";
this.form.url = "";
},
// - pdg
handleUploadPdfAdd(res) {
this.form.accessUrl = res.fileName;
this.form.url = res.fileName;
},
/** 查询角色列表 */
getList() {
this.loading = true;
reportTemplateList(this.queryParams).then((response) => {
this.roleList = response.data.list;
this.total = response.data.total;
this.loading = false;
});
},
//
cancel() {
this.open = false;
this.reset();
},
//
reset() {
this.form = {
name: "",
code: "",
accessUrl: "",
};
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.queryParams.param = {
code: "",
name: "",
};
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 = "添加模板";
this.fileList = [];
},
/** 修改按钮操作 */
handleUpdate(row) {
this.title = "修改模板";
this.fileList = [];
const { id, url, accessUrl, name, code, type } = JSON.parse(
JSON.stringify(row)
);
this.form = {
id,
url,
accessUrl,
name,
code,
type,
};
this.open = true;
if (!this.form.accessUrl) return;
let wordurl = this.form.accessUrl;
let slic = wordurl.slice(wordurl.lastIndexOf("/") + 1);
this.fileList = [{ name: slic, url: this.form.accessUrl }];
},
/** 提交按钮 */
submitForm: function () {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != undefined) {
reportTemplateAdd(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
let data = JSON.parse(JSON.stringify(this.form));
if (data.type.length >= 2) {
data.type = 2;
} else {
data.type = data.type[0];
}
reportTemplateAdd(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 提交按钮(数据权限) */
submitDataScope: function () {
if (this.form.roleId != undefined) {
this.form.deptIds = this.getDeptAllCheckedKeys();
dataScope(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.openDataScope = false;
this.getList();
});
}
},
/** 删除按钮操作 */
handleDelete(row) {
const roleIds = row.id || this.ids;
this.$modal
.confirm("是否确认删?")
.then(function () {
return delRole(roleIds);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
})
.catch(() => {});
},
handleDelete(row) {
try {
const postIds = row.id ? [row.id] : this.ids;
this.$modal
.confirm("是否确认删除数据?")
.then(function () {
return;
})
.then(() => {
reportTemplateDel({ idList: postIds }).then((response) => {
this.$modal.msgSuccess("删除成功");
this.open = false;
this.getList();
});
})
.catch((err) => {
console.log("err1: ", err);
});
} catch (err) {
console.log("err2: ", err);
}
},
/** 导出按钮操作 */
handleExport() {
this.download(
"system/role/export",
{
...this.queryParams,
},
`role_${new Date().getTime()}.xlsx`
);
},
},
};
</script>
<style>
.wj-uploader .el-icon-upload:before {
font-size: 100px;
}
.wj-uploader .el-upload {
display: flex;
align-content: center;
justify-content: center;
flex-wrap: wrap;
}
.wj-uploader .el-upload__text {
line-height: 20px;
width: 100% !important;
}
.avatar-uploader {
height: 180px;
}
.avatar-uploader .el-upload {
border: 1px dashed #d9d9d9 !important;
border-radius: 6px;
cursor: pointer;
position: relative;
overflow: hidden;
width: 100% !important;
height: 180px !important;
line-height: 150px;
}
.el-upload-dragger,
.el-upload {
width: 100% !important;
}
.el-upload-list__item {
transition: none !important;
}
.el-upload-list__item:first-child {
margin-top: 0;
}
</style>

4
web_admin/vue.config.js

@ -37,10 +37,10 @@ module.exports = {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API]: {
// target: `http://localhost:8080`,
target: "http://192.168.1.136:19330",
// target: "http://192.168.1.136:19330",
// target: "https://nnzjpt.ylinno.com/ruisiCgaAdmin/",
// target: "https://www.ylinno.com/cga/v2/api/admin/",
// target: "http://113.45.159.249:59001/cga/v2/api/admin/",
target: "http://113.45.159.249:59001/cga/v2/api/admin/",
changeOrigin: true,
pathRewrite: {
["^" + process.env.VUE_APP_BASE_API]: "",

10
web_client/src/api/ams.js

@ -46,9 +46,7 @@ export const doctorExport = (params) =>
// 导出报告单(阳性版)
export const positiveExport = (params) =>
axios.post(`${proxyUrl}/report/exportYx`, params);
// 导出报告单(整)
export const reportExportAll = (params) =>
axios.post(`${proxyUrl}/report/exportAll`, params);
// 导出指定量表
export const exportWorkingScore = (params) =>
axios.post(`${rms}/exportWorkingScore`, params);
@ -225,3 +223,9 @@ export const deletePatient = (params) =>
axios.post(`${proxyUrl}/ems/delete`, params);
// 撤回评估
export const revok = (params) => axios.post(`${proxyUrl}/ems/revoke`, params);
// 查询报告单模版
export const reportTemplateAllQuery = (params) =>
axios.post(`${proxyUrl}/reportTemplateAll/query`, params);
// 导出报告单(整)
export const reportExportAll = (params) =>
axios.post(`${proxyUrl}/report/exportAll`, params);

1
web_client/src/views/Patient/config.js

@ -67,6 +67,7 @@ export const educationalStates = [
{ id: 4, name: "高中/技校/中专" },
{ id: 5, name: "大专/大学" },
{ id: 6, name: "研究生及以上" },
{ id: 7, name: "其他" },
];
// 职业 国家公务员、专业技术人员、职员、企业管理人员、工人、农民、学生、现役军人、自由职业者、个体经营者、无业人员、退(离)休人员、其他)、
export const careers = [

351
web_client/src/views/history/components/scaleInfor.vue

@ -6,7 +6,7 @@
<div style="height: 100%" class="div-box">
<div v-if="reportDetail1">
<!-- 患者信息 -->
<el-card class="box-card" style="">
<el-card class="box-card" style="padding-top: 0">
<div slot="header">
<div class="clearfix">
<h1 class="box-card-header">患者信息</h1>
@ -19,65 +19,29 @@
<i class="el-icon-document-checked"></i>
保存修改
</div>
<!-- <div
class="div-derive cardRig-but"
style="width: 130px; margin-right: 10px"
@click="handleExport('合并版', true)"
>
<i class="el-icon-upload2"></i>导出合并版
</div>
<div
v-if="!isAPP"
class="div-print cardRig-but"
@click="handlePrinting('合并版')"
style="width: 130px; margin-right: 10px"
>
<i class="el-icon-printer"></i>打印合并版
</div> -->
<div
class="div-derive cardRig-but"
style="width: 130px; margin-right: 10px"
@click="handleExport('医生版', true)"
>
<i class="el-icon-upload2"></i>导出医生版
</div>
<div
v-if="!isAPP"
style="width: 130px; margin-right: 10px"
class="div-print cardRig-but"
@click="handlePrinting('医生版', true)"
>
<i class="el-icon-printer"></i>打印医生版
</div>
<div v-for="(r, rin) in reportButList" :key="rin">
<el-popover placement="bottom" trigger="click">
<div
slot="reference"
class="div-derive cardRig-but"
style="width: 130px; margin-right: 10px"
@click="handleExport('阳性版', true)"
@click="handleReportQuery(r.code, r.type)"
>
<i class="el-icon-upload2"></i>导出阳性版
<i
:class="r.type ? 'el-icon-printer' : 'el-icon-upload2'"
></i>
{{ r.type ? "打印" : "导出" }}{{ r.lable }}
</div>
<div v-loading="loading">
<div
v-if="!isAPP"
style="width: 130px; margin-right: 10px"
class="div-print cardRig-but"
@click="handlePrinting('阳性版')"
v-for="(item, index) in reportTemplateList"
:key="index"
@click="handleReportTemplate(item.id, item.type)"
class="cardRig-but cardRig-but1"
>
<i class="el-icon-printer"></i>打印阳性版
{{ item.name }}{{ item.type ? "pdf" : "word" }}
</div>
<div
class="div-derive cardRig-but"
style="width: 130px; margin-right: 10px"
@click="handleExport('个人版', true)"
>
<i class="el-icon-upload2"></i>导出个人版
</div>
<div
v-if="!isAPP"
class="div-print cardRig-but"
@click="handlePrinting('个人版')"
style="width: 130px"
>
<i class="el-icon-printer"></i>打印个人版
</el-popover>
</div>
</div>
</div>
@ -252,39 +216,6 @@
:index="index"
:leftShow="leftShow"
/>
<!-- 初步印象 -->
<!-- <div style="margin-top: 20px">
<div class="card-header" style="margin-bottom: 10px">
<div class="card-header-left">
<h1 style="line-height: 44px">初步印象</h1>
</div>
<div
class="div-edit"
@click="handleEdit(item)"
v-if="item.isEdit && !leftShow"
>
<a-icon type="edit" style="color: #10b77f; font-size: 22px" />
</div>
<div v-if="!item.isEdit">
<a-icon
type="check-circle"
style="font-size: 40px; color: #5cc0be"
@click="handleSubmit(item)"
/>
</div>
</div>
<a-textarea
:disabled="item.isEdit"
style="
background: #f6f6f6 !important;
font-size: 16px;
padding: 10px !important;
line-height: 30px;
"
v-model="item.impression"
:auto-size="{ minRows: 3, maxRows: 5 }"
/>
</div> -->
</el-card>
<patientMark :reportDetail1="reportDetail1" :disab="true"></patientMark>
<div style="height: 1px"></div>
@ -307,21 +238,6 @@
:id="'reportPartIframe' + timestamp"
style="display: none"
></iframe>
<el-dialog
title="医生签名"
:visible.sync="open"
width="50%"
append-to-body
class="popup"
>
<signatureVue
v-if="open"
ref="closeDialog1"
@close="closeDialog1"
@handleSing="handleSing"
>
</signatureVue>
</el-dialog>
</div>
</switchingSlip>
</template>
@ -343,6 +259,7 @@ import {
positiveExport,
icdQuery,
reportExportAll,
reportTemplateAllQuery,
} from "api/ams";
import {
pasis as pasisConfig,
@ -363,11 +280,11 @@ export default {
props: [],
data() {
return {
loading: false,
timestamp: "",
type: "",
apiUrl: apiUrl,
open: false,
value: "",
pasisConfig: pasisConfig,
careers: careers,
clinical: clinical,
@ -375,20 +292,44 @@ export default {
isEdit: true,
reportDetail1: null,
leftShow: false,
signData: {},
reportPath: "",
icdList: [],
isAPP: JSON.parse(localStorage.getItem("isAndroid")),
};
reportButList: [
{
lable: "个人版",
type: 0, //
code: "PERSION",
},
{
lable: "个人版",
type: 1, //
code: "PERSION",
},
{
lable: "医生版",
type: 0,
code: "DOCTOR",
},
{
lable: "医生版",
type: 1,
code: "DOCTOR",
},
watch: {
// reportDetail(newVal, oldVal) {
// this.reportDetail1 = newVal;
// this.reportDetail1.patient.isEdit = true;
// this.reportDetail1.scores.forEach((item) => {
// item.isEdit = true;
// });
// },
{
lable: "阳性版",
type: 0,
code: "POSITIVE",
},
{
lable: "医生版",
type: 1,
code: "POSITIVE",
},
],
reportTemplateList: [],
exportType: "",
};
},
computed: {
...mapState("user", ["route", "query"]),
@ -400,21 +341,17 @@ export default {
if (this.$route.query.show) {
this.leftShow = true;
}
console.log("this.isAPP", this.isAPP);
if (this.isAPP) {
this.reportButList = this.reportButList.filter((i) => i.type != 1);
console.log(" this.reportButList ", this.reportButList );
}
},
methods: {
...mapMutations("ht", [
"setReportId",
"setQuestion",
"setInfoAudo",
"setInfoPath",
"setAudioPathCopy",
"setSpecifyJump",
"setEvaluationPath",
]),
...mapMutations("user", ["setReportData", "setReportWriteAble"]),
//
async geticdQuery() {
console.log("icdQuery");
let res = await icdQuery();
const { code, msg, data } = res;
if (code === 200) {
@ -424,72 +361,51 @@ export default {
handleBack() {
this.$router.go(-1);
},
//
async handleExport(_type, _printFlat) {
this.type = _type;
let params = {
//
async handleReportQuery(code, type) {
this.exportType = type;
this.loading = true;
let res = await reportTemplateAllQuery({ code });
if (res.code === 200) {
this.reportTemplateList = res.data || [];
}
this.loading = false;
},
//
async handleReportTemplate(templateId, type) {
let res = await reportExportAll({
templateId,
evaluationId: this.reportDetail1.patient.evaluationId,
reportId: this.reportDetail1.patient.id,
signId: this.signData.signId,
};
let res = "";
if (_type === "医生版") {
res = await doctorExport(params);
} else if (_type === "个人版") {
res = await personalExport(params);
} else if (_type === "阳性版") {
res = await positiveExport(params);
} else if (_type === "合并版") {
res = await reportExportAll(params);
}
const { code, msg, data } = res;
if (code === 200) {
// true
if (_printFlat) {
//
// window.open(this.apiUrl + data.path);
});
if (res.code === 200) {
let path = type ? res.data.path : res.data.word;
//
this.$download(this.apiUrl + data.path);
if (!this.exportType) {
this.$download(this.apiUrl + path);
} else {
this.open = false;
this.timestamp = new Date().getTime();
setTimeout(() => {
this.handleInvoke(
`${this.apiUrl}${data.path}?time${new Date().getTime()}`,
`${this.apiUrl}${path}?time${new Date().getTime()}`,
);
}, 500);
}
this.$forceUpdate();
} else {
this.$message.error(msg);
}
},
//
handleSing(_singData) {
this.signData = _singData;
this.handleExport(this.type);
},
//
closeDialog1(params) {
const file = params;
var form = new FormData();
form.append("file", file);
uploadfile(form).then(async (res) => {
if (res.code === 200) {
let params = {
signUrl: res.url,
//
handleInvoke(_path) {
try {
this.reportPath = _path;
var iframe = document.getElementById(
"reportPartIframe" + this.timestamp,
);
iframe.onload = () => {
iframe.contentWindow.print();
};
const signRes = await addSign(params);
const { code, msg, data } = signRes;
if (code === 200) {
this.signData = data;
this.handleExport(this.type);
} else {
this.$message.error(msg);
}
} else {
console.log(res);
this.$message.error("签名保存失败");
} catch (error) {
console.log("error: ", error);
}
});
},
//
async handleInputBlur() {
@ -514,63 +430,6 @@ export default {
this.$message.error(msg);
}
},
//
handlePrinting(_type) {
this.type = _type;
this.timestamp = new Date().getTime();
// this.open = true;
this.handleExport(this.type);
},
//
handleInvoke(_path) {
try {
// if (JSON.parse(localStorage.getItem("isAndroid"))) {
// this.$message({
// message: "wps",
// type: "success",
// center: true,
// duration: 6000,
// });
// // window.open(_path);
// //
// this.$download(_path);
// return;
// }
this.reportPath = _path;
var iframe = document.getElementById(
"reportPartIframe" + this.timestamp,
);
iframe.onload = () => {
iframe.contentWindow.print();
};
} catch (error) {
console.log("error: ", error);
}
},
//
async handleSubmit(item) {
console.log("item: ", item, this.reportDetail1.patient.id);
let params = {
initialImpression: item.impression,
reportId: this.reportDetail1.patient.id,
scaleCode: item.code,
};
const res = await updateScaleInitialImpression(params);
const { code, msg, data } = res;
if (code === 200) {
item.isEdit = true;
this.$message.success("编辑成功");
this.$forceUpdate();
} else {
this.$message.error(msg);
}
},
//
handleReporEdit() {
this.reportDetail1.patient.isEdit = false;
this.$forceUpdate();
},
//
async getQueryReportDetail() {
const params = {
@ -590,11 +449,6 @@ export default {
this.$message.error(msg);
}
},
// code
handleEdit(item) {
item.isEdit = false;
this.$forceUpdate();
},
},
};
</script>
@ -724,8 +578,15 @@ export default {
border: 1px solid #888888;
margin-left: 20px;
}
.div-derive {
// margin-right: 20px;
}
.div-prin {
}
}
.cardRig-but {
width: 90px;
padding: 0 10px;
height: 40px;
line-height: 40px;
border-radius: 4px 4px 4px 4px;
@ -733,12 +594,10 @@ export default {
border: 1px solid #5cc0be;
text-align: center;
color: #5cc0be;
margin-left: 10px;
}
.div-derive {
// margin-right: 20px;
}
.div-prin {
}
.cardRig-but1 {
margin: 10px 0 10px 0;
}
.info-col {
border-right: 1px solid #e1e1e1;
@ -827,7 +686,7 @@ p {
font-size: 24px;
font-weight: bold;
color: #222222;
line-height: 50px;
line-height: 60px;
margin-left: 10px;
}
.box-card {

342
web_client/src/views/history/components/scaleInforCopy.vue

@ -3,7 +3,7 @@
<div style="height: 100%" class="div-box">
<div v-if="reportDetail1">
<!-- 患者信息 -->
<el-card class="box-card" style="">
<el-card class="box-card" style="padding-top: 0">
<div slot="header">
<div class="clearfix">
<h1 class="box-card-header">患者信息</h1>
@ -17,65 +17,29 @@
<i class="el-icon-document-checked"></i>
保存修改
</div>
<!-- <div
class="div-derive cardRig-but"
style="width: 130px; margin-right: 10px"
@click="handleExport('合并版', true)"
>
<i class="el-icon-upload2"></i>导出合并版
</div>
<div
v-if="!isAPP"
class="div-print cardRig-but"
@click="handlePrinting('合并版')"
style="width: 130px; margin-right: 10px"
>
<i class="el-icon-printer"></i>打印合并版
</div> -->
<div
class="div-derive cardRig-but"
style="width: 130px; margin-right: 10px"
@click="handleExport('医生版', true)"
>
<i class="el-icon-upload2"></i>导出医生版
</div>
<div
v-if="!isAPP"
style="width: 130px; margin-right: 10px"
class="div-print cardRig-but"
@click="handlePrinting('医生版', true)"
>
<i class="el-icon-printer"></i>打印医生版
</div>
<div v-for="(r, rin) in reportButList" :key="rin">
<el-popover placement="bottom" trigger="click">
<div
slot="reference"
class="div-derive cardRig-but"
style="width: 130px; margin-right: 10px"
@click="handleExport('阳性版', true)"
@click="handleReportQuery(r.code, r.type)"
>
<i class="el-icon-upload2"></i>导出阳性版
<i
:class="r.type ? 'el-icon-printer' : 'el-icon-upload2'"
></i>
{{ r.type ? "打印" : "导出" }}{{ r.lable }}
</div>
<div v-loading="loading">
<div
v-if="!isAPP"
style="width: 130px; margin-right: 10px"
class="div-print cardRig-but"
@click="handlePrinting('阳性版')"
v-for="(item, index) in reportTemplateList"
:key="index"
@click="handleReportTemplate(item.id, item.type)"
class="cardRig-but cardRig-but1"
>
<i class="el-icon-printer"></i>打印阳性版
{{ item.name }}{{ item.type ? "pdf" : "word" }}
</div>
<div
class="div-derive cardRig-but"
style="width: 130px; margin-right: 10px"
@click="handleExport('个人版', true)"
>
<i class="el-icon-upload2"></i>导出个人版
</div>
<div
v-if="!isAPP"
class="div-print cardRig-but"
@click="handlePrinting('个人版')"
style="width: 130px"
>
<i class="el-icon-printer"></i>打印个人版
</el-popover>
</div>
</div>
</div>
@ -250,39 +214,6 @@
:index="index"
:leftShow="leftShow"
/>
<!-- 初步印象 -->
<!-- <div style="margin-top: 20px">
<div class="card-header" style="margin-bottom: 10px">
<div class="card-header-left">
<h1 style="line-height: 44px">初步印象</h1>
</div>
<div
class="div-edit"
@click="handleEdit(item)"
v-if="item.isEdit && !leftShow"
>
<a-icon type="edit" style="color: #10b77f; font-size: 22px" />
</div>
<div v-if="!item.isEdit">
<a-icon
type="check-circle"
style="font-size: 40px; color: #5cc0be"
@click="handleSubmit(item)"
/>
</div>
</div>
<a-textarea
:disabled="item.isEdit"
style="
background: #f6f6f6 !important;
font-size: 16px;
padding: 10px !important;
line-height: 30px;
"
v-model="item.impression"
:auto-size="{ minRows: 3, maxRows: 5 }"
/>
</div> -->
</el-card>
<patientMark :reportDetail1="reportDetail1" :disab="true"></patientMark>
<div style="height: 1px"></div>
@ -305,21 +236,6 @@
:id="'reportPartIframe' + timestamp"
style="display: none"
></iframe>
<el-dialog
title="医生签名"
:visible.sync="open"
width="50%"
append-to-body
class="popup"
>
<signatureVue
v-if="open"
ref="closeDialog1"
@close="closeDialog1"
@handleSing="handleSing"
>
</signatureVue>
</el-dialog>
</div>
</switchingSlip>
</template>
@ -339,8 +255,9 @@ import {
queryReport,
queryReportInfo,
positiveExport,
reportExportAll,
icdQuery,
reportExportAll,
reportTemplateAllQuery,
} from "api/ams";
import {
pasis as pasisConfig,
@ -361,11 +278,11 @@ export default {
props: [],
data() {
return {
loading: false,
timestamp: "",
type: "",
apiUrl: apiUrl,
open: false,
value: "",
pasisConfig: pasisConfig,
careers: careers,
clinical: clinical,
@ -373,21 +290,44 @@ export default {
isEdit: true,
reportDetail1: null,
leftShow: false,
codeItme: {},
signData: {},
reportPath: "",
icdList: [],
isAPP: JSON.parse(localStorage.getItem("isAndroid")),
};
reportButList: [
{
lable: "个人版",
type: 0, //
code: "PERSION",
},
{
lable: "个人版",
type: 1, //
code: "PERSION",
},
{
lable: "医生版",
type: 0,
code: "DOCTOR",
},
{
lable: "医生版",
type: 1,
code: "DOCTOR",
},
{
lable: "阳性版",
type: 0,
code: "POSITIVE",
},
{
lable: "医生版",
type: 1,
code: "POSITIVE",
},
watch: {
// reportDetail(newVal, oldVal) {
// this.reportDetail1 = newVal;
// this.reportDetail1.patient.isEdit = true;
// this.reportDetail1.scores.forEach((item) => {
// item.isEdit = true;
// });
// },
],
reportTemplateList: [],
exportType: "",
};
},
computed: {
...mapState("user", ["route", "query"]),
@ -402,6 +342,10 @@ export default {
this.setEvaluationPath(null);
sessionStorage.clear();
this.setIsRecord(false);
if (this.isAPP) {
this.reportButList = this.reportButList.filter((i) => i.type != 1);
console.log(" this.reportButList ", this.reportButList);
}
},
methods: {
...mapMutations("ht", [
@ -417,7 +361,6 @@ export default {
...mapMutations("user", ["setReportData", "setReportWriteAble"]),
//
async geticdQuery() {
console.log("icdQuery");
let res = await icdQuery();
const { code, msg, data } = res;
if (code === 200) {
@ -427,71 +370,51 @@ export default {
handleBack() {
this.$router.go(-1);
},
//
async handleExport(_type, _printFlat) {
this.type = _type;
let params = {
//
async handleReportQuery(code, type) {
this.exportType = type;
this.loading = true;
let res = await reportTemplateAllQuery({ code });
if (res.code === 200) {
this.reportTemplateList = res.data || [];
}
this.loading = false;
},
//
async handleReportTemplate(templateId, type) {
let res = await reportExportAll({
templateId,
evaluationId: this.reportDetail1.patient.evaluationId,
reportId: this.reportDetail1.patient.id,
signId: this.signData.signId,
};
let res = "";
if (_type === "医生版") {
res = await doctorExport(params);
} else if (_type === "个人版") {
res = await personalExport(params);
} else if (_type === "阳性版") {
res = await positiveExport(params);
}else if (_type === "合并版") {
res = await reportExportAll(params);
}
const { code, msg, data } = res;
if (code === 200) {
// true
if (_printFlat) {
});
if (res.code === 200) {
let path = type ? res.data.path : res.data.word;
//
// window.open(this.apiUrl + data.path);
this.$download(this.apiUrl + data.path);
if (!this.exportType) {
this.$download(this.apiUrl + path);
} else {
this.open = false;
this.timestamp = new Date().getTime();
setTimeout(() => {
this.handleInvoke(
`${this.apiUrl}${data.path}?time${new Date().getTime()}`,
`${this.apiUrl}${path}?time${new Date().getTime()}`,
);
}, 500);
}
this.$forceUpdate();
} else {
this.$message.error(msg);
}
},
//
handleSing(_singData) {
this.signData = _singData;
this.handleExport(this.type);
},
//
closeDialog1(params) {
const file = params;
var form = new FormData();
form.append("file", file);
uploadfile(form).then(async (res) => {
if (res.code === 200) {
let params = {
signUrl: res.url,
//
handleInvoke(_path) {
try {
this.reportPath = _path;
var iframe = document.getElementById(
"reportPartIframe" + this.timestamp,
);
iframe.onload = () => {
iframe.contentWindow.print();
};
const signRes = await addSign(params);
const { code, msg, data } = signRes;
if (code === 200) {
this.signData = data;
this.handleExport(this.type);
} else {
this.$message.error(msg);
}
} else {
console.log(res);
this.$message.error("签名保存失败");
} catch (error) {
console.log("error: ", error);
}
});
},
//
async handleInputBlur() {
@ -516,62 +439,6 @@ export default {
this.$message.error(msg);
}
},
//
handlePrinting(_type) {
this.type = _type;
this.timestamp = new Date().getTime();
// this.open = true;
this.handleExport(this.type);
},
//
handleInvoke(_path) {
try {
// if (JSON.parse(localStorage.getItem("isAndroid"))) {
// this.$message({
// message: "wps",
// type: "success",
// center: true,
// duration: 6000,
// });
// // window.open(_path);
// this.$download(_path);
// return;
// }
this.reportPath = _path;
var iframe = document.getElementById(
"reportPartIframe" + this.timestamp,
);
iframe.onload = () => {
iframe.contentWindow.print();
};
} catch (error) {
console.log("error: ", error);
}
},
//
async handleSubmit(item) {
console.log("item: ", item, this.reportDetail1.patient.id);
let params = {
initialImpression: item.impression,
reportId: this.reportDetail1.patient.id,
scaleCode: item.code,
};
const res = await updateScaleInitialImpression(params);
const { code, msg, data } = res;
if (code === 200) {
item.isEdit = true;
this.$message.success("编辑成功");
this.$forceUpdate();
} else {
this.$message.error(msg);
}
},
//
handleReporEdit() {
this.reportDetail1.patient.isEdit = false;
this.$forceUpdate();
},
//
async getQueryReportDetail() {
const params = {
@ -591,11 +458,6 @@ export default {
this.$message.error(msg);
}
},
// code
handleEdit(item) {
item.isEdit = false;
this.$forceUpdate();
},
},
};
</script>
@ -653,6 +515,9 @@ export default {
}
/deep/.ant-input {
}
.div-box {
margin: 16px 0px 0px 0px;
}
.div-box /deep/ .el-card {
margin-bottom: 20px;
padding: 16px;
@ -722,8 +587,15 @@ export default {
border: 1px solid #888888;
margin-left: 20px;
}
.div-derive {
// margin-right: 20px;
}
.div-prin {
}
}
.cardRig-but {
width: 90px;
padding: 0 10px;
height: 40px;
line-height: 40px;
border-radius: 4px 4px 4px 4px;
@ -731,12 +603,10 @@ export default {
border: 1px solid #5cc0be;
text-align: center;
color: #5cc0be;
margin-left: 10px;
}
.div-derive {
// margin-right: 20px;
}
.div-prin {
}
.cardRig-but1 {
margin: 10px 0 10px 0;
}
.info-col {
border-right: 1px solid #e1e1e1;
@ -825,7 +695,7 @@ p {
font-size: 24px;
font-weight: bold;
color: #222222;
line-height: 50px;
line-height: 60px;
margin-left: 10px;
}
.box-card {

4
web_client/vue.config.js

@ -36,9 +36,9 @@ module.exports = {
proxy: {
[settings.proxyUrl]: {
// target: "https://www.ylinno.com/cga/v2/api/client/",
target: "http://113.45.159.249:59001/cga/v2/api/client/",
// target: "http://113.45.159.249:59001/cga/v2/api/client/",
// target: "http://127.0.0.1:19331",
// target: "http://192.168.1.136:19331",
target: "http://192.168.1.136:19331",
changeOrigin: true,
pathRewrite: {
["^" + settings.proxyUrl]: "",

Loading…
Cancel
Save