Browse Source

前台覆盖后台代码

newMaster
1747191978@qq.com 4 months ago
parent
commit
2d3220ef8b
  1. 3
      acupuncture-后台/package.json
  2. 17
      acupuncture-后台/src/api/followupFile.js
  3. 146
      acupuncture-后台/src/api/indexCom.js
  4. 2
      acupuncture-后台/src/assets/styles/common.css
  5. 5
      acupuncture-后台/src/main.js
  6. 4
      acupuncture-后台/src/router/index.js
  7. 4
      acupuncture-后台/src/store/modules/permission.js
  8. 33
      acupuncture-后台/src/utils/request.js
  9. 75
      acupuncture-后台/src/views/followFile/index.vue
  10. 247
      acupuncture-后台/src/views/followFile/subjects.vue
  11. 380
      acupuncture-后台/src/views/followFile/work.vue
  12. 1173
      acupuncture-后台/src/views/index.vue
  13. 404
      acupuncture-后台/src/views/indexCom/JM.vue
  14. 383
      acupuncture-后台/src/views/indexCom/XGZL.vue
  15. 224
      acupuncture-后台/src/views/indexCom/follow.vue
  16. 939
      acupuncture-后台/src/views/indexCom/index.js
  17. 325
      acupuncture-后台/src/views/indexCom/patient.vue
  18. 179
      acupuncture-后台/src/views/indexCom/query.vue
  19. 60
      acupuncture-后台/src/views/login.vue
  20. 1043
      acupuncture-后台/src/views/medicalFile/index.vue
  21. 484
      acupuncture-后台/src/views/patientFile/index.vue

3
acupuncture-后台/package.json

@ -40,7 +40,7 @@
"axios": "0.28.1", "axios": "0.28.1",
"clipboard": "2.0.8", "clipboard": "2.0.8",
"core-js": "3.37.1", "core-js": "3.37.1",
"echarts": "5.4.0", "echarts": "^5.4.0",
"element-ui": "^2.15.14", "element-ui": "^2.15.14",
"file-saver": "2.0.5", "file-saver": "2.0.5",
"fuse.js": "6.4.3", "fuse.js": "6.4.3",
@ -48,6 +48,7 @@
"js-beautify": "1.13.0", "js-beautify": "1.13.0",
"js-cookie": "3.0.1", "js-cookie": "3.0.1",
"jsencrypt": "3.0.0-rc.1", "jsencrypt": "3.0.0-rc.1",
"moment": "^2.30.1",
"nprogress": "0.2.0", "nprogress": "0.2.0",
"quill": "2.0.2", "quill": "2.0.2",
"screenfull": "5.0.2", "screenfull": "5.0.2",

17
acupuncture-后台/src/api/followupFile.js

