Browse Source

患者档案列表接口对接

newMaster
1747191978@qq.com 4 months ago
parent
commit
5860f73a5b
  1. 2
      acupuncture-ui/package.json
  2. 26
      acupuncture-ui/src/api/patientFile.js
  3. 130
      acupuncture-ui/src/components/HeaderSearch/index.vue
  4. 202
      acupuncture-ui/src/router/index.js
  5. 138
      acupuncture-ui/src/store/modules/permission.js
  6. 280
      acupuncture-ui/src/views/medicalFile/index.vue
  7. 106
      acupuncture-ui/src/views/patientFile/index.vue

2
acupuncture-ui/package.json

@ -41,7 +41,7 @@
"clipboard": "2.0.8",
"core-js": "3.37.1",
"echarts": "5.4.0",
"element-ui": "2.15.14",
"element-ui": "^2.15.14",
"file-saver": "2.0.5",
"fuse.js": "6.4.3",
"highlight.js": "9.18.5",

26
acupuncture-ui/src/api/patientFile.js

@ -1,6 +1,6 @@
import request from "@/utils/request";
// 注册方法
// 获取列表
export function queryPatient(data) {
return request({
url: "/patient/list",
@ -8,3 +8,27 @@ export function queryPatient(data) {
data: data,
});
}
// 添加患者档案
export function patientAdd(data) {
return request({
url: "/patient/add",
method: "post",
data: data,
});
}
// 修改患者档案
export function patientUpd(data) {
return request({
url: "/patient/upd",
method: "post",
data: data,
});
}
// 删除患者档案
export function patientDel(data) {
return request({
url: "/patient/del",
method: "post",
data: data,
});
}

130
acupuncture-ui/src/components/HeaderSearch/index.vue

@ -1,6 +1,10 @@
<template>
<div :class="{'show':show}" class="header-search">
<svg-icon class-name="search-icon" icon-class="search" @click.stop="click" />
<div :class="{ show: show }" class="header-search">
<svg-icon
class-name="search-icon"
icon-class="search"
@click.stop="click"
/>
<el-select
ref="headerSearchSelect"
v-model="search"
@ -12,7 +16,12 @@
class="header-search-select"
@change="change"
>
<el-option v-for="option in options" :key="option.item.path" :value="option.item" :label="option.item.title.join(' > ')" />
<el-option
v-for="option in options"
:key="option.item.path"
:value="option.item"
:label="option.item.title.join(' > ')"
/>
</el-select>
</div>
</template>
@ -20,55 +29,55 @@
<script>
// fuse is a lightweight fuzzy-search module
// make search results more in line with expectations
import Fuse from 'fuse.js/dist/fuse.min.js'
import path from 'path'
import { isHttp } from '@/utils/validate'
import Fuse from "fuse.js/dist/fuse.min.js";
import path from "path";
import { isHttp } from "@/utils/validate";
export default {
name: 'HeaderSearch',
name: "HeaderSearch",
data() {
return {
search: '',
search: "",
options: [],
searchPool: [],
show: false,
fuse: undefined
}
fuse: undefined,
};
},
computed: {
routes() {
return this.$store.getters.permission_routes
}
return this.$store.getters.permission_routes;
},
},
watch: {
routes() {
this.searchPool = this.generateRoutes(this.routes)
this.searchPool = this.generateRoutes(this.routes);
},
searchPool(list) {
this.initFuse(list)
this.initFuse(list);
},
show(value) {
if (value) {
document.body.addEventListener('click', this.close)
document.body.addEventListener("click", this.close);
} else {
document.body.removeEventListener('click', this.close)
}
document.body.removeEventListener("click", this.close);
}
},
},
mounted() {
this.searchPool = this.generateRoutes(this.routes)
this.searchPool = this.generateRoutes(this.routes);
},
methods: {
click() {
this.show = !this.show
this.show = !this.show;
if (this.show) {
this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus()
this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus();
}
},
close() {
this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur()
this.options = []
this.show = false
this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur();
this.options = [];
this.show = false;
},
change(val) {
const path = val.path;
@ -81,14 +90,14 @@ export default {
if (query) {
this.$router.push({ path: path, query: JSON.parse(query) });
} else {
this.$router.push(path)
this.$router.push(path);
}
}
this.search = ''
this.options = []
this.search = "";
this.options = [];
this.$nextTick(() => {
this.show = false
})
this.show = false;
});
},
initFuse(list) {
this.fuse = new Fuse(list, {
@ -97,62 +106,73 @@ export default {
location: 0,
distance: 100,
minMatchCharLength: 1,
keys: [{
name: 'title',
weight: 0.7
}, {
name: 'path',
weight: 0.3
}]
})
keys: [
{
name: "title",
weight: 0.7,
},
{
name: "path",
weight: 0.3,
},
],
});
},
// Filter out the routes that can be displayed in the sidebar
// And generate the internationalized title
generateRoutes(routes, basePath = '/', prefixTitle = []) {
let res = []
generateRoutes(routes, basePath = "/", prefixTitle = []) {
let res = [];
for (const router of routes) {
// skip hidden router
if (router.hidden) { continue }
if (router.hidden) {
continue;
}
const data = {
path: !isHttp(router.path) ? path.resolve(basePath, router.path) : router.path,
title: [...prefixTitle]
}
path: !isHttp(router.path)
? path.resolve(basePath, router.path)
: router.path,
title: [...prefixTitle],
};
if (router.meta && router.meta.title) {
data.title = [...data.title, router.meta.title]
data.title = [...data.title, router.meta.title];
if (router.redirect !== 'noRedirect') {
if (router.redirect !== "noRedirect") {
// only push the routes with title
// special case: need to exclude parent router without redirect
res.push(data)
res.push(data);
}
}
if (router.query) {
data.query = router.query
data.query = router.query;
}
// recursive child routes
if (router.children) {
const tempRoutes = this.generateRoutes(router.children, data.path, data.title)
const tempRoutes = this.generateRoutes(
router.children,
data.path,
data.title
);
if (tempRoutes.length >= 1) {
res = [...res, ...tempRoutes]
res = [...res, ...tempRoutes];
}
}
}
return res
return res;
},
querySearch(query) {
if (query !== '') {
this.options = this.fuse.search(query)
if (query !== "") {
this.options = this.fuse.search(query);
} else {
this.options = []
}
}
}
this.options = [];
}
},
},
};
</script>
<style lang="scss" scoped>

