diff --git a/acupuncture-后台/package.json b/acupuncture-后台/package.json index 4e2eb3db..b87caae0 100644 --- a/acupuncture-后台/package.json +++ b/acupuncture-后台/package.json @@ -40,7 +40,7 @@ "axios": "0.28.1", "clipboard": "2.0.8", "core-js": "3.37.1", - "echarts": "5.4.0", + "echarts": "^5.4.0", "element-ui": "^2.15.14", "file-saver": "2.0.5", "fuse.js": "6.4.3", @@ -48,6 +48,7 @@ "js-beautify": "1.13.0", "js-cookie": "3.0.1", "jsencrypt": "3.0.0-rc.1", + "moment": "^2.30.1", "nprogress": "0.2.0", "quill": "2.0.2", "screenfull": "5.0.2", diff --git a/acupuncture-后台/src/api/followupFile.js b/acupuncture-后台/src/api/followupFile.js index ba1c7084..63ebb489 100644 --- a/acupuncture-后台/src/api/followupFile.js +++ b/acupuncture-后台/src/api/followupFile.js @@ -1,5 +1,12 @@ import request from "@/utils/request"; - +// 公共队列 +export function commonQueue(data) { + return request({ + url: "/followup/commonQueue", + method: "post", + data: data, + }); +} // 随访队列 export function followupQuery(data) { return request({ @@ -72,4 +79,12 @@ export function followPatient(data) { method: "post", data: data, }); +} +// 修改随访状态 +export function followStatus(data) { + return request({ + url: "/followup/status", + method: "post", + data: data, + }); } \ No newline at end of file diff --git a/acupuncture-后台/src/api/indexCom.js b/acupuncture-后台/src/api/indexCom.js new file mode 100644 index 00000000..f3e35e1d --- /dev/null +++ b/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, + }); +} \ No newline at end of file diff --git a/acupuncture-后台/src/assets/styles/common.css b/acupuncture-后台/src/assets/styles/common.css index 52688a2d..3503a395 100644 --- a/acupuncture-后台/src/assets/styles/common.css +++ b/acupuncture-后台/src/assets/styles/common.css @@ -73,7 +73,7 @@ display: none; } >>>.el-dialog__body{ - padding: 0px 20px 0px 20px; + padding: 20px; } /* .popup >>> .popupAdd2 .popupleft { width: 55px; diff --git a/acupuncture-后台/src/main.js b/acupuncture-后台/src/main.js index 13c6cf29..95bdd829 100644 --- a/acupuncture-后台/src/main.js +++ b/acupuncture-后台/src/main.js @@ -12,7 +12,8 @@ import store from './store' import router from './router' import directive from './directive' // directive 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 './permission' // permission control @@ -47,7 +48,9 @@ Vue.prototype.addDateRange = addDateRange Vue.prototype.selectDictLabel = selectDictLabel Vue.prototype.selectDictLabels = selectDictLabels Vue.prototype.download = download +Vue.prototype.download1 = download1 Vue.prototype.handleTree = handleTree +Vue.prototype.$moment = moment // 全局组件挂载 Vue.component('DictTag', DictTag) diff --git a/acupuncture-后台/src/router/index.js b/acupuncture-后台/src/router/index.js index 1a862cab..108fb426 100644 --- a/acupuncture-后台/src/router/index.js +++ b/acupuncture-后台/src/router/index.js @@ -77,12 +77,12 @@ export const constantRoutes = [ { path: "/patientFile", component: Layout, - redirect: "index", + redirect: "patientFile", children: [ { path: "/patientIndex", component: () => import("@/views/patientFile/index"), - name: "Index", + name: "patientIndex", meta: { title: "患者档案", icon: "dashboard", }, }, ], diff --git a/acupuncture-后台/src/store/modules/permission.js b/acupuncture-后台/src/store/modules/permission.js index fedee44a..e0ccfaf8 100644 --- a/acupuncture-后台/src/store/modules/permission.js +++ b/acupuncture-后台/src/store/modules/permission.js @@ -34,8 +34,8 @@ const permission = { return new Promise((resolve) => { // 向后端请求路由数据 getRouters().then((res) => { - const sdata = JSON.parse(JSON.stringify(res.data)); - const rdata = JSON.parse(JSON.stringify(res.data)); + const sdata = JSON.parse(JSON.stringify([])); + const rdata = JSON.parse(JSON.stringify([])); const sidebarRoutes = filterAsyncRouter(sdata); const rewriteRoutes = filterAsyncRouter(rdata, false, true); const asyncRoutes = filterDynamicRoutes(dynamicRoutes); diff --git a/acupuncture-后台/src/utils/request.js b/acupuncture-后台/src/utils/request.js index faa87275..0f4920a7 100644 --- a/acupuncture-后台/src/utils/request.js +++ b/acupuncture-后台/src/utils/request.js @@ -148,5 +148,38 @@ export function download(url, params, filename, config) { 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 diff --git a/acupuncture-后台/src/views/followFile/index.vue b/acupuncture-后台/src/views/followFile/index.vue index 7a6283be..50643b89 100644 --- a/acupuncture-后台/src/views/followFile/index.vue +++ b/acupuncture-后台/src/views/followFile/index.vue @@ -70,6 +70,7 @@ align="center" prop="name" min-width="130" + fixed /> + + + + + + @@ -176,7 +211,7 @@ ref="form" :model="form" :rules="rules" - label-width="90px" + label-width="130px" > @@ -212,6 +247,12 @@ + + + + + + 启用 @@ -247,6 +288,7 @@ import { followupAdd, followupUpd, followupDel, + commonQueue } from "@/api/followupFile"; export default { name: "Notice", @@ -257,29 +299,33 @@ export default { openCron: false, // 传入的表达式 expression: "", - idCardType: [ - { - label: "身份证", - value: 0, - }, - { - label: "护照或外国人永居证", - value: 1, - }, - { - label: "港澳居民来往内地通行", - value: 2, - }, - { - label: "台湾居民来往大陆通行证", - value: 3, - }, + idCardType: [{ + label: "身份证", + value: 0, + }, + { + label: "护照或外国人永居证", + value: 1, + }, + { + label: "港澳居民来往内地通行", + value: 2, + }, + { + label: "台湾居民来往大陆通行证", + value: 3, + }, + { + label: "其他", + value: 4, + }, ], idCardTypeValue: { - 0: "身份证", - 1: "护照或外国人永居证", - 2: "港澳居民来往内地通行", - 3: "台湾居民来往大陆通行证", + 0: "身份证", + 1: "护照或外国人永居证", + 2: "港澳居民来往内地通行", + 3: "台湾居民来往大陆通行证", + 4: "其他", }, loading: false, // 遮罩层 ids: [], // 选中数组 @@ -317,6 +363,18 @@ export default { 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: [ + { required: true, message: "随访频次不能为空", trigger: "blur" }, + ], status: [{ required: true, message: "状态不能为空", trigger: "blur" }], }, }; @@ -334,11 +392,16 @@ export default { crontabFill(value) { this.form.frequency = value; }, + /** 查询公告列表 */ getList() { this.loading = true; followupQuery(this.queryParams).then((res) => { + let commonQueue = JSON.parse(localStorage.getItem('commonQueue')) this.listDat = res.data.list; + commonQueue?.forEach(i=>{ + this.listDat.unshift(i) + }) this.total = res.data.total; this.loading = false; }); diff --git a/acupuncture-后台/src/views/followFile/subjects.vue b/acupuncture-后台/src/views/followFile/subjects.vue index c8d83aa5..49271ccf 100644 --- a/acupuncture-后台/src/views/followFile/subjects.vue +++ b/acupuncture-后台/src/views/followFile/subjects.vue @@ -1,397 +1,326 @@ - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ 治疗效果 +
+
+
+ + 治愈 +
+
+ + 显效 +
+
+ + 好转 +
+
+ + 无效 +
+
+
+
+
+
+
+
+
+
+ +
+ 诊疗费用分布 +
+
+
+
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/acupuncture-后台/src/views/indexCom/follow.vue b/acupuncture-后台/src/views/indexCom/follow.vue new file mode 100644 index 00000000..e663919b --- /dev/null +++ b/acupuncture-后台/src/views/indexCom/follow.vue @@ -0,0 +1,224 @@ + + + + + \ No newline at end of file diff --git a/acupuncture-后台/src/views/indexCom/index.js b/acupuncture-后台/src/views/indexCom/index.js new file mode 100644 index 00000000..b067bfa6 --- /dev/null +++ b/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 += + "
" + + `` + + 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 += + "
" + + `` + + 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 += + "
" + + `` + + 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 += + "
" + + `` + + 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 += + "
" + + `` + + 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 += + "
" + + `` + + 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 += + "
" + + `` + + 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 += + "
" + + `` + + 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 += + "
" + + `` + + 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 += + "
" + + `` + + 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 += + "
" + + `` + + 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], + }, + }, + } + + ], +}; diff --git a/acupuncture-后台/src/views/indexCom/patient.vue b/acupuncture-后台/src/views/indexCom/patient.vue new file mode 100644 index 00000000..e04de357 --- /dev/null +++ b/acupuncture-后台/src/views/indexCom/patient.vue @@ -0,0 +1,325 @@ + + + + + \ No newline at end of file diff --git a/acupuncture-后台/src/views/indexCom/query.vue b/acupuncture-后台/src/views/indexCom/query.vue new file mode 100644 index 00000000..4b5ab797 --- /dev/null +++ b/acupuncture-后台/src/views/indexCom/query.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/acupuncture-后台/src/views/login.vue b/acupuncture-后台/src/views/login.vue index cbbf283a..2fc76b76 100644 --- a/acupuncture-后台/src/views/login.vue +++ b/acupuncture-后台/src/views/login.vue @@ -88,27 +88,41 @@ import { getCodeImg } from "@/api/login"; import Cookies from "js-cookie"; import { encrypt, decrypt } from "@/utils/jsencrypt"; - +import { commonQueue } from "@/api/followupFile"; export default { name: "Login", data() { return { codeUrl: "", loginForm: { - username: "admin", - password: "admin123", + username: "", + password: "", rememberMe: false, code: "", uuid: "", }, loginRules: { username: [ - { required: true, trigger: "blur", message: "请输入您的账号" }, + { + required: true, + trigger: "blur", + message: "请输入您的账号", + }, ], 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, // 验证码开关 @@ -157,7 +171,9 @@ export default { if (valid) { this.loading = true; 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), { expires: 30, }); @@ -172,7 +188,12 @@ export default { this.$store .dispatch("Login", this.loginForm) .then(() => { - this.$router.push({ path: this.redirect || "/" }).catch(() => {}); + this.$router + .push({ + path: this.redirect || "/", + }) + .catch(() => {}); + this.getCommonQueue(); }) .catch(() => { 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)); + }); + }, }, }; @@ -196,6 +231,7 @@ export default { background-image: url("../assets/images/login-background.jpg"); background-size: cover; } + .title { margin: 0px auto 30px auto; text-align: center; @@ -207,32 +243,39 @@ export default { background: #ffffff; width: 400px; padding: 25px 25px 5px 25px; + .el-input { height: 38px; + input { height: 38px; } } + .input-icon { height: 39px; width: 14px; margin-left: 2px; } } + .login-tip { font-size: 13px; text-align: center; color: #bfbfbf; } + .login-code { width: 33%; height: 38px; float: right; + img { cursor: pointer; vertical-align: middle; } } + .el-login-footer { height: 40px; line-height: 40px; @@ -245,6 +288,7 @@ export default { font-size: 12px; letter-spacing: 1px; } + .login-code-img { height: 38px; } diff --git a/acupuncture-后台/src/views/medicalFile/index.vue b/acupuncture-后台/src/views/medicalFile/index.vue index 604127b6..2b7039eb 100644 --- a/acupuncture-后台/src/views/medicalFile/index.vue +++ b/acupuncture-后台/src/views/medicalFile/index.vue @@ -1,1763 +1,1410 @@ + >>>.el-drawer.rtl { + width: 50% !important; + } + \ No newline at end of file diff --git a/acupuncture-后台/src/views/patientFile/index.vue b/acupuncture-后台/src/views/patientFile/index.vue index 171e59ef..148c8153 100644 --- a/acupuncture-后台/src/views/patientFile/index.vue +++ b/acupuncture-后台/src/views/patientFile/index.vue @@ -1,39 +1,21 @@ +} --> \ No newline at end of file