提交 68f62edb 编写于 作者: tao.wu's avatar tao.wu

Merge branch 'dev-patients-20190513' of...

Merge branch 'dev-patients-20190513' of 192.168.110.53:com.pica.cloud.education.frontend/pica.cloud.web-education-admin into dev-patients-20190513
<template>
<div>
<v-header :userName="userName" :portrait="portrait" :idType="idType"></v-header>
<v-slidebar :authList="authList" :tokenValue="token" :notCompleteCount="10"></v-slidebar>
<v-slidebar :authList="authList" :tokenValue="token" :notCompleteCount="redNum"></v-slidebar>
<el-container>
<div class="content" id="body-content">
<transition name="router-fade" mode="out-in">
......@@ -25,6 +25,7 @@ import VFooter from './views/layout/footer.vue'
import { base64decode, isNotEmptyUtils, getUrlParamsMap } from "./utils/utils.js"
import { mapActions, mapGetters } from 'vuex'
import { getLoginUrl } from './utils/index.js'
import { getRedNum } from './utils/patients/patientsapi'
let vm = null
export default {
components:{
......@@ -38,7 +39,8 @@ export default {
token: '',
userName: '',
portrait: '',
authList: {}
authList: {},
redNum: 0,
}
},
computed:{
......@@ -51,7 +53,7 @@ export default {
vm.getToken()
},
mounted() {
vm.getRedData()
},
methods: {
// 解密token
......@@ -107,6 +109,27 @@ export default {
vm.$message.info(res.message)
}
})
},
getRedData() {
getRedNum({
openTime: (new Date()).getTime()
}).then((data) => {
if(data.code == '000000') {
vm.redNum = data.data
}
}).catch(error => {
vm.$message.error(error)
})
}
},
watch: {
$route:{
deep:true,
handler:function(newVal){
if(vm.$route.path == '/patients-manage/not-complete/uncompleted-list'){ //避免重复请求
vm.redNum = 0
}
}
}
}
}
......
......@@ -3,6 +3,7 @@ const patientsManage = r => require.ensure([], () => r(require('../views/patient
const myPatientsManage = r => require.ensure([], () => r(require('../views/patients/mypatients-manage/layout.vue')), 'myPatientsManage');
const patientsList = r => require.ensure([], () => r(require('../views/patients/mypatients-manage/patients-list.vue')), 'patientsList');
const patientDetail = r => require.ensure([], () => r(require('../views/patients/mypatients-manage/patient-detail.vue')), 'patientDetail');
const basicInfo = r => require.ensure([], () => r(require('../views/patients/mypatients-manage/basic-info.vue')), 'basicInfo');
/*新增居民*/
const newManage = r => require.ensure([], () => r(require('../views/patients/new-manage/layout.vue')), 'newManage');
......@@ -47,6 +48,15 @@ const patientsRouters = {
keepAlive: false
},
},
{
path: 'basic-info',
component: basicInfo,
name: 'basicInfo',
meta: {
title: '居民详情',
keepAlive: false
},
},
],
meta: {
title: '我的居民',
......
......@@ -15,7 +15,8 @@
}
/*恢复messageBox默认样式*/
.el-message-box {
width: 360px;
height: 220px;
}
.el-message-box__status+.el-message-box__message{
padding-left: 20px;
......
import axios from 'axios'
import { Loading } from 'element-ui';
import store from '../store'
// import { getHostnameAndPort } from '../utils'
// axios.defaults.withCredentials = true
......@@ -9,8 +10,41 @@ const service = axios.create({
withCredentials: false
})
/*loading*/
let loadingInstance = () => {
return Loading.service({
lock: true,
text: 'Loading',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
}
let loading;
let needLoadingRequestCount = 0;
let showFullScreenLoading = () => {
if (needLoadingRequestCount === 0) {
loadingInstance();
}
needLoadingRequestCount++;
};
let tryHideFullScreenLoading = () => {
if (needLoadingRequestCount > 0) {
needLoadingRequestCount--;
}
if (needLoadingRequestCount === 0) {
loadingInstance().close();
}
};
// request拦截器
service.interceptors.request.use(config => {
if (config.noLoading) {
}else{
showFullScreenLoading();
}
const noSysCode = config.headers.noSysCode;
if(noSysCode){
delete config.headers.sysCode;
......@@ -36,12 +70,18 @@ service.interceptors.request.use(config => {
return config
}, error => {
// logger.debug('service.interceptors.request: ', error)
tryHideFullScreenLoading();
Promise.reject(error)
})
// respone拦截器
service.interceptors.response.use(
response => {
if (response.config.noLoading) {
}else{
tryHideFullScreenLoading()
}
const res = response.data
/*
baseUrl时,返回000000为成功
......@@ -55,6 +95,8 @@ service.interceptors.response.use(
},
error => {
// logger.error('err' + error)
tryHideFullScreenLoading();
return Promise.reject(error)
}
)
......
......@@ -98,16 +98,24 @@ export const sendCompleteMessageList = (data) => {
description: '批量提醒居民完善信息',
})
};
export const getNotCompleteCount = (data) => {
export const getNotCompleteCount = (params) => {
return fetch({
headers,
url: getBaseUrl(`healths/patients/uncomplate/counts`),
method: 'get',
data: data,
params: params,
description: '获取未完善居民人数',
})
};
export const getRedNum = (params) => {
return fetch({
headers,
url: getBaseUrl(`healths/patients/uncompleted/last/counts`),
method: 'get',
params: params,
description: '获取小红点数据',
})
};
export const getPatientDetail = (patientId) => {
return fetch({
headers,
......@@ -117,3 +125,39 @@ export const getPatientDetail = (patientId) => {
description: '获取居民详情',
})
};
export const deletePatient = (data) => {
return fetch({
headers,
url: getBaseUrl(`healths/patients/batch`),
method: 'delete',
data: data,
description: '删除居民',
})
};
export const getRemindPatient = (data) => {
return fetch({
headers,
url: getBaseUrl(`healths/patients/remind`),
method: 'post',
data: data,
description: '提醒居民绑定微信',
})
};
export const savePatientInfo = (data) => {
return fetch({
headers,
url: getBaseUrl(`healths/patients/update`),
method: 'post',
data: data,
description: '保存居民信息',
})
};
export const getLabelsList = (params) => {
return fetch({
headers,
url: getBaseUrl(`healths/labels/`),
method: 'get',
params: params,
description: '获取分组列表',
})
};
<template>
<div class="resident-list">
<bread-crumb
:curmbFirst="curmbFirst"
:curmbSecond="curmbSecond"
:curmbThird="curmbThird"
:jumPathThird="jumPathThird">
</bread-crumb>
<div class="f-main-content screenSet">
<div class="header-title">
<span>基本信息</span>
<p><el-button plain size="small">取消</el-button><el-button type="primary" size="small">保存</el-button></p>
</div>
<edit-information></edit-information>
</div>
</div>
</template>
<script>
import BreadCrumb from '@/components/breadcrumb'
import editInformation from './components/edit-information'
import { mapGetters } from 'vuex'
import { getDiseasesList, getPatientDetail, getRemindPatient, deletePatient,savePatientInfo } from '@/utils/patients/patientsapi'
export default {
name: "basicInfo",
components: {
BreadCrumb,
editInformation
},
data() {
return {
/*面包屑配置*/
curmbFirst: '居民管理',
curmbSecond: '我的居民',
curmbThird: '居民详情',
jumPathThird: '/patients-manage/mypatients-manage/patients-list',
patientId: '99997786', //暂时写死一个居民的patientId
patientInfo: {
isWechatBind: 1,
remark: '',
},
showLabelName: '',
showDiseaseName: '',
birthTimeDisplay: '',
recordList: [{}],
}
},
created() {
this.init();
// getDiseasesList().then(({data}) => {
// console.log('获取所有疾病',data)
// })
},
computed: {
// ...mapState('planManage',{
// remarkOption: state => state.remarkOption,
// templateOptions: state => state.templateOptions,
// })
...mapGetters([
'_token',
])
},
methods: {
// ...mapActions('planManage', ['getTimeNodeList','getRemarkOption','getFollowupTemplate']),
init() {
getPatientDetail(this.patientId).then((data) => {
if(data.code == '000000') {
this.patientInfo = data.data;
if(this.patientInfo){
let customLabels = this.patientInfo.customLabels;
let diseases = this.patientInfo.diseases;
let groupLabelNames = [];
let groupDiseaseNames = [];
//对出生日期的处理
if(this.patientInfo.birthTime){
let timeArr = this.patientInfo.birthTime.split('-');
let mm = parseInt(timeArr[1]) < 10 ? `0${parseInt(timeArr[1])}` : parseInt(timeArr[1]);
let dd = parseInt(timeArr[2]) < 10 ? `0${parseInt(timeArr[2])}` : parseInt(timeArr[2]);
this.birthTimeDisplay = `${timeArr[0]}-${mm}-${dd}`;
}else {
this.birthTimeDisplay = '';
}
// 对分组的处理
if(customLabels) {
customLabels.forEach(item => {
groupLabelNames.push(item.label)
});
this.showLabelName = groupLabelNames.join(';');
} else {
this.showLabelName = '';
}
// 对诊断疾病的处理
if(diseases) {
diseases.forEach(item => {
groupDiseaseNames.push(item.diseaseName)
});
this.showDiseaseName = groupDiseaseNames.join(';');
} else {
this.showDiseaseName = '';
}
}
}
})
},
//提醒绑定
remindBind() {
let remindMobileWechatPara = {
qrcodeType: 1,
patientId: this.patientId,
// deviceInfo: window.getDeviceInfo()
}
getRemindPatient({
...remindMobileWechatPara
}).then( data => {
if(data.code == '000000') {
this.$message.success(data.data.respMsg);
}else {
this.$message.error(data.message);
}
})
},
//保存备注
saveRemark() {
savePatientInfo(this.patientInfo).then(data => {
if(data.code == '000000'){
this.$message.success('保存备注成功')
}else {
this.$message.error(data.message);
}
})
},
},
filters: {
emptyFilter: function(value) {
if (!value) {
return '-';
} else {
return value;
}
},
sexFileter: function(value) {
if (!value && value != 0) {
return '-';
} else {
let hash = {
1: '男',
2: '女'
};
return hash[value];
}
},
},
}
</script>
<style lang="scss" scoped>
@import '../../../style/patients-style/element-reset.css';
.f-main-content{
background: #ffffff;
padding: 30px;
.header-title{
display: flex;
display: -webkit-flex;
align-items: center;
justify-content: space-between;
border-bottom: 2px solid #E4E7ED;
padding-bottom: 10px;
}
.right-btn-group{
position: absolute;
right: 60px;
z-index: 1800;
}
.section{
.item{
display: flex;
font-size: 14px;
div{
display: flex;
flex: 1;
line-height: 36px;
.title{
width: 180px;
text-align: right;
}
.info{
color: #999;
padding-left: 15px;
width: 100%;
}
}
&.wrap-p{
div{
line-height: 28px;
}
}
.btn-right{
width: 35%;
padding-left:10px;
}
}
.has-header{
display: flex;
justify-content: space-between;
padding: 15px 0;
margin-bottom: 15px;
border-bottom: 1px dashed #888;
.right-p{
display: inline-block;
text-align: right;
color: #999;
font-size: 14px;
span:last-child{
margin-left: 15px;
}
}
}
}
.health-record-list{
.item{
width: 100%;
margin-bottom: 15px;
.record-date{
color: #999;
padding-bottom: 10px;
}
.record-content{
width: 100%;
border: 1px solid #E4E7ED;
border-radius: 5px;
padding: 10px 15px 13px;
.record-title{
display: flex;
justify-content: space-between;
padding: 5px 0;
span{
color: #999;
font-size: 14px;
}
}
.list-visit{
line-height: 28px;
padding: 6px 0 2px;
display: flex;
display: -webkit-flex;
align-items: flex-start;
font-size: 14px;
color: #999;
.left-label{
line-height: 28px;
}
.right-item{
flex: 1;
line-height: 28px;
p{
line-height: 28px;
.check-btn{
color: #449284;
cursor: pointer;
margin-left: 15px;
}
}
}
}
}
}
}
.no-record-content{
@media screen and (min-width:1240px) and (max-width:1545px){
height: 300px;
}
@media screen and (min-width:1545px) and (max-width:1600px){
height: 500px;
}
@media screen and (min-width:1600px){
height: 600px;
}
text-align: center;
padding: 50px 0 60px;
img{
width: 120px;
}
p{
color: #B9B9C6;
font-size: 20px;
}
}
.ml10{
margin-left: 10px;
}
}
</style>
<template>
<div class="form-warp">
<el-form
:model="patientInfoForm"
:rules="rules"
ref="patientInfoForm"
label-width="150px"
label-suffix=":"
size="small"
:inline="true">
<el-row>
<el-col :span="12">
<el-form-item label="居民姓名" prop="nickname">
<el-input v-model="patientInfoForm.nickname" placeholder="请输入居民姓名"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="手机号" prop="mobilePhone">
<el-input v-model="patientInfoForm.mobilePhone" maxlength="11" placeholder="请输入手机号"></el-input>
</el-form-item>
</el-col>
</el-row>
<div class="has-header">数据记录</div>
<el-row>
<el-col :span="12">
<el-form-item label="诊断" prop="diseaseIdList">
<el-select v-model="patientInfoForm.diseaseIdList" multiple placeholder="请选择居民疾病诊断">
<el-option
v-for="item in diseasesList"
:key="item.diseaseId"
:label="item.diseaseName"
:value="item.diseaseId">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="分组" prop="labelIdList">
<el-select v-model="patientInfoForm.labelIdList" multiple placeholder="请选择居民分组">
<el-option
v-for="item in labelsList"
:key="item.labelId"
:label="item.labelName"
:value="item.labelId">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<div class="has-header">基本信息</div>
<el-row>
<el-col :span="12">
<el-form-item label="身份证" prop="idNo">
<el-input v-model="patientInfoForm.idNo" placeholder="请输入身份证"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="出生年月" prop="birthTime">
<el-date-picker
type="date"
v-model="patientInfoForm.birthTime"
placeholder="请选择出生年月"
value-format="yyyy-MM-dd"
value="yyyy-MM-dd"
style="width:250px">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="年龄" prop="age">
<span>{{patientInfoForm.age}}</span>
<!--<el-input v-model="patientInfoForm.age" placeholder="请输入身份证"></el-input>-->
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="性别" prop="sex">
<el-radio-group v-model="patientInfoForm.sex">
<el-radio :label="1"></el-radio>
<el-radio :label="2"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="常驻类型" prop="diseaseIdList">
<el-select v-model="patientInfoForm.diseaseIdList" multiple placeholder="请选择居民疾病诊断">
<el-option
v-for="item in diseasesList"
:key="item.diseaseId"
:label="item.diseaseName"
:value="item.diseaseId">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="民族" prop="labelIdList">
<el-select v-model="patientInfoForm.labelIdList" multiple placeholder="请选择居民分组">
<el-option
v-for="item in labelsList"
:key="item.labelId"
:label="item.labelName"
:value="item.labelId">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="医保号" prop="socialCard">
<el-input v-model="patientInfoForm.socialCard" placeholder="请输入居民医保卡号码"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="健康档案编号" prop="fileLocator">
<el-input v-model="patientInfoForm.fileLocator" placeholder="请输入居民健康档案编号"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</template>
<script>
import { mapGetters } from 'vuex'
import { getDiseasesList, getLabelsList, getPatientDetail, getRemindPatient, deletePatient,savePatientInfo } from '@/utils/patients/patientsapi'
export default {
name: "basicInfo",
components: {},
data() {
return {
diseasesList: [],
labelsList: [],
patientInfoForm: {
nickname: '',
mobilePhone: '',
diseaseIdList: [],
labelIdList: [],
idNo: '',
birthTime: '',
age: '',
socialCard: '',
fileLocator: '',
},
rules: {
nickname: [{required: true, message: '请输入居民姓名', trigger: ['change', 'blur'] }],
mobilePhone: [{required: true, message: '请输入手机号', trigger: ['change', 'blur'] }],
},
patientId: '99997786', //暂时写死一个居民的patientId
patientInfo: {
isWechatBind: 1,
remark: '',
},
showLabelName: '',
showDiseaseName: '',
birthTimeDisplay: '',
recordList: [{}],
}
},
created() {
this.init();
this.initConstant();
},
computed: {
// ...mapState('planManage',{
// remarkOption: state => state.remarkOption,
// templateOptions: state => state.templateOptions,
// })
...mapGetters([
'_token',
])
},
methods: {
// ...mapActions('planManage', ['getTimeNodeList','getRemarkOption','getFollowupTemplate']),
initConstant(){
getDiseasesList().then((data) => {
if(data.code == '000000') {
this.diseasesList = data.data;
}
});
getLabelsList({
type: 1,
token: 'AB2BEE40C5AD452E93688D31A14E8C12'
}).then((data) => {
if(data.code == '000000') {
this.labelsList = data.data.labelNameList;
}
})
},
init() {
getPatientDetail(this.patientId).then((data) => {
if(data.code == '000000') {
this.patientInfo = data.data;
if(this.patientInfo){
let customLabels = this.patientInfo.customLabels;
let diseases = this.patientInfo.diseases;
let groupLabelNames = [];
let groupDiseaseNames = [];
//对出生日期的处理
if(this.patientInfo.birthTime){
let timeArr = this.patientInfo.birthTime.split('-');
let mm = parseInt(timeArr[1]) < 10 ? `0${parseInt(timeArr[1])}` : parseInt(timeArr[1]);
let dd = parseInt(timeArr[2]) < 10 ? `0${parseInt(timeArr[2])}` : parseInt(timeArr[2]);
this.birthTimeDisplay = `${timeArr[0]}-${mm}-${dd}`;
}else {
this.birthTimeDisplay = '';
}
// 对分组的处理
if(customLabels) {
customLabels.forEach(item => {
groupLabelNames.push(item.label)
});
this.showLabelName = groupLabelNames.join(';');
} else {
this.showLabelName = '';
}
// 对诊断疾病的处理
if(diseases) {
diseases.forEach(item => {
groupDiseaseNames.push(item.diseaseName)
});
this.showDiseaseName = groupDiseaseNames.join(';');
} else {
this.showDiseaseName = '';
}
}
}
})
},
//提醒绑定
remindBind() {
let remindMobileWechatPara = {
qrcodeType: 1,
patientId: this.patientId,
// deviceInfo: window.getDeviceInfo()
}
getRemindPatient({
...remindMobileWechatPara
}).then( data => {
if(data.code == '000000') {
this.$message.success(data.data.respMsg);
}else {
this.$message.error(data.message);
}
})
},
//保存备注
saveRemark() {
savePatientInfo(this.patientInfo).then(data => {
if(data.code == '000000'){
this.$message.success('保存备注成功')
}else {
this.$message.error(data.message);
}
})
},
},
filters: {
emptyFilter: function(value) {
if (!value) {
return '-';
} else {
return value;
}
},
sexFileter: function(value) {
if (!value && value != 0) {
return '-';
} else {
let hash = {
1: '男',
2: '女'
};
return hash[value];
}
},
},
}
</script>
<style lang="scss">
.el-input{
width: 250px;
}
.form-warp{
margin-top: 30px;
.has-header{
padding: 15px 0;
margin-bottom: 20px;
border-bottom: 1px dashed #888;
}
}
</style>
......@@ -42,7 +42,6 @@
</el-form-item>
<el-form-item label="分组:" prop="labelId">
<el-select v-model="searchData.labelId" size="small" clearable :popper-append-to-body="false">
<el-option label="全部" value=""></el-option>
<el-option
v-for="item in groupList"
:key="item.labelId"
......@@ -237,6 +236,7 @@
if(data.code == "000000") {
this.patientList = data.data.patientList;
this.pagination.totalRows = data.data.totalRows
if(this.patientList) {
this.patientList.forEach((item)=> {
item.disableNum = 1;
let diseaseNames = [];
......@@ -260,6 +260,7 @@
item.showDiseaseNames = '-';
}
})
}
}
}).catch((error) => {
......@@ -267,7 +268,7 @@
message: error,
type: 'error'
});
})
});
},
handleSizeChange(val) {
this.pagination.pageSize = val
......@@ -360,6 +361,16 @@
}
}
}
/*重置输入框,选择框样式*/
.el-range-editor.is-active, .el-range-editor.is-active:hover, .el-select .el-input.is-focus .el-input__inner,.el-input__inner:focus{
border-color: #449284;
}
.el-select-dropdown__item.selected {
color: #449284;
}
.el-select .el-input__inner:focus {
border-color: #449284;
}
/*重置表格选择框*/
.el-checkbox__input.is-checked .el-checkbox__inner, .el-checkbox__input.is-indeterminate .el-checkbox__inner {
border-color: #449284;
......
......@@ -144,6 +144,8 @@
message: '已向居民发送提醒',
type: 'success'
});
this.getNotComplete();
this.getNotCompleteNum();
}else {
this.$message({
message: data.message,
......@@ -166,10 +168,10 @@
});
return;
}
let patientIdList = []
let patientIdList = [];
this.selectList.forEach(item => {
patientIdList.push(item.patientId)
})
});
sendCompleteMessageList({
qrcodeType: 1,
patientIds: patientIdList,
......@@ -179,6 +181,8 @@
message: '已向居民发送提醒',
type: 'success'
});
this.getNotComplete();
this.getNotCompleteNum();
}else {
this.$message({
message: data.message,
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册