202
acupuncture-ui/src/router/index.js

@ -1,10 +1,10 @@
import Vue from 'vue'
import Router from 'vue-router'
import Vue from "vue";
import Router from "vue-router";
Vue.use(Router)
Vue.use(Router);
/* Layout */
import Layout from '@/layout'
import Layout from "@/layout";
/**
* Note: 路由配置项
@ -31,153 +31,179 @@ import Layout from '@/layout'
// 公共路由
export const constantRoutes = [
{
path: '/redirect',
path: "/redirect",
component: Layout,
hidden: true,
children: [
{
path: '/redirect/:path(.*)',
component: () => import('@/views/redirect')
}
]
path: "/redirect/:path(.*)",
component: () => import("@/views/redirect"),
},
],
},
{
path: '/login',
component: () => import('@/views/login'),
hidden: true
path: "/login",
component: () => import("@/views/login"),
hidden: true,
},
{
path: '/register',
component: () => import('@/views/register'),
hidden: true
path: "/register",
component: () => import("@/views/register"),
hidden: true,
},
{
path: '/404',
component: () => import('@/views/error/404'),
hidden: true
path: "/404",
component: () => import("@/views/error/404"),
hidden: true,
},
{
path: '/401',
component: () => import('@/views/error/401'),
hidden: true
path: "/401",
component: () => import("@/views/error/401"),
hidden: true,
},
{
path: '',
path: "",
component: Layout,
redirect: 'index',
redirect: "index",
children: [
{
path: 'index',
component: () => import('@/views/index'),
name: 'Index',
meta: { title: '首页', icon: 'dashboard', affix: true }
}
]
path: "index",
component: () => import("@/views/index"),
name: "Index",
meta: { title: "首页", icon: "dashboard", affix: true },
},
],
},
{
path: "/patientFile/index",
component: Layout,
redirect: "index",
children: [
{
path: "/patientIndex",
component: () => import("@/views/patientFile/index"),
name: "Index",
meta: { title: "患者档案", icon: "dashboard", affix: true },
},
],
},
{
path: "/medicalFile/index",
component: Layout,
redirect: "index",
children: [
{
path: "index",
component: () => import("@/views/medicalFile/index"),
name: "Index",
meta: { title: "诊疗档案", icon: "dashboard", affix: true },
},
],
},
{
path: '/user',
path: "/user",
component: Layout,
hidden: true,
redirect: 'noredirect',
redirect: "noredirect",
children: [
{
path: 'profile',
component: () => import('@/views/system/user/profile/index'),
name: 'Profile',
meta: { title: '个人中心', icon: 'user' }
}
]
}
]
path: "profile",
component: () => import("@/views/system/user/profile/index"),
name: "Profile",
meta: { title: "个人中心", icon: "user" },
},
],
},
];
// 动态路由,基于用户权限动态去加载
export const dynamicRoutes = [
{
path: '/system/user-auth',
path: "/system/user-auth",
component: Layout,
hidden: true,
permissions: ['system:user:edit'],
permissions: ["system:user:edit"],
children: [
{
path: 'role/:userId(\\d+)',
component: () => import('@/views/system/user/authRole'),
name: 'AuthRole',
meta: { title: '分配角色', activeMenu: '/system/user' }
}
]
path: "role/:userId(\\d+)",
component: () => import("@/views/system/user/authRole"),
name: "AuthRole",
meta: { title: "分配角色", activeMenu: "/system/user" },
},
],
},
{
path: '/system/role-auth',
path: "/system/role-auth",
component: Layout,
hidden: true,
permissions: ['system:role:edit'],
permissions: ["system:role:edit"],
children: [
{
path: 'user/:roleId(\\d+)',
component: () => import('@/views/system/role/authUser'),
name: 'AuthUser',
meta: { title: '分配用户', activeMenu: '/system/role' }
}
]
path: "user/:roleId(\\d+)",
component: () => import("@/views/system/role/authUser"),
name: "AuthUser",
meta: { title: "分配用户", activeMenu: "/system/role" },
},
],
},
{
path: '/system/dict-data',
path: "/system/dict-data",
component: Layout,
hidden: true,
permissions: ['system:dict:list'],
permissions: ["system:dict:list"],
children: [
{
path: 'index/:dictId(\\d+)',
component: () => import('@/views/system/dict/data'),
name: 'Data',
meta: { title: '字典数据', activeMenu: '/system/dict' }
}
]
path: "index/:dictId(\\d+)",
component: () => import("@/views/system/dict/data"),
name: "Data",
meta: { title: "字典数据", activeMenu: "/system/dict" },
},
],
},
{
path: '/monitor/job-log',
path: "/monitor/job-log",
component: Layout,
hidden: true,
permissions: ['monitor:job:list'],
permissions: ["monitor:job:list"],
children: [
{
path: 'index/:jobId(\\d+)',
component: () => import('@/views/monitor/job/log'),
name: 'JobLog',
meta: { title: '调度日志', activeMenu: '/monitor/job' }
}
]
path: "index/:jobId(\\d+)",
component: () => import("@/views/monitor/job/log"),
name: "JobLog",
meta: { title: "调度日志", activeMenu: "/monitor/job" },
},
],
},
{
path: '/tool/gen-edit',
path: "/tool/gen-edit",
component: Layout,
hidden: true,
permissions: ['tool:gen:edit'],
permissions: ["tool:gen:edit"],
children: [
{
path: 'index/:tableId(\\d+)',
component: () => import('@/views/tool/gen/editTable'),
name: 'GenEdit',
meta: { title: '修改生成配置', activeMenu: '/tool/gen' }
}
]
}
]
path: "index/:tableId(\\d+)",
component: () => import("@/views/tool/gen/editTable"),
name: "GenEdit",
meta: { title: "修改生成配置", activeMenu: "/tool/gen" },
},
],
},
];
// 防止连续点击多次路由报错
let routerPush = Router.prototype.push;
let routerReplace = Router.prototype.replace;
// push
Router.prototype.push = function push(location) {
return routerPush.call(this, location).catch(err => err)
}
return routerPush.call(this, location).catch((err) => err);
};
// replace
Router.prototype.replace = function push(location) {
return routerReplace.call(this, location).catch(err => err)
}
return routerReplace.call(this, location).catch((err) => err);
};
export default new Router({
mode: 'history', // 去掉url中的#
mode: "history", // 去掉url中的#
scrollBehavior: () => ({ y: 0 }),
routes: constantRoutes
})
routes: constantRoutes,
});

138
acupuncture-ui/src/store/modules/permission.js

@ -1,9 +1,9 @@
import auth from '@/plugins/auth'
import router, { constantRoutes, dynamicRoutes } from '@/router'
import { getRouters } from '@/api/menu'
import Layout from '@/layout/index'
import ParentView from '@/components/ParentView'
import InnerLink from '@/layout/components/InnerLink'
import auth from "@/plugins/auth";
import router, { constantRoutes, dynamicRoutes } from "@/router";
import { getRouters } from "@/api/menu";
import Layout from "@/layout/index";
import ParentView from "@/components/ParentView";
import InnerLink from "@/layout/components/InnerLink";
const permission = {
state: {
@ -11,127 +11,127 @@ const permission = {
addRoutes: [],
defaultRoutes: [],
topbarRouters: [],
sidebarRouters: []
sidebarRouters: [],
},
mutations: {
SET_ROUTES: (state, routes) => {
state.addRoutes = routes
state.routes = constantRoutes.concat(routes)
state.addRoutes = routes;
state.routes = constantRoutes.concat(routes);
},
SET_DEFAULT_ROUTES: (state, routes) => {
state.defaultRoutes = constantRoutes.concat(routes)
state.defaultRoutes = constantRoutes.concat(routes);
},
SET_TOPBAR_ROUTES: (state, routes) => {
state.topbarRouters = routes
state.topbarRouters = routes;
},
SET_SIDEBAR_ROUTERS: (state, routes) => {
state.sidebarRouters = routes
state.sidebarRouters = routes;
},
},
actions: {
// 生成路由
GenerateRoutes({ commit }) {
return new Promise(resolve => {
return new Promise((resolve) => {
// 向后端请求路由数据
getRouters().then(res => {
const sdata = JSON.parse(JSON.stringify(res.data))
const rdata = JSON.parse(JSON.stringify(res.data))
const sidebarRoutes = filterAsyncRouter(sdata)
const rewriteRoutes = filterAsyncRouter(rdata, false, true)
getRouters().then((res) => {
const sdata = JSON.parse(JSON.stringify(res.data));
const rdata = JSON.parse(JSON.stringify(res.data));
const sidebarRoutes = filterAsyncRouter(sdata);
const rewriteRoutes = filterAsyncRouter(rdata, false, true);
const asyncRoutes = filterDynamicRoutes(dynamicRoutes);
rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
rewriteRoutes.push({ path: "*", redirect: "/404", hidden: true });
router.addRoutes(asyncRoutes);
commit('SET_ROUTES', rewriteRoutes)
commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes))
commit('SET_DEFAULT_ROUTES', sidebarRoutes)
commit('SET_TOPBAR_ROUTES', sidebarRoutes)
resolve(rewriteRoutes)
})
})
}
}
}
commit("SET_ROUTES", rewriteRoutes);
commit("SET_SIDEBAR_ROUTERS", constantRoutes.concat(sidebarRoutes));
commit("SET_DEFAULT_ROUTES", sidebarRoutes);
commit("SET_TOPBAR_ROUTES", sidebarRoutes);
resolve(rewriteRoutes);
});
});
},
},
};
// 遍历后台传来的路由字符串,转换为组件对象
function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
return asyncRouterMap.filter(route => {
return asyncRouterMap.filter((route) => {
if (type && route.children) {
route.children = filterChildren(route.children)
route.children = filterChildren(route.children);
}
if (route.component) {
// Layout ParentView 组件特殊处理
if (route.component === 'Layout') {
route.component = Layout
} else if (route.component === 'ParentView') {
route.component = ParentView
} else if (route.component === 'InnerLink') {
route.component = InnerLink
if (route.component === "Layout") {
route.component = Layout;
} else if (route.component === "ParentView") {
route.component = ParentView;
} else if (route.component === "InnerLink") {
route.component = InnerLink;
} else {
route.component = loadView(route.component)
route.component = loadView(route.component);
}
}
if (route.children != null && route.children && route.children.length) {
route.children = filterAsyncRouter(route.children, route, type)
route.children = filterAsyncRouter(route.children, route, type);
} else {
delete route['children']
delete route['redirect']
delete route["children"];
delete route["redirect"];
}
return true
})
return true;
});
}
function filterChildren(childrenMap, lastRouter = false) {
var children = []
var children = [];
childrenMap.forEach((el, index) => {
if (el.children && el.children.length) {
if (el.component === 'ParentView' && !lastRouter) {
el.children.forEach(c => {
c.path = el.path + '/' + c.path
if (el.component === "ParentView" && !lastRouter) {
el.children.forEach((c) => {
c.path = el.path + "/" + c.path;
if (c.children && c.children.length) {
children = children.concat(filterChildren(c.children, c))
return
children = children.concat(filterChildren(c.children, c));
return;
}
children.push(c)
})
return
children.push(c);
});
return;
}
}
if (lastRouter) {
el.path = lastRouter.path + '/' + el.path
el.path = lastRouter.path + "/" + el.path;
if (el.children && el.children.length) {
children = children.concat(filterChildren(el.children, el))
return
children = children.concat(filterChildren(el.children, el));
return;
}
}
children = children.concat(el)
})
return children
children = children.concat(el);
});
return children;
}
// 动态路由遍历,验证是否具备权限
export function filterDynamicRoutes(routes) {
const res = []
routes.forEach(route => {
const res = [];
routes.forEach((route) => {
if (route.permissions) {
if (auth.hasPermiOr(route.permissions)) {
res.push(route)
res.push(route);
}
} else if (route.roles) {
if (auth.hasRoleOr(route.roles)) {
res.push(route)
res.push(route);
}
}
})
return res
});
return res;
}
export const loadView = (view) => {
if (process.env.NODE_ENV === 'development') {
return (resolve) => require([`@/views/${view}`], resolve)
if (process.env.NODE_ENV === "development") {
return (resolve) => require([`@/views/${view}`], resolve);
} else {
// 使用 import 实现生产环境的路由懒加载
return () => import(`@/views/${view}`)
}
return () => import(`@/views/${view}`);
}
};
export default permission
export default permission;

280
acupuncture-ui/src/views/medicalFile/index.vue

@ -487,7 +487,7 @@
</el-descriptions>
<!-- 档案详情-->
<el-form
ref="form"
ref="detailsForm"
:model="detailsForm"
:rules="rules"
class="formStep"
@ -589,10 +589,19 @@
/>
</el-form-item>
<el-form-item label="体型类型" prop="PG_RTCF_TXLX">
<el-input
<el-select
v-model="detailsForm['PG_RTCF_TXLX']"
placeholder="请输入"
/>
multiple
collapse-tags
placeholder="请选择"
>
<el-option
v-for="(item, index) in systemType"
:label="item"
:value="item"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="身体年龄" prop="PG_RTCF_STNL">
<el-input
@ -607,9 +616,150 @@
/>
</el-form-item>
</div>
<div>体质辨识主要体质</div>
<el-form-item prop="PG_TZBS_ZYTZ">
<el-radio-group v-model="detailsForm['PG_TZBS_ZYTZ']">
<el-radio
v-for="(item, index) in systemType"
:key="index"
:label="item"
>
</el-radio>
</el-radio-group>
</el-form-item>
<div>体质辨识兼夹体质</div>
<el-form-item class="form-item-zd" prop="PG_TZBS_JJTZ">
<el-checkbox-group v-model="detailsForm['PG_TZBS_JJTZ']">
<el-checkbox
v-for="(item, index) in systemType"
:key="index"
:label="item"
>
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<div>体态评估</div>
<div class="human-body">
<el-form-item label="TAPS体态自觉评估" prop="PG_TT_TAPS_DF">
<el-input
v-model="detailsForm['PG_TT_TAPS_DF']"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label="TRACE体态临床评估" prop="PG_TT_TRACE_DF">
<el-input
v-model="detailsForm['PG_TT_TRACE_DF']"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label="SRS-22问卷评估" prop="PG_TT_SRS22_DF">
<el-input
v-model="detailsForm['PG_TT_SRS22_DF']"
placeholder="请输入"
/>
</el-form-item>
</div>
<div>失眠评估</div>
<div class="human-body">
<el-form-item
label="患者健康问卷(PHQ-9)评估"
prop="PG_SM_PHQ-9_DF"
>
<el-input
v-model="detailsForm['PG_SM_PHQ-9_DF']"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label="Epworth嗜睡评估" prop="PG_SM_EPSW_DF">
<el-input
v-model="detailsForm['PG_SM_EPSW_DF']"
placeholder="请输入"
/>
</el-form-item>
<el-form-item
label="匹兹堡睡眠质量指数(PSQI)评估"
prop="PG_SM_PSQI_DF"
>
<el-input
v-model="detailsForm['PG_SM_PSQI_DF']"
placeholder="请输入"
/>
</el-form-item>
</div>
<div>焦虑评估</div>
<div class="human-body">
<el-form-item
label="汉密尔顿抑郁评估(HAMD-24)"
prop="PG_JL_HAMD-24_DF"
>
<el-input
v-model="detailsForm['PG_JL_HAMD-24_DF']"
placeholder="请输入"
/>
</el-form-item>
<el-form-item label="焦虑自评(SAS)" prop="PG_JL_SAS_DF">
<el-input
v-model="detailsForm['PG_JL_SAS_DF']"
placeholder="请输入"
/>
</el-form-item>
</div>
<el-form-item label="治疗类型" prop="ZLFA_ZLLX">
<el-radio-group v-model="detailsForm['ZLFA_ZLLX']">
<el-radio label="中西医结合治疗"> </el-radio>
<el-radio label="单纯中医治疗"> </el-radio>
</el-radio-group>
</el-form-item>
<div>诊疗方法</div>
<div>肥胖症</div>
<div>行为心理干预</div>
<div class="human-body"></div>
<el-form-item label="治理效果" prop="ZLFA_ZLXG">
<el-radio-group v-model="detailsForm['ZLFA_ZLXG']">
<el-radio label="治愈"> </el-radio>
<el-radio label="显效"> </el-radio>
<el-radio label="好转"> </el-radio>
<el-radio label="无效"> </el-radio>
</el-radio-group>
</el-form-item>
<div>诊疗费用</div>
<el-form-item label="总体费用按照区间进行选择" prop="ZLFA_ZTFY">
<el-radio-group v-model="detailsForm['ZLFA_ZTFY']">
<el-radio label="<300元"> </el-radio>
<el-radio label="300 ~ 900元"> </el-radio>
<el-radio label="900 ~ 2000元"> </el-radio>
<el-radio label="2000 ~ 5000元"> </el-radio>
<el-radio label=">5000元"> </el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="检查费用按照区间进行选择" prop="ZLFA_JCFY">
<el-radio-group v-model="detailsForm['ZLFA_JCFY']">
<el-radio label="<300元"> </el-radio>
<el-radio label="300 ~ 900元"> </el-radio>
<el-radio label="900 ~ 2000元"> </el-radio>
<el-radio label="2000 ~ 5000元"> </el-radio>
<el-radio label=">5000元"> </el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="中医治疗费用按照区间进行选择" prop="ZLFA_ZYZLFY">
<el-radio-group v-model="detailsForm['ZLFA_ZYZLFY']">
<el-radio label="<300元"> </el-radio>
<el-radio label="300 ~ 900元"> </el-radio>
<el-radio label="900 ~ 2000元"> </el-radio>
<el-radio label="2000 ~ 5000元"> </el-radio>
<el-radio label=">5000元"> </el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="药物费用按照区间进行选择" prop="ZLFA_YWFY">
<el-radio-group v-model="detailsForm['ZLFA_YWFY']">
<el-radio label="<300元"> </el-radio>
<el-radio label="300 ~ 900元"> </el-radio>
<el-radio label="900 ~ 2000元"> </el-radio>
<el-radio label="2000 ~ 5000元"> </el-radio>
<el-radio label=">5000元"> </el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div>人体成分体系类型</div>
<div></div>
</div>
</el-drawer>
</div>
@ -627,9 +777,10 @@ import {
import { queryPatient } from "@/api/patientFile";
export default {
name: "Notice",
dicts: ["sys_notice_status", "sys_notice_type"],
dicts: ["sys_normal_disable", "sys_user_sex"],
data() {
return {
radio: "",
headers: {
Authorization: "Bearer " + getToken(),
deptId: localStorage.getItem("hospitalId"),
@ -670,6 +821,112 @@ export default {
2: "港澳居民来往内地通行",
3: "台湾居民来往大陆通行证",
},
//
systemType: [
"隐形肥胖型",
"脂肪过多型",
"肥胖型",
"肌肉不足型",
"健康匀称型",
"超重肌肉型",
"消瘦型",
"低脂肪型",
"运动员型",
],
//
habitus: [
"平和质",
"气虚质",
" 阳虚质",
"阴虚质",
"痰湿质",
" 湿热质",
"血瘀质",
"气郁质",
"特禀质",
],
//
healType: [
{
title: "肥胖症",
list: [
{
title: "行为心理干预",
valueCode: "",
list: [
{
title:
"行为技能训练:辅导有效的应对压力技巧,避免因情绪波动导致过度进食,训练正念饮食,提高对饥饿和饱足感的感知能力",
value: "行为技能训练",
},
{
title:
"目标设定与追踪:与患者共同设立短期和长期减重目标,定期进行进度评估,强化正面反馈,提高自我管理能力",
value: "目标设定与追踪",
},
],
},
{
title: "运动干预",
valueCode: "",
list: [
{
title:
"有氧运动:如快走、慢跑、游泳等,建议每周至少进行150分钟中等强度的有氧运动",
value: "有氧运动",
},
{
title:
"抗阻运动:如举重、俯卧撑等,建议每周进行2-3次抗阻运动",
value: "抗阻运动",
},
],
},
{
title: " 临床营养治疗",
valueCode: "",
list: [
{
title:
"限能量饮食:在限制能量摄入(日常饮食能量减去30%)的基础上,营养素比例符合平衡膳食的要求",
value: "限能量饮食",
},
{
title: "高蛋白饮食:每日蛋白质摄入量超过20%,但一般不高于35%",
value: "高蛋白饮食",
},
{
title: "低碳水化合物饮食:碳水化合物供能比一般在20%-40%",
value: "低碳水化合物饮食",
},
{
title:
"断食:如5+2模式,1周中5天相对正常进食,其他2天摄取平常的1/4能量",
value: "断食",
},
],
},
{
title: "针灸疗法",
valueCode: "",
list: [
{
title: "疗法",
list: [
{
title: "毫针/电针疗法",
},
{
title: "温针疗法",
value: "中医理疗",
},
],
},
],
},
],
},
],
status: {
0: "保存",
1: "待审核",
@ -704,7 +961,12 @@ export default {
importform: {},
form: {},
detailsForm: { JBXX_ZYZD: [] }, //
detailsForm: {
JBXX_ZYZD: [],
PG_RTCF_TXLX: [],
PG_TZBS_ZYTZ: "",
PG_TZBS_JJTZ: [],
}, //
//
rules: {
name: [
@ -835,7 +1097,7 @@ export default {
handleEecorde(row) {},
/** 详情按钮操作 */
handleDetails(row) {
this.open = true;
this.drawer = true;
this.title = "诊疗档案详情";
this.form = JSON.parse(JSON.stringify(row));
},