@ -1,5 +1,12 @@
import request from "@/utils/request"; import request from "@/utils/request";
// 公共队列
export function commonQueue(data) {
return request({
url: "/followup/commonQueue",
method: "post",
data: data,
});
}
// 随访队列 // 随访队列
export function followupQuery(data) { export function followupQuery(data) {
return request({ return request({
@ -73,3 +80,11 @@ export function followPatient(data) {
data: data, data: data,
}); });
} }
// 修改随访状态
export function followStatus(data) {
return request({
url: "/followup/status",
method: "post",
data: data,
});
}

146
acupuncture-后台/src/api/indexCom.js

@ -0,0 +1,146 @@
import request from "@/utils/request";
// 患者统计 - 饼状
export function queryPatient(data) {
return request({
url: "/qualityControl/home/queryPatient",
method: "post",
data: data,
});
}
// 患者统计 - 柱状图
export function queryByDatePatient(data) {
return request({
url: "/qualityControl/home/queryByDatePatient",
method: "post",
data: data,
});
}
// 静脉溶栓率 - 统计
export function queryJmrs(data) {
return request({
url: "/qualityControl/home/queryJmrs",
method: "post",
data: data,
});
}
// 静脉溶栓率 - 数据对比
// 静脉溶栓率 - DNT
export function queryDntResult(data) {
return request({
url: "/qualityControl/home/queryDntResult",
method: "post",
data: data,
});
}
// 静脉溶栓率 - Sich
export function querySichResult(data) {
return request({
url: "/qualityControl/home/querySichResult",
method: "post",
data: data,
});
}
// 血管治疗 - DPT
export function queryDptResult(data) {
return request({
url: "/qualityControl/home/queryDptResult",
method: "post",
data: data,
});
}
// 血管治疗 - Rpt
export function queryRptResult(data) {
return request({
url: "/qualityControl/home/queryRptResult",
method: "post",
data: data,
});
}
// 血管治疗 - SJDB
// export function selectXgzl(data) {
// return request({
// url: "/qualityControl/home/selectXgzl",
// method: "post",
// data: data,
// });
// }
export function dataComparison(data) {
return request({
url: "/qualityControl/home/selectXgzl",
method: "post",
data: data,
});
}
// 血管治疗统计
export function queryXgzlLv(data) {
return request({
url: "/qualityControl/home/queryXgzlLv",
method: "post",
data: data,
});
}
// 大屏急救数量统计
export function queryPatientList(data) {
return request({
url: "/qualityControl/home/queryPatientList",
method: "post",
data: data,
});
}
// 大屏急救时长分析
export function queryFirstAidTime(data) {
return request({
url: "/qualityControl/home/queryFirstAidTime",
method: "post",
data: data,
});
}
// 大屏智慧平车面板数据
export function queryData(data) {
return request({
url: "/qualityControl/home/queryData",
method: "post",
data: data,
});
}
// 患者信息
export function patientTotal(data) {
return request({
url: "/statistics/patientTotal",
method: "post",
data: data,
});
}
// 诊疗信息
export function zlInfo(data) {
return request({
url: "/statistics/zlInfo",
method: "post",
data: data,
});
}
// 治疗类型
export function zlType(data) {
return request({
url: "/statistics/zlType",
method: "post",
data: data,
});
}
// 随访分布
export function sffb(data) {
return request({
url: "/statistics/sffb",
method: "post",
data: data,
});
}
export function sftj(data) {
return request({
url: "/statistics/sftj",
method: "post",
data: data,
});
}

2
acupuncture-后台/src/assets/styles/common.css

@ -73,7 +73,7 @@
display: none; display: none;
} }
>>>.el-dialog__body{ >>>.el-dialog__body{
padding: 0px 20px 0px 20px; padding: 20px;
} }
/* .popup >>> .popupAdd2 .popupleft { /* .popup >>> .popupAdd2 .popupleft {
width: 55px; width: 55px;

5
acupuncture-后台/src/main.js

@ -12,7 +12,8 @@ import store from './store'
import router from './router' import router from './router'
import directive from './directive' // directive import directive from './directive' // directive
import plugins from './plugins' // plugins import plugins from './plugins' // plugins
import { download } from '@/utils/request' import { download, download1} from '@/utils/request'
import moment from 'moment';
import './assets/icons' // icon import './assets/icons' // icon
import './permission' // permission control import './permission' // permission control
@ -47,7 +48,9 @@ Vue.prototype.addDateRange = addDateRange
Vue.prototype.selectDictLabel = selectDictLabel Vue.prototype.selectDictLabel = selectDictLabel
Vue.prototype.selectDictLabels = selectDictLabels Vue.prototype.selectDictLabels = selectDictLabels
Vue.prototype.download = download Vue.prototype.download = download
Vue.prototype.download1 = download1
Vue.prototype.handleTree = handleTree Vue.prototype.handleTree = handleTree
Vue.prototype.$moment = moment
// 全局组件挂载 // 全局组件挂载
Vue.component('DictTag', DictTag) Vue.component('DictTag', DictTag)

4
acupuncture-后台/src/router/index.js

@ -77,12 +77,12 @@ export const constantRoutes = [
{ {
path: "/patientFile", path: "/patientFile",
component: Layout, component: Layout,
redirect: "index", redirect: "patientFile",
children: [ children: [
{ {
path: "/patientIndex", path: "/patientIndex",
component: () => import("@/views/patientFile/index"), component: () => import("@/views/patientFile/index"),
name: "Index", name: "patientIndex",
meta: { title: "患者档案", icon: "dashboard", }, meta: { title: "患者档案", icon: "dashboard", },
}, },
], ],

4
acupuncture-后台/src/store/modules/permission.js

@ -34,8 +34,8 @@ const permission = {
return new Promise((resolve) => { return new Promise((resolve) => {
// 向后端请求路由数据 // 向后端请求路由数据
getRouters().then((res) => { getRouters().then((res) => {
const sdata = JSON.parse(JSON.stringify(res.data)); const sdata = JSON.parse(JSON.stringify([]));
const rdata = JSON.parse(JSON.stringify(res.data)); const rdata = JSON.parse(JSON.stringify([]));
const sidebarRoutes = filterAsyncRouter(sdata); const sidebarRoutes = filterAsyncRouter(sdata);
const rewriteRoutes = filterAsyncRouter(rdata, false, true); const rewriteRoutes = filterAsyncRouter(rdata, false, true);
const asyncRoutes = filterDynamicRoutes(dynamicRoutes); const asyncRoutes = filterDynamicRoutes(dynamicRoutes);

33
acupuncture-后台/src/utils/request.js

@ -148,5 +148,38 @@ export function download(url, params, filename, config) {
downloadLoadingInstance.close(); downloadLoadingInstance.close();
}) })
} }
// 通用下载方法
export function download1(url, params, filename, config) {
downloadLoadingInstance = Loading.service({
text: "正在下载数据,请稍候",
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)",
});
return service
.post(url, params, {
headers: { "Content-Type": "application/json;charset=utf-8" },
responseType: "blob",
})
.then(async (data) => {
const isBlob = blobValidate(data);
if (isBlob) {
const blob = new Blob([data]);
saveAs(blob, filename);
} else {
const resText = await data.text();
const rspObj = JSON.parse(resText);
const errMsg =
errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
Message.error(errMsg);
}
downloadLoadingInstance.close();
})
.catch((r) => {
console.error(r);
Message.error("下载文件出现错误,请联系管理员!");
downloadLoadingInstance.close();
});
}
export default service export default service

75
acupuncture-后台/src/views/followFile/index.vue

@ -70,6 +70,7 @@
align="center" align="center"
prop="name" prop="name"
min-width="130" min-width="130"
fixed
/> />
<el-table-column <el-table-column
label="随访方式" label="随访方式"
@ -110,6 +111,27 @@
show-overflow-tooltip show-overflow-tooltip
min-width="100" min-width="100"
/> />
<el-table-column
label="总月数"
align="center"
prop="followupMonth"
show-overflow-tooltip
min-width="100"
/>
<el-table-column
label="临近提醒时间(天)"
align="center"
prop="remindTime"
show-overflow-tooltip
min-width="130"
/>
<el-table-column
label="窗口期"
align="center"
prop="followWindowAdys"
show-overflow-tooltip
min-width="100"
/>
<el-table-column <el-table-column
label="状态" label="状态"
align="center" align="center"
@ -118,14 +140,25 @@
min-width="100" min-width="100"
> >
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.status == 0" style="color: red">禁用</span> <span v-if="scope.row.status == 0" style="color: #F56C6C">禁用</span>
<span v-if="scope.row.status == 1" style="color: green">启用</span> <span v-else style="color: #67C23A">启用</span>
</template>
</el-table-column>
<el-table-column
label="类型"
align="center"
show-overflow-tooltip
min-width="100"
>
<template slot-scope="scope">
<span v-if="scope.row.type == 1">公共队列</span>
<span v-else-if="scope.row.status == 1" style="color: #67C23A">本院队列</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column
label="创建人/创建时间" label="创建人/创建时间"
align="center" align="center"
min-width="130" min-width="140"
fixed="right" fixed="right"
> >
<template slot-scope="scope"> <template slot-scope="scope">
@ -142,6 +175,7 @@
type="text" type="text"
icon="el-icon-edit" icon="el-icon-edit"
@click="handleUpdate(scope.row)" @click="handleUpdate(scope.row)"
:disabled="scope.row.type == 1"
>修改</el-button >修改</el-button
> >
<el-button <el-button
@ -149,6 +183,7 @@
type="text" type="text"
icon="el-icon-delete" icon="el-icon-delete"
@click="handleDelete(scope.row)" @click="handleDelete(scope.row)"
:disabled="scope.row.type == 1"
>删除</el-button >删除</el-button
> >
</template> </template>
@ -176,7 +211,7 @@
ref="form" ref="form"
:model="form" :model="form"
:rules="rules" :rules="rules"
label-width="90px" label-width="130px"
> >
<el-form-item label="队列名称" prop="name"> <el-form-item label="队列名称" prop="name">
<el-input v-model="form.name" placeholder="请输入" /> <el-input v-model="form.name" placeholder="请输入" />
@ -212,6 +247,12 @@
<el-form-item label="总月数" prop="followupMonth"> <el-form-item label="总月数" prop="followupMonth">
<el-input v-model="form.followupMonth" placeholder="请输入" /> <el-input v-model="form.followupMonth" placeholder="请输入" />
</el-form-item> </el-form-item>
<el-form-item label="临近提醒时间(天)" prop="remindTime">
<el-input v-model="form.remindTime" placeholder="请输入" />
</el-form-item>
<el-form-item label="窗口期" prop="followWindowAdys">
<el-input v-model="form.followWindowAdys" placeholder="请输入" />
</el-form-item>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
<el-radio :label="1">启用</el-radio> <el-radio :label="1">启用</el-radio>
@ -247,6 +288,7 @@ import {
followupAdd, followupAdd,
followupUpd, followupUpd,
followupDel, followupDel,
commonQueue
} from "@/api/followupFile"; } from "@/api/followupFile";
export default { export default {
name: "Notice", name: "Notice",
@ -257,8 +299,7 @@ export default {
openCron: false, openCron: false,
// //
expression: "", expression: "",
idCardType: [ idCardType: [{
{
label: "身份证", label: "身份证",
value: 0, value: 0,
}, },
@ -274,12 +315,17 @@ export default {
label: "台湾居民来往大陆通行证", label: "台湾居民来往大陆通行证",
value: 3, value: 3,
}, },
{
label: "其他",
value: 4,
},
], ],
idCardTypeValue: { idCardTypeValue: {
0: "身份证", 0: "身份证",
1: "护照或外国人永居证", 1: "护照或外国人永居证",
2: "港澳居民来往内地通行", 2: "港澳居民来往内地通行",
3: "台湾居民来往大陆通行证", 3: "台湾居民来往大陆通行证",
4: "其他",
}, },
loading: false, // loading: false, //
ids: [], // ids: [], //
@ -314,6 +360,18 @@ export default {
followupType: [ followupType: [
{ required: true, message: "随访类型不能为空", trigger: "blur" }, { required: true, message: "随访类型不能为空", trigger: "blur" },
], ],
frequency: [
{ required: true, message: "随访频次不能为空", trigger: "blur" },
],
followupMonth: [
{ required: true, message: "总月数不能为空", trigger: "blur" },
],
followWindowAdys: [
{ required: true, message: "窗口期不能为空", trigger: "blur" },
],
remindTime: [
{ required: true, message: "临近提醒时间不能为空", trigger: "blur" },
],
frequency: [ frequency: [
{ required: true, message: "随访频次不能为空", trigger: "blur" }, { required: true, message: "随访频次不能为空", trigger: "blur" },
], ],
@ -334,11 +392,16 @@ export default {
crontabFill(value) { crontabFill(value) {
this.form.frequency = value; this.form.frequency = value;
}, },
/** 查询公告列表 */ /** 查询公告列表 */
getList() { getList() {
this.loading = true; this.loading = true;
followupQuery(this.queryParams).then((res) => { followupQuery(this.queryParams).then((res) => {
let commonQueue = JSON.parse(localStorage.getItem('commonQueue'))
this.listDat = res.data.list; this.listDat = res.data.list;
commonQueue?.forEach(i=>{
this.listDat.unshift(i)
})
this.total = res.data.total; this.total = res.data.total;
this.loading = false; this.loading = false;
}); });

247
acupuncture-后台/src/views/followFile/subjects.vue

@ -1,32 +1,20 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
:model="queryParams" label-width="68px">
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="随访队列" prop="queueId"> <el-form-item label="随访队列" prop="queueId">
<el-select v-model="queryParams.param.queueId" placeholder="请选择"> <el-select v-model="queryParams.param.queueId" clearable placeholder="请选择">
<el-option <el-option v-for="item in followupList" :key="item.id" :label="item.name" :value="item.id">
v-for="item in followupList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="" prop="queueId">
<el-checkbox-group v-model="haveQueue">
<el-checkbox >未参加队列人员</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</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 icon="el-icon-refresh" size="mini" @click="resetQuery">
重置 重置
</el-button> </el-button>
@ -34,103 +22,42 @@
</el-form> </el-form>
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<right-toolbar <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<el-table <el-table v-loading="loading" :data="listDat" @selection-change="handleSelectionChange" max-height="600">
v-loading="loading"
:data="listDat"
@selection-change="handleSelectionChange"
max-height="600"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="姓名" align="center" prop="name" width="100" /> <el-table-column label="姓名" align="center" prop="name" width="100" fixed />
<el-table-column <el-table-column fixed label="性别" align="center" prop="gender" show-overflow-tooltip min-width="100">
label="性别"
align="center"
prop="gender"
show-overflow-tooltip
width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.gender == 0"></span> <span v-if="scope.row.gender == 0"></span>
<span v-if="scope.row.gender == 1"></span> <span v-if="scope.row.gender == 1"></span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column fixed label="出生日期" align="center" prop="birthDate" show-overflow-tooltip min-width="150">
label="出生日期"
align="center"
prop="birthDate"
show-overflow-tooltip
width="150"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }} {{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="民族" align="center" prop="ethnicity" show-overflow-tooltip min-width="100" />
label="民族" <el-table-column label="受教育年限" align="center" prop="educationYears" show-overflow-tooltip min-width="100" />
align="center" <el-table-column label="手机号码" align="center" prop="phone" show-overflow-tooltip min-width="150" />
prop="ethnicity" <el-table-column label="证件类型" align="center" prop="idCardType" show-overflow-tooltip min-width="200">
show-overflow-tooltip
width="100"
/>
<el-table-column
label="受教育年限"
align="center"
prop="educationYears"
show-overflow-tooltip
width="100"
/>
<el-table-column
label="手机号码"
align="center"
prop="phone"
show-overflow-tooltip
width="150"
/>
<el-table-column
label="证件类型"
align="center"
prop="idCardType"
show-overflow-tooltip
width="200"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ idCardTypeValue[scope.row.idCardType] }} {{ idCardTypeValue[scope.row.idCardType] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="证件号码" align="center" prop="idCard" show-overflow-tooltip min-width="180" />
label="证件号码" <el-table-column fixed="right" label="随访队列" align="center" prop="queueList" show-overflow-tooltip
align="center" min-width="180">
prop="idCard"
show-overflow-tooltip
width="180"
/>
<el-table-column
fixed="right"
label="随访队列"
align="center"
prop="queueList"
show-overflow-tooltip
width="180"
>
<template slot-scope="scope"> <template slot-scope="scope">
<div v-if="scope.row.queueList && scope.row.queueList.length"> <div v-if="scope.row.queueList && scope.row.queueList.length">
{{ scope.row.queueList.map((i) => i.queueName).join(",") }} {{ scope.row.queueList.map((i) => i.queueName).join(",") }}
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="创建人/创建时间" align="center" width="140" fixed="right">
label="创建人/创建时间"
align="center"
width="130"
fixed="right"
>
<template slot-scope="scope"> <template slot-scope="scope">
<div>{{ scope.row.createBy }}</div> <div>{{ scope.row.createBy }}</div>
<span>{{ <span>{{
@ -140,62 +67,25 @@
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="200"> <el-table-column fixed="right" label="操作" align="center" width="200">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button size="mini" type="text" icon="el-icon-edit"
size="mini" @click="handleUpdate(scope.row)">队列管理</el-button>
type="text" <el-button size="mini" type="text" icon="el-icon-tickets"
icon="el-icon-edit" @click="handlePatient(scope.row)">患者档案</el-button>
@click="handleUpdate(scope.row)" <el-button size="mini" type="text" icon="el-icon-notebook-2"
>队列管理</el-button @click="handleMedical(scope.row)">诊疗档案</el-button>
>
<el-button
size="mini"
type="text"
icon="el-icon-tickets"
@click="handlePatient(scope.row)"
>患者档案</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-notebook-2"
@click="handleMedical(scope.row)"
>诊疗档案</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
v-show="total > 0" :limit.sync="queryParams.pageSize" @pagination="getList" />
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改公告对话框 --> <!-- 添加或修改公告对话框 -->
<el-dialog <el-dialog class="popup" :title="title" :visible.sync="open" width="780px" append-to-body>
class="popup" <el-form class="formStep" ref="form" :model="form" :rules="rules" label-width="90px">
:title="title"
:visible.sync="open"
width="780px"
append-to-body
>
<el-form
class="formStep"
ref="form"
:model="form"
:rules="rules"
label-width="90px"
>
<el-form-item label="随访队列" prop="queueIdList"> <el-form-item label="随访队列" prop="queueIdList">
<el-select v-model="form.queueIdList" multiple placeholder="请选择"> <el-select v-model="form.queueIdList" multiple placeholder="请选择">
<el-option <el-option v-for="item in followupList" :key="item.id" :label="item.name" :value="item.id">
v-for="item in followupList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -209,14 +99,17 @@
</template> </template>
<script> <script>
import { queryPatient, followupQuery, updPatient } from "@/api/followupFile"; import {
queryPatient,
followupQuery,
updPatient
} from "@/api/followupFile";
export default { export default {
name: "Notice", name: "Notice",
data() { data() {
return { return {
fileList: [], fileList: [],
idCardType: [ idCardType: [{
{
label: "身份证", label: "身份证",
value: 0, value: 0,
}, },
@ -232,12 +125,17 @@ export default {
label: "台湾居民来往大陆通行证", label: "台湾居民来往大陆通行证",
value: 3, value: 3,
}, },
{
label: "其他",
value: 4,
},
], ],
idCardTypeValue: { idCardTypeValue: {
0: "身份证", 0: "身份证",
1: "护照或外国人永居证", 1: "护照或外国人永居证",
2: "港澳居民来往内地通行", 2: "港澳居民来往内地通行",
3: "台湾居民来往大陆通行证", 3: "台湾居民来往大陆通行证",
4: "其他",
}, },
loading: false, // loading: false, //
ids: [], // ids: [], //
@ -253,17 +151,22 @@ export default {
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
param: {}, param: {
queueId: ''
},
}, },
haveQueue:'',
formDisabled: false, formDisabled: false,
importform: {}, importform: {},
// //
form: {}, form: {},
// //
rules: { rules: {
queueIdList: [ queueIdList: [{
{ required: true, message: "随访队列不能为空", trigger: "change" }, required: true,
], message: "随访队列不能为空",
trigger: "change"
}, ],
}, },
followupList: [], // 访 followupList: [], // 访
}; };
@ -277,9 +180,15 @@ export default {
getFollowupQuery() { getFollowupQuery() {
followupQuery({ followupQuery({
pageNum: -1, pageNum: -1,
param: {}, param: {
status: 1
},
}).then((res) => { }).then((res) => {
this.followupList = res.data.list; this.followupList = res.data.list;
let commonQueue = JSON.parse(localStorage.getItem('commonQueue'))
commonQueue?.forEach(i => {
this.followupList.unshift(i)
})
}); });
}, },
@ -304,12 +213,21 @@ export default {
}, },
/** 搜索按钮操作 */ /** 搜索按钮操作 */
handleQuery() { handleQuery() {
this.queryParams.param.haveQueue = ''
if(this.haveQueue){
this.queryParams.param.haveQueue = 0
}
this.queryParams.pageNum = 1; this.queryParams.pageNum = 1;
this.getList(); this.getList();
}, },
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.resetForm("queryForm"); this.queryParams = {
param: {
queueId: ''
},
},
this.haveQueue = ''
this.handleQuery(); this.handleQuery();
}, },
// //
@ -322,7 +240,7 @@ export default {
handleUpdate(row) { handleUpdate(row) {
this.open = true; this.open = true;
this.title = "队列管理"; this.title = "队列管理";
let queueList = row.queueList.map((item) => item.queueId); let queueList = row.queueList?.map((item) => item.queueId) || [];
this.form = JSON.parse( this.form = JSON.parse(
JSON.stringify({ JSON.stringify({
...row, ...row,
@ -332,9 +250,17 @@ export default {
); );
}, },
/** 跳转患者档案 */ /** 跳转患者档案 */
handlePatient(row) {}, handlePatient(row) {
this.$router.push({
path: `/patientIndex?idCard=${row.idCard}`
})
},
/** 诊疗档案 */ /** 诊疗档案 */
handleMedical(row) {}, handleMedical(row) {
this.$router.push({
path: `/medicalIndex?idCard=${row.idCard}`
})
},
/** 提交按钮 */ /** 提交按钮 */
submitForm: function() { submitForm: function() {
this.$refs["form"].validate((valid) => { this.$refs["form"].validate((valid) => {
@ -354,7 +280,9 @@ export default {
this.$modal this.$modal
.confirm("是否确认删除当前选择的数据?") .confirm("是否确认删除当前选择的数据?")
.then(function() { .then(function() {
return patientDel({ idList: idList }); return patientDel({
idList: idList
});
}) })
.then(() => { .then(() => {
this.getList(); this.getList();
@ -365,8 +293,7 @@ export default {
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download( this.download(
"system/user/export", "system/user/export", {
{
...this.queryParams.params, ...this.queryParams.params,
}, },
`患者档案.xlsx` `患者档案.xlsx`
@ -386,9 +313,11 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
} }
.form-item-age span { .form-item-age span {
margin: 0 10px; margin: 0 10px;
} }
.form-item-age>>>.el-input { .form-item-age>>>.el-input {
width: 100px; width: 100px;
} }

380
acupuncture-后台/src/views/followFile/work.vue

@ -1,190 +1,107 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<right-toolbar <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
:showSearch.sync="showSearch" label-width="68px">
@queryTable="getList" <el-form-item label="" prop="keywords">
></right-toolbar> <el-input v-model="queryParams.param.keywords" placeholder="支持姓名、全拼、简拼、手机号吗、证件号码" clearable
@keyup.enter.native="handleQuery" />
</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>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row> </el-row>
<el-tabs v-model="queryParams.param.status" @tab-click="handleClick"> <el-tabs v-model="queryParams.param.status" @tab-click="handleClick">
<el-tab-pane label="待随访" name="0"></el-tab-pane> <el-tab-pane label="待随访" name="0"></el-tab-pane>
<el-tab-pane label="已随访" name="1"></el-tab-pane> <el-tab-pane label="已随访" name="1"></el-tab-pane>
<el-tab-pane label="失访" name="2"></el-tab-pane> <el-tab-pane label="失访" name="2"></el-tab-pane>
</el-tabs> </el-tabs>
<el-table <el-table v-loading="loading" :data="listDat" @selection-change="handleSelectionChange">
v-loading="loading"
:data="listDat"
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column <el-table-column label="工单id" fixed show-overflow-tooltip align="center" prop="id" min-width="200" />
label="工单id" <el-table-column fixed label="随访队列" show-overflow-tooltip align="center" prop="queueName" min-width="150" />
show-overflow-tooltip <el-table-column fixed label="患者姓名" align="center" prop="name" min-width="100" />
align="center" <el-table-column label="性别" align="center" prop="gender" show-overflow-tooltip min-width="60">
prop=""
width="100"
/>
<el-table-column
label="随访队列"
show-overflow-tooltip
align=""
prop="name"
width="100"
/>
<el-table-column
label="患者姓名"
align="center"
prop="name"
width="100"
/>
<el-table-column
label="性别"
align="center"
prop="gender"
show-overflow-tooltip
width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.gender == 0"></span> <span v-if="scope.row.gender == 0"></span>
<span v-if="scope.row.gender == 1"></span> <span v-if="scope.row.gender == 1"></span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="年龄" align="center" prop="age" show-overflow-tooltip min-width="60" />
label="年龄" <el-table-column label="证件号码" align="center" prop="idCard" show-overflow-tooltip min-width="180" />
align="center" <el-table-column label="手机号码" align="center" prop="phone" show-overflow-tooltip min-width="150" />
prop="age" <el-table-column label="随访次数" align="center" prop="times" show-overflow-tooltip min-width="150" />
show-overflow-tooltip <el-table-column label="开始时间" align="center" prop="startTime" show-overflow-tooltip min-width="150">
width="150" <template slot-scope="scope">
/> <span>{{
<el-table-column parseTime(scope.row.startTime, "{y}-{m}-{d} {h}:{i}")
label="证件号码" }}</span>
align="center" </template>
prop="idCard" </el-table-column>
show-overflow-tooltip <el-table-column label="结束时间" align="center" prop="endTime" show-overflow-tooltip min-width="150">
width="180" <template slot-scope="scope">
/> <span>{{
<el-table-column parseTime(scope.row.endTime, "{y}-{m}-{d} {h}:{i}")
label="手机号码" }}</span>
align="center" </template>
prop="phone" </el-table-column>
show-overflow-tooltip
width="150"
/>
<el-table-column
label="随访序号"
align="center"
prop="phone"
show-overflow-tooltip
width="150"
/>
<el-table-column
label="开始时间"
align="center"
prop="startTime"
show-overflow-tooltip
width="150"
/>
<el-table-column
label="结束时间"
align="center"
prop="endTime"
show-overflow-tooltip
width="150"
/>
<!--待随访 随访状态待随访/即将超期/超期 --> <!--待随访 随访状态待随访/即将超期/超期 -->
<!--已随访 随访状态已随访/超随访期 --> <!--已随访 随访状态已随访/超随访期 -->
<!--待随访 随访状态待随访 --> <!--待随访 随访状态待随访 -->
<el-table-column <el-table-column label="随访状态" align="center" prop="phone" show-overflow-tooltip min-width="150" fixed="right">
label="随访状态"
align="center"
prop="phone"
show-overflow-tooltip
width="150"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ status[scope.row.status] }} <span :class="classStatus[scope.row.status] ">{{ status[scope.row.status] }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column <el-table-column v-if="queryParams.param.status == 2" label="失访原因" align="center" prop="reason"
label="失访状态" show-overflow-tooltip width="200" />
align="center" <el-table-column fixed="right" label="操作" align="center" width="180">
prop="phone"
show-overflow-tooltip
width="150"
/> -->
<el-table-column
label="失访原因"
align="center"
prop="reason"
show-overflow-tooltip
width="150"
/>
<el-table-column fixed="right" label="操作" align="center" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<!-- :disabled="scope.row.status !== '0'" --> <!-- 待随访 -->
<el-button <div v-if="scope.row.status == 0 || scope.row.status == 3 || scope.row.status == 4">
:disabled="scope.row.status !== '0'" <el-button size="mini" type="text" icon="el-icon-s-check"
size="mini" @click="handleFollow(scope.row)">
type="text" 去随访
icon="el-icon-s-check"
@click="handleFollow(scope.row)"
>
随访
</el-button> </el-button>
<el-button <el-button size="mini" type="text" icon="el-icon-s-release"
:disabled="scope.row.status !== '0'" @click="handleLossFollow(scope.row)">
size="mini" 标记失访
type="text" </el-button>
icon="el-icon-s-release" </div>
@click="handleLossFollow(scope.row)" <!-- 随访 -->
> <el-button v-if="scope.row.status == 1" size="mini" type="text" icon="el-icon-s-check"
失访 @click="handleDetails(scope.row)">
查看详情
</el-button>
<!-- 失访 -->
<el-button v-if="scope.row.status == 2" size="mini" type="text" icon="el-icon-s-check"
@click="handleBeFollow(scope.row)">
标记待随访
</el-button> </el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
v-show="total > 0" :limit.sync="queryParams.pageSize" @pagination="getList" />
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 失访 --> <!-- 失访 -->
<el-dialog <el-dialog class="popup" title="标记失访" :visible.sync="open" width="780px" append-to-body>
class="popup" <el-form class="formStep" ref="form" :model="form" :rules="rules" label-width="90px">
title="失访" <!-- <el-form-item label="随访次数" prop="times">
:visible.sync="open"
width="780px"
append-to-body
>
<el-form
class="formStep"
ref="form"
:model="form"
:rules="rules"
label-width="90px"
>
<el-form-item label="随访次数" prop="times">
<el-input v-model="form.times" placeholder="请输入" /> <el-input v-model="form.times" placeholder="请输入" />
</el-form-item> </el-form-item> -->
<el-form-item label="失访原因" prop="reason"> <el-form-item label="失访原因" prop="reason">
<el-select v-model="form.reason" placeholder="请选择"> <el-select v-model="form.reason" placeholder="请选择">
<el-option-group <el-option-group v-for="group in options" :key="group.label" :label="group.label">
v-for="group in options" <el-option v-for="item in group.options" :key="item.value" :label="item.label"
:key="group.label" :value="item.value">
:label="group.label"
>
<el-option
v-for="item in group.options"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-option-group> </el-option-group>
</el-select> </el-select>
@ -196,42 +113,25 @@
</div> </div>
</el-dialog> </el-dialog>
<!-- 随访 --> <!-- 随访 -->
<el-dialog <el-dialog class="popup" title="随访" :visible.sync="open1" width="780px" append-to-body>
class="popup" <el-form class="formStep" ref="form1" :model="form" :rules="rules" label-width="90px">
title="随访"
:visible.sync="open1"
width="780px"
append-to-body
>
<el-form
class="formStep"
ref="form1"
:model="form"
:rules="rules"
label-width="90px"
>
<el-form-item label="随访人" prop="followuper"> <el-form-item label="随访人" prop="followuper">
<el-input v-model="form.followuper" placeholder="请输入" /> <el-input :disabled="open1Disabled" v-model="form.followuper" placeholder="请输入" />
</el-form-item> </el-form-item>
<el-form-item label="随访时间" prop="followupTime"> <el-form-item label="随访时间" prop="followupTime">
<el-date-picker <el-date-picker :disabled="open1Disabled" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss"
format="yyyy-MM-dd HH:mm:ss" v-model="form.followupTime" type="datetime" placeholder="选择日期">
value-format="yyyy-MM-dd HH:mm:ss"
v-model="form.followupTime"
type="datetime"
placeholder="选择日期"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="随访次数" prop="times"> <!-- <el-form-item label="随访次数" prop="times">
<el-input v-model="form.times" placeholder="请输入" /> <el-input v-model="form.times" placeholder="请输入" />
</el-form-item> </el-form-item> -->
<el-form-item label="随访内容" prop="followupText"> <el-form-item label="随访内容" prop="followupText">
<el-input v-model="form.followupText" placeholder="请输入" /> <el-input :disabled="open1Disabled" type="textarea" v-model="form.followupText" placeholder="请输入" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm1"> </el-button> <el-button type="primary" @click="submitForm1" v-if="!open1Disabled"> </el-button>
<el-button @click="open1 = false"> </el-button> <el-button @click="open1 = false"> </el-button>
</div> </div>
</el-dialog> </el-dialog>
@ -239,16 +139,18 @@
</template> </template>
<script> <script>
import { queryTask, updStatus, followPatient } from "@/api/followupFile"; import {
queryTask,
updStatus,
followPatient,followStatus
} from "@/api/followupFile";
export default { export default {
name: "Notice", name: "Notice",
data() { data() {
return { return {
options: [ options: [{
{
label: "患者原因", label: "患者原因",
options: [ options: [{
{
value: "患者病情加重或死亡,无法参与随访", value: "患者病情加重或死亡,无法参与随访",
}, },
{ {
@ -267,8 +169,7 @@ export default {
}, },
{ {
label: "医疗机构原因", label: "医疗机构原因",
options: [ options: [{
{
value: "随访管理不足,未及时安排随访", value: "随访管理不足,未及时安排随访",
}, },
{ {
@ -284,8 +185,7 @@ export default {
}, },
{ {
label: "不可抗力", label: "不可抗力",
options: [ options: [{
{
value: "社会动荡或自然灾害", value: "社会动荡或自然灾害",
}, },
{ {
@ -303,8 +203,12 @@ export default {
4: "超期未随访", 4: "超期未随访",
5: "超期已随访", 5: "超期已随访",
}, },
idCardType: [ classStatus: {
{ 3: "status3",
4: "status4",
5: "status4",
},
idCardType: [{
label: "身份证", label: "身份证",
value: 0, value: 0,
}, },
@ -320,12 +224,17 @@ export default {
label: "台湾居民来往大陆通行证", label: "台湾居民来往大陆通行证",
value: 3, value: 3,
}, },
{
label: "其他",
value: 4,
},
], ],
idCardTypeValue: { idCardTypeValue: {
0: "身份证", 0: "身份证",
1: "护照或外国人永居证", 1: "护照或外国人永居证",
2: "港澳居民来往内地通行", 2: "港澳居民来往内地通行",
3: "台湾居民来往大陆通行证", 3: "台湾居民来往大陆通行证",
4: "其他",
}, },
loading: false, // loading: false, //
ids: [], // ids: [], //
@ -337,6 +246,7 @@ export default {
title: "", // title: "", //
open: false, // open: false, //
open1: false, // open1: false, //
open1Disabled:false,
importOpen: false, // importOpen: false, //
// //
queryParams: { queryParams: {
@ -344,6 +254,7 @@ export default {
pageSize: 10, pageSize: 10,
param: { param: {
status: "0", status: "0",
keywords: '',
}, },
}, },
formDisabled: false, formDisabled: false,
@ -352,26 +263,38 @@ export default {
form: {}, form: {},
// //
rules: { rules: {
followuper: [ followuper: [{
{ required: true, message: "随访人不能为空", trigger: "blur" }, required: true,
], message: "随访人不能为空",
followupTime: [ trigger: "blur"
{ required: true, message: "随访时间不能为空", trigger: "change" }, }, ],
], followupTime: [{
followupText: [ required: true,
{ required: true, message: "随访内容不能为空", trigger: "blur" }, message: "随访时间不能为空",
], trigger: "change"
times: [ }, ],
{ required: true, message: "随访次数不能为空", trigger: "blur" }, followupText: [{
], required: true,
message: "随访内容不能为空",
trigger: "blur"
}, ],
times: [{
required: true,
message: "随访次数不能为空",
trigger: "blur"
}, ],
reason: [ reason: [{
{ required: true, message: "失访原因不能为空", trigger: "change" }, required: true,
], message: "失访原因不能为空",
trigger: "change"
}, ],
}, },
}; };
}, },
created() { created() {
let idCard = this.$route.query.idCard
this.queryParams.param.keywords = idCard || ''
this.getList(); this.getList();
}, },
methods: { methods: {
@ -404,7 +327,7 @@ export default {
}, },
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.resetForm("queryForm"); this.queryParams.param.keywords = ''
this.handleQuery(); this.handleQuery();
}, },
// //
@ -421,6 +344,7 @@ export default {
/** 随访 */ /** 随访 */
handleFollow(row) { handleFollow(row) {
this.open1 = true; this.open1 = true;
this.open1Disabled = false
this.form = { this.form = {
id: row.id, id: row.id,
followuper: "", followuper: "",
@ -429,11 +353,36 @@ export default {
followupText: "", followupText: "",
}; };
}, },
/** 失访 */ /** 标记失访 */
handleLossFollow(row) { handleLossFollow(row) {
this.open = true; this.open = true;
this.form = JSON.parse(JSON.stringify(row)); this.form = JSON.parse(JSON.stringify(row));
this.form.status = 2; this.form.status = 2
},
handleDetails(row){
this.open1 = true;
this.open1Disabled = true
this.form = JSON.parse(JSON.stringify(row));
},
// 访
handleBeFollow(row) {
let data = {
id: row.id,
status:0
}
this.$modal
.confirm(`是否确认将该患者(${row.name})标记为待随访?`)
.then(function() {
return followStatus(data);
})
.then(() => {
this.getList();
this.$modal.msgSuccess("操作成功");
})
.catch((err) => {
console.log('err',err)
});
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm: function() { submitForm: function() {
@ -485,7 +434,9 @@ export default {
this.$modal this.$modal
.confirm("是否确认删除当前选择的数据?") .confirm("是否确认删除当前选择的数据?")
.then(function() { .then(function() {
return patientDel({ idList: idList }); return patientDel({
idList: idList
});
}) })
.then(() => { .then(() => {
this.getList(); this.getList();
@ -496,8 +447,7 @@ export default {
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download( this.download(
"system/user/export", "system/user/export", {
{
...this.queryParams.params, ...this.queryParams.params,
}, },
`患者档案.xlsx` `患者档案.xlsx`
@ -513,13 +463,21 @@ export default {
</script> </script>
<style scoped src="@/assets/styles/common.css"></style> <style scoped src="@/assets/styles/common.css"></style>
<style scoped> <style scoped>
.status3{
color: orange;
}
.status4{
color: red;
}
.form-item-age { .form-item-age {
display: flex; display: flex;
align-items: center; align-items: center;
} }
.form-item-age span { .form-item-age span {
margin: 0 10px; margin: 0 10px;
} }
.form-item-age>>>.el-input { .form-item-age>>>.el-input {
width: 100px; width: 100px;
} }

1173
acupuncture-后台/src/views/index.vue

File diff suppressed because it is too large

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

@ -0,0 +1,404 @@
<template>
<div>
<div class="app-container">
<div class="dis" style="width: 100%">
<div style="flex: 1; margin-right: 20px">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">病种排名</span>
<div class="dis"></div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="diagnose" 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>
<div class="dis"></div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="system" 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>
<div class="dis"></div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="physique" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">体态评估TAPS</span>
<div class="dis"></div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="posture" style="width: 100%"></div>
</div>
</el-card>
</div>
</div>
</div>
<div class="app-container">
<div class="dis" style="width: 100%">
<div style="flex: 1; margin-right: 20px">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">失眠评估PHQ-9</span>
<div class="dis"></div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="agrypnia" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">焦虑HAMD-24</span>
<div class="dis"></div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="anxiety" style="width: 100%"></div>
</div>
</el-card>
</div>
</div>
</div>
</div>
</template>
<script>
import * as echarts from "echarts";
require("echarts/theme/macarons"); // echarts theme
import resize from "@/views/dashboard/mixins/resize";
import {
zlInfo
} from "@/api/indexCom.js";
import {
diagnoseEcharts,
systemEcharts,
physiqueEcharts,
postureEcharts,
agrypniaEcharts,
anxietyEcharts,
} from "./index";
export default {
name: "Post",
props: ["title"],
mixins: [resize],
data() {
return {
queryParams: {
param: {
startTime: "",
endTime: "",
},
},
loading: false,
diagnoseValue: null, //
systemValue: null, //
physiqueValue: null, //
postureValue: null, //
agrypniaValue: null, //
anxietyValue: null, //
//
systemObj: {
yxfpz: "隐形肥胖型", //
zfgdx: "脂肪过多型", //
fpx: "肥胖型", //
jrbzx: "肌肉不足型", //
jkjcx: "健康匀称型", //
czjrx: "超重肌肉型", //
xsx: "消瘦型", //
dzfx: "低脂肪型", //
ydyx: "运动员型", //
},
//
physiqueObj: {
phz: "平和质", //
qxz: "气虚质", //
yangxz: "阳虚质", //
yinxz: "阴虚质", //
tsz: "痰湿质", //湿
srz: "湿热质", //湿
xyz: "血瘀质", //
qyz: "气郁质", //
tlz: "特禀质", //
},
};
},
created() {
// this.Linepatient();
this.getData();
},
methods: {
statistics(_data, _type) {
this.initial(_data, _type); //
this.loading = true;
this.getData(); //
},
//
async getData() {
try {
await zlInfo(this.queryParams).then((res) => {
const {
jlfb,
smfb,
sort,
ttfb,
txfb,
zytz
} = res.data;
//
this.diagnoseValue = sort.sort((a, b) => a.total - b.total);
this.handleDiagnose();
//
this.systemValue = [];
delete txfb.total;
for (let key in txfb) {
let data = {
name: this.systemObj[key],
value: txfb[key],
};
this.systemValue.push(data);
}
this.handleSystem();
//
this.physiqueValue = [];
delete zytz.total;
for (let key in zytz) {
let data = {
name: this.physiqueObj[key],
value: zytz[key],
};
this.physiqueValue.push(data);
}
this.handlePhysique();
//
this.postureValue = [{
value: ttfb.score1,
name: "1分",
},
{
value: ttfb.score2,
name: "2分",
},
{
value: ttfb.score3,
name: "3分",
},
{
value: ttfb.score4,
name: "4分",
},
{
value: ttfb.score5,
name: "5分",
},
];
this.handlePosture();
// PHQ-9
this.agrypniaValue = [];
for (let key in smfb) {
this.agrypniaValue.push(smfb[key]);
}
this.handleAgrypnia();
//
this.anxietyValue = [];
for (let key in jlfb) {
this.anxietyValue.push(jlfb[key]);
}
this.handleAnxiety();
});
this.loading = false;
} catch (e) {}
},
//
handleDiagnose() {
diagnoseEcharts.series[0].data = this.diagnoseValue?.map((item) => {
return item.total;
});
diagnoseEcharts.yAxis.data = this.diagnoseValue?.map((item) => {
return item.type;
});
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("diagnose"), null, {
height: 300,
});
myChart.setOption(diagnoseEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
handleSystem() {
systemEcharts.series[0].data = this.systemValue?.map((item) => {
return item.value;
});
systemEcharts.xAxis.data = this.systemValue?.map((item) => {
return item.name;
});
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("system"), null, {
height: 300,
});
myChart.setOption(systemEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
handlePhysique() {
physiqueEcharts.series[0].data = this.physiqueValue?.map((item) => {
return item.value;
});
physiqueEcharts.xAxis.data = this.physiqueValue?.map((item) => {
return item.name;
});
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("physique"), null, {
height: 300,
});
myChart.setOption(physiqueEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
handlePosture() {
postureEcharts.series[0].data = this.postureValue;
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("posture"), null, {
height: 300,
});
myChart.setOption(postureEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
initial(_data, _type) {
_data[0] = this.$moment(_data[0]).format("YYYY-MM-DD");
_data[1] = this.$moment(_data[1]).format("YYYY-MM-DD");
this.queryParams.param = {
startTime: _data[0] + " " + "00:00:00",
endTime: _data[1] + " " + "23:59:59",
};
},
//
handleAgrypnia() {
agrypniaEcharts.series[0].data = this.agrypniaValue;
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("agrypnia"), null, {
height: 300,
});
myChart.setOption(agrypniaEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
handleAnxiety() {
anxietyEcharts.series[0].data = this.anxietyValue;
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("anxiety"), null, {
height: 300,
});
myChart.setOption(anxietyEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
getRenew() {
this.handleDiagnose();
this.handleSystem();
this.handlePhysique();
this.handlePosture();
this.handleAgrypnia();
this.handleAnxiety();
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
>>>.el-card__body {
padding: 10px 0 !important;
}
.dis {
display: flex;
}
.header-title {
font-size: 18px;
}
.title-box {
padding: 10px 20px;
border-bottom: 1px solid #dfe6ec;
}
.dian-box {
align-items: center;
}
.dian {
display: inline-block;
width: 16px;
height: 16px;
border-radius: 50%;
margin: 0 10px;
}
.title-box {
justify-content: space-between;
}
.>>>.el-radio--small.is-bordered {
margin-right: 20px !important;
margin-left: 0 !important;
}
>>>.el-radio__input {
display: none;
}
>>>.el-radio__label {
padding-left: 5px;
}
.app-container {
padding: 0;
display: flex;
justify-content: space-between;
}
.title {
display: flex;
align-items: center;
font-size: 20px;
font-weight: 600;
}
.title-bor {
display: inline-block;
height: 20px;
width: 6px;
background: #4f8bff;
margin-right: 10px;
border-radius: 8px;
}
</style>

383
acupuncture-后台/src/views/indexCom/XGZL.vue

@ -0,0 +1,383 @@
<template>
<div>
<div class="app-container">
<div class="dis" style="width: 100%">
<div style="flex: 1; margin-right: 20px">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">治疗类型分布</span>
<div class="dis">
<div class="dian-box dis">
<div class="dian-box dis">
<span class="dian" style="background: #91CC75"></span>
中西医结合
</div>
<span class="dian" style="background: #5470C6"></span>
纯中医
</div>
</div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="healType" 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>
<div class="dis"></div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="diseaseMethod" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1;">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">病种穴位分布</span>
<div class="dis">
</div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="acupoint" 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>
<div class="dis">
<div class="dian-box dis">
<div class="dian-box dis">
<span class="dian" style="background: #5C7BD9"></span>
治愈
</div>
<div class="dian-box dis">
<span class="dian" style="background: #91CC75"></span>
显效
</div>
<div class="dian-box dis">
<span class="dian" style="background: #FAC858"></span>
好转
</div>
<div class="dian-box dis">
<span class="dian" style="background: #EE6666"></span>
无效
</div>
</div>
</div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="effect" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">诊疗费用分布</span>
<div class="dis">
</div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="cost" style="width: 100%"></div>
</div>
</el-card>
</div>
</div>
</div>
<!-- <div class="app-container">
<div class="dis" style="width: 100%">
<div style="flex: 1; margin-right: 20px">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">治疗效果</span>
<div class="dis">
<div class="dian-box dis">
<div class="dian-box dis">
<span class="dian" style="background: #5C7BD9"></span>
治愈
</div>
<div class="dian-box dis">
<span class="dian" style="background: #91CC75"></span>
显效
</div>
<div class="dian-box dis">
<span class="dian" style="background: #FAC858"></span>
好转
</div>
<div class="dian-box dis">
<span class="dian" style="background: #EE6666"></span>
无效
</div>
</div>
</div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="effect" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">诊疗费用分布</span>
<div class="dis">
</div>
</div>
<div style="height: 300px" v-loading="loading">
<div id="cost" style="width: 100%"></div>
</div>
</el-card>
</div>
</div>
</div> -->
</div>
</template>
<script>
import * as echarts from "echarts";
require("echarts/theme/macarons"); // echarts theme
import resize from "@/views/dashboard/mixins/resize";
import {
zlType
} from "@/api/indexCom.js";
import {
healTypeEcharts,
diseaseMethodEcharts,
effectEcharts,
costEcharts
} from "./index";
export default {
name: "Post",
props: ["title"],
mixins: [resize],
data() {
return {
queryParams: {
param: {
startTime: "",
endTime: "",
},
},
loading: false,
healTypeValue: null, //
diseaseMethod: null, //
effectValue: null, //
costValue: null, //
effectObj: {
"zy": "治愈", //
"xx": "显效", //
"hz": "好转", //
"wx": "无效" //
}
};
},
created() {
// this.Linepatient();
this.getData();
},
methods: {
statistics(_data, _type) {
this.initial(_data, _type); //
this.loading = true;
this.getData(); //
},
//
async getData() {
try {
await zlType(this.queryParams).then((res) => {
const {
bzfffb,
bzxwfb,
zlfy,
zllxtj,
zlxwfb
} = res.data;
//
this.healTypeValue = [{
value: zllxtj.zxyjh,
name: "中西医结合",
},
{
value: zllxtj.czy,
name: "纯中医",
},
]
this.handleHealType();
//
// let diseaseMethod = []
// let index = 0
// for(let i in bzfffb){
// for(let k in bzfffb[i]){
// console.log(bzfffb[i][k])
// }
// index ++
// }
// this.handleDiseaseMethod()
//
this.effectValue = [{
name: '治愈',
value: zlxwfb.zy
},
{
name: '显效',
value: zlxwfb.xx
},
{
name: '好转',
value: zlxwfb.hz
},
{
name: '无效',
value: zlxwfb.wx
}
]
this.handleEffect()
//
this.costValue = [zlfy.score1, zlfy.score2, zlfy.score3, zlfy.score4, zlfy.score5]
this.handleCost()
});
this.loading = false;
} catch (e) {}
},
//
handleHealType() {
healTypeEcharts.series[0].data = this.healTypeValue
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("healType"), null, {
height: 300,
});
myChart.setOption(healTypeEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
handleDiseaseMethod() {
// diseaseMethodEcharts.series[0].data = this.diseaseMethod
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("diseaseMethod"), null, {
height: 300,
});
myChart.setOption(diseaseMethodEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
handleEffect() {
effectEcharts.series[0].data = this.effectValue
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("effect"), null, {
height: 300,
});
myChart.setOption(effectEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
handleCost() {
costEcharts.series[0].data = this.costValue
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("cost"), null, {
height: 300,
});
myChart.setOption(costEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
initial(_data, _type) {
_data[0] = this.$moment(_data[0]).format("YYYY-MM-DD");
_data[1] = this.$moment(_data[1]).format("YYYY-MM-DD");
this.queryParams.param = {
startTime: _data[0] + " " + "00:00:00",
endTime: _data[1] + " " + "23:59:59",
};
},
//
getRenew() {
this.handleHealType();
this.handleEffect();
this.handleCost()
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
>>>.el-card__body {
padding: 10px 0 !important;
}
.dis {
display: flex;
}
.header-title {
font-size: 18px;
}
.title-box {
padding: 10px 20px;
border-bottom: 1px solid #dfe6ec;
}
.dian-box {
align-items: center;
}
.dian {
display: inline-block;
width: 16px;
height: 16px;
border-radius: 50%;
margin: 0 10px;
}
.title-box {
justify-content: space-between;
}
.>>>.el-radio--small.is-bordered {
margin-right: 20px !important;
margin-left: 0 !important;
}
>>>.el-radio__input {
display: none;
}
>>>.el-radio__label {
padding-left: 5px;
}
.app-container {
padding: 0;
display: flex;
justify-content: space-between;
}
.title {
display: flex;
align-items: center;
font-size: 20px;
font-weight: 600;
}
.title-bor {
display: inline-block;
height: 20px;
width: 6px;
background: #4f8bff;
margin-right: 10px;
border-radius: 8px;
}
</style>

224
acupuncture-后台/src/views/indexCom/follow.vue

@ -0,0 +1,224 @@
<template>
<div>
<div class="app-container">
<div class="dis" style="width: 100%">
<div style="flex: 1;margin-right: 20px;">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">随访队列分布</span>
<div class="dis"></div>
</div>
<!-- 患者总数统计图 -->
<div style="height: 300px" v-loading="loading">
<div id="follow" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1;">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">失访原因分布</span>
<div class="dis"></div>
</div>
<!-- 患者总数统计图 -->
<div style="height: 300px" v-loading="loading">
<div id="lossFollow" style="width: 100%"></div>
</div>
</el-card>
</div>
</div>
</div>
</div>
</template>
<script>
import * as echarts from "echarts";
require("echarts/theme/macarons"); // echarts theme
import resize from "@/views/dashboard/mixins/resize";
import {
sffb,
sftj
} from "@/api/indexCom.js";
import {
followEcharts,
lossFollowEcharts
} from "./index";
export default {
name: "Post",
props: ["title"],
mixins: [resize],
data() {
return {
loading: false,
followValue: [], //
lossFollowValue: [], //
queryParams: {
param: {
startTime: "",
endTime: "",
},
},
};
},
created() {
// this.Linepatient()
this.getData();
},
methods: {
statistics(_data, _type) {
this.initial(_data, _type); //
this.loading = true;
this.getData(); //
},
//
async getData() {
try {
this.followValue = {}
await sffb(this.queryParams).then((res) => {
res.data.forEach(i => {
let data = [i.dsf, i.ljsf, i.cqsf, i.zc]
this.followValue[i.queueName] = data
})
this.handleFollow()
});
await sftj(this.queryParams).then((res) => {
this.lossFollowValue = res.data
this.handleLossFollow()
});
this.loading = false;
} catch (e) {
}
},
//
handleFollow() {
followEcharts.series = []
for (let key in this.followValue) {
let series = {
name: key,
data: this.followValue[key],
type: "bar",
barMaxWidth: 24, //
itemStyle: {
normal: {
// []
barBorderRadius: [50, 50, 0, 0],
},
},
}
followEcharts.series.push(series)
}
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("follow"), null, {
height: 300,
});
myChart.setOption(followEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
// 访
handleLossFollow() {
lossFollowEcharts.series[0].data = this.lossFollowValue?.map((item) => {
return item.num;
});
lossFollowEcharts.xAxis.data = this.lossFollowValue?.map((item) => {
return item.reason;
});
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("lossFollow"), null, {
height: 300,
});
myChart.setOption(lossFollowEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
initial(_data, _type) {
_data[0] = this.$moment(_data[0]).format("YYYY-MM-DD");
_data[1] = this.$moment(_data[1]).format("YYYY-MM-DD");
this.queryParams.param = {
startTime: _data[0] + " " + "00:00:00",
endTime: _data[1] + " " + "23:59:59",
};
},
//
getRenew() {
this.handleFollow();
this.handleLossFollow()
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
>>>.el-card__body {
padding: 10px 0 !important;
}
.dis {
display: flex;
}
.header-title {
font-size: 18px;
}
.title-box {
padding: 10px 20px;
border-bottom: 1px solid #dfe6ec;
}
.dian-box {
align-items: center;
}
.dian {
display: inline-block;
width: 16px;
height: 16px;
border-radius: 50%;
margin: 0 10px;
}
.title-box {
justify-content: space-between;
}
.>>>.el-radio--small.is-bordered {
margin-right: 20px !important;
margin-left: 0 !important;
}
>>>.el-radio__input {
display: none;
}
>>>.el-radio__label {
padding-left: 5px;
}
.app-container {
padding: 0;
display: flex;
justify-content: space-between;
}
.title {
display: flex;
align-items: center;
font-size: 20px;
font-weight: 600;
}
.title-bor {
display: inline-block;
height: 20px;
width: 6px;
background: #4f8bff;
margin-right: 10px;
border-radius: 8px;
}
</style>

939
acupuncture-后台/src/views/indexCom/index.js

@ -0,0 +1,939 @@
import * as echarts from "echarts";
// -------- 患者信息统计 --------
// 患者总数
export const HZXX = {
tooltip: {
trigger: "item",
},
title: {
text: "100",
left: "center",
top: "40%",
textStyle: {
textAlign: "center",
color: "#393D4E",
fontSize: 40,
fontWeight: 600,
},
},
grid: {
top: "0%",
left: "0",
right: "0%",
bottom: "0%",
containLabel: true,
},
color: ["#4f8bff", "#ffcd6c", "#00d1a1", "#a794fe"],
graphic: {
type: "text",
left: "center",
top: "56%",
style: {
text: "患者总数",
color: "#70798C",
textAlign: "center",
fill: "#999999",
fontSize: 18,
width: "50px",
},
},
series: [
{
type: "pie",
radius: ["60%", "80%"],
avoidLabelOverlap: false,
label: {
show: false,
position: "center",
},
labelLine: {
show: false,
},
data: [],
},
],
};
// 患者性别
export const gende = {
tooltip: {
trigger: "item",
},
title: {
text: "",
left: "center",
top: "40%",
textStyle: {
textAlign: "center",
color: "#393D4E",
fontSize: 40,
fontWeight: 600,
},
},
grid: {
top: "0%",
left: "0",
right: "0%",
bottom: "0%",
containLabel: true,
},
color: ["#4F8BFF", "#FE4943"],
series: [
{
type: "pie",
radius: "80%",
avoidLabelOverlap: false,
label: {
show: false,
position: "center",
normal:{
show:true,
position:'inner',
formatter: '{b}:{c}个',
textStyle:{
color:'#fff'
}
},
},
labelLine: {
show: false,
},
data: [],
},
],
};
// 年龄分布
export const ageEcharts = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
formatter: function (params) {
let res1 = params[0].name;
for (var i = 0, l = params.length; i < l; i++) {
res1 +=
"<br/>" +
`<span style="background:${params[i].color};width:12px;display:inline-block;height:12px;border-radius:50%;margin-right:5px;"></span>` +
params[i].seriesName +
" : " +
params[i].value +
"个";
}
return res1;
},
},
xAxis: {
type: "category",
data: ["<40岁","41-50岁","51-60岁","61-70岁","71-80岁",">80岁",],
},
grid: {
top: "12%",
left: "5%",
right: "2%",
bottom: "0%",
containLabel: true,
},
yAxis: {
name: "数量( 个 )",
type: "value",
minInterval: 1,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
},
},
},
series: [
{
name: "数量:",
data: [],
type: "bar",
barMaxWidth: 24, //柱图宽度
itemStyle: {
normal: {
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
barBorderRadius: [50, 50, 0, 0],
color: function (params)
{
var colorList = ['#FF9966', '#66B3FF', '#99FF99','#FFCC66','#FF6699','#CCCCCC'];
return colorList[params.dataIndex]
},
},
},
},
],
};
// 病种分布
export const diseaseEcharts = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
formatter: function (params) {
let res1 = params[0].name;
for (var i = 0, l = params.length; i < l; i++) {
res1 +=
"<br/>" +
`<span style="background:${params[i].color};width:12px;display:inline-block;height:12px;border-radius:50%;margin-right:5px;"></span>` +
params[i].seriesName +
" : " +
params[i].value +
"个";
}
return res1;
},
},
xAxis: {
type: "category",
data: ["<40岁","41-50岁","51-60岁","61-70岁","71-80岁",">80岁",],
},
grid: {
top: "12%",
left: "5%",
right: "2%",
bottom: "0%",
containLabel: true,
},
yAxis: {
name: "数量( 个 )",
type: "value",
minInterval: 1,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
},
},
},
series: [
{
name: "数量:",
data: [],
type: "bar",
barMaxWidth: 24, //柱图宽度
color: "#4f8bff",
itemStyle: {
normal: {
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
barBorderRadius: [50, 50, 0, 0],
},
},
},
],
};
// -------- 诊疗信息统计 --------
// 病种
export const diagnoseEcharts = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
formatter: function (params) {
let res1 = params[0].name;
for (var i = 0, l = params.length; i < l; i++) {
res1 +=
"<br/>" +
`<span style="background:${params[i].color};width:12px;display:inline-block;height:12px;border-radius:50%;margin-right:5px;"></span>` +
params[i].seriesName +
" : " +
params[i].value +
"个";
}
return res1;
},
},
xAxis: {
name: "数量( 个 )",
type: "value",
minInterval: 1,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
},
},
},
grid: {
top: "12%",
left: "1%",
right: "14%",
bottom: "0%",
containLabel: true,
},
yAxis: {
type: "category",
data: [],
},
series: [
{
name: "数量:",
data: [],
type: "bar",
barMaxWidth: 24, //柱图宽度
color: "#4f8bff",
},
],
};
// 体系
export const systemEcharts = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
formatter: function (params) {
let res1 = params[0].name;
for (var i = 0, l = params.length; i < l; i++) {
res1 +=
"<br/>" +
`<span style="background:${params[i].color};width:12px;display:inline-block;height:12px;border-radius:50%;margin-right:5px;"></span>` +
params[i].seriesName +
" : " +
params[i].value +
"个";
}
return res1;
},
},
xAxis: {
type: "category",
data: [],
},
grid: {
top: "12%",
left: "5%",
right: "2%",
bottom: "0%",
containLabel: true,
},
yAxis: {
name: "数量( 个 )",
type: "value",
minInterval: 1,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
},
},
},
series: [
{
name: "数量:",
data: [],
type: "bar",
barMaxWidth: 24, //柱图宽度
color: "#4f8bff",
itemStyle: {
normal: {
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
barBorderRadius: [50, 50, 0, 0],
},
},
},
],
};
// 体质
export const physiqueEcharts = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
formatter: function (params) {
let res1 = params[0].name;
for (var i = 0, l = params.length; i < l; i++) {
res1 +=
"<br/>" +
`<span style="background:${params[i].color};width:12px;display:inline-block;height:12px;border-radius:50%;margin-right:5px;"></span>` +
params[i].seriesName +
" : " +
params[i].value +
"个";
}
return res1;
},
},
xAxis: {
type: "category",
data: [],
},
grid: {
top: "12%",
left: "5%",
right: "2%",
bottom: "0%",
containLabel: true,
},
yAxis: {
name: "数量( 个 )",
type: "value",
minInterval: 1,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
},
},
},
series: [
{
name: "数量:",
data: [],
type: "bar",
barMaxWidth: 24, //柱图宽度
color: "#4f8bff",
itemStyle: {
normal: {
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
barBorderRadius: [50, 50, 0, 0],
},
},
},
],
};
// 体态
export const postureEcharts = {
tooltip: {
trigger: "item",
},
title: {
text: "",
left: "center",
top: "40%",
textStyle: {
textAlign: "center",
color: "#393D4E",
fontSize: 40,
fontWeight: 600,
},
},
grid: {
top: "0%",
left: "0",
right: "0%",
bottom: "0%",
containLabel: true,
},
color: ["#4f8bff", "#ffcd6c", "#00d1a1", "#a794fe","#EE6666"],
series: [
{
type: "pie",
radius: "80%",
avoidLabelOverlap: false,
label: {
show: false,
position: "center",
normal:{
show:true,
position:'inner',
formatter: '{b}:{c}个',
textStyle:{
color:'#fff'
}
},
},
labelLine: {
show: false,
},
data: [],
},
],
};
// 失眠
export const agrypniaEcharts = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
formatter: function (params) {
let res1 = params[0].name;
for (var i = 0, l = params.length; i < l; i++) {
res1 +=
"<br/>" +
`<span style="background:${params[i].color};width:12px;display:inline-block;height:12px;border-radius:50%;margin-right:5px;"></span>` +
params[i].seriesName +
" : " +
params[i].value +
"个";
}
return res1;
},
},
xAxis: {
type: "category",
data: ['0~4分', '5~9分', '10~14分','15~19分','20~27分'],
},
grid: {
top: "12%",
left: "5%",
right: "2%",
bottom: "0%",
containLabel: true,
},
yAxis: {
name: "数量( 个 )",
type: "value",
minInterval: 1,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
},
},
},
series: [
{
name: "数量:",
data: [],
type: "bar",
barMaxWidth: 24, //柱图宽度
color: "#4f8bff",
itemStyle: {
normal: {
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
barBorderRadius: [50, 50, 0, 0],
},
},
},
],
};
// 焦虑度
export const anxietyEcharts = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
formatter: function (params) {
let res1 = params[0].name;
for (var i = 0, l = params.length; i < l; i++) {
res1 +=
"<br/>" +
`<span style="background:${params[i].color};width:12px;display:inline-block;height:12px;border-radius:50%;margin-right:5px;"></span>` +
params[i].seriesName +
" : " +
params[i].value +
"个";
}
return res1;
},
},
xAxis: {
type: "category",
data: ['<8分', '8~20分','21~35分','>35分'],
},
grid: {
top: "12%",
left: "5%",
right: "2%",
bottom: "0%",
containLabel: true,
},
yAxis: {
name: "数量( 个 )",
type: "value",
minInterval: 1,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
},
},
},
series: [
{
name: "数量:",
data: [],
type: "bar",
barMaxWidth: 24, //柱图宽度
color: "#4f8bff",
itemStyle: {
normal: {
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
barBorderRadius: [50, 50, 0, 0],
},
},
},
],
};
// -------- 治疗类型 --------
// 治疗类型
export const healTypeEcharts = {
tooltip: {
trigger: "item",
},
title: {
text: "",
left: "center",
top: "40%",
textStyle: {
textAlign: "center",
color: "#393D4E",
fontSize: 40,
fontWeight: 600,
},
},
grid: {
top: "0%",
left: "0",
right: "0%",
bottom: "0%",
containLabel: true,
},
color: ["#91CC75", "#5470C6"],
series: [
{
type: "pie",
radius: "80%",
avoidLabelOverlap: false,
label: {
show: false,
position: "center",
normal:{
show:true,
position:'inner',
formatter: '{b}:{c}个',
textStyle:{
color:'#fff'
}
},
},
labelLine: {
show: false,
},
data: [],
},
],
};
// 病种方法
export const diseaseMethodEcharts = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
formatter: function (params) {
let res1 = params[0].name;
for (var i = 0, l = params.length; i < l; i++) {
res1 +=
"<br/>" +
`<span style="background:${params[i].color};width:12px;display:inline-block;height:12px;border-radius:50%;margin-right:5px;"></span>` +
params[i].seriesName +
" : " +
params[i].value +
"个";
}
return res1;
},
},
xAxis: {
type: "category",
data: ['肥胖症', '失眠症','其他'],
},
grid: {
top: "12%",
left: "5%",
right: "2%",
bottom: "0%",
containLabel: true,
},
yAxis: {
name: "数量( 个 )",
type: "value",
minInterval: 1,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
},
},
},
series: [
{
name: "数量1:",
data: [1,2],
type: "bar",
barMaxWidth: 24, //柱图宽度
itemStyle: {
normal: {
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
barBorderRadius: [50, 50, 0, 0],
},
},
},
{
name: "数量2:",
data: [1,3],
type: "bar",
barMaxWidth: 24, //柱图宽度
itemStyle: {
normal: {
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
barBorderRadius: [50, 50, 0, 0],
},
},
},
],
};
// 治疗效果
export const effectEcharts = {
tooltip: {
trigger: "item",
},
title: {
text: "",
left: "center",
top: "40%",
textStyle: {
textAlign: "center",
color: "#393D4E",
fontSize: 40,
fontWeight: 600,
},
},
grid: {
top: "0%",
left: "0",
right: "0%",
bottom: "0%",
containLabel: true,
},
color: ["#5C7BD9", "#91CC75",'#FAC858','#EE6666'],
series: [
{
type: "pie",
radius: "80%",
avoidLabelOverlap: false,
label: {
show: false,
position: "center",
normal:{
show:true,
position:'inner',
formatter: '{b}:{c}个',
textStyle:{
color:'#fff'
}
},
},
labelLine: {
show: false,
},
data: [],
},
],
};
// 诊疗费
export const costEcharts = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
formatter: function (params) {
let res1 = params[0].name;
for (var i = 0, l = params.length; i < l; i++) {
res1 +=
"<br/>" +
`<span style="background:${params[i].color};width:12px;display:inline-block;height:12px;border-radius:50%;margin-right:5px;"></span>` +
params[i].seriesName +
" : " +
params[i].value +
"个";
}
return res1;
},
},
xAxis: {
type: "category",
data: ['<300元','300 ~ 900元','900 ~ 2000元','2000 ~ 5000元','>5000元'],
},
grid: {
top: "12%",
left: "5%",
right: "2%",
bottom: "0%",
containLabel: true,
},
yAxis: {
name: "数量( 个 )",
type: "value",
minInterval: 1,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
},
},
},
series: [
{
name: "数量:",
data: [],
type: "bar",
barMaxWidth: 24, //柱图宽度
itemStyle: {
normal: {
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
barBorderRadius: [50, 50, 0, 0],
},
},
},
],
};
// -------- 随访 --------
export const followEcharts = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
formatter: function (params) {
let res1 = params[0].name;
for (var i = 0, l = params.length; i < l; i++) {
res1 +=
"<br/>" +
`<span style="background:${params[i].color};width:12px;display:inline-block;height:12px;border-radius:50%;margin-right:5px;"></span>` +
params[i].seriesName +
" : " +
params[i].value +
"个";
}
return res1;
},
},
xAxis: {
type: "category",
data: ['待随访','临近随访','超期随访','正常随访'],
},
grid: {
top: "12%",
left: "5%",
right: "2%",
bottom: "0%",
containLabel: true,
},
yAxis: {
name: "数量( 个 )",
type: "value",
minInterval: 1,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
},
},
},
series: [
],
};
export const lossFollowEcharts = {
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
backgroundColor: "#6a7985",
},
},
formatter: function (params) {
let res1 = params[0].name;
for (var i = 0, l = params.length; i < l; i++) {
res1 +=
"<br/>" +
`<span style="background:${params[i].color};width:12px;display:inline-block;height:12px;border-radius:50%;margin-right:5px;"></span>` +
params[i].seriesName +
" : " +
params[i].value +
"个";
}
return res1;
},
},
xAxis: {
type: "category",
data: ['<300元','300 ~ 900元','900 ~ 2000元','2000 ~ 5000元','>5000元'],
},
grid: {
top: "12%",
left: "5%",
right: "2%",
bottom: "0%",
containLabel: true,
},
yAxis: {
name: "数量( 个 )",
type: "value",
minInterval: 1,
splitLine: {
show: true,
lineStyle: {
type: "dashed",
},
},
},
series: [
{
name: "数量:",
data: [],
type: "bar",
barMaxWidth: 24, //柱图宽度
itemStyle: {
normal: {
//这里设置柱形图圆角 [左上角,右上角,右下角,左下角]
barBorderRadius: [50, 50, 0, 0],
},
},
}
],
};

325
acupuncture-后台/src/views/indexCom/patient.vue

@ -0,0 +1,325 @@
<template>
<div>
<div class="app-container">
<div class="dis" style="width: 100%">
<div style="flex: 1; margin-right: 20px">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">患者总数</span>
<div class="dis"></div>
</div>
<!-- 患者总数统计图 -->
<div style="height: 300px" v-loading="loading">
<div id="patienty" 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>
<div class="dis">
<div class="dian-box dis">
<div class="dian-box dis">
<span class="dian" style="background: #4f8bff"></span>
</div>
<span class="dian" style="background: #fe4943"></span>
</div>
</div>
</div>
<!-- 性别统计图 -->
<div style="height: 300px" v-loading="loading">
<div id="gender" 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>
<div class="dis"></div>
</div>
<!-- 患者总数统计图 -->
<div style="height: 300px" v-loading="loading">
<div id="age" style="width: 100%"></div>
</div>
</el-card>
</div>
<div style="flex: 1;">
<el-card shadow="always">
<div class="dis title-box">
<span class="header-title">既往病种分布</span>
<div class="dis">
<!-- <div class="dian-box dis">
<div class="dian-box dis">
<span class="dian" style="background: #4f8bff"></span>
</div>
<span class="dian" style="background: #ffcd6c"></span>
</div> -->
</div>
</div>
<!-- 既往病种分布 -->
<div style="height: 300px" v-loading="loading">
<div id="disease" style="width: 100%"></div>
</div>
</el-card>
</div>
</div>
</div>
</div>
</template>
<script>
import * as echarts from "echarts";
require("echarts/theme/macarons"); // echarts theme
import resize from "@/views/dashboard/mixins/resize";
import {
patientTotal,
queryByDatePatient
} from "@/api/indexCom.js";
import {
HZXX,
HZXXSJFX,
gende,
ageEcharts,
diseaseEcharts
} from "./index";
export default {
name: "Post",
props: ["title"],
mixins: [resize],
data() {
return {
loading: false,
HZXXvalue: null, //
gendeValue: null, //
ageValue: null, //
diseaseValue: null, //
queryParams: {
param: {
startTime: "",
endTime: "",
},
},
jwbzObj: {
"gxy": "高血压", //
"nxgb": "脑血管病", //
"exzl": "恶性肿瘤", //
"gxb": "冠心病", //
"jsjb": "精神疾病", //
"whsezcky": "胃和十二指肠溃疡", //
"fpz": "肥胖症", //
"gzssz": "骨质疏松症", //
"ycxXtxjb": "遗传性、先天性疾病", //
"tnb": "糖尿病", //尿
"mxfxjb": "慢性肺系疾病", //
"gzxz": "高脂血症", //
"gzjb": "肝脏疾病", //
"gmxjb": "过敏性疾病", //
"gjy": "关节炎", //
"tf": "痛风", //
"sySb": "肾炎、肾病", //
"other": "其他" //
}
};
},
created() {
// this.Linepatient()
this.getData();
},
methods: {
statistics(_data, _type) {
this.initial(_data, _type); //
this.loading = true;
this.getData(); //
},
//
async getData() {
try {
await patientTotal(this.queryParams).then((res) => {
//
this.HZXXvalue = [{
value: res.data.totalPatients,
name: "患者总数"
}, ];
//
this.gendeValue = [{
value: res.data.gender.male,
name: "男"
},
{
value: res.data.gender.female,
name: "女"
}
];
//
let ageValue = res.data.age
this.ageValue = [ageValue.num1, ageValue.num2, ageValue.num2, ageValue.num4, ageValue
.num5, ageValue.num6
]
//
let diseaseValue = res.data.jwbz
this.diseaseValue = []
for (let key in diseaseValue) {
let data = {
name: this.jwbzObj[key],
value: diseaseValue[key]
}
this.diseaseValue.push(data)
}
this.Linepatient(); //
this.handleAge(); //
this.columnar(); //
this.handleDisease(); //
});
this.loading = false;
} catch (e) {}
},
//
Linepatient() {
HZXX.title.text = this.HZXXvalue[0].value;
HZXX.series[0].data = this.HZXXvalue;
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("patienty"), null, {
height: 300,
});
myChart.setOption(HZXX, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
columnar() {
gende.series[0].data = this.gendeValue;
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("gender"), null, {
height: 300,
});
myChart.setOption(gende, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
handleAge() {
ageEcharts.series[0].data = this.ageValue
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("age"), null, {
height: 300,
});
myChart.setOption(ageEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
handleDisease() {
diseaseEcharts.series[0].data = this.diseaseValue?.map((item) => {
return item.value;
});
diseaseEcharts.xAxis.data = this.diseaseValue?.map((item) => {
return item.name;
});
this.$nextTick(() => {
var myChart = echarts.init(document.getElementById("disease"), null, {
height: 300,
});
myChart.setOption(diseaseEcharts, true);
myChart.resize();
window.onresize = myChart.resize;
});
},
//
initial(_data, _type) {
_data[0] = this.$moment(_data[0]).format("YYYY-MM-DD");
_data[1] = this.$moment(_data[1]).format("YYYY-MM-DD");
this.queryParams.param = {
startTime: _data[0] + " " + "00:00:00",
endTime: _data[1] + " " + "23:59:59",
};
},
//
getRenew() {
this.Linepatient(); //
this.handleAge(); //
this.columnar(); //
this.handleDisease(); //
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
>>>.el-card__body {
padding: 10px 0 !important;
}
.dis {
display: flex;
}
.header-title {
font-size: 18px;
}
.title-box {
padding: 10px 20px;
border-bottom: 1px solid #dfe6ec;
}
.dian-box {
align-items: center;
}
.dian {
display: inline-block;
width: 16px;
height: 16px;
border-radius: 50%;
margin: 0 10px;
}
.title-box {
justify-content: space-between;
}
.>>>.el-radio--small.is-bordered {
margin-right: 20px !important;
margin-left: 0 !important;
}
>>>.el-radio__input {
display: none;
}
>>>.el-radio__label {
padding-left: 5px;
}
.app-container {
padding: 0;
display: flex;
justify-content: space-between;
}
.title {
display: flex;
align-items: center;
font-size: 20px;
font-weight: 600;
}
.title-bor {
display: inline-block;
height: 20px;
width: 6px;
background: #4f8bff;
margin-right: 10px;
border-radius: 8px;
}
</style>

179
acupuncture-后台/src/views/indexCom/query.vue

@ -0,0 +1,179 @@
<template>
<div class="app-container">
<div class="title1">
<span class="title-bor"></span>
{{ title }}
</div>
<div>
<div>
<!-- <el-radio-group
v-model="radioValue"
size="small"
style="height: 36px"
@change="radioChange"
>
<el-radio label="0" border style="margin: 0 20px 0 0"></el-radio>
<el-radio label="1" border style="margin: 0 20px 0 0"></el-radio>
<el-radio label="2" border style="margin: 0 20px 0 0"></el-radio>
<el-radio label="3" border style="margin: 0 20px 0 0"></el-radio>
</el-radio-group> -->
<el-date-picker
v-model="pickerValue"
type="daterange"
align="right"
unlink-panels
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
@change="pickerChage"
>
</el-date-picker>
</div>
</div>
</div>
</template>
<script>
// import { deviceType } from "./index.js";
// this.$store.commit('headerFun', data)
export default {
name: "Post",
props: ["title", "type"],
data() {
return {
radioValue: "1",
radioTime: [],
pickerValue: null,
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
};
},
created() {
console.log(this.pickerValue, 222);
},
methods: {
radioChange() {
const start = new Date();
const end = new Date();
this.timeType = 4;
if (this.radioValue == 0) {
this.timeType = 4;
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
this.radioTime = [start, end];
}
if (this.radioValue == 1) {
this.timeType = 4;
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
this.radioTime = [start, end];
}
if (this.radioValue == 2) {
this.timeType = 1;
const now = new Date(); //
const nowYear = now.getFullYear(); //
const nowMonth = now.getMonth(); //
const nowDay = now.getDate(); //
const nowDayOfWeek = now.getDay(); //
const jd = Math.ceil((nowMonth + 1) / 3); //
const startDate = new Date(nowYear, (jd - 1) * 3, 1);
const endDate = new Date(nowYear, jd * 3, 0);
this.radioTime = [startDate, endDate];
}
if (this.radioValue == 3) {
this.timeType = 1;
end.setTime(start.getTime());
start.setTime(start.getTime() - 3600 * 1000 * 24 * 365);
this.radioTime = [start, end];
}
this.$emit(
"radio-change",
this.pickerValue || this.radioTime,
this.type,
this.timeType
);
},
pickerChage() {
if (!this.pickerValue) {
this.radioChange();
}
console.log(this.pickerValue, 111);
this.radioTime = [];
this.timeType = 4;
if (this.radioValue == 0) {
this.timeType = 4;
}
if (this.radioValue == 1) {
this.timeType = 4;
}
if (this.radioValue == 2) {
this.timeType = 1;
}
if (this.radioValue == 3) {
this.timeType = 1;
}
this.$emit("picker-change", this.pickerValue, this.type, this.timeType);
},
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
. >>> .el-radio--small.is-bordered {
margin-right: 20px !important;
margin-left: 0 !important;
}
>>> .el-radio__input {
display: none;
}
>>> .el-radio__label {
padding-left: 5px;
}
.app-container {
padding: 0;
display: flex;
justify-content: space-between;
}
.title1 {
display: flex;
align-items: center;
font-size: 20px;
font-weight: 600;
}
.title-bor {
display: inline-block;
height: 20px;
width: 6px;
background: #4f8bff;
margin-right: 10px;
border-radius: 8px;
}
</style>

60
acupuncture-后台/src/views/login.vue

@ -88,27 +88,41 @@
import { getCodeImg } from "@/api/login"; import { getCodeImg } from "@/api/login";
import Cookies from "js-cookie"; import Cookies from "js-cookie";
import { encrypt, decrypt } from "@/utils/jsencrypt"; import { encrypt, decrypt } from "@/utils/jsencrypt";
import { commonQueue } from "@/api/followupFile";
export default { export default {
name: "Login", name: "Login",
data() { data() {
return { return {
codeUrl: "", codeUrl: "",
loginForm: { loginForm: {
username: "admin", username: "",
password: "admin123", password: "",
rememberMe: false, rememberMe: false,
code: "", code: "",
uuid: "", uuid: "",
}, },
loginRules: { loginRules: {
username: [ username: [
{ required: true, trigger: "blur", message: "请输入您的账号" }, {
required: true,
trigger: "blur",
message: "请输入您的账号",
},
], ],
password: [ password: [
{ required: true, trigger: "blur", message: "请输入您的密码" }, {
required: true,
trigger: "blur",
message: "请输入您的密码",
},
],
code: [
{
required: true,
trigger: "change",
message: "请输入验证码",
},
], ],
code: [{ required: true, trigger: "change", message: "请输入验证码" }],
}, },
loading: false, loading: false,
// //
@ -157,7 +171,9 @@ export default {
if (valid) { if (valid) {
this.loading = true; this.loading = true;
if (this.loginForm.rememberMe) { if (this.loginForm.rememberMe) {
Cookies.set("username", this.loginForm.username, { expires: 30 }); Cookies.set("username", this.loginForm.username, {
expires: 30,
});
Cookies.set("password", encrypt(this.loginForm.password), { Cookies.set("password", encrypt(this.loginForm.password), {
expires: 30, expires: 30,
}); });
@ -172,7 +188,12 @@ export default {
this.$store this.$store
.dispatch("Login", this.loginForm) .dispatch("Login", this.loginForm)
.then(() => { .then(() => {
this.$router.push({ path: this.redirect || "/" }).catch(() => {}); this.$router
.push({
path: this.redirect || "/",
})
.catch(() => {});
this.getCommonQueue();
}) })
.catch(() => { .catch(() => {
this.loading = false; this.loading = false;
@ -183,6 +204,20 @@ export default {
} }
}); });
}, },
//
getCommonQueue() {
commonQueue({
pageNum: -1,
param: {
status: 1,
},
}).then((res) => {
res.data.list.forEach((i) => {
i.type = 1;
});
localStorage.setItem("commonQueue", JSON.stringify(res.data.list));
});
},
}, },
}; };
</script> </script>
@ -196,6 +231,7 @@ export default {
background-image: url("../assets/images/login-background.jpg"); background-image: url("../assets/images/login-background.jpg");
background-size: cover; background-size: cover;
} }
.title { .title {
margin: 0px auto 30px auto; margin: 0px auto 30px auto;
text-align: center; text-align: center;
@ -207,32 +243,39 @@ export default {
background: #ffffff; background: #ffffff;
width: 400px; width: 400px;
padding: 25px 25px 5px 25px; padding: 25px 25px 5px 25px;
.el-input { .el-input {
height: 38px; height: 38px;
input { input {
height: 38px; height: 38px;
} }
} }
.input-icon { .input-icon {
height: 39px; height: 39px;
width: 14px; width: 14px;
margin-left: 2px; margin-left: 2px;
} }
} }
.login-tip { .login-tip {
font-size: 13px; font-size: 13px;
text-align: center; text-align: center;
color: #bfbfbf; color: #bfbfbf;
} }
.login-code { .login-code {
width: 33%; width: 33%;
height: 38px; height: 38px;
float: right; float: right;
img { img {
cursor: pointer; cursor: pointer;
vertical-align: middle; vertical-align: middle;
} }
} }
.el-login-footer { .el-login-footer {
height: 40px; height: 40px;
line-height: 40px; line-height: 40px;
@ -245,6 +288,7 @@ export default {
font-size: 12px; font-size: 12px;
letter-spacing: 1px; letter-spacing: 1px;
} }
.login-code-img { .login-code-img {
height: 38px; height: 38px;
} }

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

File diff suppressed because it is too large

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

@ -1,39 +1,21 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<el-form <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch"
:model="queryParams" label-width="68px">
ref="queryForm"
size="small"
:inline="true"
v-show="showSearch"
label-width="68px"
>
<el-form-item label="" prop="noticeTitle"> <el-form-item label="" prop="noticeTitle">
<el-input <el-input v-model="queryParams.param.keywords" placeholder="支持姓名、全拼、简拼、手机号吗、证件号码" clearable
v-model="queryParams.param.keywords" @keyup.enter.native="handleQuery" />
placeholder="支持姓名、全拼、简拼、手机号吗、证件号码"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item> </el-form-item>
<el-form-item label="年龄范围" prop="createBy"> <el-form-item label="年龄范围" prop="createBy">
<div class="form-item-age"> <div class="form-item-age">
<el-input <el-input v-model="queryParams.param.startAge" placeholder="最小年龄" clearable
v-model="queryParams.param.startAge" @keyup.enter.native="handleQuery" />
placeholder="最小年龄"
clearable
@keyup.enter.native="handleQuery"
/>
<span></span> <span></span>
<el-input <el-input v-model="queryParams.param.endAge" placeholder="最大年龄" clearable
v-model="queryParams.param.endAge" @keyup.enter.native="handleQuery" />
placeholder="最大年龄"
clearable
@keyup.enter.native="handleQuery"
/>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="建档组织" prop="tenantId"> <!-- <el-form-item label="建档组织" prop="tenantId">
<el-select <el-select
v-model="queryParams.param.tenantId" v-model="queryParams.param.tenantId"
placeholder="请选择" placeholder="请选择"
@ -41,26 +23,16 @@
> >
<el-option label="dict.label" value="dict.value" /> <el-option label="dict.label" value="dict.value" />
</el-select> </el-select>
</el-form-item> </el-form-item> -->
<el-form-item label="数据来源" prop="sourceId"> <el-form-item label="数据来源" prop="sourceId">
<el-select <el-select v-model="queryParams.param.sourceId" placeholder="请选择" clearable>
v-model="queryParams.param.sourceId"
placeholder="请选择"
clearable
>
<el-option label="筛查" :value="0" /> <el-option label="筛查" :value="0" />
<el-option label="录入" :value="1" /> <el-option label="录入" :value="1" />
<el-option label="HIS" :value="2" /> <el-option label="HIS" :value="2" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</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 icon="el-icon-refresh" size="mini" @click="resetQuery">
重置 重置
</el-button> </el-button>
@ -69,229 +41,84 @@
<el-row :gutter="10" class="mb8"> <el-row :gutter="10" class="mb8">
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="primary" plain icon="el-icon-plus" size="mini" @click="handleAdd">新增</el-button>
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="danger" plain icon="el-icon-delete" size="mini" :disabled="multiple"
type="danger" @click="handleDelete">删除</el-button>
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
>删除</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="info" plain icon="el-icon-bottom" size="mini"
type="info" @click="handleDownload">下载模版</el-button>
plain
icon="el-icon-bottom"
size="mini"
:disabled="multiple"
@click="handleDelete"
>下载模版</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="warning" plain icon="el-icon-upload2" size="mini" @click="handleImport">导入</el-button>
type="warning"
plain
icon="el-icon-upload2"
size="mini"
@click="handleImport"
>导入</el-button
>
</el-col> </el-col>
<el-col :span="1.5"> <el-col :span="1.5">
<el-button <el-button type="warning" plain icon="el-icon-download" size="mini" @click="handleExport">导出</el-button>
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
>导出</el-button
>
</el-col> </el-col>
<right-toolbar <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
:showSearch.sync="showSearch"
@queryTable="getList"
></right-toolbar>
</el-row> </el-row>
<el-table <el-table v-loading="loading" :data="listDat" @selection-change="handleSelectionChange" max-height="600">
v-loading="loading"
:data="listDat"
@selection-change="handleSelectionChange"
max-height="600"
>
<el-table-column type="selection" width="55" align="center" /> <el-table-column type="selection" width="55" align="center" />
<el-table-column label="姓名" align="center" prop="name" width="100" /> <el-table-column label="姓名" align="center" prop="name" min-width="100" fixed />
<el-table-column <el-table-column label="性别" align="center" prop="gender" show-overflow-tooltip min-width="100" fixed>
label="性别"
align="center"
prop="gender"
show-overflow-tooltip
width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.gender == 0"></span> <span v-if="scope.row.gender == 0"></span>
<span v-if="scope.row.gender == 1"></span> <span v-if="scope.row.gender == 1"></span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="出生日期" align="center" prop="birthDate" show-overflow-tooltip min-width="150" fixed />
label="出生日期" <el-table-column label="民族" align="center" prop="ethnicity" show-overflow-tooltip min-width="100" />
align="center" <el-table-column label="受教育年限" align="center" prop="educationYears" show-overflow-tooltip min-width="100" />
prop="birthDate" <el-table-column label="手机号码" align="center" prop="phone" show-overflow-tooltip min-width="150" />
show-overflow-tooltip <el-table-column label="证件类型" align="center" prop="idCardType" show-overflow-tooltip min-width="200">
width="150"
/>
<el-table-column
label="民族"
align="center"
prop="ethnicity"
show-overflow-tooltip
width="100"
/>
<el-table-column
label="受教育年限"
align="center"
prop="educationYears"
show-overflow-tooltip
width="100"
/>
<el-table-column
label="手机号码"
align="center"
prop="phone"
show-overflow-tooltip
width="150"
/>
<el-table-column
label="证件类型"
align="center"
prop="idCardType"
show-overflow-tooltip
width="200"
>
<template slot-scope="scope"> <template slot-scope="scope">
{{ idCardTypeValue[scope.row.idCardType] }} {{ idCardTypeValue[scope.row.idCardType] }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column label="证件号码" align="center" prop="idCard" show-overflow-tooltip min-width="180" />
label="证件号码"
align="center"
prop="idCard"
show-overflow-tooltip
width="180"
/>
<el-table-column <el-table-column label="建档人" align="center" prop="createBy" show-overflow-tooltip min-width="100" />
label="建档人" <el-table-column label="建档组织(医院名称)" align="center" prop="tenantName" show-overflow-tooltip min-width="150" />
align="center" <el-table-column label="建档日期" align="center" min-width="140">
prop="createBy"
show-overflow-tooltip
width="100"
/>
<el-table-column
label="建档组织(医院名称)"
align="center"
prop="organization"
show-overflow-tooltip
width="150"
/>
<el-table-column label="建档日期" align="center" width="130">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{ <span>{{
parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}") parseTime(scope.row.createTime, "{y}-{m}-{d} {h}:{i}")
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column fixed="right" label="来源" align="center" prop="source" show-overflow-tooltip min-width="100">
fixed="right"
label="来源"
align="center"
prop="source"
show-overflow-tooltip
width="100"
>
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.gender == 0">筛查</span> <span v-if="scope.row.source == 0">筛查</span>
<span v-if="scope.row.gender == 1">录入</span> <span v-if="scope.row.source == 1">录入</span>
<span v-if="scope.row.gender == 2">HIS</span> <span v-if="scope.row.source == 2">HIS</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column fixed="right" label="操作" align="center" width="150"> <el-table-column fixed="right" label="操作" align="center" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button size="mini" type="text" icon="el-icon-edit"
size="mini" @click="handleUpdate(scope.row)">修改</el-button>
type="text" <el-button size="mini" type="text" icon="el-icon-delete"
icon="el-icon-edit" @click="handleDelete(scope.row)">删除</el-button>
@click="handleUpdate(scope.row)" <el-button size="mini" type="text" icon="el-icon-tickets"
>修改</el-button @click="handleDetails(scope.row)">详情</el-button>
> <el-button size="mini" type="text" icon="el-icon-notebook-1"
<el-button @click="handleArchives(scope.row)">诊疗档案</el-button>
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="handleDelete(scope.row)"
>诊疗档案</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination <pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
v-show="total > 0" :limit.sync="queryParams.pageSize" @pagination="getList" />
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改公告对话框 --> <!-- 添加或修改公告对话框 -->
<el-dialog <el-dialog class="popup" :title="title" :visible.sync="open" width="780px" append-to-body>
class="popup" <el-form class="formStep" ref="form" :model="form" :rules="rules" label-width="100px">
:title="title"
:visible.sync="open"
width="780px"
append-to-body
>
<el-form
class="formStep"
ref="form"
:model="form"
:rules="rules"
label-width="90px"
>
<el-form-item label="姓名" prop="name"> <el-form-item label="姓名" prop="name">
<el-input <el-input v-model="form.name" :disabled="formDisabled" placeholder="请输入" />
v-model="form.name"
:disabled="formDisabled"
placeholder="请输入"
/>
</el-form-item> </el-form-item>
<el-form-item label="性别" prop="gender"> <el-form-item label="性别" prop="gender">
<el-radio-group v-model="form.gender" :disabled="formDisabled"> <el-radio-group v-model="form.gender" :disabled="formDisabled">
@ -299,73 +126,35 @@
<el-radio :label="1"></el-radio> <el-radio :label="1"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label="出生年月" prop="birthDate"> <el-form-item label="出生日期" prop="birthDate">
<el-date-picker <el-date-picker :disabled="formDisabled" format="yyyy-MM-dd" value-format="yyyy-MM-dd"
:disabled="formDisabled" v-model="form.birthDate" type="date" placeholder="选择日期">
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
v-model="form.birthDate"
type="date"
placeholder="选择日期"
>
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
<el-form-item label="民族" prop="ethnicity"> <el-form-item label="民族" prop="ethnicity">
<el-input <el-input v-model="form.ethnicity" placeholder="请输入" :disabled="formDisabled" />
v-model="form.ethnicity"
placeholder="请输入"
:disabled="formDisabled"
/>
</el-form-item> </el-form-item>
<el-form-item label="受教育年限" prop="educationYears"> <el-form-item label="受教育年限" prop="educationYears">
<el-input <el-input v-model="form.educationYears" placeholder="请输入" :disabled="formDisabled" />
v-model="form.educationYears"
placeholder="请输入"
:disabled="formDisabled"
/>
</el-form-item> </el-form-item>
<el-form-item label="手机号码" prop="phone"> <el-form-item label="手机号码" prop="phone">
<el-input <el-input v-model="form.phone" placeholder="请输入" :disabled="formDisabled" />
v-model="form.phone"
placeholder="请输入"
:disabled="formDisabled"
/>
</el-form-item> </el-form-item>
<el-form-item label="证件类型" prop="idCardType"> <el-form-item label="证件类型" prop="idCardType">
<el-select <el-select v-model="form.idCardType" placeholder="请选择" :disabled="formDisabled">
v-model="form.idCardType" <el-option v-for="item in idCardType" :key="item.value" :label="item.label" :value="item.value">
placeholder="请选择"
:disabled="formDisabled"
>
<el-option
v-for="item in idCardType"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="证件号码" prop="idCard"> <el-form-item label="证件号码" prop="idCard">
<el-input <el-input v-model="form.idCard" placeholder="请输入" :disabled="formDisabled" />
v-model="form.idCard"
placeholder="请输入"
:disabled="formDisabled"
/>
</el-form-item> </el-form-item>
<el-form-item label="现病史" prop="currentIllnessHistory"> <el-form-item label="现病史" prop="">
<el-checkbox-group <el-checkbox-group v-model="form.currentIllnessHistory" :disabled="formDisabled">
v-model="form.currentIllnessHistory"
:disabled="formDisabled"
>
<el-checkbox v-for="(item, index) in medicalHistory" :label="item"> <el-checkbox v-for="(item, index) in medicalHistory" :label="item">
</el-checkbox> </el-checkbox>
</el-checkbox-group> </el-checkbox-group>
<el-input <el-input v-model="form.currentIllnessHistoryQt" placeholder="其他" :disabled="formDisabled" />
v-model="form.currentIllnessHistoryQT"
placeholder="其他"
:disabled="formDisabled"
/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
@ -374,25 +163,12 @@
</div> </div>
</el-dialog> </el-dialog>
<!-- 导入患者信息 --> <!-- 导入患者信息 -->
<el-dialog <el-dialog title="导入患者档案" :visible.sync="importOpen" width="640px" append-to-body>
title="导入患者档案" <el-form ref="importform" :model="importform">
:visible.sync="importOpen"
width="640px"
append-to-body
>
<el-form ref="form" :model="importform">
<el-form-item prop="accessUrl"> <el-form-item prop="accessUrl">
<el-upload <el-upload :limit="1" class="avatar-uploader wj-uploader" :headers="headers"
:limit="1" :action="uploadFileUrl1" accept=".xlsx, .xls" :before-upload="handleBeforePdfUpload1"
class="avatar-uploader wj-uploader" :on-success="handleUploadPdfAdd1" :file-list="fileList" :show-file-list="true">
:headers="headers"
:action="uploadFileUrl1"
accept=".xlsx, .xls"
:before-upload="handleBeforePdfUpload1"
:on-success="handleUploadPdfAdd1"
:file-list="fileList"
:show-file-list="true"
>
<i class="el-icon-upload"></i> <i class="el-icon-upload"></i>
<div class="el-upload__text"> <div class="el-upload__text">
将文件拖到此处 将文件拖到此处
@ -406,7 +182,9 @@
</template> </template>
<script> <script>
import { getToken } from "@/utils/auth"; import {
getToken
} from "@/utils/auth";
import { import {
queryPatient, queryPatient,
patientAdd, patientAdd,
@ -422,7 +200,7 @@ export default {
Authorization: "Bearer " + getToken(), Authorization: "Bearer " + getToken(),
deptId: localStorage.getItem("hospitalId"), deptId: localStorage.getItem("hospitalId"),
}, },
uploadFileUrl1: process.env.VUE_APP_BASE_API + "/pms/importTjbgZip", // uploadFileUrl1: process.env.VUE_APP_API_QZURL + "/acupuncture/patient/import", //
fileList: [], fileList: [],
// //
medicalHistory: [ medicalHistory: [
@ -445,8 +223,7 @@ export default {
"肾炎、肾病", "肾炎、肾病",
"高脂血症", "高脂血症",
], ],
idCardType: [ idCardType: [{
{
label: "身份证", label: "身份证",
value: 0, value: 0,
}, },
@ -462,12 +239,17 @@ export default {
label: "台湾居民来往大陆通行证", label: "台湾居民来往大陆通行证",
value: 3, value: 3,
}, },
{
label: "其他",
value: 4,
},
], ],
idCardTypeValue: { idCardTypeValue: {
0: "身份证", 0: "身份证",
1: "护照或外国人永居证", 1: "护照或外国人永居证",
2: "港澳居民来往内地通行", 2: "港澳居民来往内地通行",
3: "台湾居民来往大陆通行证", 3: "台湾居民来往大陆通行证",
4: "其他",
}, },
loading: false, // loading: false, //
ids: [], // ids: [], //
@ -498,42 +280,65 @@ export default {
form: {}, form: {},
// //
rules: { rules: {
name: [ name: [{
{ required: true, message: "患者姓名不能为空", trigger: "blur" }, required: true,
], message: "患者姓名不能为空",
gender: [ trigger: "blur"
{ required: true, message: "性别不能为空", trigger: "change" }, }, ],
], gender: [{
phone: [ required: true,
{ required: true, message: "手机号码不能为空", trigger: "blur" }, message: "性别不能为空",
], trigger: "change"
ethnicity: [ }, ],
{ required: true, message: "民族不能为空", trigger: "blur" }, birthDate: [{
], required: true,
idCardType: [ message: "出生日期不能为空",
{ required: true, message: "证件类型不能为空", trigger: "blur" }, trigger: "change"
], }, ],
idCard: [ phone: [{
{ required: true, message: "证件号码不能为空", trigger: "blur" }, required: true,
message: "手机号码不能为空",
trigger: "blur"
},{ pattern: /^1[3456789]\d{9}$/, message: '手机号码格式不正确', trigger: 'blur' }
], ],
currentIllnessHistory: [ ethnicity: [{
{ required: true,
message: "民族不能为空",
trigger: "blur"
}, ],
idCardType: [{
required: true,
message: "证件类型不能为空",
trigger: "blur"
}, ],
idCard: [{
required: true,
message: "证件号码不能为空",
trigger: "blur"
}, ],
educationYears: [{
required: true,
message: "受教育年限不能为空",
trigger: "blur"
}, ],
currentIllnessHistory: [{
required: true, required: true,
message: "现病史不能为空", message: "现病史不能为空",
trigger: "blur", trigger: "blur",
}, }, ],
],
}, },
}; };
}, },
created() { created() {
let idCard = this.$route.query.idCard
this.queryParams.param.keywords = idCard || ''
this.getList(); this.getList();
}, },
methods: { methods: {
// - pdg // - pdg
handleUploadPdfAdd1(res) { handleUploadPdfAdd1(res) {
if (res.code == 200) { if (res.code == 200) {
this.physicaOpen = false; this.importOpen = false;
this.getList(); this.getList();
this.$modal.msgSuccess("导入成功"); this.$modal.msgSuccess("导入成功");
} else { } else {
@ -584,8 +389,9 @@ export default {
phone: "", // phone: "", //
idCardType: "", // idCardType: "", //
idCard: "", // idCard: "", //
"source": 1,
currentIllnessHistory: [], // currentIllnessHistory: [], //
currentIllnessHistoryQT: "", // currentIllnessHistoryQt: "", //
}; };
this.resetForm("form"); this.resetForm("form");
}, },
@ -596,6 +402,14 @@ export default {
}, },
/** 重置按钮操作 */ /** 重置按钮操作 */
resetQuery() { resetQuery() {
this.queryParams.param = {
keywords: "", //
startAge: "", //
endAge: "", //
tenantId: "", //
createBy: "", //
sourceId: "", //
}
this.handleQuery(); this.handleQuery();
}, },
// //
@ -619,7 +433,7 @@ export default {
this.form = JSON.parse(JSON.stringify(row)); this.form = JSON.parse(JSON.stringify(row));
// //
this.form.currentIllnessHistory = this.form.currentIllnessHistory =
this.form.currentIllnessHistory.split(","); this.form.currentIllnessHistory?.split(",") || []
}, },
/** 详情按钮操作 */ /** 详情按钮操作 */
handleDetails(row) { handleDetails(row) {
@ -627,11 +441,22 @@ export default {
this.title = "患者档案详情"; this.title = "患者档案详情";
this.formDisabled = true; this.formDisabled = true;
this.form = JSON.parse(JSON.stringify(row)); this.form = JSON.parse(JSON.stringify(row));
//
this.form.currentIllnessHistory =
this.form.currentIllnessHistory?.split(",") || []
},
/** 诊疗档案 */
handleArchives(row) {
this.$router.push({
path:`/medicalIndex?idCard=${row.idCard}`
})
}, },
/** 提交按钮 */ /** 提交按钮 */
submitForm: function() { submitForm: function() {
this.$refs["form"].validate((valid) => { this.$refs["form"].validate((valid) => {
if (valid) { if (valid) {
if (this.form.id != undefined) { if (this.form.id != undefined) {
patientUpd(this.form).then((response) => { patientUpd(this.form).then((response) => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
@ -655,7 +480,9 @@ export default {
this.$modal this.$modal
.confirm("是否确认删除当前选择的数据?") .confirm("是否确认删除当前选择的数据?")
.then(function() { .then(function() {
return patientDel({ idList: idList }); return patientDel({
idList: idList
});
}) })
.then(() => { .then(() => {
this.getList(); this.getList();
@ -665,18 +492,25 @@ export default {
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download( this.download1(
"system/user/export", "/patient/export", {
{
...this.queryParams.params, ...this.queryParams.params,
}, },
`患者档案.xlsx` `患者档案.xlsx`
); );
}, },
/** 下载按钮操作 */
handleDownload() {
window.open(`${process.env.VUE_APP_API_QZURL}/acupuncture/profile/PatientTemplate.xlsx`)
// this.download1(
// "/patient/export", {},
// `.xlsx`
// );
},
/** 导入按钮操作 */ /** 导入按钮操作 */
handleImport() { handleImport() {
this.upload.title = "用户导入"; this.fileList = []
this.upload.open = true; this.importOpen = true;
}, },
}, },
}; };
@ -687,9 +521,11 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
} }
.form-item-age span { .form-item-age span {
margin: 0 10px; margin: 0 10px;
} }
.form-item-age>>>.el-input { .form-item-age>>>.el-input {
width: 100px; width: 100px;
} }

Loading…
Cancel
Save