diff --git a/acupuncture-前台/.env.development b/acupuncture-前台/.env.development index 31490cb7..8b988891 100644 --- a/acupuncture-前台/.env.development +++ b/acupuncture-前台/.env.development @@ -1,5 +1,5 @@ # 页面标题 -VUE_APP_TITLE = 针灸管理系统 +VUE_APP_TITLE = 朱琏针灸联盟数据系统 # 开发环境配置 ENV = 'development' diff --git a/acupuncture-前台/.env.production b/acupuncture-前台/.env.production index c2347fdf..79e0cddc 100644 --- a/acupuncture-前台/.env.production +++ b/acupuncture-前台/.env.production @@ -1,5 +1,5 @@ # 页面标题 -VUE_APP_TITLE = 针灸管理系统 +VUE_APP_TITLE = 朱琏针灸联盟数据系统 # 生产环境配置 NODE_ENV = 'production' @@ -8,4 +8,4 @@ VUE_APP_BASE_API = 'https://test.tall.wiki/acupuncture' VUE_APP_API_QZURL = 'https://test.tall.wiki/' # 访问路径 -VUE_APP_PUBLIC_PATH = '/acupunctureClient/' \ No newline at end of file +VUE_APP_PUBLIC_PATH = '/acupunctureClient/' diff --git a/acupuncture-前台/.env.staging b/acupuncture-前台/.env.staging index 6523f1b3..f9b9ae8a 100644 --- a/acupuncture-前台/.env.staging +++ b/acupuncture-前台/.env.staging @@ -1,5 +1,5 @@ # 页面标题 -VUE_APP_TITLE = 针灸管理系统 +VUE_APP_TITLE = 朱琏针灸联盟数据系统 BABEL_ENV = production @@ -8,5 +8,5 @@ NODE_ENV = production # 测试环境配置 ENV = 'staging' -# 针灸管理系统/测试环境 +# 朱琏针灸联盟数据系统/测试环境 VUE_APP_BASE_API = '/stage-api' diff --git a/acupuncture-前台/package.json b/acupuncture-前台/package.json index fcc990f7..b87caae0 100644 --- a/acupuncture-前台/package.json +++ b/acupuncture-前台/package.json @@ -1,7 +1,7 @@ { "name": "ruoyi", "version": "3.8.9", - "description": "针灸管理系统", + "description": "朱琏针灸联盟数据系统", "author": "若依", "license": "MIT", "scripts": { @@ -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-前台/public/index.html b/acupuncture-前台/public/index.html index 925455ca..912f3f57 100644 --- a/acupuncture-前台/public/index.html +++ b/acupuncture-前台/public/index.html @@ -1,14 +1,17 @@ - - - - - - - <%= webpackConfig.name %> - - - - -
-
-
-
-
-
正在加载系统资源,请耐心等待
-
-
- - + + + +
+
+
+
+
+
正在加载系统资源,请耐心等待
+
+
+ + + \ No newline at end of file diff --git a/acupuncture-前台/public/zj.png b/acupuncture-前台/public/zj.png new file mode 100644 index 00000000..e3ba37bd Binary files /dev/null and b/acupuncture-前台/public/zj.png differ diff --git a/acupuncture-前台/src/App.vue b/acupuncture-前台/src/App.vue index be9682e8..8e3e4cd8 100644 --- a/acupuncture-前台/src/App.vue +++ b/acupuncture-前台/src/App.vue @@ -31,6 +31,14 @@ export default { } + diff --git a/acupuncture-前台/src/layout/components/Sidebar/index.vue b/acupuncture-前台/src/layout/components/Sidebar/index.vue index 51d0839f..91adcf11 100644 --- a/acupuncture-前台/src/layout/components/Sidebar/index.vue +++ b/acupuncture-前台/src/layout/components/Sidebar/index.vue @@ -1,26 +1,42 @@ + diff --git a/acupuncture-前台/src/layout/index.vue b/acupuncture-前台/src/layout/index.vue index dba4393d..a9d578c9 100644 --- a/acupuncture-前台/src/layout/index.vue +++ b/acupuncture-前台/src/layout/index.vue @@ -1,111 +1,122 @@ 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..f2981b15 100644 --- a/acupuncture-前台/src/router/index.js +++ b/acupuncture-前台/src/router/index.js @@ -77,13 +77,13 @@ export const constantRoutes = [ { path: "/patientFile", component: Layout, - redirect: "index", + redirect: "patientFile", children: [ { path: "/patientIndex", component: () => import("@/views/patientFile/index"), - name: "Index", - meta: { title: "患者档案", icon: "dashboard", }, + name: "patientIndex", + meta: { title: "患者档案", icon: "dashboard" }, }, ], }, @@ -96,13 +96,20 @@ export const constantRoutes = [ path: "/medicalIndex", component: () => import("@/views/medicalFile/index"), name: "medicalIndex", - meta: { title: "诊疗档案", icon: "dashboard", }, + meta: { title: "诊疗档案", icon: "dashboard" }, + }, + { + path: "/medicalDetails", + component: () => import("@/views/medicalFile/details"), + name: "medicalDetails", + hidden: true, + meta: { title: "诊疗信息", icon: "dashboard" }, }, ], }, { path: "/followFile", - meta: { title: "随访档案", icon: "dashboard", }, + meta: { title: "随访档案", icon: "dashboard" }, component: Layout, redirect: "followFile", children: [ @@ -110,33 +117,32 @@ export const constantRoutes = [ path: "/followIndex", component: () => import("@/views/followFile/index"), name: "followIndex", - meta: { title: "随访队列", icon: "dashboard", }, + meta: { title: "随访队列", icon: "dashboard" }, }, { path: "/followSubjects", component: () => import("@/views/followFile/subjects"), name: "followSubjects", - meta: { title: "随访对象", icon: "dashboard", }, + meta: { title: "随访对象", icon: "dashboard" }, }, { path: "/followWork", component: () => import("@/views/followFile/work"), name: "followWork", - meta: { title: "随访工单", icon: "dashboard", }, + meta: { title: "随访工单", icon: "dashboard" }, }, ], }, { path: "/user", component: Layout, - hidden: true, redirect: "noredirect", children: [ { path: "profile", component: () => import("@/views/system/user/profile/index"), name: "Profile", - meta: { title: "个人中心", icon: "user" }, + meta: { title: "我的", icon: "user" }, }, ], }, diff --git a/acupuncture-前台/src/store/modules/app.js b/acupuncture-前台/src/store/modules/app.js index 3e22d1c1..f0d138bc 100644 --- a/acupuncture-前台/src/store/modules/app.js +++ b/acupuncture-前台/src/store/modules/app.js @@ -1,66 +1,68 @@ -import Cookies from 'js-cookie' +import Cookies from "js-cookie"; const state = { sidebar: { - opened: Cookies.get('sidebarStatus') ? !!+Cookies.get('sidebarStatus') : true, + opened: Cookies.get("sidebarStatus") + ? !!+Cookies.get("sidebarStatus") + : true, withoutAnimation: false, - hide: false + hide: false, }, - device: 'desktop', - size: Cookies.get('size') || 'medium' -} + device: "desktop", + size: Cookies.get("size") || "medium", +}; const mutations = { - TOGGLE_SIDEBAR: state => { + TOGGLE_SIDEBAR: (state) => { if (state.sidebar.hide) { - return false; + return true; } - state.sidebar.opened = !state.sidebar.opened - state.sidebar.withoutAnimation = false + state.sidebar.opened = true; + state.sidebar.withoutAnimation = true; if (state.sidebar.opened) { - Cookies.set('sidebarStatus', 1) + Cookies.set("sidebarStatus", 1); } else { - Cookies.set('sidebarStatus', 0) + Cookies.set("sidebarStatus", 1); } }, CLOSE_SIDEBAR: (state, withoutAnimation) => { - Cookies.set('sidebarStatus', 0) - state.sidebar.opened = false - state.sidebar.withoutAnimation = withoutAnimation + Cookies.set("sidebarStatus", 1); + state.sidebar.opened = true; + state.sidebar.withoutAnimation = false; }, TOGGLE_DEVICE: (state, device) => { - state.device = device + state.device = device; }, SET_SIZE: (state, size) => { - state.size = size - Cookies.set('size', size) + state.size = size; + Cookies.set("size", size); }, SET_SIDEBAR_HIDE: (state, status) => { - state.sidebar.hide = status - } -} + state.sidebar.hide = status; + }, +}; const actions = { toggleSideBar({ commit }) { - commit('TOGGLE_SIDEBAR') + commit("TOGGLE_SIDEBAR"); }, closeSideBar({ commit }, { withoutAnimation }) { - commit('CLOSE_SIDEBAR', withoutAnimation) + commit("CLOSE_SIDEBAR", withoutAnimation); }, toggleDevice({ commit }, device) { - commit('TOGGLE_DEVICE', device) + commit("TOGGLE_DEVICE", device); }, setSize({ commit }, size) { - commit('SET_SIZE', size) + commit("SET_SIZE", size); }, toggleSideBarHide({ commit }, status) { - commit('SET_SIDEBAR_HIDE', status) - } -} + commit("SET_SIDEBAR_HIDE", status); + }, +}; export default { namespaced: true, state, mutations, - actions -} + actions, +}; 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/store/modules/settings.js b/acupuncture-前台/src/store/modules/settings.js index 2455a1e2..614038c6 100644 --- a/acupuncture-前台/src/store/modules/settings.js +++ b/acupuncture-前台/src/store/modules/settings.js @@ -1,42 +1,59 @@ -import defaultSettings from '@/settings' +import defaultSettings from "@/settings"; -const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings +const { + sideTheme, + showSettings, + topNav, + tagsView, + fixedHeader, + sidebarLogo, + dynamicTitle, +} = defaultSettings; -const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || '' +const storageSetting = JSON.parse(localStorage.getItem("layout-setting")) || ""; const state = { - title: '', - theme: storageSetting.theme || '#409EFF', + title: "", + theme: "#70483E", sideTheme: storageSetting.sideTheme || sideTheme, showSettings: showSettings, topNav: storageSetting.topNav === undefined ? topNav : storageSetting.topNav, - tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView, - fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader, - sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo, - dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle -} + tagsView: + storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView, + fixedHeader: + storageSetting.fixedHeader === undefined + ? fixedHeader + : storageSetting.fixedHeader, + sidebarLogo: + storageSetting.sidebarLogo === undefined + ? sidebarLogo + : storageSetting.sidebarLogo, + dynamicTitle: + storageSetting.dynamicTitle === undefined + ? dynamicTitle + : storageSetting.dynamicTitle, +}; const mutations = { CHANGE_SETTING: (state, { key, value }) => { if (state.hasOwnProperty(key)) { - state[key] = value + state[key] = value; } - } -} + }, +}; const actions = { // 修改布局设置 changeSetting({ commit }, data) { - commit('CHANGE_SETTING', data) + commit("CHANGE_SETTING", data); }, // 设置网页标题 setTitle({ commit }, title) { - state.title = title - } -} + state.title = title; + }, +}; export default { namespaced: true, state, mutations, - actions -} - + actions, +}; diff --git a/acupuncture-前台/src/store/modules/user.js b/acupuncture-前台/src/store/modules/user.js index 63e6ba2e..15969d6a 100644 --- a/acupuncture-前台/src/store/modules/user.js +++ b/acupuncture-前台/src/store/modules/user.js @@ -57,6 +57,7 @@ const user = { return new Promise((resolve, reject) => { getInfo().then(res => { const user = res.user + localStorage.setItem("user", JSON.stringify(user)) let avatar = user.avatar || "" if (!isHttp(avatar)) { avatar = (isEmpty(avatar)) ? defAva : process.env.VUE_APP_BASE_API + avatar 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/bg.png b/acupuncture-前台/src/views/bg.png new file mode 100644 index 00000000..45a52763 Binary files /dev/null and b/acupuncture-前台/src/views/bg.png differ diff --git a/acupuncture-前台/src/views/followFile/index.vue b/acupuncture-前台/src/views/followFile/index.vue index 7a6283be..4f5bcdf2 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 +206,7 @@ ref="form" :model="form" :rules="rules" - label-width="90px" + label-width="130px" > @@ -212,6 +242,12 @@ + + + + + + 启用 @@ -247,6 +283,7 @@ import { followupAdd, followupUpd, followupDel, + commonQueue, } from "@/api/followupFile"; export default { name: "Notice", @@ -274,12 +311,17 @@ export default { label: "台湾居民来往大陆通行证", value: 3, }, + { + label: "其他", + value: 4, + }, ], idCardTypeValue: { 0: "身份证", 1: "护照或外国人永居证", 2: "港澳居民来往内地通行", 3: "台湾居民来往大陆通行证", + 4: "其他", }, loading: false, // 遮罩层 ids: [], // 选中数组 @@ -317,6 +359,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 +388,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 @@ @@ -100,47 +158,63 @@ align="center" prop="phone" show-overflow-tooltip - width="150" + min-width="150" + fixed="right" > - - - + @@ -157,7 +231,7 @@ - - - + - + - - - + - + @@ -239,7 +325,12 @@ \ No newline at end of file +.title-bor { + display: inline-block; + height: 20px; + width: 6px; + background: #4f8bff; + margin-right: 10px; + border-radius: 8px; +} + diff --git a/acupuncture-前台/src/views/indexCom/XGZL.vue b/acupuncture-前台/src/views/indexCom/XGZL.vue index 3ad3b97e..21410ba6 100644 --- a/acupuncture-前台/src/views/indexCom/XGZL.vue +++ b/acupuncture-前台/src/views/indexCom/XGZL.vue @@ -1,87 +1,139 @@ @@ -89,35 +141,41 @@ 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 { - queryDptResult, - queryRptResult, - dataComparison, - queryXgzlLv, -} from "@/api/indexCom.js"; -import { XGZL, XGSJDB, DPT, RPT } from "./index"; + healTypeEcharts, + diseaseMethodEcharts, + effectEcharts, + costEcharts, +} from "./index"; export default { name: "Post", props: ["title"], mixins: [resize], data() { return { - loading: false, - DPTvalue: null, - RPTvalue: null, - SJDBvalue: null, - XGZLvalue: null, queryParams: { param: { - timeType: 4, startTime: "", endTime: "", }, }, + loading: false, + healTypeValue: null, // 治疗类型 + diseaseMethod: null, // 病种方法 + effectValue: null, // 治疗效果 + costValue: null, //治疗效果 + effectObj: { + zy: "治愈", //治愈 + xx: "显效", //显效 + hz: "好转", //好转 + wx: "无效", //无效 + }, }; }, created() { - // this.getData(); + // this.Linepatient(); + this.getData(); }, methods: { statistics(_data, _type) { @@ -125,123 +183,117 @@ export default { this.loading = true; this.getData(); // 获取数据 }, - // 查询 + //患者信息 async getData() { try { - // /DNT - await queryDptResult(this.queryParams).then((res) => { - this.DPTvalue = res.data; - console.log("this.DPTvalue: ", this.DPTvalue); - this.DPT(); - }); - //RPT - await queryRptResult(this.queryParams).then((res) => { - this.RPTvalue = res.data; - this.RPT(); - }); - // 数据对比 - // await dataComparison(this.queryParams).then((res) => { - // console.log("dataComparison: ", dataComparison); - // this.SJDBvalue = res.date; - // this.SJDB(); - // }); - await dataComparison(this.queryParams).then((res) => { - console.log("res1111: ", res); - this.SJDBvalue = res.data; - this.SJDB(); - }); - await queryXgzlLv(this.queryParams).then((res) => { - this.XGZLvalue = res.data; - this.XGZL(); + await zlType(this.queryParams).then((res) => { + const { bzfffb, bzxwfb, zlfy, zllxtj, zlxwfb } = res.data; + //治疗 + this.healTypeValue = [ + { + value: zllxtj?.zxyjh || 0, + name: "中西医结合", + }, + { + value: zllxtj?.czy || 0, + 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 || 0, + }, + { + name: "显效", + value: zlxwfb?.xx || 0, + }, + { + name: "好转", + value: zlxwfb?.hz || 0, + }, + { + name: "无效", + value: zlxwfb?.wx || 0, + }, + ]; + this.handleEffect(); + // 治疗费用 + this.costValue = [ + zlfy?.score1 || 0, + zlfy?.score2 || 0, + zlfy?.score3 || 0, + zlfy?.score4 || 0, + zlfy?.score5 || 0, + ]; + this.handleCost(); + this.loading = false; }); - this.loading = false; } catch (e) { - console.log(e, "e"); + console.log("治疗类型", e); } }, - // 数据对比 - SJDB(_statData) { - XGSJDB.series[0].data = this.SJDBvalue?.map((item) => { - return item.qiaojie; //静脉溶栓人数 - }); - XGSJDB.series[1].data = this.SJDBvalue?.map((item) => { - return item.falseQiaojie; //静脉溶栓人数 - }); - XGSJDB.xAxis[0].data = this.SJDBvalue?.map((item) => { - return item.date; //X轴 - }); + // 治疗类型 + handleHealType() { + healTypeEcharts.series[0].data = this.healTypeValue; this.$nextTick(() => { - // 基于准备好的dom,初始化echarts实例 - var myChart = echarts.init(document.getElementById("SJDB"), null, { + var myChart = echarts.init(document.getElementById("healType"), null, { height: 300, }); - myChart.setOption(XGSJDB, true); + myChart.setOption(healTypeEcharts, true); myChart.resize(); window.onresize = myChart.resize; }); }, - // 血管治疗 - XGZL() { - XGZL.series[0].data = this.XGZLvalue?.map((item) => { - return item.decimal; //静脉溶栓人数 - }); - XGZL.xAxis.data = this.XGZLvalue?.map((item) => { - return item.date; //X轴 - }); + // 病种方法 + handleDiseaseMethod() { + // diseaseMethodEcharts.series[0].data = this.diseaseMethod this.$nextTick(() => { - // 基于准备好的dom,初始化echarts实例 - var myChart = echarts.init(document.getElementById("XGZL"), null, { - height: 300, - }); - myChart.setOption(XGZL, true); + var myChart = echarts.init( + document.getElementById("diseaseMethod"), + null, + { + height: 300, + } + ); + myChart.setOption(diseaseMethodEcharts, true); myChart.resize(); window.onresize = myChart.resize; }); }, - // DPT - DPT() { - DPT.series[0].data = this.DPTvalue?.map((item) => { - return item.dy60; //<= 60 - }); - DPT.series[1].data = this.DPTvalue?.map((item) => { - return item.dy90; //<= 90 - }); - DPT.series[2].data = this.DPTvalue?.map((item) => { - return item.other; //<= 90 - }); - DPT.xAxis[0].data = this.DPTvalue?.map((item) => { - return item.date; //X轴 - }); + // 治疗效果 + handleEffect() { + effectEcharts.series[0].data = this.effectValue; this.$nextTick(() => { - // 基于准备好的dom,初始化echarts实例 - var myChart = echarts.init(document.getElementById("DPT"), null, { + var myChart = echarts.init(document.getElementById("effect"), null, { height: 300, }); - myChart.setOption(DPT, true); + myChart.setOption(effectEcharts, true); myChart.resize(); window.onresize = myChart.resize; }); }, - // RPT - RPT(_statData) { - RPT.series[0].data = this.RPTvalue?.map((item) => { - return item.dy60; //<= 60 - }); - RPT.series[1].data = this.RPTvalue?.map((item) => { - return item.dy90; //<= 90 - }); - RPT.series[2].data = this.RPTvalue?.map((item) => { - return item.other; //> 90 - }); - RPT.xAxis[0].data = this.RPTvalue?.map((item) => { - return item.date; //X轴 - }); + // 治疗费用 + handleCost() { + costEcharts.series[0].data = this.costValue; this.$nextTick(() => { - // 基于准备好的dom,初始化echarts实例 - var myChart = echarts.init(document.getElementById("RPT"), null, { + var myChart = echarts.init(document.getElementById("cost"), null, { height: 300, }); - myChart.setOption(RPT, true); + myChart.setOption(costEcharts, true); myChart.resize(); window.onresize = myChart.resize; }); @@ -251,17 +303,15 @@ export default { _data[0] = this.$moment(_data[0]).format("YYYY-MM-DD"); _data[1] = this.$moment(_data[1]).format("YYYY-MM-DD"); this.queryParams.param = { - timeType: _type, startTime: _data[0] + " " + "00:00:00", endTime: _data[1] + " " + "23:59:59", }; }, // 重新渲染图标 getRenew() { - this.SJDB(); // 数据对比 - this.XGZL(); // 血管治疗 - this.DPT(); - this.RPT(); + this.handleHealType(); + this.handleEffect(); + this.handleCost(); }, }, }; @@ -271,19 +321,24 @@ export default { >>> .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; @@ -291,28 +346,37 @@ export default { 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; diff --git a/acupuncture-前台/src/views/indexCom/follow.vue b/acupuncture-前台/src/views/indexCom/follow.vue new file mode 100644 index 00000000..c17ed2df --- /dev/null +++ b/acupuncture-前台/src/views/indexCom/follow.vue @@ -0,0 +1,261 @@ + + + + + diff --git a/acupuncture-前台/src/views/indexCom/image.png b/acupuncture-前台/src/views/indexCom/image.png new file mode 100644 index 00000000..baced7af Binary files /dev/null and b/acupuncture-前台/src/views/indexCom/image.png differ diff --git a/acupuncture-前台/src/views/indexCom/index.js b/acupuncture-前台/src/views/indexCom/index.js index a23f45a3..23c8aa9f 100644 --- a/acupuncture-前台/src/views/indexCom/index.js +++ b/acupuncture-前台/src/views/indexCom/index.js @@ -23,7 +23,7 @@ export const HZXX = { bottom: "0%", containLabel: true, }, - color: ["#4f8bff", "#ffcd6c", "#00d1a1", "#a794fe"], + color: ["#C6A268"], graphic: { type: "text", left: "center", @@ -76,7 +76,7 @@ export const gende = { bottom: "0%", containLabel: true, }, - color: ["#4F8BFF", "#FE4943"], + color: ["#70483E", "#C7BDB1"], series: [ { type: "pie", @@ -85,6 +85,14 @@ export const gende = { label: { show: false, position: "center", + normal: { + show: true, + position: "inner", + formatter: "{b}:{c}个", + textStyle: { + color: "#fff", + }, + }, }, labelLine: { show: false, @@ -119,12 +127,12 @@ export const ageEcharts = { }, xAxis: { type: "category", - data: ["<40岁","41-50岁","51-60岁","61-70岁","71-80岁",">80岁",], + data: ["<40岁", "41-50岁", "51-60岁", "61-70岁", "71-80岁", ">80岁"], }, grid: { top: "12%", - left: "5%", - right: "2%", + left: "4%", + right: "4%", bottom: "0%", containLabel: true, }, @@ -132,6 +140,9 @@ export const ageEcharts = { name: "数量( 个 )", type: "value", minInterval: 1, + nameTextStyle: { + padding: [0, 0, 0, 20], + }, splitLine: { show: true, lineStyle: { @@ -145,15 +156,20 @@ export const ageEcharts = { data: [], type: "bar", barMaxWidth: 24, //柱图宽度 - color: "#4f8bff", - itemStyle: { - normal: { - //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] - barBorderRadius: [50, 50, 0, 0], - }, - }, + color: "#C6A268", + // itemStyle: { + // normal: { + // //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] + // barBorderRadius: [50, 50, 0, 0], + // color: function (params) { + // var colorList = [ + // "#C6A268", + // ]; + // return colorList[params.dataIndex]; + // }, + // }, + // }, }, - ], }; // 病种分布 @@ -182,12 +198,12 @@ export const diseaseEcharts = { }, xAxis: { type: "category", - data: ["<40岁","41-50岁","51-60岁","61-70岁","71-80岁",">80岁",], + data: ["<40岁", "41-50岁", "51-60岁", "61-70岁", "71-80岁", ">80岁"], }, grid: { top: "12%", - left: "5%", - right: "2%", + left: "6%", + right: "4%", bottom: "0%", containLabel: true, }, @@ -195,6 +211,9 @@ export const diseaseEcharts = { name: "数量( 个 )", type: "value", minInterval: 1, + nameTextStyle: { + padding: [0, 0, 0, 30], + }, splitLine: { show: true, lineStyle: { @@ -208,20 +227,13 @@ export const diseaseEcharts = { data: [], type: "bar", barMaxWidth: 24, //柱图宽度 - color: "#4f8bff", - itemStyle: { - normal: { - //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] - barBorderRadius: [50, 50, 0, 0], - }, - }, + color: "#70483E", }, - ], }; // -------- 诊疗信息统计 -------- -// 病种 +// 病种排名 export const diagnoseEcharts = { tooltip: { trigger: "axis", @@ -246,27 +258,31 @@ export const diagnoseEcharts = { }, }, xAxis: { - name: "数量( 个 )", - type: "value", - minInterval: 1, - splitLine: { - show: true, - lineStyle: { - type: "dashed", - }, - }, - + type: "value", + minInterval: 1, + splitLine: { + show: true, + lineStyle: { + type: "dashed", + }, + }, }, grid: { - top: "12%", - left: "1%", - right: "14%", + top: "4%", + left: "4%", + right: "6%", bottom: "0%", containLabel: true, }, yAxis: { - type: "category", - data: [], + type: "category", + data: [], + splitLine: { + show: true, + lineStyle: { + type: "dashed", + }, + }, }, series: [ { @@ -274,12 +290,11 @@ export const diagnoseEcharts = { data: [], type: "bar", barMaxWidth: 24, //柱图宽度 - color: "#4f8bff", + color: "#906C4A", }, - ], }; -// 体系 +// 体型 export const systemEcharts = { tooltip: { trigger: "axis", @@ -309,8 +324,8 @@ export const systemEcharts = { }, grid: { top: "12%", - left: "5%", - right: "2%", + left: "6%", + right: "4%", bottom: "0%", containLabel: true, }, @@ -318,6 +333,9 @@ export const systemEcharts = { name: "数量( 个 )", type: "value", minInterval: 1, + nameTextStyle: { + padding: [0, 0, 0, 34], + }, splitLine: { show: true, lineStyle: { @@ -331,15 +349,14 @@ export const systemEcharts = { data: [], type: "bar", barMaxWidth: 24, //柱图宽度 - color: "#4f8bff", - itemStyle: { - normal: { - //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] - barBorderRadius: [50, 50, 0, 0], - }, - }, + color: "#C6A268", + // itemStyle: { + // normal: { + // //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] + // barBorderRadius: [50, 50, 0, 0], + // }, + // }, }, - ], }; // 体质 @@ -372,8 +389,8 @@ export const physiqueEcharts = { }, grid: { top: "12%", - left: "5%", - right: "2%", + left: "4%", + right: "4%", bottom: "0%", containLabel: true, }, @@ -381,6 +398,9 @@ export const physiqueEcharts = { name: "数量( 个 )", type: "value", minInterval: 1, + nameTextStyle: { + padding: [0, 0, 0, 20], + }, splitLine: { show: true, lineStyle: { @@ -394,15 +414,14 @@ export const physiqueEcharts = { data: [], type: "bar", barMaxWidth: 24, //柱图宽度 - color: "#4f8bff", - itemStyle: { - normal: { - //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] - barBorderRadius: [50, 50, 0, 0], - }, - }, + color: "#70483E", + // itemStyle: { + // normal: { + // //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] + // barBorderRadius: [50, 50, 0, 0], + // }, + // }, }, - ], }; // 体态 @@ -428,7 +447,7 @@ export const postureEcharts = { bottom: "0%", containLabel: true, }, - color: ["#4f8bff", "#ffcd6c", "#00d1a1", "#a794fe","#EE6666"], + color: ["#C7BDB1", "#C6A268", "#906C4A", "#70483E", "#582518"], series: [ { type: "pie", @@ -437,6 +456,14 @@ export const postureEcharts = { label: { show: false, position: "center", + normal: { + show: true, + position: "inner", + formatter: "{b}:{c}个", + textStyle: { + color: "#fff", + }, + }, }, labelLine: { show: false, @@ -445,8 +472,8 @@ export const postureEcharts = { }, ], }; -// 患者信息 - 数据分析 -export const HZXXSJFX = { +// 失眠评估 +export const agrypniaEcharts = { tooltip: { trigger: "axis", axisPointer: { @@ -471,12 +498,12 @@ export const HZXXSJFX = { }, xAxis: { type: "category", - data: ["性别"], + data: ["0~4分", "5~9分", "10~14分", "15~19分", "20~27分"], }, grid: { top: "12%", left: "5%", - right: "2%", + right: "5%", bottom: "0%", containLabel: true, }, @@ -484,6 +511,9 @@ export const HZXXSJFX = { name: "数量( 个 )", type: "value", minInterval: 1, + nameTextStyle: { + padding: [0, 0, 0, 20], + }, splitLine: { show: true, lineStyle: { @@ -493,35 +523,22 @@ export const HZXXSJFX = { }, series: [ { - name: "男", - data: [20, 20, 50, 80, 70, 11, 15], - type: "bar", - barMaxWidth: 24, //柱图宽度 - color: "#4f8bff", - itemStyle: { - normal: { - //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] - barBorderRadius: [50, 50, 0, 0], - }, - }, - }, - { - name: "女", - data: [120, 200, 150, 80, 70, 110, 10], + name: "数量:", + data: [], type: "bar", barMaxWidth: 24, //柱图宽度 - color: "#ffcd6c", - itemStyle: { - normal: { - //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] - barBorderRadius: [50, 50, 0, 0], - }, - }, + color: "#C6A268", + // itemStyle: { + // normal: { + // //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] + // barBorderRadius: [50, 50, 0, 0], + // }, + // }, }, ], }; -// - - - - - - - - 静脉溶栓统计 -export const JMRSL = { +// 焦虑度 +export const anxietyEcharts = { tooltip: { trigger: "axis", axisPointer: { @@ -539,181 +556,103 @@ export const JMRSL = { params[i].seriesName + " : " + params[i].value + - "%"; + "个"; } return res1; }, }, + xAxis: { + type: "category", + data: ["<8分", "8~20分", "21~35分", ">35分"], + }, grid: { top: "12%", left: "5%", - right: "3%", + right: "5%", bottom: "0%", containLabel: true, }, - xAxis: { - type: "category", - data: [ - "2023-01", - "2023-02", - "2023-03", - "2023-04", - "2023-05", - "2023-06", - "2023-07", - "2023-08", - "2023-09", - "2023-10", - "2023-11", - "2023-12", - ], - }, yAxis: { - name: "单位( % ) ", + name: "数量( 个 )", type: "value", minInterval: 1, + nameTextStyle: { + padding: [0, 0, 0, 20], + }, splitLine: { show: true, lineStyle: { type: "dashed", }, }, - graphicObj: { - left: 0, - }, }, series: [ { - color: "#A794FE", - data: [120, 200, 150, 80, 70, 110, 130], + name: "数量:", + data: [], type: "bar", - name: "静脉溶栓率", barMaxWidth: 24, //柱图宽度 - itemStyle: { - normal: { - //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] - barBorderRadius: [50, 50, 0, 0], - }, - }, + color: "#70483E", + // itemStyle: { + // normal: { + // //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] + // barBorderRadius: [50, 50, 0, 0], + // }, + // }, }, ], }; -// 静脉溶栓率 - 数据对比 -export const JMSJDB = { +// -------- 治疗类型 -------- +// 治疗类型 +export const healTypeEcharts = { 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; + trigger: "item", + }, + title: { + text: "", + left: "center", + top: "40%", + textStyle: { + textAlign: "center", + color: "#393D4E", + fontSize: 40, + fontWeight: 600, }, }, grid: { - top: "12%", - left: "5%", - right: "3%", + top: "0%", + left: "0", + right: "0%", bottom: "0%", containLabel: true, }, - xAxis: [ - { - type: "category", - data: [ - "2023-01", - "2023-02", - "2023-03", - "2023-04", - "2023-05", - "2023-06", - "2023-07", - "2023-08", - "2023-09", - "2023-10", - "2023-11", - "2023-12", - ], - boundaryGap: false, - }, - ], - yAxis: { - graphicObj: { - left: 0, - }, - name: "单位( 个 )", - type: "value", - minInterval: 1, - splitLine: { - show: true, - lineStyle: { - type: "dashed", - }, - }, - }, + color: ["#C6A268", "#D8D8D8"], series: [ { - name: "静脉溶栓人数", - type: "line", - // stack: "Total", - color: "#00CE9F", - areaStyle: { - opacity: 0.8, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: "#00CE9F", - }, - { - offset: 1, - color: "rgba(0,209,161,0.8)", - }, - ]), - }, - emphasis: { - focus: "series", - }, - data: [120, 132, 101, 134, 90, 230, 210], - }, - { - name: "急救特征人数", - type: "line", - // stack: "Total", - color: "#538BF6", - areaStyle: { - opacity: 0.8, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: "#538BF6", - }, - { - offset: 1, - color: "#538BF6", + type: "pie", + radius: "80%", + avoidLabelOverlap: false, + label: { + show: false, + position: "center", + normal: { + show: true, + position: "inner", + formatter: "{b}:{c}个", + textStyle: { + color: "#fff", }, - ]), + }, }, - emphasis: { - focus: "series", + labelLine: { + show: false, }, - data: [120, 112, 91, 234, 222, 89, 100], + data: [], }, ], }; -// 静脉溶栓率 - DNT -export const DNT = { +// 病种方法 +export const diseaseMethodEcharts = { tooltip: { trigger: "axis", axisPointer: { @@ -738,30 +677,17 @@ export const DNT = { }, xAxis: { type: "category", - data: [ - "2023-01", - "2023-02", - "2023-03", - "2023-04", - "2023-05", - "2023-06", - "2023-07", - "2023-08", - "2023-09", - "2023-10", - "2023-11", - "2023-12", - ], + data: ["肥胖症", "失眠症", "其他"], }, grid: { top: "12%", left: "5%", - right: "3%", + right: "2%", bottom: "0%", containLabel: true, }, yAxis: { - name: "单位( 个 )", + name: "数量( 个 )", type: "value", minInterval: 1, splitLine: { @@ -773,11 +699,10 @@ export const DNT = { }, series: [ { - color: "#FFCD6C", - data: [120, 200, 150, 80, 70, 110, 130], + name: "数量1:", + data: [1, 2], type: "bar", barMaxWidth: 24, //柱图宽度 - name: "≤45 min", itemStyle: { normal: { //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] @@ -786,23 +711,9 @@ export const DNT = { }, }, { - color: "#F97186", - data: [120, 200, 150, 80, 70, 110, 130], + name: "数量2:", + data: [1, 3], type: "bar", - name: "≤60 min", - barMaxWidth: 24, //柱图宽度 - itemStyle: { - normal: { - //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] - barBorderRadius: [50, 50, 0, 0], - }, - }, - }, - { - color: "#4f8bff", - data: [120, 200, 150, 80, 70, 110, 130], - type: "bar", - name: ">60 min", barMaxWidth: 24, //柱图宽度 itemStyle: { normal: { @@ -813,110 +724,56 @@ export const DNT = { }, ], }; -// 静脉溶栓率 - SICH -export const SICH = { +// 治疗效果 +export const effectEcharts = { 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; + trigger: "item", + }, + title: { + text: "", + left: "center", + top: "40%", + textStyle: { + textAlign: "center", + color: "#393D4E", + fontSize: 40, + fontWeight: 600, }, }, grid: { - top: "12%", - left: "5%", - right: "3%", + top: "0%", + left: "0", + right: "0%", bottom: "0%", containLabel: true, }, - ttooltip: { - trigger: "axis", - axisPointer: { - // 坐标轴指示器,坐标轴触发有效 - type: "line", // 默认为直线,可选为:'line' | 'shadow' - }, - }, - xAxis: [ - { - boundaryGap: false, - type: "category", - data: [ - "2023-01", - "2023-02", - "2023-03", - "2023-04", - "2023-05", - "2023-06", - "2023-07", - "2023-08", - "2023-09", - "2023-10", - "2023-11", - "2023-12", - ], - }, - ], - yAxis: { - scale: true, - type: "value", - minInterval: 1, - min: 0, - name: "单位( % )", - position: "left", - splitLine: { - show: true, - lineStyle: { - type: "dashed", - }, - }, - axisLabel: { - show: true, - interval: 0, - }, - }, + color: ["#C6A268", "#906C4A", "#70483E", "#C7BDB1"], series: [ { - name: "sICH发生率", - type: "line", - stack: "Total", - color: "#F97186", - areaStyle: { - opacity: 0.8, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: "#FA7F90", - }, - { - offset: 1, - color: "#F3D7DE", + type: "pie", + radius: "80%", + avoidLabelOverlap: false, + label: { + show: false, + position: "center", + normal: { + show: true, + position: "inner", + formatter: "{b}:{c}个", + textStyle: { + color: "#fff", }, - ]), + }, }, - emphasis: { - focus: "series", + labelLine: { + show: false, }, - data: [120, 132, 101, 134, 124, 120, 100], + data: [], }, ], }; -// - - - - - - - - 血管治疗 -export const XGZL = { +// 诊疗费用 +export const costEcharts = { tooltip: { trigger: "axis", axisPointer: { @@ -934,39 +791,29 @@ export const XGZL = { params[i].seriesName + " : " + params[i].value + - "%"; + "个"; } return res1; }, }, xAxis: { type: "category", - data: [ - "2023-01", - "2023-02", - "2023-03", - "2023-04", - "2023-05", - "2023-06", - "2023-07", - "2023-08", - "2023-09", - "2023-10", - "2023-11", - "2023-12", - ], + data: ["<300元", "300 ~ 900元", "900 ~ 2000元", "2000 ~ 5000元", ">5000元"], }, grid: { top: "12%", - left: "5%", - right: "3%", + left: "4%", + right: "4%", bottom: "0%", containLabel: true, }, yAxis: { - name: "单位( % )", + name: "数量( 个 )", type: "value", minInterval: 1, + nameTextStyle: { + padding: [0, 0, 0, 20], + }, splitLine: { show: true, lineStyle: { @@ -976,22 +823,22 @@ export const XGZL = { }, series: [ { - name: "血管内治疗率", - color: "#4F8BFF", - data: [120, 200, 150, 80, 70, 110, 130], + name: "数量:", + data: [], type: "bar", barMaxWidth: 24, //柱图宽度 - itemStyle: { - normal: { - //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] - barBorderRadius: [50, 50, 0, 0], - }, - }, + color: "#C6A268", + // itemStyle: { + // normal: { + // //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] + // barBorderRadius: [50, 50, 0, 0], + // }, + // }, }, ], }; -// 数据对比 -export const XGSJDB = { +// -------- 随访 -------- +export const followEcharts = { tooltip: { trigger: "axis", axisPointer: { @@ -1014,247 +861,35 @@ export const XGSJDB = { return res1; }, }, - grid: { - top: "12%", - left: "5%", - right: "3%", - bottom: "0%", - containLabel: true, - }, - ttooltip: { - trigger: "axis", - axisPointer: { - // 坐标轴指示器,坐标轴触发有效 - type: "line", // 默认为直线,可选为:'line' | 'shadow' - }, - }, - xAxis: [ - { - type: "category", - data: [ - "2023-01", - "2023-02", - "2023-03", - "2023-04", - "2023-05", - "2023-06", - "2023-07", - "2023-08", - "2023-09", - "2023-10", - "2023-11", - "2023-12", - ], - boundaryGap: false, - }, - ], - yAxis: { - scale: true, - type: "value", - minInterval: 1, - name: "单位( 个 )", - position: "left", - splitLine: { - show: true, - lineStyle: { - type: "dashed", - }, - }, - axisLabel: { - show: true, - interval: 0, - }, + xAxis: { + type: "category", + data: ["待随访", "临近随访", "超期随访", "正常随访"], }, - series: [ - { - name: "桥接治疗人数", - type: "line", - // stack: "Total", - color: "#00CE9F", - - areaStyle: { - opacity: 0.2, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: "#00CE9F", - }, - { - offset: 1, - color: "#fff", - }, - ]), - }, - emphasis: { - focus: "series", - }, - data: [120, 132, 101, 134, 90, 230, 210], - }, - { - name: "非桥接治疗人数", - type: "line", - // stack: "Total", - color: "#538BF6", - areaStyle: { - opacity: 0.2, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: "#538BF6", - }, - { - offset: 1, - color: "#fff", - }, - ]), - }, - emphasis: { - focus: "series", - }, - data: [220, 182, 191, 234, 290, 330, 310], - }, - ], -}; -// DPT -export const DPT = { grid: { top: "12%", - left: "5%", - right: "3%", + left: "4%", + right: "4%", bottom: "0%", containLabel: true, }, - tooltip: { - trigger: "axis", - axisPointer: { - // 坐标轴指示器,坐标轴触发有效 - type: "line", // 默认为直线,可选为:'line' | 'shadow' - }, - 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: [ - "2023-01", - "2023-02", - "2023-03", - "2023-04", - "2023-05", - "2023-06", - "2023-07", - "2023-08", - "2023-09", - "2023-10", - "2023-11", - "2023-12", - ], - boundaryGap: false, - }, - ], yAxis: { - scale: true, + name: "数量( 个 )", type: "value", minInterval: 1, - name: "单位( 个 )", - position: "left", + nameTextStyle: { + padding: [0, 0, 0, 20], + }, splitLine: { show: true, lineStyle: { type: "dashed", }, }, - axisLabel: { - show: true, - interval: 0, - }, }, - series: [ - { - name: "≤60 min", - type: "line", - // stack: "Total", - color: "#00D1A1", - areaStyle: { - opacity: 0.8, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: "#00D1A1", - }, - { - offset: 1, - color: "#E5F5E8", - }, - ]), - }, - emphasis: { - focus: "series", - }, - data: [120, 132, 101, 134, 90, 230, 210], - }, - { - name: "≤90 min", - type: "line", - // stack: "Total", - color: "#FFCD6C ", - areaStyle: { - opacity: 0.8, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: "#FFCD6C ", - }, - { - offset: 1, - color: "#FDEBC8", - }, - ]), - }, - emphasis: { - focus: "series", - }, - data: [20, 32, 10, 34, 90, 30, 21], - }, - { - name: ">90 min", - type: "line", - // stack: "Total", - color: "#A794FE", - areaStyle: { - opacity: 0.8, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: "#A794FE", - }, - { - offset: 1, - color: "#A794FE", - }, - ]), - }, - emphasis: { - focus: "series", - }, - data: [20, 32, 10, 34, 90, 30, 21], - }, - ], + series: [], }; -//RPT -export const RPT = { +// 失访原因 +export const lossFollowEcharts = { tooltip: { trigger: "axis", axisPointer: { @@ -1277,124 +912,44 @@ export const RPT = { return res1; }, }, - legend: { - type: "scroll", - padding: [0, 350, 0, 0], - data: ["急救详情", "本院SOP"], + xAxis: { + type: "category", + data: [], }, grid: { top: "12%", - left: "5%", - right: "3%", + left: "4%", + right: "4%", bottom: "0%", containLabel: true, }, - xAxis: [ - { - type: "category", - data: [ - "2023-01", - "2023-02", - "2023-03", - "2023-04", - "2023-05", - "2023-06", - "2023-07", - "2023-08", - "2023-09", - "2023-10", - "2023-11", - "2023-12", - ], - boundaryGap: false, - }, - ], yAxis: { - name: "单位( 个 )", - scale: true, + name: "数量( 个 )", type: "value", minInterval: 1, - position: "left", + nameTextStyle: { + padding: [0, 0, 0, 20], + }, splitLine: { show: true, lineStyle: { type: "dashed", }, }, - axisLabel: { - show: true, - interval: 0, - }, }, series: [ { - name: "≤60", - type: "line", - // stack: "Total", - color: "#A794FE", - areaStyle: { - opacity: 0.8, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: "#A794FE", - }, - { - offset: 1, - color: "#EAE5FE", - }, - ]), - }, - emphasis: { - focus: "series", - }, - data: [120, 132, 101, 134, 90, 230, 210], - }, - { - name: "≤90", - type: "line", - // stack: "Total", - color: "#4F8BFF", - areaStyle: { - opacity: 0.8, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: "#4F8BFF", - }, - { - offset: 1, - color: "#E9F1FF", - }, - ]), - }, - emphasis: { - focus: "series", - }, - data: [22, 82, 19, 34, 29, 33, 31], - }, - { - name: ">90", - type: "line", - // stack: "Total", - color: "#ffcd6c", - areaStyle: { - opacity: 0.8, - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: "#ffcd6c", - }, - { - offset: 1, - color: "rgba(255,205,108,0.8)", - }, - ]), - }, - emphasis: { - focus: "series", - }, - data: [22, 82, 19, 34, 29, 33, 31], + name: "数量:", + data: [], + type: "bar", + barMaxWidth: 24, //柱图宽度 + color: "#70483E", + // itemStyle: { + // normal: { + // //这里设置柱形图圆角 [左上角,右上角,右下角,左下角] + // barBorderRadius: [50, 50, 0, 0], + // }, + // }, }, ], }; diff --git a/acupuncture-前台/src/views/indexCom/patient.vue b/acupuncture-前台/src/views/indexCom/patient.vue index c1f31125..17fd473b 100644 --- a/acupuncture-前台/src/views/indexCom/patient.vue +++ b/acupuncture-前台/src/views/indexCom/patient.vue @@ -1,62 +1,78 @@ \ No newline at end of file +.title-bor { + display: inline-block; + height: 20px; + width: 6px; + background: #4f8bff; + margin-right: 10px; + border-radius: 8px; +} + diff --git a/acupuncture-前台/src/views/indexCom/query.vue b/acupuncture-前台/src/views/indexCom/query.vue index fc740393..4b5ab797 100644 --- a/acupuncture-前台/src/views/indexCom/query.vue +++ b/acupuncture-前台/src/views/indexCom/query.vue @@ -6,7 +6,7 @@
- - - + --> + @@ -88,27 +91,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 +174,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 +191,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 +207,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)); + }); + }, }, }; @@ -193,46 +231,64 @@ export default { justify-content: center; align-items: center; height: 100%; - background-image: url("../assets/images/login-background.jpg"); + background-image: url("./bg.png"); background-size: cover; + display: flex; + .login-left { + flex: 1.5; + } + + .login-right { + flex: 1; + } } + .title { + font-size: 26 px; margin: 0px auto 30px auto; - text-align: center; - color: #707070; + text-align: left; + color: #fff; + line-height: 28px; } .login-form { border-radius: 6px; - background: #ffffff; + // 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 +301,7 @@ export default { font-size: 12px; letter-spacing: 1px; } + .login-code-img { height: 38px; } diff --git a/acupuncture-前台/src/views/medicalFile/components/anxiety/HAMD.vue b/acupuncture-前台/src/views/medicalFile/components/anxiety/HAMD.vue new file mode 100644 index 00000000..7572aab8 --- /dev/null +++ b/acupuncture-前台/src/views/medicalFile/components/anxiety/HAMD.vue @@ -0,0 +1,374 @@ + + + + + + diff --git a/acupuncture-前台/src/views/medicalFile/components/anxiety/SAS.vue b/acupuncture-前台/src/views/medicalFile/components/anxiety/SAS.vue new file mode 100644 index 00000000..dd324c43 --- /dev/null +++ b/acupuncture-前台/src/views/medicalFile/components/anxiety/SAS.vue @@ -0,0 +1,323 @@ + + + + + + diff --git a/acupuncture-前台/src/views/medicalFile/components/posture/PHQ-9.vue b/acupuncture-前台/src/views/medicalFile/components/posture/PHQ-9.vue new file mode 100644 index 00000000..73e15d02 --- /dev/null +++ b/acupuncture-前台/src/views/medicalFile/components/posture/PHQ-9.vue @@ -0,0 +1,202 @@ + + + + + + diff --git a/acupuncture-前台/src/views/medicalFile/components/posture/PSQI.vue b/acupuncture-前台/src/views/medicalFile/components/posture/PSQI.vue new file mode 100644 index 00000000..2d789c9a --- /dev/null +++ b/acupuncture-前台/src/views/medicalFile/components/posture/PSQI.vue @@ -0,0 +1,171 @@ + + + + + + diff --git a/acupuncture-前台/src/views/medicalFile/components/posture/epworth.vue b/acupuncture-前台/src/views/medicalFile/components/posture/epworth.vue new file mode 100644 index 00000000..ab70fcb1 --- /dev/null +++ b/acupuncture-前台/src/views/medicalFile/components/posture/epworth.vue @@ -0,0 +1,191 @@ + + + + + + diff --git a/acupuncture-前台/src/views/medicalFile/details.vue b/acupuncture-前台/src/views/medicalFile/details.vue new file mode 100644 index 00000000..03a2eecf --- /dev/null +++ b/acupuncture-前台/src/views/medicalFile/details.vue @@ -0,0 +1,1224 @@ + + + + + + diff --git a/acupuncture-前台/src/views/medicalFile/index.vue b/acupuncture-前台/src/views/medicalFile/index.vue index 604127b6..4f148f06 100644 --- a/acupuncture-前台/src/views/medicalFile/index.vue +++ b/acupuncture-前台/src/views/medicalFile/index.vue @@ -8,6 +8,15 @@ v-show="showSearch" label-width="80px" > + + + - - - + - - - - - - +
下载模版 @@ -174,14 +170,15 @@ label="姓名" align="center" prop="name" - width="100" + min-width="100" />