106
acupuncture-ui/src/views/patientFile/index.vue

@ -75,7 +75,6 @@
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['patientFile:add']"
>新增</el-button
>
</el-col>
@ -87,7 +86,6 @@
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['patientFile:remove']"
>删除</el-button
>
</el-col>
@ -99,7 +97,6 @@
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['patientFile:download']"
>下载模版</el-button
>
</el-col>
@ -110,7 +107,6 @@
icon="el-icon-upload2"
size="mini"
@click="handleImport"
v-hasPermi="['patientFile:import']"
>导入</el-button
>
</el-col>
@ -121,7 +117,6 @@
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['patientFile:export']"
>导出</el-button
>
</el-col>
@ -197,11 +192,7 @@
show-overflow-tooltip
width="180"
/>
<el-table-column label="建档日期" align="center" width="130">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column
label="建档人"
align="center"
@ -214,9 +205,15 @@
align="center"
prop="organization"
show-overflow-tooltip
width="130"
width="150"
/>
<el-table-column label="建档日期" align="center" width="130">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime, "{y}-{m}-{d}") }}</span>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="来源"
align="center"
prop="source"
@ -229,20 +226,13 @@
<span v-if="scope.row.gender == 2">HIS</span>
</template>
</el-table-column>
<el-table-column
fixed="right"
label="操作"
align="center"
class-name="small-padding fixed-width"
width="150"
>
<el-table-column fixed="right" label="操作" align="center" width="150">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['patientFile:edit']"
>修改</el-button
>
<el-button
@ -250,7 +240,6 @@
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['patientFile:remove']"
>删除</el-button
>
<el-button
@ -258,7 +247,6 @@
type="text"
icon="el-icon-tickets"
@click="handleDetails(scope.row)"
v-hasPermi="['patientFile:details']"
>详情</el-button
>
<el-button
@ -266,7 +254,6 @@
type="text"
icon="el-icon-notebook-2"
@click="handleDelete(scope.row)"
v-hasPermi="['patientFile:archives']"
>诊疗档案</el-button
>
</template>
@ -282,8 +269,20 @@
/>
<!-- 添加或修改公告对话框 -->
<el-dialog :title="title" :visible.sync="open" width="780px" append-to-body>
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-dialog
class="popup"
:title="title"
:visible.sync="open"
width="780px"
append-to-body
>
<el-form
class="formStep"
ref="form"
:model="form"
:rules="rules"
label-width="90px"
>
<el-form-item label="姓名" prop="name">
<el-input
v-model="form.name"
@ -297,6 +296,17 @@
<el-radio :label="1"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="出生年月" prop="birthDate">
<el-date-picker
:disabled="formDisabled"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
v-model="form.birthDate"
type="date"
placeholder="选择日期"
>
</el-date-picker>
</el-form-item>
<el-form-item label="民族" prop="ethnicity">
<el-input
v-model="form.ethnicity"
@ -304,6 +314,13 @@
:disabled="formDisabled"
/>
</el-form-item>
<el-form-item label="受教育年限" prop="educationYears">
<el-input
v-model="form.educationYears"
placeholder="请输入"
:disabled="formDisabled"
/>
</el-form-item>
<el-form-item label="手机号码" prop="phone">
<el-input
v-model="form.phone"
@ -342,7 +359,7 @@
</el-checkbox>
</el-checkbox-group>
<el-input
v-model="form.qt"
v-model="form.currentIllnessHistoryQT"
placeholder="其他"
:disabled="formDisabled"
/>
@ -388,13 +405,11 @@
<script>
import { getToken } from "@/utils/auth";
import {
listNotice,
getNotice,
delNotice,
addNotice,
updateNotice,
} from "@/api/system/notice";
import { queryPatient } from "@/api/patientFile";
queryPatient,
patientAdd,
patientUpd,
patientDel,
} from "@/api/patientFile";
export default {
name: "Notice",
dicts: ["sys_notice_status", "sys_notice_type"],
@ -509,7 +524,7 @@ export default {
};
},
created() {
// this.getList();
this.getList();
},
methods: {
// - pdg
@ -544,9 +559,9 @@ export default {
/** 查询公告列表 */
getList() {
this.loading = true;
queryPatient(this.queryParams).then((response) => {
this.listDat = response.rows;
this.total = response.total;
queryPatient(this.queryParams).then((res) => {
this.listDat = res.data.list;
this.total = res.data.total;
this.loading = false;
});
},
@ -567,6 +582,7 @@ export default {
idCardType: "", //
idCard: "", //
currentIllnessHistory: [], //
currentIllnessHistoryQT: "", //
};
this.resetForm("form");
},
@ -599,6 +615,9 @@ export default {
this.title = "修改患者档案";
this.formDisabled = false;
this.form = JSON.parse(JSON.stringify(row));
//
this.form.currentIllnessHistory =
this.form.currentIllnessHistory.split(",");
},
/** 详情按钮操作 */
handleDetails(row) {
@ -612,13 +631,13 @@ export default {
this.$refs["form"].validate((valid) => {
if (valid) {
if (this.form.id != undefined) {
updateNotice(this.form).then((response) => {
patientUpd(this.form).then((response) => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addNotice(this.form).then((response) => {
patientAdd(this.form).then((response) => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
@ -634,7 +653,7 @@ export default {
this.$modal
.confirm("是否确认删除当前选择的患者数据?")
.then(function () {
return delNotice({ param: { ids: idList } });
return patientDel({ idList: idList });
})
.then(() => {
this.getList();
@ -660,6 +679,7 @@ export default {
},
};
</script>
<style scoped src="@/assets/styles/common.css"></style>
<style scoped>
.form-item-age {
display: flex;
@ -669,9 +689,9 @@ export default {
margin: 0 10px;
}
.form-item-age >>> .el-input {
width: 90px;
}
>>> .el-input__inner {
padding: 0 15px !important;
width: 100px;
}
</style>
<!-- >>> .el-input__inner {
padding: 0 15px !important;
} -->

Loading…
Cancel
Save