提交 3bc255fb 编写于 作者: guangjun.yang's avatar guangjun.yang

Merge branch 'dev-followup-0902' into release

...@@ -2,8 +2,8 @@ ...@@ -2,8 +2,8 @@
<html> <html>
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta content="云鹊医,云鹊健康,工作站,项目管理,教培项目,学情报告,随访管理,预约随访" name="keywords"> <meta content="云鹊医,云鹊健康,工作站,项目管理,教培项目,学情报告,履约管理,预约履约" name="keywords">
<meta content="云鹊医工作站用于管理人员的日常操作,支持提交内容审核、管理项目、管理随访计划等功能。" name="description"> <meta content="云鹊医工作站用于管理人员的日常操作,支持提交内容审核、管理项目、管理履约计划等功能。" name="description">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, minimal-ui"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no, minimal-ui">
<meta name="screen-orientation" content="portrait"/> <meta name="screen-orientation" content="portrait"/>
<meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-capable" content="yes">
......
<template> <template>
<el-dialog title="本次随访详情" :visible.sync="dialogFormVisible" center :close-on-click-modal="false" :close-on-press-escape="false" width="800px"> <el-dialog title="本次履约详情" :visible.sync="dialogFormVisible" center :close-on-click-modal="false" :close-on-press-escape="false" width="800px">
<!--<el-form ref="statusForm" :model="statusForm" :rules="rules" label-suffix=":" label-width="120px">--> <!--<el-form ref="statusForm" :model="statusForm" :rules="rules" label-suffix=":" label-width="120px">-->
<!--<el-form-item label="居民" style="margin-bottom:0;">--> <!--<el-form-item label="居民" style="margin-bottom:0;">-->
<!--<span>{{statusForm.nickname}}</span>--> <!--<span>{{statusForm.nickname}}</span>-->
......
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
<el-button <el-button
v-if="item.formType === 'button'" v-if="item.formType === 'button'"
type="primary" type="primary"
:disabled="item.disabled"
@click="item.clickFunc ? item.clickFunc($event) : defaultClick($event)" @click="item.clickFunc ? item.clickFunc($event) : defaultClick($event)"
:icon="item.icon">{{ item.btnText }} :icon="item.icon">{{ item.btnText }}
</el-button> </el-button>
...@@ -65,6 +66,7 @@ ...@@ -65,6 +66,7 @@
<el-checkbox-group <el-checkbox-group
v-else-if="item.formType === 'checkbox'" v-else-if="item.formType === 'checkbox'"
v-model="form[item.model]" v-model="form[item.model]"
:disabled="item.disabled"
@change="item.changeFun ? item.changeFun($event) : defaultFun($event)" @change="item.changeFun ? item.changeFun($event) : defaultFun($event)"
> >
<el-checkbox <el-checkbox
...@@ -79,6 +81,7 @@ ...@@ -79,6 +81,7 @@
<el-radio-group <el-radio-group
v-else-if="item.formType === 'radio'" v-else-if="item.formType === 'radio'"
v-model="form[item.model]" v-model="form[item.model]"
:disabled="item.disabled"
@change="item.changeFun ? item.changeFun($event) : defaultFun($event)" @change="item.changeFun ? item.changeFun($event) : defaultFun($event)"
> >
<el-radio <el-radio
......
...@@ -81,7 +81,7 @@ const followRouters = { ...@@ -81,7 +81,7 @@ const followRouters = {
component: newPlan, component: newPlan,
name: 'newPlan', name: 'newPlan',
meta: { meta: {
title: '新建随访计划', title: '新建履约计划',
keepAlive: false //页面不需要缓存 keepAlive: false //页面不需要缓存
}, },
}, },
......
...@@ -22,26 +22,26 @@ export default { ...@@ -22,26 +22,26 @@ export default {
groupList: [], //分组列表 groupList: [], //分组列表
residentDetail: {}, //居民详情, residentDetail: {}, //居民详情,
planDetail: {}, // 计划详情页, planDetail: {}, // 计划详情页,
nodeTimeList: [], //随访时间节点列表, nodeTimeList: [], //履约时间节点列表,
nodeContent: {}, //时间节点详情 nodeContent: {}, //时间节点详情
planOption: [], //随访计划select planOption: [], //履约计划select
timeNodeList: [], timeNodeList: [],
setTimeNodeList: [], //新建计划设置时间节点 setTimeNodeList: [], //新建计划设置时间节点
planList: {}, //随访计划列表 planList: {}, //履约计划列表
remarkOption: [], //随访计划备注常量 remarkOption: [], //履约计划备注常量
markOptions: [], //随访 随访时间节点单位 常量 markOptions: [], //履约 履约时间节点单位 常量
followTypeList: [], //随访 随访方式 常量 followTypeList: [], //履约 履约方式 常量
remindOptions: [], //随访 提醒医生天数 常量 remindOptions: [], //履约 提醒医生天数 常量
pushTimeOptions: [], //随访 推送患教提醒天数 常量 pushTimeOptions: [], //履约 推送患教提醒天数 常量
planStatusOption: [], //随访计划状态常量 planStatusOption: [], //履约计划状态常量
formOptions: [],// 获取量表 formOptions: [],// 获取量表
templateOptions: [ // 获取随访计划模板 templateOptions: [ // 获取履约计划模板
{ {
id: 0, id: 0,
name: '自定义模板' name: '自定义模板'
} }
], ],
followStartTimeList: [], //随访时间 followStartTimeList: [], //履约时间
residentCrumb: [], //居民面包屑 residentCrumb: [], //居民面包屑
planModifyCrumb: [], //修改计划面包屑 planModifyCrumb: [], //修改计划面包屑
selectResidentList: [], //修改计划已选居民 selectResidentList: [], //修改计划已选居民
...@@ -176,7 +176,7 @@ export default { ...@@ -176,7 +176,7 @@ export default {
}); });
}, },
getDateUnit(context, payload){ getDateUnit(context, payload){
// 随访时间节点单位 // 履约时间节点单位
getBasicData({ getBasicData({
numList: 'P017' numList: 'P017'
}).then(({data})=>{ }).then(({data})=>{
...@@ -184,7 +184,7 @@ export default { ...@@ -184,7 +184,7 @@ export default {
}) })
}, },
getFollowTypeList(context, payload){ getFollowTypeList(context, payload){
// 随访方式 // 履约方式
getBasicData({ getBasicData({
numList: 'P212' numList: 'P212'
}).then(({data})=>{ }).then(({data})=>{
...@@ -214,7 +214,7 @@ export default { ...@@ -214,7 +214,7 @@ export default {
}) })
}, },
getFollowupTemplate(context, payload){ getFollowupTemplate(context, payload){
// 获取随访模板 // 获取履约模板
getFollowupTemplate().then(({data})=>{ getFollowupTemplate().then(({data})=>{
context.commit('GET_FOLLOW_TEMPLATE', data); context.commit('GET_FOLLOW_TEMPLATE', data);
}) })
......
...@@ -3,9 +3,9 @@ import {getTodayAppointsList, getTodayOverview, getTodayPlans} from '@/utils/fol ...@@ -3,9 +3,9 @@ import {getTodayAppointsList, getTodayOverview, getTodayPlans} from '@/utils/fol
export default { export default {
namespaced: true, namespaced: true,
state: { state: {
todayPlansList: [], //今日随访列表 todayPlansList: [], //今日履约列表
todayAppointsList: [], //今日预约列表 todayAppointsList: [], //今日预约列表
todayOverview: [], //查询今日随访、预约、随访人数count todayOverview: [], //查询今日履约、预约、履约人数count
}, },
mutations: { mutations: {
GET_TODAY_PLAN_LIST(state, payload) { GET_TODAY_PLAN_LIST(state, payload) {
......
import Vue from 'vue' import Vue from 'vue'
import Vuex from 'vuex' import Vuex from 'vuex'
import common from './education/common'; import common from './education/common';
//随访 //履约
import followModules from './followup/index'; import followModules from './followup/index';
import getters from './getters' import getters from './getters'
//居民诊断 //居民诊断
......
...@@ -236,20 +236,21 @@ html,body{ ...@@ -236,20 +236,21 @@ html,body{
background-color: #449284 !important; background-color: #449284 !important;
border-color: #449284 !important; border-color: #449284 !important;
} }
//popover组件的特殊处理 .prot-dialog {
.el-popover { .el-dialog__body {
::-webkit-scrollbar padding: 25px 25px 10px;
{
width: 4px;
height: 10px;
background-color: #D8D8D8;
} }
::-webkit-scrollbar-thumb { &-tips-1 {
background-color: #D8D8D8; margin-top: 0px;
}
&-tips-2 {
margin-top: 20px;
font-size: 12px;
color: #aaa;
} }
.more-text { &-tips-3 {
padding: 0 5px 0 5px; margin-top: 20px;
max-height: 55px; font-size: 12px;
overflow-y: scroll; color: #FF9A4B;
} }
} }
\ No newline at end of file
...@@ -56,7 +56,8 @@ service.interceptors.request.use(config => { ...@@ -56,7 +56,8 @@ service.interceptors.request.use(config => {
// console.log('环境变量>>>> ', process.env.BUILD_ENV); // console.log('环境变量>>>> ', process.env.BUILD_ENV);
// config.headers['token'] = 'BFD804F3A3194FBBBE113962222839F6'; // config.headers['token'] = 'BFD804F3A3194FBBBE113962222839F6';
// config.headers['token'] = 'F8209898391C40A0B8DBC1ED9E157291'; // config.headers['token'] = 'F8209898391C40A0B8DBC1ED9E157291';
config.headers['token'] = 'E5F82EDD958941C29BCDDDED410ACDB3'; // config.headers['token'] = 'E5F82EDD958941C29BCDDDED410ACDB3';
config.headers['token'] = '04BEB8CAF7DE4E1AB861FC487E7ADAC8';
}else{ }else{
config.headers['token'] = localStorage.getItem('storageToken') config.headers['token'] = localStorage.getItem('storageToken')
} }
......
...@@ -27,7 +27,7 @@ export const getTodayOverview = (params) => { ...@@ -27,7 +27,7 @@ export const getTodayOverview = (params) => {
url: getFollowUpSC(`/followup/overView/todayOverview`), url: getFollowUpSC(`/followup/overView/todayOverview`),
method: 'get', method: 'get',
params: params, params: params,
description: '获取今日随访、预约、随访人数', description: '获取今日履约、预约、履约人数',
}) })
}; };
export const getTodayPlans = (params) => { export const getTodayPlans = (params) => {
...@@ -36,7 +36,7 @@ export const getTodayPlans = (params) => { ...@@ -36,7 +36,7 @@ export const getTodayPlans = (params) => {
url: getFollowUpSC(`/followup/overView/todayPlans`), url: getFollowUpSC(`/followup/overView/todayPlans`),
method: 'get', method: 'get',
params: params, params: params,
description: '查询今日随访计划', description: '查询今日履约计划',
}) })
}; };
...@@ -48,7 +48,7 @@ export const createFollowPlan = (data) => { ...@@ -48,7 +48,7 @@ export const createFollowPlan = (data) => {
url: getFollowUpSC(`/followup/plans`), url: getFollowUpSC(`/followup/plans`),
method: 'post', method: 'post',
data: data, data: data,
description: '新增、修改随访计划', description: '新增、修改履约计划',
}) })
}) })
...@@ -82,7 +82,7 @@ export const getNodeTimeList = (planId) => { ...@@ -82,7 +82,7 @@ export const getNodeTimeList = (planId) => {
headers, headers,
url: getFollowUpSC(`/followup/plans/${planId}/time`), url: getFollowUpSC(`/followup/plans/${planId}/time`),
method: 'get', method: 'get',
description: '获取随访时间节点列表', description: '获取履约时间节点列表',
}) })
// }) // })
...@@ -128,7 +128,7 @@ export const getFollowStartTimeList = (planId) => { ...@@ -128,7 +128,7 @@ export const getFollowStartTimeList = (planId) => {
headers, headers,
url: getFollowUpSC(`/followup/planPatient/${planId}/times`), url: getFollowUpSC(`/followup/planPatient/${planId}/times`),
method: 'get', method: 'get',
description: '获取随访开始时间列表(居民相关)', description: '获取履约开始时间列表(居民相关)',
}) })
// }) // })
...@@ -272,7 +272,7 @@ export const changeEnteringStatus = (data) => { ...@@ -272,7 +272,7 @@ export const changeEnteringStatus = (data) => {
url: getFollowUpSC(`/followup/entering/status/change`), url: getFollowUpSC(`/followup/entering/status/change`),
method: 'post', method: 'post',
data: data, data: data,
description: '变更随访状态', description: '变更履约状态',
}) })
}) })
...@@ -284,7 +284,7 @@ export const getEnteringInfo = (patientId, fuPlanPatientTimesId) => { ...@@ -284,7 +284,7 @@ export const getEnteringInfo = (patientId, fuPlanPatientTimesId) => {
url: getFollowUpSC(`/followup/entering/${patientId}/fuInfo/${fuPlanPatientTimesId}`), url: getFollowUpSC(`/followup/entering/${patientId}/fuInfo/${fuPlanPatientTimesId}`),
method: 'get', method: 'get',
// params: params, // params: params,
description: '随访单条信息查看', description: '履约单条信息查看',
},) },)
// }) // })
...@@ -319,7 +319,7 @@ export const getPlanPatientsList = (data) =>{ ...@@ -319,7 +319,7 @@ export const getPlanPatientsList = (data) =>{
} }
// 获取随访计划模板列表 // 获取履约计划模板列表
export const getFollowupTemplate = (data) => { export const getFollowupTemplate = (data) => {
// return utils.checkAuth(()=>{ // return utils.checkAuth(()=>{
return fetch({ return fetch({
...@@ -327,13 +327,13 @@ export const getFollowupTemplate = (data) => { ...@@ -327,13 +327,13 @@ export const getFollowupTemplate = (data) => {
url: getFollowUpSC(`/followup/plans/templets`), url: getFollowUpSC(`/followup/plans/templets`),
method: 'get', method: 'get',
data: data, data: data,
description: '获取随访计划模板列表', description: '获取履约计划模板列表',
}) })
// }) // })
} }
// 获取随访量表固定模板 // 获取履约量表固定模板
export const getFollowupTableTemplate = (id) => { export const getFollowupTableTemplate = (id) => {
// return utils.checkAuth(()=>{ // return utils.checkAuth(()=>{
return fetch({ return fetch({
...@@ -341,7 +341,7 @@ export const getFollowupTableTemplate = (id) => { ...@@ -341,7 +341,7 @@ export const getFollowupTableTemplate = (id) => {
url: getFollowUpSC(`/followup/plans/templets/${id}`), url: getFollowUpSC(`/followup/plans/templets/${id}`),
method: 'get', method: 'get',
data: {}, data: {},
description: '获取随访量表固定模板', description: '获取履约量表固定模板',
}) })
// }) // })
...@@ -484,4 +484,65 @@ export const updateScalesStatus = ( data ) => { ...@@ -484,4 +484,65 @@ export const updateScalesStatus = ( data ) => {
}) })
} }
// 获取量表详情
export const getFirstAccess = () => {
return fetch({
url: getFollowUpSC(`/followup/overView/firstAccess`),
method: 'get',
data: {},
})
}
/**
* Add by Anndy Yang
* 统一验证:量表内是否存在敏感字段、居民是否签署隐私协议、7天内是否发送过授权短信
* @param {[type]} data
{
"scaleNo":"String,量表编号",
// "patientIds":"List<Integer>,医生/居民id集合", // pc端只传这个字段
"planPatientsTimesId": "planPatientsTimesId", // app端只传这个字段
"protocolType":"Integer,协议类型(1:平台用户协议,5:隐私协议)",
"userType":"Integer,用户类型(1:居民,2:医生,3:其他)",
"validateType":"1:3个条件依次校验,2:后面2个条件依次校验"
}
* @return {[type]}
{
"code": "000000",
"message": "成功",
"data": {
"levelType":"类型 1:量表不存在敏感字段,2:居民都已签署协议,3:7天内发送过授权短信,4:7天内未发送过授权短信"
"ids":"List<Integer>,未签署协议的id集合(需要发送授权短信的居民id集合)"
}
}
*/
export const uniteValidate = (data) => {
return fetch({
url: getFollowUpSC(`/followup/protocol/uniteValidate`),
method: 'post',
data: data,
})
};
/**
* Add by Anndy Yang
* [批量]医生给居民发送授权短信
* @param {[type]} data {"patientIds":"List<Integer>,居民id集合"}
* @return {[type]} [description]
*/
export const authMessage = (data) => {
return fetch({
url: getFollowUpSC(`/followup/protocol/authMessage`),
method: 'post',
data: data,
})
};
// 关于权限获取展示的模块信息
export const getScaleModels2 = (domain,scaleNo, params) => {
return fetch({
url: `${domain}/followup/protocol/${scaleNo}/models`,
method: 'get',
params: params,
})
}
import rangeJson from './rangConfig'; import rangeJson from './rangConfig';
// 这个方法,是用户在选择随访轮次(6个月,12个月)后续操作 // 这个方法,是用户在选择履约轮次(6个月,12个月)后续操作
let checkNeedRule = (val) => { let checkNeedRule = (val) => {
const needRule = sessionStorage.getItem('needRule'); const needRule = sessionStorage.getItem('needRule');
if( val!='0' && (!val||val=='') && (!needRule || needRule=='true') ){ if( val!='0' && (!val||val=='') && (!needRule || needRule=='true') ){
......
...@@ -60,13 +60,13 @@ export default { ...@@ -60,13 +60,13 @@ export default {
if (res.code == '000000') { if (res.code == '000000') {
if (res.data == 1) { if (res.data == 1) {
// 点击 去加入,进入加入机构流程 // 点击 去加入,进入加入机构流程
alertMessage('您当前暂无机构,无法使用居民管理、随访管理和群发消息等功能,请在加入机构后重试。','去加入','暂不加入', ()=>{ alertMessage('您当前暂无机构,无法使用居民管理、履约管理和群发消息等功能,请在加入机构后重试。','去加入','暂不加入', ()=>{
location.href = getSaasHost() + '/pica-base/pica_join.html' location.href = getSaasHost() + '/pica-base/pica_join.html'
}) })
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
}) })
} else if (res.data == 2) { } else if (res.data == 2) {
alertMessage('您创建的机构正在审核中,暂无法使用居民管理、随访管理和群发消息等功能,请在审核通过后重试。','查看审核','取消', ()=>{ alertMessage('您创建的机构正在审核中,暂无法使用居民管理、履约管理和群发消息等功能,请在审核通过后重试。','查看审核','取消', ()=>{
location.href = getWsHost() + '/outside/status?tk=' + localStorage.getItem('storageToken') location.href = getWsHost() + '/outside/status?tk=' + localStorage.getItem('storageToken')
}) })
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
...@@ -92,11 +92,11 @@ export default { ...@@ -92,11 +92,11 @@ export default {
// res.data = 2 // res.data = 2
if (res.code == '000000') { if (res.code == '000000') {
if (res.data == 1) { if (res.data == 1) {
alertMessage('您当前暂无机构,无法使用居民管理、随访管理和群发消息等功能,请在加入机构后重试。','去加入','暂不加入', ()=>{ alertMessage('您当前暂无机构,无法使用居民管理、履约管理和群发消息等功能,请在加入机构后重试。','去加入','暂不加入', ()=>{
location.href = getSaasHost() + '/pica-base/pica_join.html' location.href = getSaasHost() + '/pica-base/pica_join.html'
}) })
} else if (res.data == 2) { } else if (res.data == 2) {
alertMessage('您创建的机构正在审核中,暂无法使用居民管理、随访管理和群发消息等功能,请在审核通过后重试。','查看审核','取消', ()=>{ alertMessage('您创建的机构正在审核中,暂无法使用居民管理、履约管理和群发消息等功能,请在审核通过后重试。','查看审核','取消', ()=>{
location.href = getWsHost() + '/outside/status?tk=' + localStorage.getItem('storageToken') location.href = getWsHost() + '/outside/status?tk=' + localStorage.getItem('storageToken')
}) })
} else if (res.data == 3) { } else if (res.data == 3) {
......
...@@ -26,7 +26,7 @@ export default [ ...@@ -26,7 +26,7 @@ export default [
}, },
{ {
field: 'nextBodyWeight', field: 'nextBodyWeight',
name: '下次随访体重', name: '下次履约体重',
min: 35, min: 35,
max: 250 max: 250
}, },
...@@ -44,7 +44,7 @@ export default [ ...@@ -44,7 +44,7 @@ export default [
}, },
{ {
field: 'nextSmokingAmount', field: 'nextSmokingAmount',
name: '下次随访日吸烟量', name: '下次履约日吸烟量',
min: 0, min: 0,
max: 99 max: 99
}, },
...@@ -56,7 +56,7 @@ export default [ ...@@ -56,7 +56,7 @@ export default [
}, },
{ {
field: 'nextAlcoholConsumption', field: 'nextAlcoholConsumption',
name: '下次随访日饮酒量', name: '下次履约日饮酒量',
min: 0, min: 0,
max: 99 max: 99
}, },
...@@ -74,13 +74,13 @@ export default [ ...@@ -74,13 +74,13 @@ export default [
}, },
{ {
field: 'nextWorkoutOfWeek', field: 'nextWorkoutOfWeek',
name: '下次随访运动情况', name: '下次履约运动情况',
min: 0, min: 0,
max: 99 max: 99
}, },
{ {
field: 'nextWorkoutDuration', field: 'nextWorkoutDuration',
name: '下次随访运动情况', name: '下次履约运动情况',
min: 0, min: 0,
max: 99 max: 99
}, },
......
...@@ -172,7 +172,7 @@ export function uploadImg() { ...@@ -172,7 +172,7 @@ export function uploadImg() {
return getConfigByEnvType('qiniuImgUrl') return getConfigByEnvType('qiniuImgUrl')
} }
// 获取随访微服务服务器域名地址 // 获取履约微服务服务器域名地址
export function getFollowUpSC(url) { export function getFollowUpSC(url) {
return getConfigByEnvType('followUpSC') + url return getConfigByEnvType('followUpSC') + url
} }
......
<template> <template>
<div class="finish-followup" v-if="showThisPage"> <div class="finish-followup" v-if="showThisPage">
<el-dialog <el-dialog
title="选择随访开始时间" title="选择履约开始时间"
:visible.sync="showAddPatientTime" :visible.sync="showAddPatientTime"
v-if="showThisPage" v-if="showThisPage"
:before-close="clickClose" :before-close="clickClose"
...@@ -16,11 +16,11 @@ ...@@ -16,11 +16,11 @@
<el-form-item label="已选居民:"> <el-form-item label="已选居民:">
{{addPatientData.patientNames}} {{addPatientData.patientNames}}
</el-form-item> </el-form-item>
<el-form-item label="随访开始时间:" prop="joinTime"> <el-form-item label="履约开始时间:" prop="joinTime">
<el-date-picker <el-date-picker
v-model="addPatientData.joinTime" v-model="addPatientData.joinTime"
type="date" type="date"
placeholder="请选择随访开始时间" placeholder="请选择履约开始时间"
:editable="false" :editable="false"
format="yyyy-MM-dd" format="yyyy-MM-dd"
value-format="timestamp" value-format="timestamp"
...@@ -34,11 +34,24 @@ ...@@ -34,11 +34,24 @@
<el-button class="button-green" @click="addPatient" size="small" type="primary">确 定</el-button> <el-button class="button-green" @click="addPatient" size="small" type="primary">确 定</el-button>
</span> </span>
</el-dialog> </el-dialog>
<!-- 敏感词及协议校验 -->
<el-dialog class="prot-dialog" title="" :visible.sync="isShowProtocolDialog" width="30%" center :show-close=false>
<p class="prot-dialog-tips-1">您选择的居民中有部分居民尚未同意《云鹊平台隐私协议》,将导致履约量表部分信息无法录入,为了方便您的工作开展,请您发送短信提醒未授权居民完成授权</p>
<p v-show="!isSentedProt" class="prot-dialog-tips-2">若您选择暂不发送,您只能录入量表的非敏感信息</p>
<p v-show="isSentedProt" class="prot-dialog-tips-3">为避免打扰居民,7天内只能发送1次,您已发送过短信,请尽快联系居民同意授权</p>
<span v-show="!isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" @click="closeProtocolDialog"> 暂不发送 </el-button>
<el-button size="small" type="primary" @click="sendMsg"> 发送短信 </el-button>
</span>
<span v-show="isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="closeProtocolDialog"> 我知道了 </el-button>
</span>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import { createFollowPlan } from '../../../../utils/followup/followapis' import { createFollowPlan, uniteValidate, authMessage } from '../../../../utils/followup/followapis'
import { mapState, mapActions} from 'vuex'; import { mapState, mapActions} from 'vuex';
export default { export default {
name: "add-patient-time", name: "add-patient-time",
...@@ -62,13 +75,17 @@ ...@@ -62,13 +75,17 @@
showAddPatientTime: true, showAddPatientTime: true,
rules: { rules: {
joinTime: [ joinTime: [
{ required: true, message: '请选择随访开始时间', trigger: 'change' }, { required: true, message: '请选择履约开始时间', trigger: 'change' },
], ],
} },
isShowProtocolDialog: false,
isSentedProt: false,
patientIds: [],
sendMsgPatientIds: [],
} }
}, },
mounted() { mounted() {
//this.getFollowStartTimeList(this.$route.query.planId);// 获取随访时间列表 //this.getFollowStartTimeList(this.$route.query.planId);// 获取履约时间列表
}, },
computed: { computed: {
...mapState('planManage', { ...mapState('planManage', {
...@@ -82,50 +99,153 @@ ...@@ -82,50 +99,153 @@
this.$emit('closeAddPatientTime',false) this.$emit('closeAddPatientTime',false)
}, },
addPatient() { addPatient() {
// 创建/修改履约计划
// 4、校验居民/医生是否签署协议
this.patientIds = this.addPatientData.patientIdList
this.$refs['addPatientData'].validate(valid => { this.$refs['addPatientData'].validate(valid => {
if (valid) { if (valid) {
if(this.$route.name == 'planModify') { console.log(this.addPatientData)
this.$emit('sendJoinTime',this.addPatientData.joinTime) // 4、校验居民/医生是否签署协议
this.$emit('closeAddPatientTime',false)
} else {
const { id, patientIdList, joinTime } = this.addPatientData;
createFollowPlan({
id,
addPatients: true,
patientIdList,
joinTime
}).then((data) => {
if(data.code == '000000') {
this.$message({
message: '添加成功!',
type: 'success'
});
this.getResidentList({
planId: this.addPatientData.id,
status: this.addPatientData.status
})
this.$emit('closeAddPatientTime',false)
} else {
this.$message({
message: `${data.message}`,
type: 'error'
});
}
}).catch((err) => {
this.$message({
message: `${err.message}`,
type: 'error'
});
});
}
// if(this.$route.name == 'planModify') {
// this.$emit('sendJoinTime',this.addPatientData.joinTime)
// this.$emit('closeAddPatientTime',false)
// } else {
// const { id, patientIdList, joinTime } = this.addPatientData;
// createFollowPlan({
// id,
// addPatients: true,
// patientIdList,
// joinTime
// }).then((data) => {
// if(data.code == '000000') {
// this.$message({
// message: '添加成功!',
// type: 'success'
// });
// this.getResidentList({
// planId: this.addPatientData.id,
// status: this.addPatientData.status
// })
// this.$emit('closeAddPatientTime',false)
// } else {
// this.$message({
// message: `${data.message}`,
// type: 'error'
// });
// }
// }).catch((err) => {
// this.$message({
// message: `${err.message}`,
// type: 'error'
// });
// });
// }
this.uniteValidateAction()
} else { } else {
return false; return false;
} }
}); });
} },
// Add by Anndy Yang
// 统一验证:量表内是否存在敏感字段、居民是否签署隐私协议、7天内是否发送过授权短信
uniteValidateAction() {
if(!this.patientIds.length) {
return;
}
let validParams = {
scaleNo: '',
patientIds: this.patientIds, // pc端只传这个字段
// planPatientsTimesId: planPatientsTimesId, // app端只传这个字段
protocolType: 5,
userType: 1,
validateType: 2
};
uniteValidate(validParams).then(res => {
let result = res;
// 请求成功
if (result.code === '000000') {
let levelType = result.data.levelType;
// 没有敏感字段或者居民已经签订过协议,则直接返回
if (levelType === 1 || levelType === 2) {
this.jumpToAddOrModifyPlan();
} else if (levelType === 3) {
this.isShowProtocolDialog = true;
this.isSentedProt = true;
} else if (levelType === 4) {
this.isShowProtocolDialog = true;
this.isSentedProt = false;
this.sendMsgPatientIds = result.data.ids;
}
}
});
},
// 发送协议授权短信给居民
sendMsgToPatients() {
authMessage({ patientIds: this.sendMsgPatientIds }).then(res => {
if (res.code === '000000') {
this.$message({
message: '已发送,请尽快联系居民同意授权',
type: 'success'
});
}
});
this.isShowProtocolDialog = false;
},
// 统一跳转到量表页面
jumpToAddOrModifyPlan() {
if(this.$route.name == 'planModify') {
this.$emit('sendJoinTime',this.addPatientData.joinTime)
this.$emit('closeAddPatientTime',false)
} else {
const { id, patientIdList, joinTime } = this.addPatientData;
createFollowPlan({
id,
addPatients: true,
patientIdList,
joinTime
}).then((data) => {
if(data.code == '000000') {
this.$message({
message: '添加成功!',
type: 'success'
});
this.getResidentList({
planId: this.addPatientData.id,
status: this.addPatientData.status
})
this.$emit('closeAddPatientTime',false)
} else {
this.$message({
message: `${data.message}`,
type: 'error'
});
}
}).catch((err) => {
this.$message({
message: `${err.message}`,
type: 'error'
});
});
}
},
// 关闭协议确认窗口
closeProtocolDialog() {
this.isShowProtocolDialog = false
this.jumpToAddOrModifyPlan()
},
// 发送短信通知
sendMsg() {
this.sendMsgToPatients();
this.closeProtocolDialog()
},
} }
} }
</script> </script>
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="随访计划:" prop="planId"> <el-form-item label="履约计划:" prop="planId">
<el-select <el-select
v-model="planChangeData.planId" v-model="planChangeData.planId"
@change="selectPlan" @change="selectPlan"
...@@ -35,14 +35,14 @@ ...@@ -35,14 +35,14 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="随访开始时间:" prop="startDate"> <el-form-item label="履约开始时间:" prop="startDate">
<el-date-picker <el-date-picker
v-model="planChangeData.startDate" v-model="planChangeData.startDate"
type="date" type="date"
format="yyyy-MM-dd" format="yyyy-MM-dd"
value-format="timestamp" value-format="timestamp"
:editable="false" :editable="false"
placeholder="选择随访开始时间"> placeholder="选择履约开始时间">
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</el-form> </el-form>
...@@ -91,10 +91,10 @@ ...@@ -91,10 +91,10 @@
selectedGroup: [], selectedGroup: [],
rules: { rules: {
planId: [ planId: [
{ required: true, message: '请选择随访计划', trigger: 'change' }, { required: true, message: '请选择履约计划', trigger: 'change' },
], ],
startDate: [ startDate: [
{ required: true, message: '请选择随访开始时间', trigger: 'change' }, { required: true, message: '请选择履约开始时间', trigger: 'change' },
] ]
}, },
realGroup: [], realGroup: [],
...@@ -103,7 +103,7 @@ ...@@ -103,7 +103,7 @@
}, },
mounted() { mounted() {
this.getPlanOptions(); this.getPlanOptions();
// 获取随访时间列表 // 获取履约时间列表
}, },
computed: { computed: {
...mapState('planManage', { ...mapState('planManage', {
......
<template> <template>
<div class="follow-time"> <div class="follow-time">
<el-dialog <el-dialog
title="随访开始时间" title="履约开始时间"
:visible.sync="showFollowTime" :visible.sync="showFollowTime"
v-if="showThisPage" v-if="showThisPage"
:before-close="clickClose" :before-close="clickClose"
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
style="width: 100%;margin-top: 20px;"> style="width: 100%;margin-top: 20px;">
<el-table-column <el-table-column
prop="timeStr" prop="timeStr"
label="随访计划开始时间" label="履约计划开始时间"
align="center"> align="center">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
......
<template> <template>
<div class="finish-followup" v-if="showThisPage"> <div class="finish-followup" v-if="showThisPage">
<el-dialog <el-dialog
title="恢复随访" title="恢复履约"
:visible.sync="showFinishFollowup" :visible.sync="showFinishFollowup"
v-if="showThisPage" v-if="showThisPage"
:before-close="clickClose" :before-close="clickClose"
......
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
class="form-div" class="form-div"
> >
<el-form :ref="itemTimeForm.formRef" :model="itemTimeForm" :rules="timeFormRules" label-suffix=":" label-width="140px" :inline-message="false" size="small"> <el-form :ref="itemTimeForm.formRef" :model="itemTimeForm" :rules="timeFormRules" label-suffix=":" label-width="140px" :inline-message="false" size="small">
<el-form-item label="本次随访时间" required> <el-form-item label="本次履约时间" required>
<div style="display: flex;"> <div style="display: flex;">
<el-form-item prop="timeNo"> <el-form-item prop="timeNo">
<el-input <el-input
...@@ -52,7 +52,7 @@ ...@@ -52,7 +52,7 @@
</el-form-item> </el-form-item>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="随访方式" prop="type"> <el-form-item label="履约方式" prop="type">
<el-radio-group v-model="itemTimeForm.type" size="small"> <el-radio-group v-model="itemTimeForm.type" size="small">
<el-radio v-for="(item,index) in followTypeList" :key="index" :label="item.no" :disabled="itemIsDisabled(itemTimeForm)">{{item.value}}</el-radio> <el-radio v-for="(item,index) in followTypeList" :key="index" :label="item.no" :disabled="itemIsDisabled(itemTimeForm)">{{item.value}}</el-radio>
</el-radio-group> </el-radio-group>
...@@ -105,7 +105,7 @@ ...@@ -105,7 +105,7 @@
<p class="yellow-font">当前计划中共{{totalNumber}}位居民(微信:{{wechatPatientNum}}位,短信:{{messagePatientNum}}位),本次定时推送任务在发送当日预计需要{{messagePatientNum}}条短信额度(微信推送不消耗额度,建议您让居民关注云鹊健康微信公众号),务必提前确保短信额度的充足。</p> <p class="yellow-font">当前计划中共{{totalNumber}}位居民(微信:{{wechatPatientNum}}位,短信:{{messagePatientNum}}位),本次定时推送任务在发送当日预计需要{{messagePatientNum}}条短信额度(微信推送不消耗额度,建议您让居民关注云鹊健康微信公众号),务必提前确保短信额度的充足。</p>
<p>需要更多额度,请前往「云鹊医App-个人中心-啾啾币中心」兑换短信额度后再进行预约,您也可以联系云鹊医客服购买短信额度,客服电话:400-920-8877</p> <p>需要更多额度,请前往「云鹊医App-个人中心-啾啾币中心」兑换短信额度后再进行预约,您也可以联系云鹊医客服购买短信额度,客服电话:400-920-8877</p>
</div> </div>
<el-form-item label="随访登记表"> <el-form-item label="履约登记表">
<el-select <el-select
v-if="planId || itemTimeForm.followResourceId" v-if="planId || itemTimeForm.followResourceId"
v-model="itemTimeForm.followResourceId" v-model="itemTimeForm.followResourceId"
...@@ -170,9 +170,9 @@ ...@@ -170,9 +170,9 @@
timeUnit: '', timeUnit: '',
timeUnitStr: '', timeUnitStr: '',
timeFormRules: { timeFormRules: {
timeNo: [{ required: true, message: '请添加随访时间', trigger: 'change' },{ validator: checkDay, trigger: 'blur' }], timeNo: [{ required: true, message: '请添加履约时间', trigger: 'change' },{ validator: checkDay, trigger: 'blur' }],
timeUnit: [{ required: true, message: '请添加随访时间', trigger: 'change' }], timeUnit: [{ required: true, message: '请添加履约时间', trigger: 'change' }],
type: [{ required: true, message: '请选择随访方式', trigger: 'change' }], type: [{ required: true, message: '请选择履约方式', trigger: 'change' }],
}, },
isSelectCartoon: false, isSelectCartoon: false,
activeTab: '0', activeTab: '0',
...@@ -261,7 +261,7 @@ ...@@ -261,7 +261,7 @@
header_name: pushData.sendContent header_name: pushData.sendContent
} }
} }
if(item.followupList && item.followupList.length > 0){ //followResourceId 随访量表 if(item.followupList && item.followupList.length > 0){ //followResourceId 履约量表
item.followResourceId = [] item.followResourceId = []
item.followupList.forEach((kkk)=>{ item.followupList.forEach((kkk)=>{
if(this.isStandedTemplate){ if(this.isStandedTemplate){
...@@ -328,12 +328,12 @@ ...@@ -328,12 +328,12 @@
initNewForm(){ initNewForm(){
this.setTimeNodeList.push({ this.setTimeNodeList.push({
formRef: 'form' + this.setTimeNodeList.length, formRef: 'form' + this.setTimeNodeList.length,
type: '',//随访方式 type: '',//履约方式
timeNo: '',//随访时间 timeNo: '',//履约时间
timeUnit: '',//随访时间单位 timeUnit: '',//履约时间单位
remindList: [],//提醒医生预约提前天数 remindList: [],//提醒医生预约提前天数
pushContentList: [],//推送患教提前天数 漫画id pushContentList: [],//推送患教提前天数 漫画id
followupList: [],//随访量表id followupList: [],//履约量表id
hasSelected: false, hasSelected: false,
isDisabled: false, isDisabled: false,
remindDay: [], remindDay: [],
...@@ -348,11 +348,11 @@ ...@@ -348,11 +348,11 @@
}, },
// 一次性获取常量接口数据 // 一次性获取常量接口数据
getConstData(){ getConstData(){
// 随访时间节点单位 // 履约时间节点单位
getBasicData({numList: 'P017'}).then(res=>{ getBasicData({numList: 'P017'}).then(res=>{
this.markOptions = res.data.P017 this.markOptions = res.data.P017
}) })
// 随访方式 // 履约方式
getBasicData({numList: 'P212'}).then(res=>{ getBasicData({numList: 'P212'}).then(res=>{
this.followTypeList = res.data.P212 this.followTypeList = res.data.P212
}) })
...@@ -561,7 +561,7 @@ ...@@ -561,7 +561,7 @@
const lastIndex = this.activeTab; const lastIndex = this.activeTab;
const timeNo = this.setTimeNodeList[this.activeTab].timeNo; const timeNo = this.setTimeNodeList[this.activeTab].timeNo;
setTimeout(()=>{ setTimeout(()=>{
// 这里设置定时器是因为,如果填完时间,直接点击随访方式radio,会立即出发排序和重复事件 // 这里设置定时器是因为,如果填完时间,直接点击履约方式radio,会立即出发排序和重复事件
this.checkIsRepeat(timeNo,lastIndex); this.checkIsRepeat(timeNo,lastIndex);
// // 新增成功之后 // // 新增成功之后
// this.setTimeNodeList = this.sortKey(this.setTimeNodeList,'timeNo'); // this.setTimeNodeList = this.sortKey(this.setTimeNodeList,'timeNo');
...@@ -706,7 +706,7 @@ ...@@ -706,7 +706,7 @@
this.setTimeNodeList[this.activeTab].pushContentList[0] = obj this.setTimeNodeList[this.activeTab].pushContentList[0] = obj
this.$forceUpdate(); this.$forceUpdate();
}, },
// 选择随访量表 // 选择履约量表
changeFollowId(val){ changeFollowId(val){
this.setTimeNodeList[this.activeTab].followupList = [] this.setTimeNodeList[this.activeTab].followupList = []
val.forEach((item)=>{ val.forEach((item)=>{
......
<template>
<div class="resident-list">
<bread-crumb
:curmbFirst="curmbFirst"
:curmbSecond="curmbSecond"
:curmbThird="curmbThird"
:jumPathThird="jumPathThird">
</bread-crumb>
<div class="new-plan-content f-main-content screenSet">
<div class="header">
<div class="title">
<span :class="{ 'active-class' : activeTab === 'second' }">①基本信息</span>
<i class="el-icon-arrow-right" style="color: #C0C4CC"></i>
<span :class="{ 'active-class' : activeTab === 'first' }">②履约时间节点</span>
</div>
<div class="plan-btns-group" v-if="activeTab === 'first'">
<el-button class="button-white" size="small" plain @click="cancelEdit" >取 消</el-button>
<el-button type="primary" size="small" @click="nextClick('baseInfo')">下一步</el-button>
</div>
<div class="plan-btns-group" v-if="activeTab === 'second'">
<el-button class="button-white" size="small" plain @click="preClick">上一步</el-button>
<el-button type="primary" size="small" @click="saveEdit">保 存</el-button>
</div>
</div>
<div class="edit-plan-content" v-if="activeTab === 'first'">
<el-form ref="baseInfo" :model="baseInfo" :rules="rules" label-suffix=":" label-width="140px" :inline-message="true" size="small">
<el-form-item label="履约计划名称" prop="name">
<el-input v-model="baseInfo.name" maxlength="20" style="width: 30%" clearable></el-input>
</el-form-item>
<el-form-item label="履约居民" required prop="hasSelectedNum">
<div style="display: flex">
<div>
<el-button plain icon="el-icon-plus" :style="noChoice?'border:1px solid red;':''" @click="selectPatientHandler">{{baseInfo.hasSelectedNum ? '继续添加' : '选择居民'}}</el-button><br>
<el-button type="text" class="mt10" @click="seeSelectedHandler" v-if="baseInfo.hasSelectedNum">已选{{baseInfo.hasSelectedNum}}<i class="el-icon-arrow-right"></i></el-button>
</div>
<p class="err-tips" v-if="noChoice">请添加履约居民</p>
</div>
</el-form-item>
<el-form-item label="履约模板" prop="resourceId">
<el-select
v-model="baseInfo.resourceId"
placeholder="请选择履约模板"
clearable>
<el-option
v-for="item in templateOptions"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<p class="tips">履约计划创建成功后,模板不可更换,请谨慎选择。</p>
<el-form-item label="履约开始时间" prop="time">
<el-date-picker
v-model="baseInfo.time"
type="date"
ref="beginDate"
placeholder="请选择履约开始时间"
:picker-options="pickerOptions"
value-format="timestamp"
clearable
@blur="handleDateInputConfirm"
style="width:380px;">
</el-date-picker>
</el-form-item>
<el-form-item label="备注">
<el-select
v-model="baseInfo.remarksStatus"
placeholder="请选择履约种类"
clearable>
<el-option
v-for="item in remarkOption"
:key="item.no"
:label="item.value"
:value="item.no">
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<div class="edit-plan-content" v-show="activeTab === 'second'">
<set-time-node
:resourceId="resourceId"
:standedTimeNodeList="standedTimeNodeList"
:isStandedTemplate="isStandedTemplate"
:patientIdList="baseInfo.patientIdList"
:checkForm="checkForm"
@addListenSave="addListenSave"
/>
</div>
</div>
<select-patient
:isShowSelectPatient="isShowSelectPatient"
:patientIdList="baseInfo.patientIdList"
@closeSelectPatient="closeSelectPatient"
@sureSelectPatient="sureSelectPatient(arguments)"
:selectPatientType="selectPatientType"
/>
<has-selected-patient
v-if="isShowSelectedDialog"
:hasSelectedList="hasSelectedList"
@closeSelectedDialog="closeSelectedDialog"
@continueAdd="continueAdd"
/>
</div>
</template>
<script>
import BreadCrumb from '@/components/breadcrumb'
// import SelectPatient from '@/views/followup/plan-manage/dialog/select-patient';
import SelectPatient from '@/views/patients/labels-manage/dialog/select-patitents';
import HasSelectedPatient from '@/views/followup/plan-manage/dialog/has-selected-patient';
import SetTimeNode from '@/views/followup/plan-manage/dialog/set-time-node';
import { createFollowPlan, getFollowupTableTemplate } from '@/utils/followup/followapis'
import { mapState, mapActions } from 'vuex'
export default {
name: "addNewPlan",
components: {
BreadCrumb,
SelectPatient,
HasSelectedPatient,
SetTimeNode,
},
data() {
return {
setTimeNodeList: [],//重写后的setTimeNodeList
isStandedTemplate: false, // 是否是固定的履约模板
standedTimeNodeList: [], // 如果是国定履约模板,获取固定数据后不可更改,只读
checkForm: false,
/*面包屑配置*/
curmbFirst: '履约管理',
curmbSecond: '计划管理',
curmbThird: '新建履约计划',
jumPathThird: '/followUp/plan-manage',
activeTab: 'first',
resourceId: '',//当前选择的履约模板id
noName: false,
noResourceId: false,
noTime: false,
noChoice: false,
baseInfo: {
name: '',//履约计划名称
patientIdList: [],//履约居民列表
resourceId:'',//履约模板ID
time:'',//履约开始时间
remarksStatus: '',
fPlanTimeReqList: [],//时间节点列表
hasSelectedNum: 0,
},
isShowSelectPatient: false,
isShowSelectedDialog: false,
selectPatientType: 1,
hasSelectedList: [],
rules: {
name: [{ required: true, message: '请输入履约计划名称', trigger: 'blur' }],
hasSelectedNum: [{ required: true, message: '请添加履约居民', trigger: 'change' }],
resourceId: [{ required: true, message: '请选择履约模板', trigger: 'change' }],
time: [{ required: true, message: '请选择履约开始时间', trigger: 'change' }],
},
pickerOptions: {
disabledDate(time) {
return time.getTime() < Date.now() - 8.64e7
}
}
}
},
created() {
// 获取备注
this.getRemarkOption()
// 获取履约计划模板列表
this.getFollowupTemplate()
},
computed: {
...mapState('planManage',{
remarkOption: state => state.remarkOption,
templateOptions: state => state.templateOptions,
})
},
methods: {
...mapActions('planManage', ['getTimeNodeList','getRemarkOption','getFollowupTemplate']),
// 点击保存
saveEdit() {
// 点击保存,先进行校验,表单字段是否通过验证
this.checkForm = true
},
handleDateInputConfirm(e){
if(!this.baseInfo.time){
this.$refs.beginDate.picker.date = new Date();
}
},
// 监听保存校验结果
addListenSave(val){
// console.log('监听保存校验结果',val)
this.checkForm = false
if(val.status){
this.baseInfo.fPlanTimeReqList = val.setTimeNodeList
// this.baseInfo.time = (new Date(this.baseInfo.time).getTime())
// console.log(this.baseInfo.time)
// 提交
createFollowPlan(this.baseInfo).then(res=>{
if(res.code=='000000'){
// 各种校验通过后,提交编辑内容,toast提示
this.$message({
message: '创建成功',
type: 'success'
});
setTimeout(()=>{
this.$router.push({
path: '/followup/plan-manage/plan-list'
})
},2000)
}else{
this.$message({
message: '创建失败,' + res.message,
type: 'error'
});
}
})
}else{
this.$message({
message: val.message,
type: 'error'
});
}
},
selectPatientHandler() {
this.isShowSelectPatient = true;
},
closeSelectPatient(val) {
this.isShowSelectPatient = val;
},
seeSelectedHandler() {
this.isShowSelectedDialog = true;
},
closeSelectedDialog(val) {
this.isShowSelectedDialog = val;
},
sureSelectPatient() {
let getArguments = arguments[0];
this.isShowSelectPatient = getArguments[0];
const selectPatients = getArguments[1]; // 每次选中获取的人
this.hasSelectedList = selectPatients;
// console.log('呵呵呵呵',arguments)
this.baseInfo.patientIdList = [];
selectPatients.forEach((item)=>{
this.baseInfo.patientIdList.push(item.patientId);
})
this.baseInfo.hasSelectedNum = this.hasSelectedList.length;
if(this.baseInfo.hasSelectedNum > 0){
this.noChoice = false;
}
},
continueAdd(val) {
this.isShowSelectedDialog = val;
this.isShowSelectPatient = true;
},
cancelEdit() {
this.$confirm('是否放弃本次创建,放弃后数据不能被保存', '', {
confirmButtonText: '继续创建',
cancelButtonText: '确定放弃',
type: 'warning'
}).then(() => {
// 关闭弹层,继续创建
}).catch(() => {
// 确定放弃,跳出当前编辑页面
this.$router.push({path: '/followup/plan-manage/plan-list'})
});
},
nextClick(formName) {
//为方便调试,不做校验
// this.activeTab = 'second';
this.$refs[formName].validate((valid) => {
//用作校验
if(!this.baseInfo.hasSelectedNum) {
this.noChoice = true
return;
}else {
this.noChoice = false
}
if (valid) {
// console.log('当前选择的履约模板id为',this.baseInfo.resourceId)
this.resourceId = String(this.baseInfo.resourceId)
// console.log( this.baseInfo.resourceId)
if(this.baseInfo.resourceId){
getFollowupTableTemplate(this.baseInfo.resourceId).then(res=>{
this.isStandedTemplate = true
this.standedTimeNodeList = res.data
this.activeTab = 'second';
})
}else{
this.isStandedTemplate = false
this.standedTimeNodeList = [];
this.activeTab = 'second';
}
} else {
return false;
}
});
},
preClick() {
this.activeTab = 'first';
},
},
}
</script>
<style lang="scss" scoped>
@import '../../../style/followup/followup-common';
@import '../../../style/followup/element-reset.css';
.new-plan-content{
.header{
display: flex;
align-items: center;
justify-content: space-between;
padding-bottom: 20px;
border-bottom: $borderBottomStyle;
.title{
.active-class{
color: #9B9997;
}
}
}
.edit-plan-content{
padding: 30px 0;
.add-time-content{
padding-top: 20px;
.time-line-scroll{
width: 100%;
height: 50px;
box-sizing: border-box;
background-color: #F0F2F5;
padding: 8px 10px;
/*display: flex;*/
/*align-items: center;*/
overflow-x: scroll;
overflow-y: hidden;
white-space: nowrap;
position: relative;
cursor: pointer;
&::-webkit-scrollbar{
height: 6px;
}
&::-webkit-scrollbar-thumb {/*滚动条里面小方块*/
border-radius: 10px;
-webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
background: rgba(0,0,0,0.1);
}
span{
display: inline-block;
background-color: #449284;
border-radius: 20px;
height: 28px;
line-height: 28px;
padding: 0 8px;
color: #ffffff;
font-size: 12px;
width: 95px;
}
}
.form-div{
padding-top: 30px;
}
}
}
.err-tips{
color: #F56C6C;
font-size: 12px;
margin-left: 10px;
}
.tips{
font-size: 12px;
color: #9B9997;
padding-left: 140px;
margin-top: -10px;
padding-bottom: 15px;
}
.el-message-box__content{
padding: 20px 15px;
}
}
.mt10{
margin-top: 10px;
}
.ml20{
margin-left: 20px;
}
</style>
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<div class="title"> <div class="title">
<span :class="{ 'active-class' : activeTab === 'second' }">①基本信息</span> <span :class="{ 'active-class' : activeTab === 'second' }">①基本信息</span>
<i class="el-icon-arrow-right" style="color: #C0C4CC"></i> <i class="el-icon-arrow-right" style="color: #C0C4CC"></i>
<span :class="{ 'active-class' : activeTab === 'first' }">②随访时间节点</span> <span :class="{ 'active-class' : activeTab === 'first' }">②履约时间节点</span>
</div> </div>
<div class="plan-btns-group" v-if="activeTab === 'first'"> <div class="plan-btns-group" v-if="activeTab === 'first'">
<el-button class="button-white" size="small" plain @click="cancelEdit" >取 消</el-button> <el-button class="button-white" size="small" plain @click="cancelEdit" >取 消</el-button>
...@@ -25,22 +25,22 @@ ...@@ -25,22 +25,22 @@
<div class="edit-plan-content" v-if="activeTab === 'first'"> <div class="edit-plan-content" v-if="activeTab === 'first'">
<el-form ref="baseInfo" :model="baseInfo" :rules="rules" label-suffix=":" label-width="140px" :inline-message="true" size="small"> <el-form ref="baseInfo" :model="baseInfo" :rules="rules" label-suffix=":" label-width="140px" :inline-message="true" size="small">
<el-form-item label="随访计划名称" prop="name"> <el-form-item label="履约计划名称" prop="name">
<el-input v-model="baseInfo.name" maxlength="20" style="width: 30%" clearable></el-input> <el-input v-model="baseInfo.name" maxlength="20" style="width: 30%" clearable></el-input>
</el-form-item> </el-form-item>
<el-form-item label="随访居民" required prop="hasSelectedNum"> <el-form-item label="履约居民" required prop="hasSelectedNum">
<div style="display: flex"> <div style="display: flex">
<div> <div>
<el-button plain icon="el-icon-plus" :style="noChoice?'border:1px solid red;':''" @click="selectPatientHandler">{{baseInfo.hasSelectedNum ? '继续添加' : '选择居民'}}</el-button><br> <el-button plain icon="el-icon-plus" :style="noChoice?'border:1px solid red;':''" @click="selectPatientHandler">{{baseInfo.hasSelectedNum ? '继续添加' : '选择居民'}}</el-button><br>
<el-button type="text" class="mt10" @click="seeSelectedHandler" v-if="baseInfo.hasSelectedNum">已选{{baseInfo.hasSelectedNum}}<i class="el-icon-arrow-right"></i></el-button> <el-button type="text" class="mt10" @click="seeSelectedHandler" v-if="baseInfo.hasSelectedNum">已选{{baseInfo.hasSelectedNum}}<i class="el-icon-arrow-right"></i></el-button>
</div> </div>
<p class="err-tips" v-if="noChoice">请添加随访居民</p> <p class="err-tips" v-if="noChoice">请添加履约居民</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="随访模板" prop="resourceId"> <el-form-item label="履约模板" prop="resourceId">
<el-select <el-select
v-model="baseInfo.resourceId" v-model="baseInfo.resourceId"
placeholder="请选择随访模板" placeholder="请选择履约模板"
clearable> clearable>
<el-option <el-option
v-for="item in templateOptions" v-for="item in templateOptions"
...@@ -50,13 +50,13 @@ ...@@ -50,13 +50,13 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<p class="tips">随访计划创建成功后,模板不可更换,请谨慎选择。</p> <p class="tips">履约计划创建成功后,模板不可更换,请谨慎选择。</p>
<el-form-item label="随访开始时间" prop="time"> <el-form-item label="履约开始时间" prop="time">
<el-date-picker <el-date-picker
v-model="baseInfo.time" v-model="baseInfo.time"
type="date" type="date"
ref="beginDate" ref="beginDate"
placeholder="请选择随访开始时间" placeholder="请选择履约开始时间"
:picker-options="pickerOptions" :picker-options="pickerOptions"
value-format="timestamp" value-format="timestamp"
clearable clearable
...@@ -67,7 +67,7 @@ ...@@ -67,7 +67,7 @@
<el-form-item label="备注"> <el-form-item label="备注">
<el-select <el-select
v-model="baseInfo.remarksStatus" v-model="baseInfo.remarksStatus"
placeholder="请选择随访种类" placeholder="请选择履约种类"
clearable> clearable>
<el-option <el-option
v-for="item in remarkOption" v-for="item in remarkOption"
...@@ -94,6 +94,7 @@ ...@@ -94,6 +94,7 @@
<select-patient <select-patient
:isShowSelectPatient="isShowSelectPatient" :isShowSelectPatient="isShowSelectPatient"
:selectPatientDialogTitle="baseInfo.hasSelectedNum ? '继续添加' : '选择居民'"
:patientIdList="baseInfo.patientIdList" :patientIdList="baseInfo.patientIdList"
@closeSelectPatient="closeSelectPatient" @closeSelectPatient="closeSelectPatient"
@sureSelectPatient="sureSelectPatient(arguments)" @sureSelectPatient="sureSelectPatient(arguments)"
...@@ -105,6 +106,20 @@ ...@@ -105,6 +106,20 @@
@closeSelectedDialog="closeSelectedDialog" @closeSelectedDialog="closeSelectedDialog"
@continueAdd="continueAdd" @continueAdd="continueAdd"
/> />
<!-- 敏感词及协议校验 -->
<el-dialog class="prot-dialog" title="" :visible.sync="isShowProtocolDialog" width="30%" center :show-close=false>
<p class="prot-dialog-tips-1">您选择的居民中有部分居民尚未同意《云鹊平台隐私协议》,将导致履约量表部分信息无法录入,为了方便您的工作开展,请您发送短信提醒未授权居民完成授权</p>
<p v-show="!isSentedProt" class="prot-dialog-tips-2">若您选择暂不发送,您只能录入量表的非敏感信息</p>
<p v-show="isSentedProt" class="prot-dialog-tips-3">为避免打扰居民,7天内只能发送1次,您已发送过短信,请尽快联系居民同意授权</p>
<span v-show="!isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" @click="isShowProtocolDialog = false"> 暂不发送 </el-button>
<el-button size="small" type="primary" @click="sendMsgToPatients"> 发送短信 </el-button>
</span>
<span v-show="isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="isShowProtocolDialog = false"> 我知道了 </el-button>
</span>
</el-dialog>
</div> </div>
</template> </template>
...@@ -114,7 +129,7 @@ ...@@ -114,7 +129,7 @@
import SelectPatient from '@/views/patients/labels-manage/dialog/select-patitents'; import SelectPatient from '@/views/patients/labels-manage/dialog/select-patitents';
import HasSelectedPatient from '@/views/followup/plan-manage/dialog/has-selected-patient'; import HasSelectedPatient from '@/views/followup/plan-manage/dialog/has-selected-patient';
import SetTimeNode from '@/views/followup/plan-manage/dialog/set-time-node'; import SetTimeNode from '@/views/followup/plan-manage/dialog/set-time-node';
import { createFollowPlan, getFollowupTableTemplate } from '@/utils/followup/followapis' import { createFollowPlan, getFollowupTableTemplate, uniteValidate, authMessage } from '@/utils/followup/followapis'
import { mapState, mapActions } from 'vuex' import { mapState, mapActions } from 'vuex'
export default { export default {
...@@ -128,25 +143,25 @@ ...@@ -128,25 +143,25 @@
data() { data() {
return { return {
setTimeNodeList: [],//重写后的setTimeNodeList setTimeNodeList: [],//重写后的setTimeNodeList
isStandedTemplate: false, // 是否是固定的随访模板 isStandedTemplate: false, // 是否是固定的履约模板
standedTimeNodeList: [], // 如果是国定随访模板,获取固定数据后不可更改,只读 standedTimeNodeList: [], // 如果是国定履约模板,获取固定数据后不可更改,只读
checkForm: false, checkForm: false,
/*面包屑配置*/ /*面包屑配置*/
curmbFirst: '随访管理', curmbFirst: '履约管理',
curmbSecond: '计划管理', curmbSecond: '计划管理',
curmbThird: '新建随访计划', curmbThird: '新建履约计划',
jumPathThird: '/followUp/plan-manage', jumPathThird: '/followUp/plan-manage',
activeTab: 'first', activeTab: 'first',
resourceId: '',//当前选择的随访模板id resourceId: '',//当前选择的履约模板id
noName: false, noName: false,
noResourceId: false, noResourceId: false,
noTime: false, noTime: false,
noChoice: false, noChoice: false,
baseInfo: { baseInfo: {
name: '',//随访计划名称 name: '',//履约计划名称
patientIdList: [],//随访居民列表 patientIdList: [],//履约居民列表
resourceId:'',//随访模板ID resourceId:'',//履约模板ID
time:'',//随访开始时间 time:'',//履约开始时间
remarksStatus: '', remarksStatus: '',
fPlanTimeReqList: [],//时间节点列表 fPlanTimeReqList: [],//时间节点列表
hasSelectedNum: 0, hasSelectedNum: 0,
...@@ -156,22 +171,26 @@ ...@@ -156,22 +171,26 @@
selectPatientType: 1, selectPatientType: 1,
hasSelectedList: [], hasSelectedList: [],
rules: { rules: {
name: [{ required: true, message: '请输入随访计划名称', trigger: 'blur' }], name: [{ required: true, message: '请输入履约计划名称', trigger: 'blur' }],
hasSelectedNum: [{ required: true, message: '请添加随访居民', trigger: 'change' }], hasSelectedNum: [{ required: true, message: '请添加履约居民', trigger: 'change' }],
resourceId: [{ required: true, message: '请选择随访模板', trigger: 'change' }], resourceId: [{ required: true, message: '请选择履约模板', trigger: 'change' }],
time: [{ required: true, message: '请选择随访开始时间', trigger: 'change' }], time: [{ required: true, message: '请选择履约开始时间', trigger: 'change' }],
}, },
pickerOptions: { pickerOptions: {
disabledDate(time) { disabledDate(time) {
return time.getTime() < Date.now() - 8.64e7 return time.getTime() < Date.now() - 8.64e7
} }
} },
isShowProtocolDialog: false,
isSentedProt: false,
patientIds: [],
sendMsgPatientIds: []
} }
}, },
created() { created() {
// 获取备注 // 获取备注
this.getRemarkOption() this.getRemarkOption()
// 获取随访计划模板列表 // 获取履约计划模板列表
this.getFollowupTemplate() this.getFollowupTemplate()
}, },
computed: { computed: {
...@@ -183,6 +202,54 @@ ...@@ -183,6 +202,54 @@
methods: { methods: {
...mapActions('planManage', ['getTimeNodeList','getRemarkOption','getFollowupTemplate']), ...mapActions('planManage', ['getTimeNodeList','getRemarkOption','getFollowupTemplate']),
// Add by Anndy Yang
// 统一验证:量表内是否存在敏感字段、居民是否签署隐私协议、7天内是否发送过授权短信
uniteValidateAction() {
if(!this.patientIds.length) {
return;
}
let validParams = {
scaleNo: '',
patientIds: this.patientIds, // pc端只传这个字段
// planPatientsTimesId: planPatientsTimesId, // app端只传这个字段
protocolType: 5,
userType: 1,
validateType: 2
};
uniteValidate(validParams).then(res => {
let result = res;
// 请求成功
if (result.code === '000000') {
let levelType = result.data.levelType;
// 没有敏感字段或者居民已经签订过协议,则直接返回
if (levelType === 1 || levelType === 2) {
// return;
} else if (levelType === 3) {
this.isShowProtocolDialog = true;
this.isSentedProt = true;
} else if (levelType === 4) {
this.isShowProtocolDialog = true;
this.isSentedProt = false;
this.sendMsgPatientIds = result.data.ids;
}
}
});
},
// 发送协议授权短信给居民
sendMsgToPatients() {
authMessage({ patientIds: this.sendMsgPatientIds }).then(res => {
if (res.code === '000000') {
this.$message({
message: '已发送,请尽快联系居民同意授权',
type: 'success'
});
}
});
this.isShowProtocolDialog = false;
},
// 点击保存 // 点击保存
saveEdit() { saveEdit() {
// 点击保存,先进行校验,表单字段是否通过验证 // 点击保存,先进行校验,表单字段是否通过验证
...@@ -192,37 +259,43 @@ ...@@ -192,37 +259,43 @@
if(!this.baseInfo.time){ if(!this.baseInfo.time){
this.$refs.beginDate.picker.date = new Date(); this.$refs.beginDate.picker.date = new Date();
} }
}, },
// 监听保存校验结果 // 监听保存校验结果
addListenSave(val){ addListenSave(val){
// console.log('监听保存校验结果',val) // console.log('监听保存校验结果',val)
this.checkForm = false this.checkForm = false
if(val.status){ /* this.patientIds = this.hasSelectedList.map( item => {
this.baseInfo.fPlanTimeReqList = val.setTimeNodeList return item.patientId
// this.baseInfo.time = (new Date(this.baseInfo.time).getTime()) })
// console.log(this.baseInfo.time) this.uniteValidateAction()
// 提交 if(!this.patientIds.length) {
createFollowPlan(this.baseInfo).then(res=>{ return;
if(res.code=='000000'){ }*/
// 各种校验通过后,提交编辑内容,toast提示 if(val.status){
this.$message({ this.baseInfo.fPlanTimeReqList = val.setTimeNodeList
message: '创建成功', // this.baseInfo.time = (new Date(this.baseInfo.time).getTime())
type: 'success' // console.log(this.baseInfo.time)
}); // 提交
setTimeout(()=>{ createFollowPlan(this.baseInfo).then(res=>{
this.$router.push({ if(res.code=='000000'){
path: '/followup/plan-manage/plan-list' // 各种校验通过后,提交编辑内容,toast提示
}) this.$message({
},2000) message: '创建成功',
}else{ type: 'success'
this.$message({ });
message: '创建失败,' + res.message, setTimeout(()=>{
type: 'error' this.$router.push({
}); path: '/followup/plan-manage/plan-list'
} })
}) },2000)
}else{ }else{
this.$message({
message: '创建失败,' + res.message,
type: 'error'
});
}
})
} else {
this.$message({ this.$message({
message: val.message, message: val.message,
type: 'error' type: 'error'
...@@ -246,6 +319,9 @@ ...@@ -246,6 +319,9 @@
this.isShowSelectPatient = getArguments[0]; this.isShowSelectPatient = getArguments[0];
const selectPatients = getArguments[1]; // 每次选中获取的人 const selectPatients = getArguments[1]; // 每次选中获取的人
this.hasSelectedList = selectPatients; this.hasSelectedList = selectPatients;
// this.patientIds = selectPatients.map( item => {
// return item.patientId
// })
// console.log('呵呵呵呵',arguments) // console.log('呵呵呵呵',arguments)
this.baseInfo.patientIdList = []; this.baseInfo.patientIdList = [];
selectPatients.forEach((item)=>{ selectPatients.forEach((item)=>{
...@@ -272,9 +348,21 @@ ...@@ -272,9 +348,21 @@
this.$router.push({path: '/followup/plan-manage/plan-list'}) this.$router.push({path: '/followup/plan-manage/plan-list'})
}); });
}, },
nextClick(formName) { nextClick(formName) {
//为方便调试,不做校验 // 创建/修改履约计划
// this.activeTab = 'second'; // 4、校验居民/医生是否签署协议
this.patientIds = this.hasSelectedList.map( item => {
return item.patientId
})
this.uniteValidateAction();
// if(this.uniteValidateAction() == 1) {
// return;
// };
// return
// 为方便调试,不做校验
// this.activeTab = 'second';
this.$refs[formName].validate((valid) => { this.$refs[formName].validate((valid) => {
//用作校验 //用作校验
if(!this.baseInfo.hasSelectedNum) { if(!this.baseInfo.hasSelectedNum) {
...@@ -284,10 +372,13 @@ ...@@ -284,10 +372,13 @@
this.noChoice = false this.noChoice = false
} }
if (valid) { if (valid) {
// console.log('当前选择的随访模板id为',this.baseInfo.resourceId) // console.log('当前选择的履约模板id为',this.baseInfo.resourceId)
this.resourceId = String(this.baseInfo.resourceId) this.resourceId = String(this.baseInfo.resourceId)
// console.log( this.baseInfo.resourceId) // console.log( this.baseInfo.resourceId)
if(this.baseInfo.resourceId){ if(this.baseInfo.resourceId){
// if(this.uniteValidateAction() == 1) {
// return;
// };
getFollowupTableTemplate(this.baseInfo.resourceId).then(res=>{ getFollowupTableTemplate(this.baseInfo.resourceId).then(res=>{
this.isStandedTemplate = true this.isStandedTemplate = true
this.standedTimeNodeList = res.data this.standedTimeNodeList = res.data
......
...@@ -16,25 +16,25 @@ ...@@ -16,25 +16,25 @@
<div class="base-info" > <div class="base-info" >
<div class="resident-info base-content"> <div class="resident-info base-content">
<div class="content-div"> <div class="content-div">
<div class="c-title">随访计划名称:</div> <div class="c-title">履约计划名称:</div>
<div class="c-content">{{planDetail.name}}</div> <div class="c-content">{{planDetail.name}}</div>
</div> </div>
</div> </div>
<div class="group-info base-content"> <div class="group-info base-content">
<div class="content-div"> <div class="content-div">
<div class="c-title">随访居民:</div> <div class="c-title">履约居民:</div>
<div class="c-content has-operation">{{planDetail.num}}<el-button type="text" @click="goToResidentList">查看居民></el-button></div> <div class="c-content has-operation">{{planDetail.num}}<el-button type="text" @click="goToResidentList">查看居民></el-button></div>
</div> </div>
</div> </div>
<div class="followup-info base-content"> <div class="followup-info base-content">
<div class="content-div"> <div class="content-div">
<div class="c-title">随访模板:</div> <div class="c-title">履约模板:</div>
<div class="c-content">{{planDetail.resourceName}}</div> <div class="c-content">{{planDetail.resourceName}}</div>
</div> </div>
</div> </div>
<div class="followup-info base-content"> <div class="followup-info base-content">
<div class="content-div"> <div class="content-div">
<div class="c-title">随访开始时间:</div> <div class="c-title">履约开始时间:</div>
<div class="c-content has-operation">{{planDetail.timeStr}} <el-button class="btn-text" type="text" @click="goToFollowTime">查看全部></el-button></div> <div class="c-content has-operation">{{planDetail.timeStr}} <el-button class="btn-text" type="text" @click="goToFollowTime">查看全部></el-button></div>
</div> </div>
</div> </div>
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
</div> </div>
</div> </div>
<div class="time-nodes" > <div class="time-nodes" >
<p class="title">随访时间节点</p> <p class="title">履约时间节点</p>
<div class="node-div"> <div class="node-div">
<el-radio-group v-model="timeNodes" size="small"> <el-radio-group v-model="timeNodes" size="small">
<el-radio-button :key="item.id" v-for="item in planDetail.fPlanTimeReqList" :label="item.id">{{item.timeStr}}</el-radio-button> <el-radio-button :key="item.id" v-for="item in planDetail.fPlanTimeReqList" :label="item.id">{{item.timeStr}}</el-radio-button>
...@@ -54,7 +54,7 @@ ...@@ -54,7 +54,7 @@
</div> </div>
<div class="followup-contents" v-if="nodeContent.length"> <div class="followup-contents" v-if="nodeContent.length">
<div class="content-div"> <div class="content-div">
<div class="c-title">随访方式:</div> <div class="c-title">履约方式:</div>
<div class="c-content">{{nodeContent[0].typeStr}}</div> <div class="c-content">{{nodeContent[0].typeStr}}</div>
</div> </div>
<div class="content-div"> <div class="content-div">
...@@ -71,7 +71,7 @@ ...@@ -71,7 +71,7 @@
</div> </div>
</div> </div>
<div class="content-div"> <div class="content-div">
<div class="c-title">随访登记表:</div> <div class="c-title">履约登记表:</div>
<div class="c-content more-content"> <div class="c-content more-content">
<p class="click-text" v-for="item in nodeContent[0].followupList" @click="goToScale(item)">{{item.sendContent}}</p> <p class="click-text" v-for="item in nodeContent[0].followupList" @click="goToScale(item)">{{item.sendContent}}</p>
</div> </div>
...@@ -98,7 +98,7 @@ ...@@ -98,7 +98,7 @@
data() { data() {
return { return {
/*面包屑配置*/ /*面包屑配置*/
curmbFirst: '随访管理', curmbFirst: '履约管理',
curmbSecond: '计划管理', curmbSecond: '计划管理',
curmbThird: '计划详情', curmbThird: '计划详情',
jumPathThird: '/followUp/plan-manage', jumPathThird: '/followUp/plan-manage',
...@@ -114,7 +114,7 @@ ...@@ -114,7 +114,7 @@
}, },
mounted() { mounted() {
this.getPlanDetail(this.$route.query.planId); //获取计划详情 this.getPlanDetail(this.$route.query.planId); //获取计划详情
this.getNodeTimeList(this.$route.query.planId); // 获取随访时间列表 this.getNodeTimeList(this.$route.query.planId); // 获取履约时间列表
}, },
computed: { computed: {
...mapState('planManage', { ...mapState('planManage', {
...@@ -137,7 +137,7 @@ ...@@ -137,7 +137,7 @@
goToResidentList() { goToResidentList() {
let residentCrumb = [ let residentCrumb = [
{ {
name: '随访管理', name: '履约管理',
href: null href: null
}, },
{ {
...@@ -159,7 +159,7 @@ ...@@ -159,7 +159,7 @@
changePlan() { changePlan() {
let planModifyCrumb = [ let planModifyCrumb = [
{ {
name: '随访管理', name: '履约管理',
href: null href: null
}, },
{ {
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<div class="search-div"> <div class="search-div">
<div class="search-input"> <div class="search-input">
<el-form ref="serchForm" :model="searchData" :inline="true" label-suffix=":" label-width="125px" size="small"> <el-form ref="serchForm" :model="searchData" :inline="true" label-suffix=":" label-width="125px" size="small">
<el-form-item label="随访计划名称"> <el-form-item label="履约计划名称">
<el-input v-model="searchData.name" placeholder="请输入关键词" maxlength="20" style="width: 250px" clearable></el-input> <el-input v-model="searchData.name" placeholder="请输入关键词" maxlength="20" style="width: 250px" clearable></el-input>
</el-form-item> </el-form-item>
<el-form-item label="开始年份"> <el-form-item label="开始年份">
...@@ -28,12 +28,12 @@ ...@@ -28,12 +28,12 @@
</div> </div>
</div> </div>
<div class="table-content"> <div class="table-content">
<div class="content-group-btn"><el-button type="primary" size="small" @click="addNewPlan">新建随访计划</el-button></div> <div class="content-group-btn"><el-button type="primary" size="small" @click="addNewPlan">新建履约计划</el-button></div>
<div> <div>
<el-table :data="planList.fPlanDtoList" style="width: 100%;margin-top: 20px;"> <el-table :data="planList.fPlanDtoList" style="width: 100%;margin-top: 20px;">
<el-table-column <el-table-column
prop="name" prop="name"
label="随访计划名称" label="履约计划名称"
min-width="180" min-width="180"
align="left" align="left"
:show-overflow-tooltip="true"> :show-overflow-tooltip="true">
...@@ -81,21 +81,31 @@ ...@@ -81,21 +81,31 @@
</div> </div>
</div> </div>
</div> </div>
<!-- 协议提醒 -->
<el-dialog class="prot-dialog" title="" :visible.sync="isShowProtocolDialog" width="30%" center :show-close=false>
<p class="prot-dialog-tips-1">根据相关规定,在您开展履约之前,需要居民授权同意《云鹊平台隐私协议》,否则将导致履约量表部分信息无法录入</p>
<span slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="isShowProtocolDialog = false"> 我知道了 </el-button>
</span>
</el-dialog>
</div> </div>
</template> </template>
<script> <script>
import BreadCrumb from "@/components/breadcrumb"; import BreadCrumb from "@/components/breadcrumb";
import { mapState, mapActions} from 'vuex' import { mapState, mapActions } from 'vuex'
import {deletePlan, getVerifyStatus} from '@/utils/followup/followapis' import { deletePlan, getVerifyStatus } from '@/utils/followup/followapis'
import { getSaasDomain } from '@/utils/index' import { getSaasDomain } from '@/utils/index'
import { getFirstAccess } from '@/utils/followup/followapis'
// import { messageBox } from '@/utils/utils'
export default { export default {
components:{ components:{
BreadCrumb, BreadCrumb,
}, },
data(){ data(){
return{ return{
curmbFirst: '随访管理', curmbFirst: '履约管理',
curmbSecond: '计划管理', curmbSecond: '计划管理',
searchData: { searchData: {
name: '', name: '',
...@@ -149,6 +159,7 @@ ...@@ -149,6 +159,7 @@
total: 0, total: 0,
pageSizes: [10,20,50,100] pageSizes: [10,20,50,100]
}, },
isShowProtocolDialog: false,
} }
}, },
computed: { computed: {
...@@ -157,14 +168,26 @@ ...@@ -157,14 +168,26 @@
}) })
}, },
created() { created() {
},
mounted() {
this.init(); this.init();
}, },
watch: {}, watch: {},
methods: { methods: {
...mapActions('planManage', ['getPlanList', 'setResidentCrumb', 'setPlanModifyCrumb']), ...mapActions('planManage', ['getPlanList', 'setResidentCrumb', 'setPlanModifyCrumb']),
// 验证是否首次进入 ################
isFirstEnter() {
getFirstAccess().then((res) => {
if(res.code == '000000') {
this.isShowProtocolDialog = res.data
}
});
},
init() { init() {
getVerifyStatus().then((res) => { getVerifyStatus().then((res) => {
if(res.code === '000000') { if(res.code === '000000') {
//认证通过,判断是否首次进入
this.isFirstEnter();
this.search(1); this.search(1);
}else if(res.code === '200008'){ }else if(res.code === '200008'){
this.$confirm(`${res.message}`, '提示', { this.$confirm(`${res.message}`, '提示', {
...@@ -212,7 +235,7 @@ ...@@ -212,7 +235,7 @@
visitRow(row){ visitRow(row){
let residentCrumb = [ let residentCrumb = [
{ {
name: '随访管理', name: '履约管理',
href: null href: null
}, },
{ {
...@@ -230,7 +253,7 @@ ...@@ -230,7 +253,7 @@
changeRow(row){ changeRow(row){
let planModifyCrumb = [ let planModifyCrumb = [
{ {
name: '随访管理', name: '履约管理',
href: null href: null
}, },
{ {
...@@ -278,11 +301,30 @@ ...@@ -278,11 +301,30 @@
filters: {}, filters: {},
} }
</script> </script>
<style lang="scss">
.plan-list-alert {
height: 200px !important;
.el-message-box__content {
padding: 0 35px 20px;
}
.el-message-box__message {
text-align: left;
}
.el-message-box__btns {
.el-button {
width: 200px;
span {
padding: 10px 50px;
}
}
}
}
</style>
<style scoped lang="scss"> <style scoped lang="scss">
@import '../../../style/followup/followup-common'; @import '../../../style/followup/followup-common';
@import '../../../style/followup/element-reset.css'; @import '../../../style/followup/element-reset.css';
.plan-list-wrapper{ .plan-list-wrapper{
.plan-list-content{ .plan-list-content{
.search-input{ .search-input{
......
...@@ -19,25 +19,25 @@ ...@@ -19,25 +19,25 @@
</div> </div>
</div> </div>
<el-form ref="baseInfo" :model="planDetailData" :rules="rules" label-suffix=":" label-width="140px"> <el-form ref="baseInfo" :model="planDetailData" :rules="rules" label-suffix=":" label-width="140px">
<el-form-item label="随访计划名称" prop="name"> <el-form-item label="履约计划名称" prop="name">
<el-input v-model="planDetailData.name" maxlength="20" style="width: 30%" size="small" clearable></el-input> <el-input v-model="planDetailData.name" maxlength="20" style="width: 30%" size="small" clearable></el-input>
</el-form-item> </el-form-item>
<el-form-item label="随访居民" required> <el-form-item label="履约居民" required>
<div class="select-patients"> <div class="select-patients">
<el-button plain icon="el-icon-plus" size="small" @click="selectPatientHandler">{{planDetailData.patientIdList ? '继续添加' : '选择居民'}}</el-button><br> <el-button plain icon="el-icon-plus" size="small" @click="selectPatientHandler">{{planDetailData.patientIdList ? '继续添加' : '选择居民'}}</el-button><br>
<el-button type="text" class="mt10" size="small" @click="seeSelectedHandler" v-if="planDetailData.patientIdList">已选{{hasSelectedList.length}}<i class="el-icon-arrow-right"></i></el-button> <el-button type="text" class="mt10" size="small" @click="seeSelectedHandler" v-if="planDetailData.patientIdList">已选{{hasSelectedList.length}}<i class="el-icon-arrow-right"></i></el-button>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="随访模板" prop="resourceName"> <el-form-item label="履约模板" prop="resourceName">
{{planDetailData.resourceName}} {{planDetailData.resourceName}}
</el-form-item> </el-form-item>
<el-form-item label="随访开始时间" prop="timeStr"> <el-form-item label="履约开始时间" prop="timeStr">
{{planDetailData.timeStr}} <el-button class="btn-text" type="text" @click="goToFollowTime" size="small">查看全部></el-button> {{planDetailData.timeStr}} <el-button class="btn-text" type="text" @click="goToFollowTime" size="small">查看全部></el-button>
</el-form-item> </el-form-item>
<el-form-item label="备注"> <el-form-item label="备注">
<el-select <el-select
v-model="planDetailData.remarksStatus" v-model="planDetailData.remarksStatus"
placeholder="请选择随访种类" placeholder="请选择履约种类"
size="small" size="small"
:popper-append-to-body="false" :popper-append-to-body="false"
clearable> clearable>
...@@ -91,7 +91,7 @@ ...@@ -91,7 +91,7 @@
import FollowTime from '@/views/followup/plan-manage/dialog/follow-time'; import FollowTime from '@/views/followup/plan-manage/dialog/follow-time';
import {createFollowPlan} from '@/utils/followup/followapis' import {createFollowPlan} from '@/utils/followup/followapis'
//添加居民选择随访时间 //添加居民选择履约时间
import addPatientTime from '@/views/followup/plan-manage/dialog/add-patient-time'; import addPatientTime from '@/views/followup/plan-manage/dialog/add-patient-time';
import { mapState, mapActions } from 'vuex' import { mapState, mapActions } from 'vuex'
...@@ -111,27 +111,27 @@ ...@@ -111,27 +111,27 @@
setTimeNodeList: [], setTimeNodeList: [],
planDetailData: {}, planDetailData: {},
planId: '', planId: '',
isStandedTemplate: false, // 是否是固定的随访模板 isStandedTemplate: false, // 是否是固定的履约模板
standedTimeNodeList: [], // 如果是国定随访模板,获取固定数据后不可更改,只读 standedTimeNodeList: [], // 如果是国定履约模板,获取固定数据后不可更改,只读
checkForm: false, checkForm: false,
patientIdList: [], //获取的病人列表 patientIdList: [], //获取的病人列表
hasSelectedList: [], //已选居民 hasSelectedList: [], //已选居民
planModifyCrumb: [], //面包屑 planModifyCrumb: [], //面包屑
rules: { rules: {
name: [{ required: true, message: '请输入随访计划名称', trigger: 'blur' }], name: [{ required: true, message: '请输入履约计划名称', trigger: 'blur' }],
followupTemplate: [{ required: true, message: '请选择随访模板', trigger: 'change' }], followupTemplate: [{ required: true, message: '请选择履约模板', trigger: 'change' }],
startTime: [{ required: true, message: '请选择随访开始时间', trigger: 'change' }], startTime: [{ required: true, message: '请选择履约开始时间', trigger: 'change' }],
}, },
templateOptions: [ templateOptions: [
{ {
value: '0', value: '0',
label: '随访模板一' label: '履约模板一'
}, { }, {
value: '1', value: '1',
label: '随访模板二' label: '履约模板二'
}, { }, {
value: '2', value: '2',
label: '随访模板三' label: '履约模板三'
} }
], ],
isShowSelectPatient: false, //显示居民选择框 isShowSelectPatient: false, //显示居民选择框
...@@ -153,7 +153,7 @@ ...@@ -153,7 +153,7 @@
this.planId = String(this.$route.query.planId) this.planId = String(this.$route.query.planId)
this.getPlanDetail(this.$route.query.planId); //获取计划详情 this.getPlanDetail(this.$route.query.planId); //获取计划详情
this.getRemarkOption() this.getRemarkOption()
this.getNodeTimeList(this.$route.query.planId); // 获取随访时间列表 this.getNodeTimeList(this.$route.query.planId); // 获取履约时间列表
let planModifyCrumbList = sessionStorage.getItem('planModifyCrumb'); let planModifyCrumbList = sessionStorage.getItem('planModifyCrumb');
this.planModifyCrumb = JSON.parse(planModifyCrumbList); this.planModifyCrumb = JSON.parse(planModifyCrumbList);
...@@ -218,6 +218,7 @@ ...@@ -218,6 +218,7 @@
id: this.$route.query.planId, id: this.$route.query.planId,
addPatients: true, addPatients: true,
patientNames: showNames, patientNames: showNames,
patientIdList: newIds,
} }
} else { } else {
this.hasSelectedList = JSON.parse(JSON.stringify(this.newHasSelectedList)); this.hasSelectedList = JSON.parse(JSON.stringify(this.newHasSelectedList));
......
...@@ -13,8 +13,8 @@ ...@@ -13,8 +13,8 @@
<div class="title"><p>基本信息</p></div> <div class="title"><p>基本信息</p></div>
<div class="h-btn"> <div class="h-btn">
<el-button class="button-white" plain size="small" @click="changePlan">计划变更</el-button> <el-button class="button-white" plain size="small" @click="changePlan">计划变更</el-button>
<el-button v-if="status==3" class="button-white" plain size="small" @click="finishFollowup">恢复随访</el-button> <el-button v-if="status==3" class="button-white" plain size="small" @click="finishFollowup">恢复履约</el-button>
<el-button v-else class="button-white" plain size="small" @click="finishFollowup">结束随访</el-button> <el-button v-else class="button-white" plain size="small" @click="finishFollowup">结束履约</el-button>
</div> </div>
</div> </div>
<div class="base-info"> <div class="base-info">
...@@ -48,11 +48,11 @@ ...@@ -48,11 +48,11 @@
</div> </div>
<div class="followup-info base-content"> <div class="followup-info base-content">
<div class="content-div"> <div class="content-div">
<div class="c-title">随访模板:</div> <div class="c-title">履约模板:</div>
<div class="c-content">{{planDetails.resourceName}}</div> <div class="c-content">{{planDetails.resourceName}}</div>
</div> </div>
<div class="content-div"> <div class="content-div">
<div class="c-title">随访开始时间:</div> <div class="c-title">履约开始时间:</div>
<div class="c-content">{{planDetails.timeStr}}</div> <div class="c-content">{{planDetails.timeStr}}</div>
</div> </div>
<div class="content-div"> <div class="content-div">
...@@ -60,13 +60,13 @@ ...@@ -60,13 +60,13 @@
<div class="c-content">{{planDetails.remarksStatusStr}}</div> <div class="c-content">{{planDetails.remarksStatusStr}}</div>
</div> </div>
<div class="content-div"> <div class="content-div">
<div class="c-title">随访状态:</div> <div class="c-title">履约状态:</div>
<div class="c-content">{{planDetails.statusStr}}</div> <div class="c-content">{{planDetails.statusStr}}</div>
</div> </div>
</div> </div>
</div> </div>
<div class="time-nodes"> <div class="time-nodes">
<p class="title">随访时间节点</p> <p class="title">履约时间节点</p>
<div class="node-div"> <div class="node-div">
<el-radio-group v-model="timeNodes" size="small"> <el-radio-group v-model="timeNodes" size="small">
<el-radio-button :key="item.id" v-for="item in timeNodeList" :label="item.id">{{item.timeStr}}</el-radio-button> <el-radio-button :key="item.id" v-for="item in timeNodeList" :label="item.id">{{item.timeStr}}</el-radio-button>
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
</div> </div>
<div class="followup-contents"> <div class="followup-contents">
<div class="content-div"> <div class="content-div">
<div class="c-title">随访方式:</div> <div class="c-title">履约方式:</div>
<div class="c-content">{{nodeContent.typeStr}}</div> <div class="c-content">{{nodeContent.typeStr}}</div>
</div> </div>
<div class="content-div"> <div class="content-div">
...@@ -91,7 +91,7 @@ ...@@ -91,7 +91,7 @@
</div> </div>
</div> </div>
<div class="content-div"> <div class="content-div">
<div class="c-title">随访登记表:</div> <div class="c-title">履约登记表:</div>
<div class="c-content more-content"> <div class="c-content more-content">
<p class="click-text" v-for="item in nodeContent.followupList" @click="goToScale(item)" >{{item.sendContent}}</p> <p class="click-text" v-for="item in nodeContent.followupList" @click="goToScale(item)" >{{item.sendContent}}</p>
</div> </div>
...@@ -107,7 +107,7 @@ ...@@ -107,7 +107,7 @@
<script> <script>
//变更计划dialog //变更计划dialog
import ChangePlan from '@/views/followup/plan-manage/dialog/change-plan'; import ChangePlan from '@/views/followup/plan-manage/dialog/change-plan';
//结束随访dialog //结束履约dialog
import FinishFollowup from '@/views/followup/plan-manage/dialog/finish-followup'; import FinishFollowup from '@/views/followup/plan-manage/dialog/finish-followup';
import { mapState, mapActions } from 'vuex' import { mapState, mapActions } from 'vuex'
...@@ -120,14 +120,14 @@ ...@@ -120,14 +120,14 @@
data() { data() {
return { return {
/*面包屑配置*/ /*面包屑配置*/
curmbFirst: '随访管理', curmbFirst: '履约管理',
curmbSecond: '计划管理', curmbSecond: '计划管理',
curmbThird: '查看居民', curmbThird: '查看居民',
jumPathThird: '/followUp/plan-manage', jumPathThird: '/followUp/plan-manage',
/*面包屑配置*/ /*面包屑配置*/
timeNodes: 0,//时间节点 timeNodes: 0,//时间节点
showChangePlan: false,//是否展示变更计划 showChangePlan: false,//是否展示变更计划
showFinishFollowup: false, //是否展示结束随访, showFinishFollowup: false, //是否展示结束履约,
planChangeData: {}, //变更信息 planChangeData: {}, //变更信息
finishData: {}, //结束信息 finishData: {}, //结束信息
planDetails: {}, //计划详情 planDetails: {}, //计划详情
...@@ -185,7 +185,7 @@ ...@@ -185,7 +185,7 @@
planId: this.residentDetail.fPlanDto.id, planId: this.residentDetail.fPlanDto.id,
patientName: this.residentDetail.patientName, patientName: this.residentDetail.patientName,
patientIdList: patientIdList, patientIdList: patientIdList,
title: this.status==3?'恢复随访':'结束随访', title: this.status==3?'恢复履约':'结束履约',
reasonName: this.status==3?'恢复原因:':'结束原因:', reasonName: this.status==3?'恢复原因:':'结束原因:',
planPatientsIdList: planPatientsIdList planPatientsIdList: planPatientsIdList
} }
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="resident-list"> <div class="resident-list">
<div class="bread-crumb"> <div class="bread-crumb">
<el-breadcrumb separator="/" > <el-breadcrumb separator="/" >
<el-breadcrumb-item v-for="item in residentCrumb"> <el-breadcrumb-item v-for="(item, index) in residentCrumb" :key="index">
<a v-if="item.href" :href="item.href">{{item.name}}</a> <a v-if="item.href" :href="item.href">{{item.name}}</a>
<span v-else >{{item.name}}</span> <span v-else >{{item.name}}</span>
</el-breadcrumb-item> </el-breadcrumb-item>
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="随访开始时间:" prop="startDate" size="small"> <el-form-item label="履约开始时间:" prop="startDate" size="small">
<el-select v-model="searchData.startDate" size="small" clearable :popper-append-to-body="false"> <el-select v-model="searchData.startDate" size="small" clearable :popper-append-to-body="false">
<el-option label="全部" value=""></el-option> <el-option label="全部" value=""></el-option>
<el-option <el-option
...@@ -56,8 +56,8 @@ ...@@ -56,8 +56,8 @@
<el-radio-button label="3">已结束({{residentList.yesCount}})</el-radio-button> <el-radio-button label="3">已结束({{residentList.yesCount}})</el-radio-button>
</el-radio-group> </el-radio-group>
<div class="btn-left"> <div class="btn-left">
<el-button class="button-white" plain size="small" v-if="status==3" @click="finishFollowup('all')">恢复随访</el-button> <el-button class="button-white" plain size="small" v-if="status==3" @click="finishFollowup('all')">恢复履约</el-button>
<el-button class="button-white" plain size="small" v-else @click="finishFollowup('all')">结束随访</el-button> <el-button class="button-white" plain size="small" v-else @click="finishFollowup('all')">结束履约</el-button>
<el-button class="button-green" type="primary" size="small" @click="selectPatientHandler">添加居民</el-button> <el-button class="button-green" type="primary" size="small" @click="selectPatientHandler">添加居民</el-button>
</div> </div>
</div> </div>
...@@ -94,7 +94,7 @@ ...@@ -94,7 +94,7 @@
<el-table-column <el-table-column
width="160" width="160"
prop="time" prop="time"
label="随访开始时间" label="履约开始时间"
align="center"> align="center">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
...@@ -109,8 +109,8 @@ ...@@ -109,8 +109,8 @@
align="center"> align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button class="btn-right-class" type="text" @click="changePlan(scope.row)" >变更计划</el-button>| <el-button class="btn-right-class" type="text" @click="changePlan(scope.row)" >变更计划</el-button>|
<el-button class="btn-right-class" type="text" v-if="status==3" @click="finishFollowup(scope.row)" >恢复随访</el-button> <el-button class="btn-right-class" type="text" v-if="status==3" @click="finishFollowup(scope.row)" >恢复履约</el-button>
<el-button class="btn-right-class" type="text" v-else @click="finishFollowup(scope.row)" >结束随访</el-button> <el-button class="btn-right-class" type="text" v-else @click="finishFollowup(scope.row)" >结束履约</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -142,19 +142,20 @@ ...@@ -142,19 +142,20 @@
<add-patient-time <add-patient-time
:showThisPage="showAddPatientTime" :showThisPage="showAddPatientTime"
:addPatientData="addPatientData" :addPatientData="addPatientData"
@closeAddPatientTime="closeAddPatientTime"></add-patient-time> @closeAddPatientTime="closeAddPatientTime">
</add-patient-time>
</div> </div>
</template> </template>
<script> <script>
//变更计划dialog //变更计划dialog
import ChangePlan from '@/views/followup/plan-manage/dialog/change-plan'; import ChangePlan from '@/views/followup/plan-manage/dialog/change-plan';
//结束随访dialog //结束履约dialog
import FinishFollowup from '@/views/followup/plan-manage/dialog/finish-followup'; import FinishFollowup from '@/views/followup/plan-manage/dialog/finish-followup';
//添加居民 //添加居民
// import SelectPatient from '@/views/followup/plan-manage/dialog/select-patient'; // import SelectPatient from '@/views/followup/plan-manage/dialog/select-patient';
import SelectPatient from '@/views/patients/labels-manage/dialog/select-patitents'; import SelectPatient from '@/views/patients/labels-manage/dialog/select-patitents';
//添加居民选择随访时间 //添加居民选择履约时间
import addPatientTime from '@/views/followup/plan-manage/dialog/add-patient-time'; import addPatientTime from '@/views/followup/plan-manage/dialog/add-patient-time';
import { mapState, mapActions } from 'vuex' import { mapState, mapActions } from 'vuex'
...@@ -180,16 +181,16 @@ ...@@ -180,16 +181,16 @@
status: 1, //列表筛选条件 status: 1, //列表筛选条件
showChangePlan: false,//是否展示变更计划 showChangePlan: false,//是否展示变更计划
planChangeData: {}, //变更计划数据 planChangeData: {}, //变更计划数据
showFinishFollowup: false, //是否展示结束随访 showFinishFollowup: false, //是否展示结束履约
finishData: {}, //结束数据 finishData: {}, //结束数据
isShowSelectPatient: false, //显示居民选择框 isShowSelectPatient: false, //显示居民选择框
hasSelectedList: [], //已选居民 hasSelectedList: [], //已选居民
finishPatientList: [], //结束随访居民(多选) finishPatientList: [], //结束履约居民(多选)
initialPatientIdList: [], //初始居民 initialPatientIdList: [], //初始居民
showAddPatientTime: false,//是否展示添加居民选择时间 showAddPatientTime: false,//是否展示添加居民选择时间
addPatientData: {}, //选择时间数据 addPatientData: {}, //选择时间数据
statusTotal: null, //每种状态的总数 statusTotal: null, //每种状态的总数
planTitle: '', //随访计划名称 planTitle: '', //履约计划名称
residentCrumb: [], //面包屑 residentCrumb: [], //面包屑
selectPatientType: 1, selectPatientType: 1,
getRowKeys(row) { getRowKeys(row) {
...@@ -207,7 +208,7 @@ ...@@ -207,7 +208,7 @@
}); });
this.getPlanStatusOption() this.getPlanStatusOption()
this.getGroupList(); //获取分组列表 this.getGroupList(); //获取分组列表
this.getFollowStartTimeList(this.$route.query.planId);// 获取随访时间列表 this.getFollowStartTimeList(this.$route.query.planId);// 获取履约时间列表
let residentCrumbList = sessionStorage.getItem('residentCrumb'); let residentCrumbList = sessionStorage.getItem('residentCrumb');
residentCrumbList = JSON.parse(residentCrumbList); residentCrumbList = JSON.parse(residentCrumbList);
if(residentCrumbList.length==4&&residentCrumbList[residentCrumbList.length-1].name!='查看居民') { if(residentCrumbList.length==4&&residentCrumbList[residentCrumbList.length-1].name!='查看居民') {
...@@ -264,7 +265,7 @@ ...@@ -264,7 +265,7 @@
if(this.residentCrumb.length === 3) { if(this.residentCrumb.length === 3) {
residentCrumbs = [ residentCrumbs = [
{ {
name: '随访管理', name: '履约管理',
href: null href: null
}, },
{ {
...@@ -283,7 +284,7 @@ ...@@ -283,7 +284,7 @@
} else if(this.residentCrumb.length === 4) { } else if(this.residentCrumb.length === 4) {
residentCrumbs = [ residentCrumbs = [
{ {
name: '随访管理', name: '履约管理',
href: null href: null
}, },
{ {
...@@ -372,7 +373,7 @@ ...@@ -372,7 +373,7 @@
planId: this.$route.query.planId, planId: this.$route.query.planId,
patientName: patientNames, patientName: patientNames,
patientIdList: patientIds, patientIdList: patientIds,
title: this.status==3?'恢复随访':'结束随访', title: this.status==3?'恢复履约':'结束履约',
reasonName: this.status==3?'恢复原因:':'结束原因:', reasonName: this.status==3?'恢复原因:':'结束原因:',
planPatientsIdList:planPatientsIdList planPatientsIdList:planPatientsIdList
}; };
...@@ -386,7 +387,7 @@ ...@@ -386,7 +387,7 @@
planId: this.$route.query.planId, planId: this.$route.query.planId,
patientName: row.patientName, patientName: row.patientName,
patientIdList: patientIds, patientIdList: patientIds,
title: this.status==3?'恢复随访':'结束随访', title: this.status==3?'恢复履约':'结束履约',
reasonName: this.status==3?'恢复原因:':'结束原因:', reasonName: this.status==3?'恢复原因:':'结束原因:',
planPatientsIdList: planPatientsIdList planPatientsIdList: planPatientsIdList
}; };
...@@ -417,6 +418,8 @@ ...@@ -417,6 +418,8 @@
patientIds.push(item.patientId) patientIds.push(item.patientId)
patientNames.push(item.nickname) patientNames.push(item.nickname)
}) })
// 将选择的patientIds存入Store中
if(patientNames.length>5) { if(patientNames.length>5) {
const le = patientNames.length const le = patientNames.length
patientNames = patientNames.slice(0,5) patientNames = patientNames.slice(0,5)
......
<template> <template>
<div class="dialog-wrap"> <div class="dialog-wrap">
<el-dialog <el-dialog
title="变更随访状态" title="变更履约状态"
:visible.sync="dialogFormVisible" :visible.sync="dialogFormVisible"
v-if="isShowChangeDialog" v-if="isShowChangeDialog"
center center
...@@ -73,9 +73,9 @@ ...@@ -73,9 +73,9 @@
reason: this.statusForm.reason, reason: this.statusForm.reason,
}).then(({data}) => { }).then(({data}) => {
if(data == 2) { if(data == 2) {
this.$message.success('随访状态变更成功!'); this.$message.success('履约状态变更成功!');
}else { }else {
this.$message.error('随访状态变更失败!'); this.$message.error('履约状态变更失败!');
} }
this.$emit('closeChangeStatus',false); this.$emit('closeChangeStatus',false);
this.$refs['statusForm'].resetFields(); this.$refs['statusForm'].resetFields();
......
<template> <template>
<el-dialog title="本次随访详情" <el-dialog title="本次履约详情"
:visible.sync="dialogDetail" :visible.sync="dialogDetail"
v-if="dialogFormVisible" v-if="dialogFormVisible"
center center
...@@ -36,36 +36,36 @@ ...@@ -36,36 +36,36 @@
<div class="base-info pt10"> <div class="base-info pt10">
<div class="base-content"> <div class="base-content">
<div class="content-div"> <div class="content-div">
<div class="c-title">随访计划名称:</div> <div class="c-title">履约计划名称:</div>
<div class="c-content">{{enteringInfo.name | emptyFileter}}</div> <div class="c-content">{{enteringInfo.name | emptyFileter}}</div>
</div> </div>
</div> </div>
<div class="group-info base-content"> <div class="group-info base-content">
<div class="content-div"> <div class="content-div">
<div class="c-title">随访时间点:</div> <div class="c-title">履约时间点:</div>
<div class="c-content" v-if="enteringInfo.timeNo">{{enteringInfo.timeNo}}随访</div> <div class="c-content" v-if="enteringInfo.timeNo">{{enteringInfo.timeNo}}履约</div>
<div class="c-content" v-else>{{enteringInfo.timeNo | emptyFileter}}</div> <div class="c-content" v-else>{{enteringInfo.timeNo | emptyFileter}}</div>
</div> </div>
<div class="content-div"> <div class="content-div">
<div class="c-title">随访方式:</div> <div class="c-title">履约方式:</div>
<div class="c-content">{{enteringInfo.fuPlanType | emptyFileter}}</div> <div class="c-content">{{enteringInfo.fuPlanType | emptyFileter}}</div>
</div> </div>
<div class="content-div" v-if="enteringInfo.executePlanTime"> <div class="content-div" v-if="enteringInfo.executePlanTime">
<div class="c-title">实际随访时间:</div> <div class="c-title">实际履约时间:</div>
<div class="c-content">{{enteringInfo.executePlanTime}}</div> <div class="c-content">{{enteringInfo.executePlanTime}}</div>
</div> </div>
<div class="content-div" v-else> <div class="content-div" v-else>
<div class="c-title">计划随访时间:</div> <div class="c-title">计划履约时间:</div>
<div class="c-content">{{enteringInfo.fuPlanTime}}</div> <div class="c-content">{{enteringInfo.fuPlanTime}}</div>
</div> </div>
<div class="content-div"> <div class="content-div">
<div class="c-title">预约随访时间:</div> <div class="c-title">预约履约时间:</div>
<div class="c-content">{{enteringInfo.appointmentTime | emptyFileter}}</div> <div class="c-content">{{enteringInfo.appointmentTime | emptyFileter}}</div>
</div> </div>
</div> </div>
<div class="group-info base-content flex-start"> <div class="group-info base-content flex-start">
<div class="content-div"> <div class="content-div">
<div class="c-title">随访状态:</div> <div class="c-title">履约状态:</div>
<div class="c-content">{{enteringInfo.status | emptyFileter}}</div> <div class="c-content">{{enteringInfo.status | emptyFileter}}</div>
</div> </div>
<div class="content-div"> <div class="content-div">
...@@ -100,7 +100,7 @@ ...@@ -100,7 +100,7 @@
</div> </div>
<div class="base-info console-list"> <div class="base-info console-list">
<div class="list-item"> <div class="list-item">
<p class="title">随访登记表</p> <p class="title">履约登记表</p>
</div> </div>
<div class="list-item" v-for="(item, index) in enteringInfo.fuTable" :key="index" v-if="enteringInfo.fuTable.length>0"> <div class="list-item" v-for="(item, index) in enteringInfo.fuTable" :key="index" v-if="enteringInfo.fuTable.length>0">
<p class="link-p" @click="goToScale(item)">{{item.name}}</p> <p class="link-p" @click="goToScale(item)">{{item.name}}</p>
......
<template>
<div class="form-show-scrollY">
<div class="form-template">
<BreadCrumb
:curmbFirst="'履约管理'"
:curmbSecond="breadTxt"
:curmbThird="'录入量表'"
:jumPathThird="jumPathThird"
/>
<div class="resident-content f-main-content screenSet">
<el-row :gutter="24" align="middle" type="flex" class="form-header">
<el-col :span="18">{{titleText}}</el-col>
<el-col :span="6" v-if="showBtn=='1'">
<el-button type="primary" size="small" class="formSubmit" @click="formSubmit(1)">提交</el-button>
<el-button class="button-white formTempSave" size="small" plain @click="formSubmit(2)">暂存</el-button>
</el-col>
</el-row>
<div class="title-box">
<h1>{{titleText}}</h1>
<h2>{{titleSmText}}</h2>
</div>
<!--模板页面除了显示居民基本信息,将病种展示作为组件引入-->
<div class="form-container">
<!--脑卒中-->
<stroke v-if="scaleNo=='SCALE0003'" :showBtn="showBtn" :scaleType="scaleNo" :checkStart="checkStart" @checkEnd="checkEnd" :saveWay="saveWay" />
<!--高血压-->
<hypertension v-if="scaleNo=='SCALE0001'" :showBtn="showBtn" :scaleType="scaleNo" :checkStart="checkStart" @checkEnd="checkEnd" :saveWay="saveWay" ></hypertension>
<!--糖尿病-->
<diabetes v-if="scaleNo=='SCALE0002'" :showBtn="showBtn" :scaleType="scaleNo" :checkStart="checkStart" @checkEnd="checkEnd" :saveWay="saveWay" ></diabetes>
</div>
</div>
</div>
</div>
</template>
<script>
import BreadCrumb from '@/components/breadcrumb'
// 脑卒中
import stroke from './patient-scale/stroke'
import hypertension from './patient-scale/hypertension'
import diabetes from './patient-scale/diabetes'
export default {
data(){
return {
titleText: '',
titleSmText: '',
breadTxt: '录入管理',
jumPathThird: '/followup/record-manage/record-list',
checkStart: false,
showBtn: '1',
// resourceId: '',
saveWay: 1,
scaleNo: ''
}
},
components: {
stroke,
hypertension,
BreadCrumb,
diabetes,
},
methods: {
formSubmit(val){
this.saveWay = val
this.checkStart = true;
},
checkEnd(val){
this.checkStart = false
}
},
created(){
this.scaleNo = this.$route.query.scaleNo;
console.log('scaleNo=>',this.scaleNo)
// 0003 脑卒中、0002 糖尿病、0001 高血压
if(this.scaleNo == 'SCALE0003'){
this.titleText = '心脑血管病危险因素社区、乡镇人群履约表';
this.titleSmText = '(适用于社区、乡镇脑卒中高危人群满6个月、12个月时履约和中危人群满12个月时履约使用)';
}else if(this.scaleNo == 'SCALE0001'){
this.titleText = '高血压患者履约服务记录表';
this.titleSmText = '(本表为高血压患者在接受履约服务时由医生填写)';
}else if(this.scaleNo == 'SCALE0002'){
this.titleText = '2 型糖尿病患者履约服务记录表 ';
this.titleSmText = '(本表为2型糖尿病患者在接受履约服务时由医生填写)';
}
if(this.$route.query.showBtn=='0'){
this.showBtn = String(this.$route.query.showBtn);
}
},
}
</script>
<style lang="scss" scoped>
@import '../../../style/followup/followup-common';
@import '../../../style/followup/element-reset.css';
.form-show-scrollY{
width: 100%; height: 100%; overflow: hidden; overflow-y: scroll;
&::-webkit-scrollbar{
width: 8px; height: 8px;
background: #fff;
}
}
.form-template{
.form-header{
/*position: fixed;*/
/*z-index:100000;*/
line-height: 60px;
height: 60px;
border-bottom: 1px solid #e1e1e1;
}
.patient-base-info{
line-height: 60px;
height: 60px;
border-bottom: 1px dashed #ccc;
[class*=el-col-]{
float: left;
}
}
.title-box{
padding: 20px;
text-align: center;
h1{
font-size: 18px;
font-weight: normal;
}
h2{
font-size: 16px;
font-weight: normal;
margin-top: 15px;
}
}
.formSubmit{
float: right;
margin-left: 10px;
}
.formTempSave{
float: right;
}
.form-container{
padding: 0 10px;
}
}
.title{
font-weight: bold;
}
</style>
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
<div class="form-show-scrollY"> <div class="form-show-scrollY">
<div class="form-template"> <div class="form-template">
<BreadCrumb <BreadCrumb
:curmbFirst="'随访管理'" :curmbFirst="'履约管理'"
:curmbSecond="breadTxt" :curmbSecond="breadTxt"
:curmbThird="'录入量表'" :curmbThird="'录入量表'"
:jumPathThird="jumPathThird" :jumPathThird="jumPathThird"
...@@ -32,8 +32,6 @@ ...@@ -32,8 +32,6 @@
<!--糖尿病--> <!--糖尿病-->
<diabetes v-if="scaleNo=='SCALE0002'" :showBtn="showBtn" :scaleType="scaleNo" :checkStart="checkStart" @checkEnd="checkEnd" :saveWay="saveWay" ></diabetes> <diabetes v-if="scaleNo=='SCALE0002'" :showBtn="showBtn" :scaleType="scaleNo" :checkStart="checkStart" @checkEnd="checkEnd" :saveWay="saveWay" ></diabetes>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
...@@ -54,7 +52,7 @@ ...@@ -54,7 +52,7 @@
breadTxt: '录入管理', breadTxt: '录入管理',
jumPathThird: '/followup/record-manage/record-list', jumPathThird: '/followup/record-manage/record-list',
checkStart: false, checkStart: false,
showBtn: '1', showBtn: '1', //值为0隐藏右上角按钮,值为1显示按钮
// resourceId: '', // resourceId: '',
saveWay: 1, saveWay: 1,
scaleNo: '' scaleNo: ''
...@@ -80,14 +78,14 @@ ...@@ -80,14 +78,14 @@
console.log('scaleNo=>',this.scaleNo) console.log('scaleNo=>',this.scaleNo)
// 0003 脑卒中、0002 糖尿病、0001 高血压 // 0003 脑卒中、0002 糖尿病、0001 高血压
if(this.scaleNo == 'SCALE0003'){ if(this.scaleNo == 'SCALE0003'){
this.titleText = '心脑血管病危险因素社区、乡镇人群随访表'; this.titleText = '心脑血管病危险因素社区、乡镇人群履约表';
this.titleSmText = '(适用于社区、乡镇脑卒中高危人群满6个月、12个月时随访和中危人群满12个月时随访使用)'; this.titleSmText = '(适用于社区、乡镇脑卒中高危人群满6个月、12个月时履约和中危人群满12个月时履约使用)';
}else if(this.scaleNo == 'SCALE0001'){ }else if(this.scaleNo == 'SCALE0001'){
this.titleText = '高血压患者随访服务记录表'; this.titleText = '高血压患者履约服务记录表';
this.titleSmText = '(本表为高血压患者在接受随访服务时由医生填写)'; this.titleSmText = '(本表为高血压患者在接受履约服务时由医生填写)';
}else if(this.scaleNo == 'SCALE0002'){ }else if(this.scaleNo == 'SCALE0002'){
this.titleText = '2 型糖尿病患者随访服务记录表 '; this.titleText = '2 型糖尿病患者履约服务记录表 ';
this.titleSmText = '(本表为2型糖尿病患者在接受随访服务时由医生填写)'; this.titleSmText = '(本表为2型糖尿病患者在接受履约服务时由医生填写)';
} }
if(this.$route.query.showBtn=='0'){ if(this.$route.query.showBtn=='0'){
this.showBtn = String(this.$route.query.showBtn); this.showBtn = String(this.$route.query.showBtn);
......
...@@ -3,7 +3,6 @@ import { checkRange, checkIsInteger, checkNumberIsToFixed, checkNumberIsToFixedT ...@@ -3,7 +3,6 @@ import { checkRange, checkIsInteger, checkNumberIsToFixed, checkNumberIsToFixedT
export default ($this) => { export default ($this) => {
let hanldeValue = () => { let hanldeValue = () => {
$this.addComponents.forEach((item,index)=>{ $this.addComponents.forEach((item,index)=>{
if(item.name == 'diabetesSourseAuxiliary'){ if(item.name == 'diabetesSourseAuxiliary'){
const glycosylatedHemoglobinPercent = item.formObject.glycosylatedHemoglobinPercent const glycosylatedHemoglobinPercent = item.formObject.glycosylatedHemoglobinPercent
const glycosylatedHemoglobinDate = item.formObject.glycosylatedHemoglobinDate const glycosylatedHemoglobinDate = item.formObject.glycosylatedHemoglobinDate
......
...@@ -8,7 +8,7 @@ export default ($this) => { ...@@ -8,7 +8,7 @@ export default ($this) => {
prop: 'name', prop: 'name',
model: 'name', model: 'name',
label: '姓名:', label: '姓名:',
disabled: false, disabled: true,
placeholder: '请输入姓名', placeholder: '请输入姓名',
spanNum: 12, spanNum: 12,
maxlength: 30, maxlength: 30,
...@@ -37,12 +37,12 @@ export default ($this) => { ...@@ -37,12 +37,12 @@ export default ($this) => {
prop: 'followupDate', prop: 'followupDate',
model: 'followupDate', model: 'followupDate',
placeholder: '请选择', placeholder: '请选择',
label: '随访日期:', label: '履约日期:',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd', valueFormat: 'yyyy-MM-dd',
dateType: 'date', dateType: 'date',
type: 'date', type: 'date',
rules: [{required: true, message: '请选择随访日期', trigger: ['submit','change']}], rules: [{required: true, message: '请选择履约日期', trigger: ['submit','change']}],
spanNum: 12, spanNum: 12,
}, },
...@@ -52,13 +52,13 @@ export default ($this) => { ...@@ -52,13 +52,13 @@ export default ($this) => {
prop: 'followupType', prop: 'followupType',
model: 'followupType', model: 'followupType',
spanNum: 24, spanNum: 24,
label: '随访方式:', label: '履约方式:',
options: [ options: [
{ label: '门诊', value: '门诊' }, { label: '门诊', value: '门诊' },
{ label: '家庭', value: '家庭' }, { label: '家庭', value: '家庭' },
{ label: '电话', value: '电话' }, { label: '电话', value: '电话' },
], ],
rules: [{ required: true, message: '请选择随访方式', trigger: ['submit','change'] }], rules: [{ required: true, message: '请选择履约方式', trigger: ['submit','change'] }],
changeFun: (e)=>{ changeFun: (e)=>{
} }
}, },
......
...@@ -24,14 +24,14 @@ export default ($this) => { ...@@ -24,14 +24,14 @@ export default ($this) => {
prop: 'nextSmokingAmount', prop: 'nextSmokingAmount',
model: 'nextSmokingAmount', model: 'nextSmokingAmount',
disabled: false, disabled: false,
label: '下次随访目标日吸烟量:', label: '下次履约目标日吸烟量:',
placeholder: '请输入下次随访日吸烟量', placeholder: '请输入下次履约日吸烟量',
spanNum: 8, spanNum: 8,
maxlength: 30, maxlength: 30,
type: 'number', type: 'number',
labmsg: '', labmsg: '',
slots: [{name: '支/日', type: 'append'}], slots: [{name: '支/日', type: 'append'}],
rules: [{ required: true, message: '请输入下次随访日吸烟量', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }] rules: [{ required: true, message: '请输入下次履约日吸烟量', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }]
}, },
{ {
formType: 'input', formType: 'input',
...@@ -54,14 +54,14 @@ export default ($this) => { ...@@ -54,14 +54,14 @@ export default ($this) => {
prop: 'nextAlcoholConsumption', prop: 'nextAlcoholConsumption',
model: 'nextAlcoholConsumption', model: 'nextAlcoholConsumption',
disabled: false, disabled: false,
label: '下次随访目标日饮酒量:', label: '下次履约目标日饮酒量:',
placeholder: '请输入下次随访日饮酒量', placeholder: '请输入下次履约日饮酒量',
spanNum: 8, spanNum: 8,
maxlength: 30, maxlength: 30,
type: 'number', type: 'number',
labmsg: '', labmsg: '',
slots: [{name: '两/日', type: 'append'}], slots: [{name: '两/日', type: 'append'}],
rules: [{ required: true, message: '请输入下次随访日饮酒量', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }] rules: [{ required: true, message: '请输入下次履约日饮酒量', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }]
}, },
{ {
...@@ -100,14 +100,14 @@ export default ($this) => { ...@@ -100,14 +100,14 @@ export default ($this) => {
prop: 'nextWorkoutOfWeek', prop: 'nextWorkoutOfWeek',
model: 'nextWorkoutOfWeek', model: 'nextWorkoutOfWeek',
disabled: false, disabled: false,
label: '下次随访目标运动情况:', label: '下次履约目标运动情况:',
placeholder: '请输入下次随访运动情况', placeholder: '请输入下次履约运动情况',
spanNum: 8, spanNum: 8,
maxlength: 30, maxlength: 30,
type: 'number', type: 'number',
labmsg: '', labmsg: '',
slots: [{name: '次/周', type: 'append'}], slots: [{name: '次/周', type: 'append'}],
rules: [{ required: true, message: '请输入下次随访运动情况', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }] rules: [{ required: true, message: '请输入下次履约运动情况', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }]
}, },
{ {
formType: 'input', formType: 'input',
...@@ -115,13 +115,13 @@ export default ($this) => { ...@@ -115,13 +115,13 @@ export default ($this) => {
prop: 'nextWorkoutDuration', prop: 'nextWorkoutDuration',
model: 'nextWorkoutDuration', model: 'nextWorkoutDuration',
disabled: false, disabled: false,
placeholder: '请输入下次随访运动情况', placeholder: '请输入下次履约运动情况',
spanNum: 8, spanNum: 8,
maxlength: 30, maxlength: 30,
type: 'number', type: 'number',
labmsg: '', labmsg: '',
slots: [{name: '分钟/次', type: 'append'}], slots: [{name: '分钟/次', type: 'append'}],
rules: [{ required: true, message: '请输入下次随访运动情况', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }] rules: [{ required: true, message: '请输入下次履约运动情况', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }]
}, },
{ {
formType: 'input', formType: 'input',
......
...@@ -65,15 +65,16 @@ export default ($this) => { ...@@ -65,15 +65,16 @@ export default ($this) => {
className: 'obj-form-title radio-block', className: 'obj-form-title radio-block',
prop: 'followUpClassification', prop: 'followUpClassification',
model: 'followUpClassification', model: 'followUpClassification',
disabled: false,
spanNum: 24, spanNum: 24,
label: '此次随访分类:', label: '此次履约分类:',
options: [ options: [
{ label: '控制满意(血压控制满意,无其他异常)', value: '控制满意(血压控制满意,无其他异常)' }, { label: '控制满意(血压控制满意,无其他异常)', value: '控制满意(血压控制满意,无其他异常)' },
{ label: '控制不满意(血压控制不满意,无其他异常)', value: '控制不满意(血压控制不满意,无其他异常)' }, { label: '控制不满意(血压控制不满意,无其他异常)', value: '控制不满意(血压控制不满意,无其他异常)' },
{ label: '不良反应(存在药物不良反应)', value: '不良反应(存在药物不良反应)' }, { label: '不良反应(存在药物不良反应)', value: '不良反应(存在药物不良反应)' },
{ label: '并发症(出现新的并发症或并发症出现异常)', value: '并发症(出现新的并发症或并发症出现异常)' }, { label: '并发症(出现新的并发症或并发症出现异常)', value: '并发症(出现新的并发症或并发症出现异常)' },
], ],
rules: [{ required: true, message: '请选择此次随访分类', trigger: ['submit','change'] }], rules: [{ required: true, message: '请选择此次履约分类', trigger: ['submit','change'] }],
changeFun: (e)=>{ changeFun: (e)=>{
} }
}, },
......
...@@ -120,14 +120,14 @@ export default ($this) => { ...@@ -120,14 +120,14 @@ export default ($this) => {
className: 'float-none', className: 'float-none',
prop: 'nextBodyWeight', prop: 'nextBodyWeight',
model: 'nextBodyWeight', model: 'nextBodyWeight',
label: '下次随访目标体重:', label: '下次履约目标体重:',
disabled: false, disabled: false,
placeholder: '请输入(体重可以带1位小数点)', placeholder: '请输入(体重可以带1位小数点)',
spanNum: 8, spanNum: 8,
type: 'number', type: 'number',
labmsg: '次', labmsg: '次',
slots: [{name: 'kg', type: 'append'}], slots: [{name: 'kg', type: 'append'}],
rules: [{required: true, message: '请输入下次随访体重', trigger: ['submit','change']},{ validator: checkRange , trigger: ['submit','change'] }, {validator: checkNumberIsToFixed , trigger: ['submit','change']}], rules: [{required: true, message: '请输入下次履约体重', trigger: ['submit','change']},{ validator: checkRange , trigger: ['submit','change'] }, {validator: checkNumberIsToFixed , trigger: ['submit','change']}],
changeFun: (val)=>{ changeFun: (val)=>{
$this.addComponents.forEach((item,index)=>{ $this.addComponents.forEach((item,index)=>{
if(item.name == 'diabetesSourseSign'){ if(item.name == 'diabetesSourseSign'){
...@@ -155,7 +155,7 @@ export default ($this) => { ...@@ -155,7 +155,7 @@ export default ($this) => {
className: 'float-none', className: 'float-none',
prop: 'nextBmi', prop: 'nextBmi',
model: 'nextBmi', model: 'nextBmi',
label: '下次随访BMI(系统自动生成):', label: '下次履约BMI(系统自动生成):',
disabled: true, disabled: true,
placeholder: '(这里是自动计算所得)', placeholder: '(这里是自动计算所得)',
spanNum: 8, spanNum: 8,
......
...@@ -8,12 +8,12 @@ export default ($this) => { ...@@ -8,12 +8,12 @@ export default ($this) => {
prop: 'nextFollowDay', prop: 'nextFollowDay',
model: 'nextFollowDay', model: 'nextFollowDay',
placeholder: '请选择', placeholder: '请选择',
label: '下次随访日期:', label: '下次履约日期:',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd', valueFormat: 'yyyy-MM-dd',
dateType: 'date', dateType: 'date',
type: 'date', type: 'date',
rules: [{required: true, message: '请选择下次随访日期', trigger: ['submit','change']}], rules: [{required: true, message: '请选择下次履约日期', trigger: ['submit','change']}],
spanNum: 12, spanNum: 12,
}, },
// { // {
...@@ -21,14 +21,14 @@ export default ($this) => { ...@@ -21,14 +21,14 @@ export default ($this) => {
// className: 'float-none', // className: 'float-none',
// prop: 'doctorSignature', // prop: 'doctorSignature',
// model: 'doctorSignature', // model: 'doctorSignature',
// label: '随访医生签名:', // label: '履约医生签名:',
// disabled: false, // disabled: false,
// placeholder: '请输入随访人员姓名', // placeholder: '请输入履约人员姓名',
// spanNum: 12, // spanNum: 12,
// maxlength: 30, // maxlength: 30,
// type: 'text', // type: 'text',
// labmsg: '次', // labmsg: '次',
// rules: [{required: true, message: '请输入随访医生签名', trigger: ['submit','change']}], // rules: [{required: true, message: '请输入履约医生签名', trigger: ['submit','change']}],
// }, // },
] ]
} }
...@@ -12,9 +12,9 @@ export default ($this) => { ...@@ -12,9 +12,9 @@ export default ($this) => {
spanNum: 24, spanNum: 24,
options: [ options: [
{ label: '无', value: '无', disabled: false }, { label: '无', value: '无', disabled: false },
{ label: '有', value: '有', disabled: false }, { label: '有', value: '有', disabled: false},
], ],
rules: [{ required: true, message: '请选择随访期间有无症状', trigger: ['submit','change'] }], rules: [{ required: true, message: '请选择履约期间有无症状', trigger: ['submit','change'] }],
changeFun: (e) => { changeFun: (e) => {
if(e == '有') { if(e == '有') {
$this.addComponents.forEach((item,index)=>{ $this.addComponents.forEach((item,index)=>{
......
...@@ -8,7 +8,7 @@ export default ($this) => { ...@@ -8,7 +8,7 @@ export default ($this) => {
prop: 'name', prop: 'name',
model: 'name', model: 'name',
label: '姓名:', label: '姓名:',
disabled: false, disabled: true,
placeholder: '请输入姓名', placeholder: '请输入姓名',
spanNum: 12, spanNum: 12,
maxlength: 30, maxlength: 30,
...@@ -36,12 +36,12 @@ export default ($this) => { ...@@ -36,12 +36,12 @@ export default ($this) => {
prop: 'followupDate', prop: 'followupDate',
model: 'followupDate', model: 'followupDate',
placeholder: '请选择', placeholder: '请选择',
label: '随访日期:', label: '履约日期:',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd', valueFormat: 'yyyy-MM-dd',
dateType: 'date', dateType: 'date',
type: 'date', type: 'date',
rules: [{required: true, message: '请选择随访日期', trigger: ['submit','change']}], rules: [{required: true, message: '请选择履约日期', trigger: ['submit','change']}],
spanNum: 12, spanNum: 12,
}, },
...@@ -51,13 +51,13 @@ export default ($this) => { ...@@ -51,13 +51,13 @@ export default ($this) => {
prop: 'followupType', prop: 'followupType',
model: 'followupType', model: 'followupType',
spanNum: 24, spanNum: 24,
label: '随访方式:', label: '履约方式:',
options: [ options: [
{ label: '门诊', value: '门诊' }, { label: '门诊', value: '门诊' },
{ label: '家庭', value: '家庭' }, { label: '家庭', value: '家庭' },
{ label: '电话', value: '电话' }, { label: '电话', value: '电话' },
], ],
rules: [{ required: true, message: '请选择随访方式', trigger: ['submit','change'] }], rules: [{ required: true, message: '请选择履约方式', trigger: ['submit','change'] }],
changeFun: (e)=>{ changeFun: (e)=>{
} }
}, },
......
...@@ -69,14 +69,14 @@ export default ($this) => { ...@@ -69,14 +69,14 @@ export default ($this) => {
prop: 'followUpClassification', prop: 'followUpClassification',
model: 'followUpClassification', model: 'followUpClassification',
spanNum: 24, spanNum: 24,
label: '此次随访分类:', label: '此次履约分类:',
options: [ options: [
{ label: '控制满意(血压控制满意,无其他异常)', value: '控制满意(血压控制满意,无其他异常)' }, { label: '控制满意(血压控制满意,无其他异常)', value: '控制满意(血压控制满意,无其他异常)' },
{ label: '控制不满意(血压控制不满意,无其他异常)', value: '控制不满意(血压控制不满意,无其他异常)' }, { label: '控制不满意(血压控制不满意,无其他异常)', value: '控制不满意(血压控制不满意,无其他异常)' },
{ label: '不良反应(存在药物不良反应)', value: '不良反应(存在药物不良反应)' }, { label: '不良反应(存在药物不良反应)', value: '不良反应(存在药物不良反应)' },
{ label: '并发症(出现新的并发症或并发症出现异常)', value: '并发症(出现新的并发症或并发症出现异常)' }, { label: '并发症(出现新的并发症或并发症出现异常)', value: '并发症(出现新的并发症或并发症出现异常)' },
], ],
rules: [{ required: true, message: '请选择此次随访分类', trigger: ['submit','change'] }], rules: [{ required: true, message: '请选择此次履约分类', trigger: ['submit','change'] }],
changeFun: (e)=>{ changeFun: (e)=>{
} }
}, },
......
...@@ -24,14 +24,14 @@ export default ($this) => { ...@@ -24,14 +24,14 @@ export default ($this) => {
prop: 'nextSmokingAmount', prop: 'nextSmokingAmount',
model: 'nextSmokingAmount', model: 'nextSmokingAmount',
disabled: false, disabled: false,
label: '下次随访日吸烟量:', label: '下次履约日吸烟量:',
placeholder: '请输入下次随访日吸烟量', placeholder: '请输入下次履约日吸烟量',
spanNum: 8, spanNum: 8,
maxlength: 30, maxlength: 30,
type: 'number', type: 'number',
labmsg: '', labmsg: '',
slots: [{name: '支/日', type: 'append'}], slots: [{name: '支/日', type: 'append'}],
rules: [{ required: true, message: '请输入下次随访日吸烟量', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }] rules: [{ required: true, message: '请输入下次履约日吸烟量', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }]
}, },
...@@ -56,14 +56,14 @@ export default ($this) => { ...@@ -56,14 +56,14 @@ export default ($this) => {
prop: 'nextAlcoholConsumption', prop: 'nextAlcoholConsumption',
model: 'nextAlcoholConsumption', model: 'nextAlcoholConsumption',
disabled: false, disabled: false,
label: '下次随访日饮酒量:', label: '下次履约日饮酒量:',
placeholder: '请输入下次随访日饮酒量', placeholder: '请输入下次履约日饮酒量',
spanNum: 8, spanNum: 8,
maxlength: 30, maxlength: 30,
type: 'number', type: 'number',
labmsg: '', labmsg: '',
slots: [{name: '两/日', type: 'append'}], slots: [{name: '两/日', type: 'append'}],
rules: [{ required: true, message: '请输入下次随访日饮酒量', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }] rules: [{ required: true, message: '请输入下次履约日饮酒量', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }]
}, },
{ {
...@@ -102,14 +102,14 @@ export default ($this) => { ...@@ -102,14 +102,14 @@ export default ($this) => {
prop: 'nextWorkoutOfWeek', prop: 'nextWorkoutOfWeek',
model: 'nextWorkoutOfWeek', model: 'nextWorkoutOfWeek',
disabled: false, disabled: false,
label: '下次随访运动情况:', label: '下次履约运动情况:',
placeholder: '请输入下次随访运动情况', placeholder: '请输入下次履约运动情况',
spanNum: 8, spanNum: 8,
maxlength: 30, maxlength: 30,
type: 'number', type: 'number',
labmsg: '', labmsg: '',
slots: [{name: '次/周', type: 'append'}], slots: [{name: '次/周', type: 'append'}],
rules: [{ required: true, message: '请输入下次随访运动情况', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }] rules: [{ required: true, message: '请输入下次履约运动情况', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }]
}, },
{ {
formType: 'input', formType: 'input',
...@@ -117,13 +117,13 @@ export default ($this) => { ...@@ -117,13 +117,13 @@ export default ($this) => {
prop: 'nextWorkoutDuration', prop: 'nextWorkoutDuration',
model: 'nextWorkoutDuration', model: 'nextWorkoutDuration',
disabled: false, disabled: false,
placeholder: '请输入下次随访运动情况', placeholder: '请输入下次履约运动情况',
spanNum: 8, spanNum: 8,
maxlength: 30, maxlength: 30,
type: 'number', type: 'number',
labmsg: '', labmsg: '',
slots: [{name: '分钟/次', type: 'append'}], slots: [{name: '分钟/次', type: 'append'}],
rules: [{ required: true, message: '请输入下次随访运动情况', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }] rules: [{ required: true, message: '请输入下次履约运动情况', trigger: ['submit','change'] },{ validator: checkRange , trigger: ['submit','change'] },{ validator: checkIsInteger , trigger: ['submit','change'] }]
}, },
...@@ -149,13 +149,13 @@ export default ($this) => { ...@@ -149,13 +149,13 @@ export default ($this) => {
prop: 'nextSaltIntake', prop: 'nextSaltIntake',
model: 'nextSaltIntake', model: 'nextSaltIntake',
spanNum: 24, spanNum: 24,
label: '下次随访摄盐情况(咸淡):', label: '下次履约摄盐情况(咸淡):',
options: [ options: [
{ label: '轻', value: '轻' }, { label: '轻', value: '轻' },
{ label: '中', value: '中' }, { label: '中', value: '中' },
{ label: '重', value: '重' }, { label: '重', value: '重' },
], ],
rules: [{ required: true, message: '请选择下次随访摄盐情况', trigger: ['submit','change'] }], rules: [{ required: true, message: '请选择下次履约摄盐情况', trigger: ['submit','change'] }],
changeFun: (e)=>{ changeFun: (e)=>{
} }
}, },
......
...@@ -6,12 +6,12 @@ export default ($this) => { ...@@ -6,12 +6,12 @@ export default ($this) => {
prop: 'nextFollowDay', prop: 'nextFollowDay',
model: 'nextFollowDay', model: 'nextFollowDay',
placeholder: '请选择', placeholder: '请选择',
label: '下次随访日期:', label: '下次履约日期:',
format: 'yyyy-MM-dd', format: 'yyyy-MM-dd',
valueFormat: 'yyyy-MM-dd', valueFormat: 'yyyy-MM-dd',
dateType: 'date', dateType: 'date',
type: 'date', type: 'date',
rules: [{required: true, message: '请选择下次随访日期', trigger: ['submit','change']}], rules: [{required: true, message: '请选择下次履约日期', trigger: ['submit','change']}],
spanNum: 12, spanNum: 12,
}, },
// { // {
...@@ -19,14 +19,14 @@ export default ($this) => { ...@@ -19,14 +19,14 @@ export default ($this) => {
// className: 'float-none', // className: 'float-none',
// prop: 'doctorSignature', // prop: 'doctorSignature',
// model: 'doctorSignature', // model: 'doctorSignature',
// label: '随访医生签名:', // label: '履约医生签名:',
// disabled: false, // disabled: false,
// placeholder: '请输入随访人员姓名', // placeholder: '请输入履约人员姓名',
// spanNum: 12, // spanNum: 12,
// maxlength: 30, // maxlength: 30,
// type: 'text', // type: 'text',
// labmsg: '次', // labmsg: '次',
// rules: [{required: true, message: '请输入随访医生签名', trigger: ['submit','change']}], // rules: [{required: true, message: '请输入履约医生签名', trigger: ['submit','change']}],
// }, // },
] ]
} }
...@@ -119,14 +119,14 @@ export default ($this) => { ...@@ -119,14 +119,14 @@ export default ($this) => {
className: 'float-none', className: 'float-none',
prop: 'nextBodyWeight', prop: 'nextBodyWeight',
model: 'nextBodyWeight', model: 'nextBodyWeight',
label: '下次随访体重:', label: '下次履约体重:',
disabled: false, disabled: false,
placeholder: '请输入(体重可以带1位小数点)', placeholder: '请输入(体重可以带1位小数点)',
spanNum: 8, spanNum: 8,
type: 'number', type: 'number',
labmsg: '次', labmsg: '次',
slots: [{name: 'kg', type: 'append'}], slots: [{name: 'kg', type: 'append'}],
rules: [{required: true, message: '请输入下次随访体重', trigger: ['submit','change']},{ validator: checkRange , trigger: ['submit','change'] }, {validator: checkNumberIsToFixed , trigger: ['submit','change']}], rules: [{required: true, message: '请输入下次履约体重', trigger: ['submit','change']},{ validator: checkRange , trigger: ['submit','change'] }, {validator: checkNumberIsToFixed , trigger: ['submit','change']}],
changeFun: (val)=>{ changeFun: (val)=>{
$this.addComponents.forEach((item,index)=>{ $this.addComponents.forEach((item,index)=>{
if(item.name == 'hypeDataSourceSign'){ if(item.name == 'hypeDataSourceSign'){
...@@ -154,7 +154,7 @@ export default ($this) => { ...@@ -154,7 +154,7 @@ export default ($this) => {
className: 'float-none', className: 'float-none',
prop: 'nextBmi', prop: 'nextBmi',
model: 'nextBmi', model: 'nextBmi',
label: '下次随访BMI(系统自动生成):', label: '下次履约BMI(系统自动生成):',
disabled: true, disabled: true,
placeholder: '(这里是自动计算所得)', placeholder: '(这里是自动计算所得)',
spanNum: 8, spanNum: 8,
......
...@@ -14,7 +14,7 @@ export default ($this) => { ...@@ -14,7 +14,7 @@ export default ($this) => {
prop: 'name', prop: 'name',
model: 'name', model: 'name',
label: '姓名:', label: '姓名:',
disabled: false, disabled: true,
placeholder: '请输入姓名', placeholder: '请输入姓名',
spanNum: 12, spanNum: 12,
maxlength: 30, maxlength: 30,
...@@ -42,12 +42,12 @@ export default ($this) => { ...@@ -42,12 +42,12 @@ export default ($this) => {
prop: 'inTurn', prop: 'inTurn',
model: 'inTurn', model: 'inTurn',
spanNum: 24, spanNum: 24,
label: '随访轮次(距离建档时间):', label: '履约轮次(距离建档时间):',
options: [ options: [
{ label: '6个月', value: '6个月' }, { label: '6个月', value: '6个月' },
{ label: '12个月', value: '12个月' }, { label: '12个月', value: '12个月' },
], ],
rules: [{ required: true, message: '请选择随访轮次', trigger: ['submit','change'] }], rules: [{ required: true, message: '请选择履约轮次', trigger: ['submit','change'] }],
changeFun: (e)=>{ changeFun: (e)=>{
// console.log(e) // console.log(e)
// if(e == '12个月'){ // if(e == '12个月'){
......
...@@ -7,42 +7,42 @@ export default ($this) => { ...@@ -7,42 +7,42 @@ export default ($this) => {
className: 'float-none', className: 'float-none',
prop: 'followUpOrgName', prop: 'followUpOrgName',
model: 'followUpOrgName', model: 'followUpOrgName',
label: '随访单位名称:', label: '履约单位名称:',
disabled: false, disabled: false,
placeholder: '请输入随访单位名称', placeholder: '请输入履约单位名称',
spanNum: 12, spanNum: 12,
maxlength: 30, maxlength: 30,
type: 'text', type: 'text',
labmsg: '次', labmsg: '次',
rules: [{required: true, message: '请输入随访单位名称', trigger: ['submit','change']}], rules: [{required: true, message: '请输入履约单位名称', trigger: ['submit','change']}],
}, },
{ {
formType: 'input', formType: 'input',
className: 'float-none', className: 'float-none',
prop: 'followUpUser', prop: 'followUpUser',
model: 'followUpUser', model: 'followUpUser',
label: '随访人员姓名:', label: '履约人员姓名:',
disabled: false, disabled: false,
placeholder: '请输入随访人员姓名', placeholder: '请输入履约人员姓名',
spanNum: 12, spanNum: 12,
maxlength: 30, maxlength: 30,
type: 'text', type: 'text',
labmsg: '次', labmsg: '次',
rules: [{required: true, message: '请输入随访人员姓名', trigger: ['submit','change']}], rules: [{required: true, message: '请输入履约人员姓名', trigger: ['submit','change']}],
}, },
{ {
formType: 'input', formType: 'input',
className: 'float-none', className: 'float-none',
prop: 'followUpMobile', prop: 'followUpMobile',
model: 'followUpMobile', model: 'followUpMobile',
label: '随访人员联系电话:', label: '履约人员联系电话:',
disabled: false, disabled: false,
placeholder: '请输入随访人员联系电话', placeholder: '请输入履约人员联系电话',
spanNum: 12, spanNum: 12,
maxlength: 11, maxlength: 11,
type: 'tel', type: 'tel',
labmsg: '次', labmsg: '次',
rules: [{required: true, message: '请输入随访人员联系电话', trigger: ['submit','change']},{ validator: checkMobile , trigger: ['submit','change'] }], rules: [{required: true, message: '请输入履约人员联系电话', trigger: ['submit','change']},{ validator: checkMobile , trigger: ['submit','change'] }],
}, },
{ {
formType: 'date-picker', formType: 'date-picker',
......
...@@ -41,7 +41,7 @@ export default ($this) => { ...@@ -41,7 +41,7 @@ export default ($this) => {
spanNum: 24, spanNum: 24,
options: [ options: [
{ label: '面对面', value: '面对面', disabled: false }, { label: '面对面', value: '面对面', disabled: false },
{ label: '电话(限中危人群,高危人群6个月随访)', value: '电话(限中危人群,高危人群6个月随访)', disabled: false }, { label: '电话(限中危人群,高危人群6个月履约)', value: '电话(限中危人群,高危人群6个月履约)', disabled: false },
], ],
rules: [{ required: true, message: '请选择调查方式', trigger: ['submit','change'] }] rules: [{ required: true, message: '请选择调查方式', trigger: ['submit','change'] }]
}, },
......
...@@ -12,14 +12,14 @@ export default ($this) => { ...@@ -12,14 +12,14 @@ export default ($this) => {
className: 'obj-form-title', className: 'obj-form-title',
prop: 'diseasedHappened', prop: 'diseasedHappened',
model: 'diseasedHappened', model: 'diseasedHappened',
label: '随访期间有无新发脑血管病事件:', label: '履约期间有无新发脑血管病事件:',
disabled: false, disabled: false,
spanNum: 24, spanNum: 24,
options: [ options: [
{ label: '无', value: '无', disabled: false }, { label: '无', value: '无', disabled: false },
{ label: '有', value: '有', disabled: false }, { label: '有', value: '有', disabled: false },
], ],
rules: [{ required: true, message: '请选择随访期间有无新发脑血管病事件', trigger: ['submit','change'] }] rules: [{ required: true, message: '请选择履约期间有无新发脑血管病事件', trigger: ['submit','change'] }]
}, },
{ {
formType: 'input', formType: 'input',
...@@ -42,13 +42,13 @@ export default ($this) => { ...@@ -42,13 +42,13 @@ export default ($this) => {
prop: 'firstTime', prop: 'firstTime',
model: 'firstTime', model: 'firstTime',
placeholder: '请选择', placeholder: '请选择',
label: '随访期间第一次发病时间:', label: '履约期间第一次发病时间:',
linkageRule: [{ name: 'diseasedHappened', value: ['有'] }], linkageRule: [{ name: 'diseasedHappened', value: ['有'] }],
format: 'yyyy', format: 'yyyy',
valueFormat: 'yyyy', valueFormat: 'yyyy',
dateType: 'year', dateType: 'year',
type: 'date', type: 'date',
rules: [{ required: true, message: '请选择随访期间第一次发病时间', trigger: ['submit','change'] }], rules: [{ required: true, message: '请选择履约期间第一次发病时间', trigger: ['submit','change'] }],
spanNum: 12, spanNum: 12,
}, },
{ {
......
...@@ -12,14 +12,14 @@ export default ($this) => { ...@@ -12,14 +12,14 @@ export default ($this) => {
className: 'obj-form-title', className: 'obj-form-title',
prop: 'happenedAgain', prop: 'happenedAgain',
model: 'happenedAgain', model: 'happenedAgain',
label: '随访期间是否新发心脏病:', label: '履约期间是否新发心脏病:',
disabled: false, disabled: false,
spanNum: 24, spanNum: 24,
options: [ options: [
{ label: '无', value: '无', disabled: false }, { label: '无', value: '无', disabled: false },
{ label: '有', value: '有', disabled: false }, { label: '有', value: '有', disabled: false },
], ],
rules: [{ required: true, message: '请选择随访期间是否新发心脏病', trigger: ['submit','change'] }], rules: [{ required: true, message: '请选择履约期间是否新发心脏病', trigger: ['submit','change'] }],
changeFun(e){ changeFun(e){
if(e == '有') { if(e == '有') {
$this.addComponents.forEach((item,index)=>{ $this.addComponents.forEach((item,index)=>{
...@@ -139,7 +139,7 @@ export default ($this) => { ...@@ -139,7 +139,7 @@ export default ($this) => {
className: 'obj-form-title', className: 'obj-form-title',
prop: 'atrialFibrillation', prop: 'atrialFibrillation',
model: 'atrialFibrillation', model: 'atrialFibrillation',
label: '是否有房颤(包括既往及本次随访期间新发现的房颤患者):', label: '是否有房颤(包括既往及本次履约期间新发现的房颤患者):',
disabled: false, disabled: false,
spanNum: 24, spanNum: 24,
options: [ options: [
......
...@@ -13,14 +13,14 @@ export default ($this) => { ...@@ -13,14 +13,14 @@ export default ($this) => {
className: 'obj-form-title', className: 'obj-form-title',
prop: 'haveHypertension', prop: 'haveHypertension',
model: 'haveHypertension', model: 'haveHypertension',
label: '随访期间新发现有高血压:', label: '履约期间新发现有高血压:',
disabled: false, disabled: false,
spanNum: 24, spanNum: 24,
options: [ options: [
{ label: '无', value: '无', disabled: false }, { label: '无', value: '无', disabled: false },
{ label: '有', value: '有', disabled: false }, { label: '有', value: '有', disabled: false },
], ],
rules: [{ required: true, message: '请选择随访期间新发现有高血压', trigger: ['submit','change'] }] rules: [{ required: true, message: '请选择履约期间新发现有高血压', trigger: ['submit','change'] }]
}, },
{ {
formType: 'date-picker', formType: 'date-picker',
...@@ -43,7 +43,7 @@ export default ($this) => { ...@@ -43,7 +43,7 @@ export default ($this) => {
className: 'obj-form-title', className: 'obj-form-title',
prop: 'takeHypotensorFf', prop: 'takeHypotensorFf',
model: 'takeHypotensorFf', model: 'takeHypotensorFf',
label: '是否有高血压(包括既往及本次随访期间新发现的高血压患者):', label: '是否有高血压(包括既往及本次履约期间新发现的高血压患者):',
disabled: false, disabled: false,
spanNum: 24, spanNum: 24,
options: [ options: [
......
...@@ -12,14 +12,14 @@ export default ($this) => { ...@@ -12,14 +12,14 @@ export default ($this) => {
className: 'obj-form-title', className: 'obj-form-title',
prop: 'haveDyslipidemia', prop: 'haveDyslipidemia',
model: 'haveDyslipidemia', model: 'haveDyslipidemia',
label: '随访期间是否新发现有血脂异常:', label: '履约期间是否新发现有血脂异常:',
disabled: false, disabled: false,
spanNum: 24, spanNum: 24,
options: [ options: [
{ label: '否', value: '否', disabled: false }, { label: '否', value: '否', disabled: false },
{ label: '是', value: '是', disabled: false }, { label: '是', value: '是', disabled: false },
], ],
rules: [{ required: true, message: '请选择随访期间是否新发现有血脂异常', trigger: ['submit','change'] }], rules: [{ required: true, message: '请选择履约期间是否新发现有血脂异常', trigger: ['submit','change'] }],
changeFun(e){ changeFun(e){
if(e == '是') { if(e == '是') {
$this.addComponents.forEach((item,index)=>{ $this.addComponents.forEach((item,index)=>{
...@@ -75,7 +75,7 @@ export default ($this) => { ...@@ -75,7 +75,7 @@ export default ($this) => {
className: 'obj-form-title', className: 'obj-form-title',
prop: 'dyslipidemiaIf', prop: 'dyslipidemiaIf',
model: 'dyslipidemiaIf', model: 'dyslipidemiaIf',
label: '是否有血脂异常(包括既往及本次随访期间新发现的血脂异常患者):', label: '是否有血脂异常(包括既往及本次履约期间新发现的血脂异常患者):',
disabled: false, disabled: false,
spanNum: 24, spanNum: 24,
options: [ options: [
......
...@@ -10,14 +10,14 @@ export default ($this) => { ...@@ -10,14 +10,14 @@ export default ($this) => {
className: 'obj-form-title', className: 'obj-form-title',
prop: 'haveDiabetes', prop: 'haveDiabetes',
model: 'haveDiabetes', model: 'haveDiabetes',
label: '随访期间是否新发现有糖尿病:', label: '履约期间是否新发现有糖尿病:',
disabled: false, disabled: false,
spanNum: 24, spanNum: 24,
options: [ options: [
{ label: '否', value: '否', disabled: false }, { label: '否', value: '否', disabled: false },
{ label: '是', value: '是', disabled: false }, { label: '是', value: '是', disabled: false },
], ],
rules: [{ required: true, message: '请选择随访期间是否新发现有糖尿病', trigger: ['submit','change'] }] rules: [{ required: true, message: '请选择履约期间是否新发现有糖尿病', trigger: ['submit','change'] }]
}, },
{ {
formType: 'date-picker', formType: 'date-picker',
...@@ -40,7 +40,7 @@ export default ($this) => { ...@@ -40,7 +40,7 @@ export default ($this) => {
className: 'obj-form-title', className: 'obj-form-title',
prop: 'strokeMedicalIf', prop: 'strokeMedicalIf',
model: 'strokeMedicalIf', model: 'strokeMedicalIf',
label: '是否为糖尿病患者(包括既往及本次随访期间新发现的糖尿病患者):', label: '是否为糖尿病患者(包括既往及本次履约期间新发现的糖尿病患者):',
disabled: false, disabled: false,
spanNum: 24, spanNum: 24,
options: [ options: [
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<!--渲染不同的模块表单--> <!--渲染不同的模块表单-->
<div v-if="canRender" v-for="(item, index) in addComponents"> <div v-if="canRender" v-for="(item, index) in addComponents">
<div v-if="item.showModule" class="content-box" > <div v-if="item.showModule" class="content-box" >
<div v-if="!item.hideTitle" class="title">{{item.title}}</div> <div v-if="!item.hideTitle" class="title">{{item.title}}<span class="gray-tip" v-if="item.disabled"><i class="el-icon-warning-outline" style="margin-right: 5px;"></i>获得居民授权才可进行此项填写</span></div>
<el-form <el-form
:ref="'form' + index" :ref="'form' + index"
:id="'form' + index" :id="'form' + index"
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
</template> </template>
<script> <script>
import { getDomain, getScaleModels, getScaleDetail, postScale, updateScalesStatus, submitScale } from '@/utils/followup/followapis' import { getDomain, getScaleModels, getScaleDetail, postScale, updateScalesStatus, submitScale, getScaleModels2 } from '@/utils/followup/followapis'
// 量表 template // 量表 template
import FormScale from '@/components/followup/form/index' import FormScale from '@/components/followup/form/index'
...@@ -64,7 +64,7 @@ ...@@ -64,7 +64,7 @@
scaleNo: '', scaleNo: '',
doctorId: '', doctorId: '',
planTimesId: '', planTimesId: '',
addComponents: [], addComponents: [], //所需要展示的模块
addComponentsSourceList: [], addComponentsSourceList: [],
formData: {},//整个表单对象 formData: {},//整个表单对象
dialogFormVisible: false,//是否显示添加用药情况dialog dialogFormVisible: false,//是否显示添加用药情况dialog
...@@ -116,6 +116,7 @@ ...@@ -116,6 +116,7 @@
}) })
return; return;
}else{ }else{
// 校验内容是否全部填写
this.valid = true; this.valid = true;
} }
} }
...@@ -204,16 +205,42 @@ ...@@ -204,16 +205,42 @@
// }, // },
// 获取展示的模块 // 获取展示的模块
getFormModules(){ getFormModules(){
getScaleModels(this.domain,this.scaleNo).then(res=>{ let para = {
planPatientsTimesId: this.planPatientsTimesId
}
// getScaleModels(this.domain,this.scaleNo).then(res=>{
getScaleModels2(this.domain,this.scaleNo,para).then(res=>{
if(res.code=='000000'){ if(res.code=='000000'){
this.moduleList = res.data; this.moduleList = res.data;
for(let i=0;i<this.moduleList.length;i++){ for(let i=0;i<this.moduleList.length;i++){
for(let j=0;j<this.addComponentsSourceList.length;j++){ for(let j=0;j<this.addComponentsSourceList.length;j++){
if(this.moduleList[i]==this.addComponentsSourceList[j].formName){ // if(this.moduleList[i]==this.addComponentsSourceList[j].formName){
this.addComponents.push(this.addComponentsSourceList[j]) if(this.moduleList[i].modelCode==this.addComponentsSourceList[j].formName){
// this.addComponents.push(this.addComponentsSourceList[j])
//把获取到每个模块的disabeld状态更新进将要渲染的数组
this.addComponents.push({...this.addComponentsSourceList[j],disabled: this.moduleList[i].disabled})
} }
} }
} }
/*start--根据当前模块是否获得居民权限,来判断是否可填写当前模块*/
this.addComponents.forEach((item,index)=>{
if (item.disabled === true) {
item.dataSource.forEach((item2,index2)=>{
// item2.disabled = true;
this.addComponents[index].dataSource[index2].disabled = true;
if (this.addComponents[index].dataSource[index2].rules) {
this.addComponents[index].dataSource[index2].rules[0].required = false;
}
})
}
})
console.log('糖尿病数组', this.addComponents)
/*end--*/
// if(this.showBtn!='0'){
// // 获取量表详情
// this.getFormDetail();
// }
}else{ }else{
this.$message({ this.$message({
message: res.message, message: res.message,
...@@ -242,6 +269,7 @@ ...@@ -242,6 +269,7 @@
for(let i=0;i<this.addComponents.length;i++){ for(let i=0;i<this.addComponents.length;i++){
let formName = this.addComponents[i].formName; let formName = this.addComponents[i].formName;
// let type2Obj = {}; // let type2Obj = {};
//对用药情况模块的数据做特殊处理
if(this.formData[formName] && formName == 'h_s_002'){ if(this.formData[formName] && formName == 'h_s_002'){
let getDataHS002 = this.formData[formName]; let getDataHS002 = this.formData[formName];
if(Array.isArray(getDataHS002)){ if(Array.isArray(getDataHS002)){
...@@ -256,7 +284,7 @@ ...@@ -256,7 +284,7 @@
arrList: this.medication, arrList: this.medication,
...this.type2Obj ...this.type2Obj
} }
}else if(this.formData[formName] && formName == 'diabetes_001'){ }else if(this.formData[formName] && formName == 'diabetes_001'){ //对症状模块做处理
this.addComponents[i].formObject = this.formData[formName]; this.addComponents[i].formObject = this.formData[formName];
let symptom = this.formData[formName].symptom; let symptom = this.formData[formName].symptom;
this.addComponents[i].formObject.symptom = JSON.parse(symptom || '[]'); this.addComponents[i].formObject.symptom = JSON.parse(symptom || '[]');
...@@ -293,9 +321,27 @@ ...@@ -293,9 +321,27 @@
}); });
this.medication = [...this.medication,...arrNew]; this.medication = [...this.medication,...arrNew];
this.formData.h_s_002 = this.medication this.formData.h_s_002 = this.medication
//判断是否放开敏感字段
let hasDisabled = false;
this.addComponents.forEach((item,index)=>{
if (item.disabled === true) {
hasDisabled = true
}
})
postScale(this.domain,this.formData).then(res=>{ postScale(this.domain,this.formData).then(res=>{
if(res.code=='000000'){ if(res.code=='000000'){
let doMsg = (this.saveWay==1) ? '提交成功' : '保存成功'; // let doMsg = (this.saveWay==1) ? '提交成功' : '保存成功';
// let doMsg = (this.saveWay==1 && hasDisabled === true) ? '非敏感信息提交成功' : '保存成功';
let doMsg = '';
if (this.saveWay==1) {
if(hasDisabled === true){
doMsg = '非敏感信息提交成功'
}else {
doMsg = '提交成功'
}
}else {
doMsg = '保存成功'
}
this.$message({ this.$message({
message: doMsg, message: doMsg,
type: 'success' type: 'success'
...@@ -309,7 +355,7 @@ ...@@ -309,7 +355,7 @@
}) })
},1000) },1000)
}else{ }else{
let doMsg = (this.saveWay==1) ? '提交失败' : '保存失败'; let doMsg = (this.saveWay==1) ? '提交失败,请重试' : '保存失败';
this.$message({ this.$message({
message: doMsg, message: doMsg,
type: 'error' type: 'error'
...@@ -338,6 +384,11 @@ ...@@ -338,6 +384,11 @@
font-weight: bold; font-weight: bold;
font-size: 18px; font-size: 18px;
border-bottom: 1px dashed #ccc; border-bottom: 1px dashed #ccc;
.gray-tip{
color: #8C8C8C;
margin-left: 20px;
font-size: 16px;
}
} }
} }
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<!--渲染不同的模块表单--> <!--渲染不同的模块表单-->
<div v-if="canRender" v-for="(item, index) in addComponents"> <div v-if="canRender" v-for="(item, index) in addComponents">
<div v-if="item.showModule" class="content-box" > <div v-if="item.showModule" class="content-box" >
<div v-if="!item.hideTitle" class="title">{{item.title}}</div> <div v-if="!item.hideTitle" class="title">{{item.title}}<span class="gray-tip" v-if="item.disabled"><i class="el-icon-warning-outline" style="margin-right: 5px;"></i>获得居民授权才可进行此项填写</span></div>
<el-form <el-form
:ref="'form' + index" :ref="'form' + index"
:id="'form' + index" :id="'form' + index"
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
</template> </template>
<script> <script>
import { getDomain, getScaleModels, getScaleDetail, postScale, updateScalesStatus, submitScale } from '@/utils/followup/followapis' import { getDomain, getScaleModels, getScaleDetail, postScale, updateScalesStatus, submitScale, getScaleModels2 } from '@/utils/followup/followapis'
// 量表 template // 量表 template
import FormScale from '@/components/followup/form/index' import FormScale from '@/components/followup/form/index'
...@@ -114,6 +114,7 @@ ...@@ -114,6 +114,7 @@
}) })
return; return;
}else{ }else{
// 校验内容是否全部填写
this.valid = true; this.valid = true;
} }
} }
...@@ -167,7 +168,7 @@ ...@@ -167,7 +168,7 @@
{name: 'hypeDataSourceHelpChecking',formObject: {},showModule: true,formName: 'hypertension_004',className: 'obj-form-title',dataSource: hypeDataSourceHelpChecking(this), hideTitle: false, title: '辅助检查'}, {name: 'hypeDataSourceHelpChecking',formObject: {},showModule: true,formName: 'hypertension_004',className: 'obj-form-title',dataSource: hypeDataSourceHelpChecking(this), hideTitle: false, title: '辅助检查'},
{name: 'hypeDataSourceMedicationUse',formObject: {arrList:this.medication,dosageDay:'',dosageNum:'',medicinesName:'',medicineType:''},showModule: true,formName: 'h_s_002',className: 'obj-form-title',dataSource: hypeDataSourceMedicationUse(this), hideTitle: false, title: '用药情况'}, {name: 'hypeDataSourceMedicationUse',formObject: {arrList:this.medication,dosageDay:'',dosageNum:'',medicinesName:'',medicineType:''},showModule: true,formName: 'h_s_002',className: 'obj-form-title',dataSource: hypeDataSourceMedicationUse(this), hideTitle: false, title: '用药情况'},
{name: 'hypeDataSourceReferral',formObject: {reason:'',mechanism:'',department:''},showModule: true,formName: 'h_s_003',className: 'obj-form-title',dataSource: hypeDataSourceReferral(this), hideTitle: false, title: '转诊'}, {name: 'hypeDataSourceReferral',formObject: {reason:'',mechanism:'',department:''},showModule: true,formName: 'h_s_003',className: 'obj-form-title',dataSource: hypeDataSourceReferral(this), hideTitle: false, title: '转诊'},
{name: 'hypeDataSourceNextFollowDay',formObject: {nextFollowDay:''},showModule: true,formName: 'h_s_004',className: 'obj-form-title',dataSource: hypeDataSourceNextFollowDay(this), hideTitle: true, title: '下次随访日期'}, {name: 'hypeDataSourceNextFollowDay',formObject: {nextFollowDay:''},showModule: true,formName: 'h_s_004',className: 'obj-form-title',dataSource: hypeDataSourceNextFollowDay(this), hideTitle: true, title: '下次履约日期'},
] ]
}, },
// 获取白名单域名 // 获取白名单域名
...@@ -179,7 +180,10 @@ ...@@ -179,7 +180,10 @@
// 获取量表模块 // 获取量表模块
this.getFormModules(); this.getFormModules();
if(this.showBtn!='0'){
// 获取量表详情
this.getFormDetail();
}
}else{ }else{
this.$message({ this.$message({
message: res.message, message: res.message,
...@@ -195,21 +199,42 @@ ...@@ -195,21 +199,42 @@
// 获取展示的模块 // 获取展示的模块
getFormModules(){ getFormModules(){
getScaleModels(this.domain,this.scaleNo).then(res=>{ let para = {
planPatientsTimesId: this.planPatientsTimesId
}
// getScaleModels(this.domain,this.scaleNo).then(res=>{
getScaleModels2(this.domain,this.scaleNo,para).then(res=>{
if(res.code=='000000'){ if(res.code=='000000'){
this.moduleList = res.data; this.moduleList = res.data;
for(let i=0;i<this.moduleList.length;i++){ for(let i=0;i<this.moduleList.length;i++){
for(let j=0;j<this.addComponentsSourceList.length;j++){ for(let j=0;j<this.addComponentsSourceList.length;j++){
if(this.moduleList[i]==this.addComponentsSourceList[j].formName){ // if(this.moduleList[i]==this.addComponentsSourceList[j].formName){
this.addComponents.push(this.addComponentsSourceList[j]) if(this.moduleList[i].modelCode==this.addComponentsSourceList[j].formName){
// this.addComponents.push(this.addComponentsSourceList[j])
//把获取到每个模块的disabeld状态更新进将要渲染的数组
this.addComponents.push({...this.addComponentsSourceList[j],disabled: this.moduleList[i].disabled})
} }
} }
} }
console.log('高血压展示模块',this.addComponents)
/*start--根据当前模块是否获得居民权限,来判断是否可填写当前模块*/
this.addComponents.forEach((item,index)=>{
if (item.disabled === true) {
item.dataSource.forEach((item2,index2)=>{
// item2.disabled = true;
this.addComponents[index].dataSource[index2].disabled = true;
if (this.addComponents[index].dataSource[index2].rules) {
this.addComponents[index].dataSource[index2].rules[0].required = false;
}
})
}
})
/*end--*/
if(this.showBtn!='0'){ // if(this.showBtn!='0'){
// 获取量表详情 // // 获取量表详情
this.getFormDetail(); // this.getFormDetail();
} // }
}else{ }else{
this.$message({ this.$message({
...@@ -315,9 +340,26 @@ ...@@ -315,9 +340,26 @@
} }
this.formData.hypertension_001.symptom = JSON.stringify(this.formData.hypertension_001.symptom); this.formData.hypertension_001.symptom = JSON.stringify(this.formData.hypertension_001.symptom);
// console.log(this.formData) // console.log(this.formData)
//判断是否放开敏感字段
let hasDisabled = false;
this.addComponents.forEach((item,index)=>{
if (item.disabled === true) {
hasDisabled = true
}
})
postScale(this.domain,this.formData).then(res=>{ postScale(this.domain,this.formData).then(res=>{
if(res.code=='000000'){ if(res.code=='000000'){
let doMsg = (this.saveWay==1) ? '提交成功' : '保存成功'; // let doMsg = (this.saveWay==1) ? '非敏感信息提交成功' : '保存成功';
let doMsg = '';
if (this.saveWay==1) {
if(hasDisabled === true){
doMsg = '非敏感信息提交成功'
}else {
doMsg = '提交成功'
}
}else {
doMsg = '保存成功'
}
this.$message({ this.$message({
message: doMsg, message: doMsg,
type: 'success' type: 'success'
...@@ -331,7 +373,7 @@ ...@@ -331,7 +373,7 @@
}) })
},1000) },1000)
}else{ }else{
let doMsg = (this.saveWay==1) ? '提交失败' : '保存失败'; let doMsg = (this.saveWay==1) ? '提交失败,请重试' : '保存失败';
this.$message({ this.$message({
message: doMsg, message: doMsg,
type: 'error' type: 'error'
...@@ -359,6 +401,11 @@ ...@@ -359,6 +401,11 @@
font-weight: bold; font-weight: bold;
font-size: 22px; font-size: 22px;
border-bottom: 1px dashed #ccc; border-bottom: 1px dashed #ccc;
.gray-tip{
color: #8C8C8C;
margin-left: 20px;
font-size: 16px;
}
} }
} }
} }
......
<template> <template>
<div class="form-wrap"> <div class="form-wrap" v-if="canRender">
<!--渲染不同的模块表单--> <!--渲染不同的模块表单-->
<div v-if="canRender" v-for="(item, index) in addComponents"> <div v-for="(item, index) in addComponents" :key="index">
<div v-if="item.showModule" class="content-box" > <div v-if="item.showModule" class="content-box" >
<div v-if="!item.hideTitle" class="title">{{item.title}}</div> <div v-if="!item.hideTitle" class="title">{{item.title}}<span class="gray-tip" v-if="item.disabled"><i class="el-icon-warning-outline" style="margin-right: 5px;"></i>获得居民授权才可进行此项填写</span></div>
<el-form <el-form
:ref="'form' + index" :ref="'form' + index"
:id="'form' + index" :id="'form' + index"
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
</template> </template>
<script> <script>
import { getDomain, getScaleModels, getScaleDetail, postScale, updateScalesStatus, submitScale } from '@/utils/followup/followapis' import { getDomain, getScaleModels, getScaleDetail, postScale, updateScalesStatus, submitScale, getScaleModels2 } from '@/utils/followup/followapis'
// 量表 template // 量表 template
import FormScale from '@/components/followup/form/index' import FormScale from '@/components/followup/form/index'
...@@ -116,6 +116,7 @@ ...@@ -116,6 +116,7 @@
}) })
return; return;
}else{ }else{
// 校验内容是否全部填写
this.valid = true; this.valid = true;
} }
} }
...@@ -152,9 +153,6 @@ ...@@ -152,9 +153,6 @@
if(formName==='stroke_006'||formName==='stroke_014'||formName==='stroke_015'){ if(formName==='stroke_006'||formName==='stroke_014'||formName==='stroke_015'){
this.addComponents[index].ruleNew = val; this.addComponents[index].ruleNew = val;
this.setRuleToTrue(index); this.setRuleToTrue(index);
// if(this.$refs['form' + index].length > 0){
// this.$refs['form' + index][0].resetFields();
// }
} }
}) })
...@@ -177,21 +175,21 @@ ...@@ -177,21 +175,21 @@
// 获取量表类型 // 获取量表类型
initScaleType(){ initScaleType(){
this.addComponentsSourceList = [ this.addComponentsSourceList = [
{name: 'BaseInfo0',formObject: {},showModule: true,formName: 'stroke_001',className: 'obj-form-title',dataSource: dataSourceBaseInfo0(this), hideTitle: true, title: '一、量表脑卒中随访人员信息表'}, {name: 'BaseInfo0',formObject: {},showModule: true,formName: 'stroke_001',className: 'obj-form-title',dataSource: dataSourceBaseInfo0(this), hideTitle: true, title: '一、量表脑卒中履约人员信息表'},
{name: 'BaseInfo',formObject: {},showModule: true,formName: 'stroke_002',className: 'obj-form-title',dataSource: dataSourceBaseInfo(this), title: '一、基本信息'}, {name: 'BaseInfo',formObject: {},showModule: true,formName: 'stroke_002',className: 'obj-form-title',dataSource: dataSourceBaseInfo(this), title: '一、基本信息'},
{name: 'BaseInfo2',formObject: {},showModule: true,formName: 'stroke_003',className: 'obj-form-title',dataSource: dataSourceBaseInfo2(this), hideTitle: true, title: '一、基本信息'}, {name: 'BaseInfo2',formObject: {},showModule: true,formName: 'stroke_003',className: 'obj-form-title',dataSource: dataSourceBaseInfo2(this), hideTitle: true, title: '一、基本信息'},
{name: 'LifeStyleGuide',formObject: {},showModule: true,formName: 'stroke_004',className: 'obj-form-title',dataSource: dataSourceLifeStyleGuide(this), title: '二、随访期间生活方式'}, {name: 'LifeStyleGuide',formObject: {},showModule: true,formName: 'stroke_004',className: 'obj-form-title',dataSource: dataSourceLifeStyleGuide(this), title: '二、履约期间生活方式'},
{name: 'MainSickControl',formObject: {},showModule: true,formName: 'stroke_005',className: 'obj-form-title',dataSource: dataSourceMainSickControl(this), title: '三、随访期间主要病史及控制情况-脑血管病'}, {name: 'MainSickControl',formObject: {},showModule: true,formName: 'stroke_005',className: 'obj-form-title',dataSource: dataSourceMainSickControl(this), title: '三、履约期间主要病史及控制情况-脑血管病'},
{name: 'MainSickControl2',formObject: {},showModule: true,formName: 'stroke_006',className: 'obj-form-title',dataSource: dataSourceMainSickControl2(this), hideTitle: true,ruleNew:true, title: '三、随访期间主要病史及控制情况-MRS评分(卒中患者12个月随访必填)'}, {name: 'MainSickControl2',formObject: {},showModule: true,formName: 'stroke_006',className: 'obj-form-title',dataSource: dataSourceMainSickControl2(this), hideTitle: true,ruleNew:true, title: '三、履约期间主要病史及控制情况-MRS评分(卒中患者12个月履约必填)'},
{name: 'MainSickControl3',formObject: {},showModule: true,formName: 'stroke_007',className: 'obj-form-title',dataSource: dataSourceMainSickControl3(this), hideTitle: true, title: '三、随访期间主要病史及控制情况-心脏病'}, {name: 'MainSickControl3',formObject: {},showModule: true,formName: 'stroke_007',className: 'obj-form-title',dataSource: dataSourceMainSickControl3(this), hideTitle: true, title: '三、履约期间主要病史及控制情况-心脏病'},
{name: 'MainSickControl4',formObject: {},showModule: true,formName: 'stroke_008',className: 'obj-form-title',dataSource: dataSourceMainSickControl4(this), hideTitle: true, title: '三、随访期间主要病史及控制情况-高血压'}, {name: 'MainSickControl4',formObject: {},showModule: true,formName: 'stroke_008',className: 'obj-form-title',dataSource: dataSourceMainSickControl4(this), hideTitle: true, title: '三、履约期间主要病史及控制情况-高血压'},
{name: 'MainSickControl5',formObject: {},showModule: true,formName: 'stroke_009',className: 'obj-form-title',dataSource: dataSourceMainSickControl5(this), hideTitle: true, title: '三、随访期间主要病史及控制情况-血脂异常'}, {name: 'MainSickControl5',formObject: {},showModule: true,formName: 'stroke_009',className: 'obj-form-title',dataSource: dataSourceMainSickControl5(this), hideTitle: true, title: '三、履约期间主要病史及控制情况-血脂异常'},
{name: 'MainSickControl6',formObject: {},showModule: true,formName: 'stroke_010',className: 'obj-form-title',dataSource: dataSourceMainSickControl6(this), hideTitle: true, title: '三、随访期间主要病史及控制情况-糖尿病'}, {name: 'MainSickControl6',formObject: {},showModule: true,formName: 'stroke_010',className: 'obj-form-title',dataSource: dataSourceMainSickControl6(this), hideTitle: true, title: '三、履约期间主要病史及控制情况-糖尿病'},
{name: 'TreatmentSituation',formObject: {},showModule: true,formName: 'stroke_011',className: 'obj-form-title',dataSource: dataSourceTreatmentSituation(this), title: '四、本次随访期间血管病变的外科手术或介入治疗情况'}, {name: 'TreatmentSituation',formObject: {},showModule: true,formName: 'stroke_011',className: 'obj-form-title',dataSource: dataSourceTreatmentSituation(this), title: '四、本次履约期间血管病变的外科手术或介入治疗情况'},
{name: 'TreatmentSituation2',formObject: {},showModule: true,formName: 'stroke_012',className: 'obj-form-title',dataSource: dataSourceTreatmentSituation2(this), hideTitle: true, title: '四、本次随访期间血管病变的外科手术或介入治疗情况-冠状动脉'}, {name: 'TreatmentSituation2',formObject: {},showModule: true,formName: 'stroke_012',className: 'obj-form-title',dataSource: dataSourceTreatmentSituation2(this), hideTitle: true, title: '四、本次履约期间血管病变的外科手术或介入治疗情况-冠状动脉'},
{name: 'TreatmentSituation3',formObject: {},showModule: true,formName: 'stroke_013',className: 'obj-form-title',dataSource: dataSourceTreatmentSituation3(this), hideTitle: true, title: '四、本次随访期间血管病变的外科手术或介入治疗情况-出血性卒中外科治疗'}, {name: 'TreatmentSituation3',formObject: {},showModule: true,formName: 'stroke_013',className: 'obj-form-title',dataSource: dataSourceTreatmentSituation3(this), hideTitle: true, title: '四、本次履约期间血管病变的外科手术或介入治疗情况-出血性卒中外科治疗'},
{name: 'CheckBody',formObject: {bmi: 0,},showModule: true,formName: 'stroke_014',className: 'obj-form-title',dataSource: dataSourceCheckBody(this), ruleNew:true,title: '五、体格检查(高危人群12个月随访必做)'}, {name: 'CheckBody',formObject: {bmi: 0,},showModule: true,formName: 'stroke_014',className: 'obj-form-title',dataSource: dataSourceCheckBody(this), ruleNew:true,title: '五、体格检查(高危人群12个月履约必做)'},
{name: 'CheckLab',formObject: {},showModule: true,formName: 'stroke_015',className: 'obj-form-title',dataSource: dataSourceCheckLab(this),ruleNew:true, title: '六、实验室检查(高危人群12个月随访必填)'}, {name: 'CheckLab',formObject: {},showModule: true,formName: 'stroke_015',className: 'obj-form-title',dataSource: dataSourceCheckLab(this),ruleNew:true, title: '六、实验室检查(高危人群12个月履约必填)'},
] ]
}, },
// 获取白名单域名 // 获取白名单域名
...@@ -215,28 +213,65 @@ ...@@ -215,28 +213,65 @@
}, },
// 动态开启验证开关 // 动态开启验证开关
setRuleToTrue(index){ setRuleToTrue(index){
this.addComponents[index].dataSource.forEach((item,k)=>{ if (this.addComponents[index].disabled === true) { //对未授权的敏感字段做处理,让置灰且非必填
if(item.rules && item.rules.length > 0){ this.addComponents[index].dataSource.forEach((item,k)=>{
if(!this.needRule){ this.addComponents[index].dataSource[k].disabled = true;
this.addComponents[index].dataSource[k].rules[0].required = true; if(item.rules && item.rules.length > 0){
}else{ this.addComponents[index].dataSource[k].rules[0].required = false;
this.addComponents[index].dataSource[k].rules[0].required = false;
} }
} if(this.$refs['form' + index].length > 0){
}) this.$refs['form' + index][0].resetFields();
}
})
}else {
this.addComponents[index].dataSource.forEach((item,k)=>{
if(item.rules && item.rules.length > 0){
if(!this.needRule){
this.addComponents[index].dataSource[k].rules[0].required = true;
}else{
this.addComponents[index].dataSource[k].rules[0].required = false;
}
}
})
}
}, },
// 获取展示的模块 // 获取展示的模块
getFormModules(){ getFormModules(){
getScaleModels(this.domain,this.scaleNo).then(res=>{ let para = {
planPatientsTimesId: this.planPatientsTimesId
}
// getScaleModels(this.domain,this.scaleNo).then(res=>{
getScaleModels2(this.domain,this.scaleNo, para).then(res=>{
if(res.code=='000000'){ if(res.code=='000000'){
this.moduleList = res.data; this.moduleList = res.data;
for(let i=0;i<this.moduleList.length;i++){ for(let i=0;i<this.moduleList.length;i++){
for(let j=0;j<this.addComponentsSourceList.length;j++){ for(let j=0;j<this.addComponentsSourceList.length;j++){
if(this.moduleList[i]==this.addComponentsSourceList[j].formName){ // if(this.moduleList[i]==this.addComponentsSourceList[j].formName){
this.addComponents.push(this.addComponentsSourceList[j]) if(this.moduleList[i].modelCode==this.addComponentsSourceList[j].formName){
// this.addComponents.push(this.addComponentsSourceList[j])
//把获取到每个模块的disabeld状态更新进将要渲染的数组
this.addComponents.push({...this.addComponentsSourceList[j],disabled: this.moduleList[i].disabled})
} }
} }
} }
/*start--根据当前模块是否获得居民权限,来判断是否可填写当前模块*/
this.addComponents.forEach((item,index)=>{
if (item.disabled === true) {
item.dataSource.forEach((item2,index2)=>{
// item2.disabled = true;
this.addComponents[index].dataSource[index2].disabled = true;
if (this.addComponents[index].dataSource[index2].rules) {
this.addComponents[index].dataSource[index2].rules[0].required = false;
}
})
}
})
/*end--*/
// console.log('展示的数组信息',this.addComponents)
// if(this.showBtn!='0'){
// // 获取量表详情
// this.getFormDetail();
// }
}else{ }else{
this.$message({ this.$message({
message: res.message, message: res.message,
...@@ -285,9 +320,26 @@ ...@@ -285,9 +320,26 @@
this.formData.scaleNo = this.scaleNo; this.formData.scaleNo = this.scaleNo;
this.formData.isLine = 2; this.formData.isLine = 2;
// console.log(JSON.stringify(this.formData)) // console.log(JSON.stringify(this.formData))
//判断是否放开敏感字段
let hasDisabled = false;
this.addComponents.forEach((item,index)=>{
if (item.disabled === true) {
hasDisabled = true
}
})
postScale(this.domain,this.formData).then(res=>{ postScale(this.domain,this.formData).then(res=>{
if(res.code=='000000'){ if(res.code=='000000'){
let doMsg = (this.saveWay==1) ? '提交成功' : '保存成功'; // let doMsg = (this.saveWay==1) ? '非敏感信息提交成功' : '保存成功';
let doMsg = '';
if (this.saveWay==1) {
if(hasDisabled === true){
doMsg = '非敏感信息提交成功'
}else {
doMsg = '提交成功'
}
}else {
doMsg = '保存成功'
}
this.$message({ this.$message({
message: doMsg, message: doMsg,
type: 'success' type: 'success'
...@@ -301,7 +353,7 @@ ...@@ -301,7 +353,7 @@
}) })
},1000) },1000)
}else{ }else{
let doMsg = (this.saveWay==1) ? '提交失败' : '保存失败'; let doMsg = (this.saveWay==1) ? '提交失败,请重试' : '保存失败';
this.$message({ this.$message({
message: doMsg, message: doMsg,
type: 'error' type: 'error'
...@@ -324,6 +376,11 @@ ...@@ -324,6 +376,11 @@
font-weight: bold; font-weight: bold;
font-size: 22px; font-size: 22px;
border-bottom: 1px dashed #ccc; border-bottom: 1px dashed #ccc;
.gray-tip{
color: #8C8C8C;
margin-left: 20px;
font-size: 16px;
}
} }
} }
} }
......
<template>
<div class="record-list-wrapper">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="record-list-content f-main-content screenSet">
<div class="page-title">录入管理</div>
<div class="search-div">
<div class="search-input">
<el-form
ref="serchForm"
:model="searchData"
:inline="true"
label-suffix=":"
label-width="125px"
size="small"
>
<el-form-item label="履约计划名称">
<el-input
v-model="searchData.planName"
placeholder="请输入关键词"
style="width: 250px"
clearable
></el-input>
</el-form-item>
<el-form-item label="履约时间范围">
<el-date-picker
v-model="timeRangeList"
type="datetimerange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss"
clearable
style="width:400px;"
></el-date-picker>
</el-form-item>
<el-form-item label="姓名">
<el-input v-model="searchData.nickname" placeholder="请输入姓名" clearable></el-input>
</el-form-item>
<el-form-item label="手机号">
<el-input
v-model="searchData.mobilePhone"
placeholder="请输入手机号"
maxlength="11"
clearable
></el-input>
</el-form-item>
</el-form>
</div>
<div class="search-btn">
<el-button class="button-green" size="small" type="primary" @click="search(1)">查询</el-button>
<el-button class="button-white" size="small" plain @click="reseat">重置</el-button>
</div>
</div>
<div class="table-content">
<el-radio-group v-model="activeName" @change="handlerClick" size="small">
<el-radio-button label>全部({{recordList.count}})</el-radio-button>
<el-radio-button label="2">已完成({{recordList.finishedCount}})</el-radio-button>
<el-radio-button label="1">未完成({{recordList.unfinishedCount}})</el-radio-button>
</el-radio-group>
<el-table :data="recordList.enteringDtos" style="width: 100%;margin-top: 20px;">
<el-table-column prop="nickname" label="姓名" min-width="100" align="center">
<template slot-scope="scope">
<!--<span style="cursor: pointer" @click="visitDetail(scope.row)">{{scope.row.nickname}}</span>-->
<el-button type="text" @click="visitDetail(scope.row)">{{scope.row.nickname}}</el-button>
</template>
</el-table-column>
<el-table-column prop="mobilePhone" label="手机号" min-width="100" align="center"></el-table-column>
<el-table-column prop="name" label="履约计划名称" min-width="150" align="center"></el-table-column>
<el-table-column prop="followupType" label="履约时间" min-width="200" align="center">
<template slot-scope="scope">
<span>{{scope.row.fuPlanInfo}}</span>
<br />
<span v-if="scope.row.fuPlanExecuteTime">{{scope.row.fuPlanExecuteTime}}</span>
<span
v-if="!scope.row.fuPlanExecuteTime && scope.row.appointmentTime"
>{{scope.row.appointmentTime}}</span>
<br />
<span
v-if="!scope.row.fuPlanExecuteTime && !scope.row.appointmentTime"
>{{scope.row.fuPlanTime}}</span>
</template>
</el-table-column>
<el-table-column prop="status" label="履约状态" min-width="100" align="center">
<template slot-scope="scope">
<span
:class="scope.row.status == 1 ? 'status-span': ''"
>{{ scope.row.status | statusFileter }}</span>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="210">
<template slot-scope="scope">
<el-button class="btn-right-class" type="text" @click="editRow(scope.row)">履约录入</el-button>|
<el-button
class="btn-right-class"
type="text"
@click="changeStatusRow(scope.row)"
>变更履约状态</el-button>
<!--|<el-button type="text" @click="sendRow(scope.row)">发送患教</el-button>-->
</template>
</el-table-column>
</el-table>
<el-row type="flex" justify="end" class="margin-top20">
<el-pagination
background
v-if="hasData"
@size-change="handleSizeChangePre"
@current-change="handleCurrentChangePre"
layout="total, sizes, prev, pager, next, jumper"
:current-page="paginationSet.pageNo"
:page-sizes="paginationSet.pageSizes"
:page-size="paginationSet.pageSize"
:total="paginationSet.total"
></el-pagination>
</el-row>
</div>
</div>
<followup-detail
:dialogFormVisible="dialogDetailShow"
@closeDetail="closeDetail"
:enteringInfo="enteringInfo"
></followup-detail>
<change-followup-status
:isShowChangeDialog="isShowChangeDialog"
:statusForm="statusForm"
@closeChangeStatus="closeChangeStatus"
></change-followup-status>
<el-dialog
title="选择量表"
:visible.sync="selectFormShow"
center
:close-on-click-modal="false"
:close-on-press-escape="false"
width="400px"
:before-close="closeForm"
>
<div class="list-content">
<p
v-for="(item, index) in formList.scalesList"
:key="index"
@click="goFormView(item)"
>{{item.sendContent}}</p>
</div>
</el-dialog>
<!-- 协议提醒 -->
<el-dialog
class="prot-dialog"
title
:visible.sync="isShowProtocolDialog1"
width="30%"
center
:show-close="false"
>
<p class="prot-dialog-tips-1">根据相关规定,在您开展履约之前,需要居民授权同意《云鹊平台隐私协议》,否则将导致履约量表部分信息无法录入</p>
<span slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="isShowProtocolDialog = false">我知道了</el-button>
</span>
</el-dialog>
<!-- 敏感词及协议校验 -->
<el-dialog class="prot-dialog" title="" :visible.sync="isShowProtocolDialog" width="30%" center :show-close=false>
<p class="prot-dialog-tips-1">由于该居民尚未同意《云鹊平台隐私协议》,将导致履约量表部分信息无法录入,为了方便您的工作开展,请您发送短信提醒居民完成授权</p>
<p v-show="!isSentedProt" class="prot-dialog-tips-2">若您选择暂不发送,您只能录入量表的非敏感信息</p>
<p v-show="isSentedProt" class="prot-dialog-tips-3">为避免打扰居民,7天内只能发送1次,您已发送过短信,请尽快联系居民同意授权</p>
<span v-show="!isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" @click="closeProtocolDialog"> 暂不发送 </el-button>
<el-button size="small" type="primary" @click="sendMsg"> 发送短信 </el-button>
</span>
<span v-show="isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="closeProtocolDialog"> 我知道了 </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import BreadCrumb from "@/components/breadcrumb";
import followupDetail from "./dialog/followupDetail";
import ChangeFollowupStatus from "./dialog/change-followup-status";
import { getSaasDomain } from "@/utils/index";
import { getFirstAccess } from '@/utils/followup/followapis'
import { mapState, mapGetters, mapActions } from "vuex";
export default {
components: {
BreadCrumb,
followupDetail,
ChangeFollowupStatus
},
data() {
return {
curmbFirst: "履约管理",
curmbSecond: "录入管理",
timeRangeList: [],
searchData: {
planName: "",
beginTime: "",
endTime: "",
nickname: "",
mobilePhone: ""
},
activeName: "",
paginationSet: {
pageNo: 1,
pageSize: 10,
total: 0,
pageSizes: [10, 20, 50, 100]
},
statusForm: {},
enteringRow: {},
dialogDetailShow: false,
isShowChangeDialog: false,
hasData: false,
selectFormShow: false,
ScaleData: {},
isShowProtocolDialog1: false,
isShowProtocolDialog: false,
scaleQuery: {},
isSentedProt: false
};
},
computed: {
...mapState("recordManage", {
recordList: state => state.recordList,
enteringInfo: state => state.enteringInfo,
formList: state => state.formList
}),
...mapGetters(["_token"])
},
created() {
// 验证是否首次进入 ################
// this.init();
this.search(1);
},
mounted() {
this.isFirstEnter();
},
methods: {
...mapActions("recordManage", [
"getRecordList",
"getEnteringInfo",
"getFormList"
]),
// 验证是否首次进入 ################
isFirstEnter() {
getFirstAccess().then((res) => {
if(res.code == '000000') {
this.isShowProtocolDialog1 = res.data
}
});
},
async search(currentPage) {
if (this.timeRangeList) {
this.searchData.beginTime = this.timeRangeList[0];
this.searchData.endTime = this.timeRangeList[1];
} else {
this.searchData.beginTime = "";
this.searchData.endTime = "";
}
await this.getRecordList({
...this.searchData,
status: this.activeName,
pageNo: currentPage || this.paginationSet.pageNo,
pageSize: this.paginationSet.pageSize
});
if (this.recordList.enteringDtos) {
if (this.recordList.enteringDtos.length > 0) {
this.hasData = true;
} else {
this.hasData = false;
}
}
const {
pageNo,
pageSize,
count,
finishedCount,
unfinishedCount
} = this.recordList;
if (this.activeName == "") {
this.paginationSet.total = count;
} else if (this.activeName == 2) {
this.paginationSet.total = finishedCount;
} else if (this.activeName == 1) {
this.paginationSet.total = unfinishedCount;
}
this.paginationSet = {
...this.paginationSet,
pageNo,
pageSize: pageSize
};
},
reseat() {
this.searchData.planName = "";
this.searchData.nickname = "";
this.searchData.mobilePhone = "";
this.timeRangeList = [];
this.searchData.beginTime = "";
this.searchData.endTime = "";
this.search(1);
},
async visitDetail(row) {
await this.getEnteringInfo({
patientId: row.patientId,
fuPlanPatientTimesId: row.fuPlanPatientTimesId
});
this.dialogDetailShow = true;
// this.enteringRow = row;
},
closeDetail(val) {
this.dialogDetailShow = val;
},
handlerClick() {
this.search(1);
},
async editRow(row) {
await this.getFormList(row.fuPlanTimesId); //获取量表列表
//获取量表列表情况
if (this.formList.scalesList.length > 1) {
this.selectFormShow = true;
this.ScaleData = {
doctorId: this.formList.doctorId,
planPatientsTimesId: row.fuPlanPatientTimesId
};
} else if (this.formList.scalesList.length === 1) {
this.$router.push({
path: "/followup/record-manage/form-template",
query: {
doctorId: this.formList.doctorId,
scaleNo: this.formList.scalesList[0].resourceId,
planPatientsTimesId: row.fuPlanPatientTimesId,
planTimesId: row.planTimesId,
showBtn: 1
}
});
// this.scaleQuery = {
// doctorId: this.formList.doctorId,
// scaleNo: this.formList.scalesList[0].resourceId,
// planPatientsTimesId: row.planPatientTimesId,
// planTimesId: row.planTimesId,
// showBtn: 1
// }
// this.needSign()
} else {
this.$message.warning("暂无量表!");
}
// 不区分量表列表长度问题,直接调试量表录入
// this.$router.push({
// name: 'formTemplate',
// params: {
// data: row
// }
// })
},
changeStatusRow(row) {
this.statusForm = row;
this.isShowChangeDialog = true;
},
sendRow(row) {
let saasUrl = getSaasDomain(
`/pica-frontend/patientEduManage/pica_patient_edu_manage.html#/pageTab/message?patientId=${row.patientId}&nickname=${row.nickname}&token=${this._token}`
);
// let saasUrl = getSaasDomain(`/pica-frontend/patientEduManage/pica_patient_edu_manage.html#/pageTab/message?patientId=${row.patientId}&nickname=${row.nickname}&token=8143DC2A026B4602BF7B746FB5AEE9A1`);
window.open(saasUrl);
},
handleSizeChangePre(pageSize) {
this.paginationSet["pageSize"] = pageSize;
this.paginationSet["pageNo"] = 1;
this.search();
},
handleCurrentChangePre(pageNo) {
this.paginationSet["pageNo"] = pageNo;
this.search();
},
closeChangeStatus(val) {
this.isShowChangeDialog = val;
this.search();
// let getArguments = arguments[0];
// this.isShowChangeDialog = getArguments[0];
// this.statusForm = getArguments[1];
},
goFormView(item) {
this.selectFormShow = false;
this.$router.push({
path: "/followup/record-manage/form-template",
query: {
doctorId: this.ScaleData.doctorId,
scaleNo: item.resourceId,
planPatientsTimesId: this.ScaleData.planPatientsTimesId,
planTimesId: item.planTimesId,
showBtn: 1
}
});
// this.scaleQuery = {
// doctorId: this.ScaleData.doctorId,
// scaleNo: item.resourceId,
// planPatientsTimesId: this.ScaleData.planPatientsTimesId,
// planTimesId: item.planTimesId,
// showBtn: 1
// }
// this.needSign()
},
closeForm() {
this.selectFormShow = false;
},
// 敏感词校验与签署协议逻辑
// 1. 判断量表内是否存在敏感词
// 2. 判断居民是否存签署协议
// 3. 七天内是否发送过
needSign(scaleId, query) {
// let statusConfig =await getStatusByScaleId(scaleId)
let statusConfig = {
isSensitive: 1, // 量表内是否存在敏感词 0: 否;1: 是
hasProtocol: 0, // 居民是否存签署协议 0: 否;1: 是
hasSented: 0 // 七天内是否发送过 0: 否;1: 是
};
if (statusConfig.isSensitive == 1 && statusConfig.hasProtocol == 0) {
this.isShowProtocolDialog = true
this.isSentedProt = statusConfig.hasSented == 1
} else {
this.jumpToScale()
}
},
// 统一跳转到量表页面
jumpToScale() {
// this.$router.push({
// path: "/followup/record-manage/form-template",
// query: this.scaleQuery
// });
},
// 关闭协议确认窗口
closeProtocolDialog() {
this.isShowProtocolDialog = false
this.jumpToScale()
},
// 发送短信通知
sendMsg(residentId) {
// this.sendMsgToResident(residentId);
this.closeProtocolDialog()
},
},
filters: {
statusFileter: function(value) {
if (!value && value != 0) {
return "";
} else {
let hash = {
1: "未完成",
2: "已完成"
};
return hash[value];
}
}
}
};
</script>
<style scoped lang="scss">
@import "../../../style/followup/followup-common";
@import "../../../style/followup/element-reset.css";
.record-list-wrapper {
.record-list-content {
.search-input {
max-width: none;
flex: 1;
}
.margin-top20 {
margin-top: 20px;
}
.status-span {
color: $picaGreen;
}
}
.list-content {
p {
cursor: pointer;
line-height: 30px;
text-decoration: underline;
color: $picaGreen;
}
}
}
</style>
<template> <template>
<div class="record-list-wrapper"> <div class="record-list-wrapper">
<bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb> <bread-crumb :curmbFirst="curmbFirst" :curmbSecond="curmbSecond"></bread-crumb>
<div class="record-list-content f-main-content screenSet"> <div class="record-list-content f-main-content screenSet">
<div class="page-title">录入管理</div> <div class="page-title">录入管理</div>
<div class="search-div"> <div class="search-div">
<div class="search-input"> <div class="search-input">
<el-form ref="serchForm" :model="searchData" :inline="true" label-suffix=":" label-width="125px" size="small"> <el-form
<el-form-item label="随访计划名称"> ref="serchForm"
<el-input v-model="searchData.planName" placeholder="请输入关键词" style="width: 250px" clearable></el-input> :model="searchData"
</el-form-item> :inline="true"
<el-form-item label="随访时间范围"> label-suffix=":"
<el-date-picker label-width="125px"
v-model="timeRangeList" size="small"
type="datetimerange" >
range-separator="至" <el-form-item label="履约计划名称">
start-placeholder="开始日期" <el-input
end-placeholder="结束日期" v-model="searchData.planName"
value-format="yyyy-MM-dd HH:mm:ss" placeholder="请输入关键词"
clearable style="width: 250px"
style="width:400px;"> clearable
</el-date-picker> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="姓名"> <el-form-item label="履约时间范围">
<el-input v-model="searchData.nickname" placeholder="请输入姓名" clearable></el-input> <el-date-picker
</el-form-item> v-model="timeRangeList"
<el-form-item label="手机号"> type="datetimerange"
<el-input v-model="searchData.mobilePhone" placeholder="请输入手机号" maxlength="11" clearable></el-input> range-separator="至"
</el-form-item> start-placeholder="开始日期"
</el-form> end-placeholder="结束日期"
</div> value-format="yyyy-MM-dd HH:mm:ss"
<div class="search-btn"> clearable
<el-button class="button-green" size="small" type="primary" @click="search(1)">查询</el-button> style="width:400px;"
<el-button class="button-white" size="small" plain @click="reseat">重置</el-button> ></el-date-picker>
</div> </el-form-item>
<el-form-item label="姓名">
<el-input v-model="searchData.nickname" placeholder="请输入姓名" clearable></el-input>
</el-form-item>
<el-form-item label="手机号">
<el-input
v-model="searchData.mobilePhone"
placeholder="请输入手机号"
maxlength="11"
clearable
></el-input>
</el-form-item>
</el-form>
</div> </div>
<div class="table-content"> <div class="search-btn">
<el-radio-group v-model="activeName" @change="handlerClick" size="small"> <el-button class="button-green" size="small" type="primary" @click="search(1)">查询</el-button>
<el-radio-button label="">全部({{recordList.count}})</el-radio-button> <el-button class="button-white" size="small" plain @click="reseat">重置</el-button>
<el-radio-button label="2">已完成({{recordList.finishedCount}})</el-radio-button> </div>
<el-radio-button label="1">未完成({{recordList.unfinishedCount}})</el-radio-button> </div>
</el-radio-group> <div class="table-content">
<el-table :data="recordList.enteringDtos" style="width: 100%;margin-top: 20px;"> <el-radio-group v-model="activeName" @change="handlerClick" size="small">
<el-radio-button label>全部({{recordList.count}})</el-radio-button>
<el-radio-button label="2">已完成({{recordList.finishedCount}})</el-radio-button>
<el-radio-button label="1">未完成({{recordList.unfinishedCount}})</el-radio-button>
</el-radio-group>
<el-table :data="recordList.enteringDtos" style="width: 100%;margin-top: 20px;">
<el-table-column prop="nickname" label="姓名" min-width="100" align="center"> <el-table-column prop="nickname" label="姓名" min-width="100" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<!--<span style="cursor: pointer" @click="visitDetail(scope.row)">{{scope.row.nickname}}</span>--> <!--<span style="cursor: pointer" @click="visitDetail(scope.row)">{{scope.row.nickname}}</span>-->
...@@ -48,187 +65,290 @@ ...@@ -48,187 +65,290 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="mobilePhone" label="手机号" min-width="100" align="center"></el-table-column> <el-table-column prop="mobilePhone" label="手机号" min-width="100" align="center"></el-table-column>
<el-table-column prop="name" label="随访计划名称" min-width="150" align="center"></el-table-column> <el-table-column prop="name" label="履约计划名称" min-width="150" align="center"></el-table-column>
<el-table-column prop="followupType" label="随访时间" min-width="200" align="center"> <el-table-column prop="followupType" label="履约时间" min-width="200" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{scope.row.fuPlanInfo}}</span><br/> <span>{{scope.row.fuPlanInfo}}</span>
<span v-if="scope.row.fuPlanExecuteTime">{{scope.row.fuPlanExecuteTime}}</span> <br />
<span v-if="!scope.row.fuPlanExecuteTime && scope.row.appointmentTime">{{scope.row.appointmentTime}}</span><br/> <span v-if="scope.row.fuPlanExecuteTime">{{scope.row.fuPlanExecuteTime}}</span>
<span v-if="!scope.row.fuPlanExecuteTime && !scope.row.appointmentTime">{{scope.row.fuPlanTime}}</span> <span
</template> v-if="!scope.row.fuPlanExecuteTime && scope.row.appointmentTime"
>{{scope.row.appointmentTime}}</span>
<br />
<span
v-if="!scope.row.fuPlanExecuteTime && !scope.row.appointmentTime"
>{{scope.row.fuPlanTime}}</span>
</template>
</el-table-column> </el-table-column>
<el-table-column prop="status" label="随访状态" min-width="100" align="center"> <el-table-column prop="status" label="履约状态" min-width="100" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span :class="scope.row.status == 1 ? 'status-span': ''">{{ scope.row.status | statusFileter }}</span> <span
:class="scope.row.status == 1 ? 'status-span': ''"
>{{ scope.row.status | statusFileter }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" fixed="right" align="center" min-width="210"> <el-table-column label="操作" fixed="right" align="center" min-width="210">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button class="btn-right-class" type="text" @click="editRow(scope.row)">随访录入</el-button>| <el-button class="btn-right-class" type="text" @click="editRow(scope.row)">履约录入</el-button>|
<el-button class="btn-right-class" type="text" @click="changeStatusRow(scope.row)"> 变更随访状态</el-button> <el-button
class="btn-right-class"
type="text"
@click="changeStatusRow(scope.row)"
>变更履约状态</el-button>
<!--|<el-button type="text" @click="sendRow(scope.row)">发送患教</el-button>--> <!--|<el-button type="text" @click="sendRow(scope.row)">发送患教</el-button>-->
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-row type="flex" justify="end" class="margin-top20"> <el-row type="flex" justify="end" class="margin-top20">
<el-pagination <el-pagination
background background
v-if="hasData" v-if="hasData"
@size-change="handleSizeChangePre" @size-change="handleSizeChangePre"
@current-change="handleCurrentChangePre" @current-change="handleCurrentChangePre"
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:current-page="paginationSet.pageNo" :current-page="paginationSet.pageNo"
:page-sizes="paginationSet.pageSizes" :page-sizes="paginationSet.pageSizes"
:page-size="paginationSet.pageSize" :page-size="paginationSet.pageSize"
:total="paginationSet.total"> :total="paginationSet.total"
</el-pagination> ></el-pagination>
</el-row> </el-row>
</div>
</div> </div>
<followup-detail :dialogFormVisible="dialogDetailShow" @closeDetail="closeDetail" :enteringInfo="enteringInfo"></followup-detail>
<change-followup-status :isShowChangeDialog="isShowChangeDialog" :statusForm="statusForm" @closeChangeStatus="closeChangeStatus"></change-followup-status>
<el-dialog title="选择量表"
:visible.sync="selectFormShow"
center
:close-on-click-modal="false"
:close-on-press-escape="false"
width="400px"
:before-close="closeForm">
<div class="list-content">
<p v-for="(item, index) in formList.scalesList" :key="index" @click="goFormView(item)">{{item.sendContent}}</p>
</div>
</el-dialog>
</div> </div>
<followup-detail
:dialogFormVisible="dialogDetailShow"
@closeDetail="closeDetail"
:enteringInfo="enteringInfo"
></followup-detail>
<change-followup-status
:isShowChangeDialog="isShowChangeDialog"
:statusForm="statusForm"
@closeChangeStatus="closeChangeStatus"
></change-followup-status>
<el-dialog
title="选择量表"
:visible.sync="selectFormShow"
center
:close-on-click-modal="false"
:close-on-press-escape="false"
width="400px"
:before-close="closeForm"
>
<div class="list-content">
<p
v-for="(item, index) in formList.scalesList"
:key="index"
@click="goFormView(item)"
>{{item.sendContent}}</p>
</div>
</el-dialog>
<!-- 协议提醒 -->
<el-dialog
class="prot-dialog"
title
:visible.sync="isShowProtocolDialog1"
width="30%"
center
:show-close="false"
>
<p class="prot-dialog-tips-1">根据相关规定,在您开展履约之前,需要居民授权同意《云鹊平台隐私协议》,否则将导致履约量表部分信息无法录入</p>
<span slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="isShowProtocolDialog1 = false">我知道了</el-button>
</span>
</el-dialog>
<!-- 敏感词及协议校验 -->
<el-dialog class="prot-dialog" title="" :visible.sync="isShowProtocolDialog" width="30%" center :show-close=false>
<p class="prot-dialog-tips-1">由于该居民尚未同意《云鹊平台隐私协议》,将导致履约量表部分信息无法录入,为了方便您的工作开展,请您发送短信提醒居民完成授权</p>
<p v-show="!isSentedProt" class="prot-dialog-tips-2">若您选择暂不发送,您只能录入量表的非敏感信息</p>
<p v-show="isSentedProt" class="prot-dialog-tips-3">为避免打扰居民,7天内只能发送1次,您已发送过短信,请尽快联系居民同意授权</p>
<span v-show="!isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" @click="closeProtocolDialog"> 暂不发送 </el-button>
<el-button size="small" type="primary" @click="sendMsg"> 发送短信 </el-button>
</span>
<span v-show="isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="closeProtocolDialog"> 我知道了 </el-button>
</span>
</el-dialog>
</div>
</template> </template>
<script> <script>
import BreadCrumb from "@/components/breadcrumb"; import BreadCrumb from "@/components/breadcrumb";
import followupDetail from "./dialog/followupDetail"; import followupDetail from "./dialog/followupDetail";
import ChangeFollowupStatus from "./dialog/change-followup-status"; import ChangeFollowupStatus from "./dialog/change-followup-status";
import { getSaasDomain } from '@/utils/index' import { getSaasDomain } from "@/utils/index";
import { mapState,mapGetters, mapActions } from 'vuex'; import { getFirstAccess, uniteValidate, authMessage } from '@/utils/followup/followapis'
import { mapState, mapGetters, mapActions } from "vuex";
export default {
components: {
BreadCrumb,
followupDetail,
ChangeFollowupStatus
},
data() {
return {
curmbFirst: "履约管理",
curmbSecond: "录入管理",
timeRangeList: [],
searchData: {
planName: "",
beginTime: "",
endTime: "",
nickname: "",
mobilePhone: ""
},
activeName: "",
paginationSet: {
pageNo: 1,
pageSize: 10,
total: 0,
pageSizes: [10, 20, 50, 100]
},
statusForm: {},
enteringRow: {},
dialogDetailShow: false,
isShowChangeDialog: false,
hasData: false,
selectFormShow: false,
ScaleData: {},
isShowProtocolDialog1: false,
isShowProtocolDialog: false,
scaleQuery: {},
isSentedProt: false,
scaleNo: '',
patientIds: [],
sendMsgPatientIds: [],
};
},
computed: {
...mapState("recordManage", {
recordList: state => state.recordList,
enteringInfo: state => state.enteringInfo,
formList: state => state.formList
}),
...mapGetters(["_token"])
},
created() {
// 验证是否首次进入 ################
// this.init();
this.search(1);
},
mounted() {
this.isFirstEnter();
},
methods: {
...mapActions("recordManage", [
"getRecordList",
"getEnteringInfo",
"getFormList"
]),
export default { // 验证是否首次进入 ################
components:{ isFirstEnter() {
BreadCrumb, getFirstAccess().then((res) => {
followupDetail, if(res.code == '000000') {
ChangeFollowupStatus this.isShowProtocolDialog1 = res.data
}
});
}, },
data(){ async search(currentPage) {
return{ if (this.timeRangeList) {
curmbFirst: '随访管理', this.searchData.beginTime = this.timeRangeList[0];
curmbSecond: '录入管理', this.searchData.endTime = this.timeRangeList[1];
timeRangeList: [], } else {
searchData: { this.searchData.beginTime = "";
planName: '', this.searchData.endTime = "";
beginTime: '', }
endTime: '', await this.getRecordList({
nickname: '', ...this.searchData,
mobilePhone: '' status: this.activeName,
}, pageNo: currentPage || this.paginationSet.pageNo,
activeName: '', pageSize: this.paginationSet.pageSize
paginationSet: { });
pageNo: 1, if (this.recordList.enteringDtos) {
pageSize: 10, if (this.recordList.enteringDtos.length > 0) {
total: 0, this.hasData = true;
pageSizes: [10,20,50,100] } else {
}, this.hasData = false;
statusForm: {}, }
enteringRow: {},
dialogDetailShow: false,
isShowChangeDialog: false,
hasData: false,
selectFormShow: false,
ScaleData: {}
} }
const {
pageNo,
pageSize,
count,
finishedCount,
unfinishedCount
} = this.recordList;
if (this.activeName == "") {
this.paginationSet.total = count;
} else if (this.activeName == 2) {
this.paginationSet.total = finishedCount;
} else if (this.activeName == 1) {
this.paginationSet.total = unfinishedCount;
}
this.paginationSet = {
...this.paginationSet,
pageNo,
pageSize: pageSize
};
},
reseat() {
this.searchData.planName = "";
this.searchData.nickname = "";
this.searchData.mobilePhone = "";
this.timeRangeList = [];
this.searchData.beginTime = "";
this.searchData.endTime = "";
this.search(1);
},
async visitDetail(row) {
await this.getEnteringInfo({
patientId: row.patientId,
fuPlanPatientTimesId: row.fuPlanPatientTimesId
});
this.dialogDetailShow = true;
// this.enteringRow = row;
}, },
computed: { closeDetail(val) {
...mapState('recordManage',{ this.dialogDetailShow = val;
recordList: state => state.recordList,
enteringInfo: state => state.enteringInfo,
formList: state => state.formList,
}),
...mapGetters([
'_token',
])
}, },
created() { handlerClick() {
this.search(1); this.search(1);
}, },
mounted() {}, async editRow(row) {
methods: { await this.getFormList(row.fuPlanTimesId); //获取量表列表
...mapActions('recordManage', ['getRecordList', 'getEnteringInfo', 'getFormList']), //获取量表列表情况
async search(currentPage){ this.patientIds = [row.patientId];
if(this.timeRangeList) { if (this.formList.scalesList.length > 1) {
this.searchData.beginTime = this.timeRangeList[0]; this.selectFormShow = true;
this.searchData.endTime = this.timeRangeList[1]; this.ScaleData = {
}else { doctorId: this.formList.doctorId,
this.searchData.beginTime = ''; planPatientsTimesId: row.fuPlanPatientTimesId
this.searchData.endTime = ''; };
} } else if (this.formList.scalesList.length === 1) {
await this.getRecordList({ // this.$router.push({
...this.searchData, // path: "/followup/record-manage/form-template",
status: this.activeName, // query: {
pageNo: currentPage || this.paginationSet.pageNo, // doctorId: this.formList.doctorId,
pageSize: this.paginationSet.pageSize, // scaleNo: this.formList.scalesList[0].resourceId,
}); // planPatientsTimesId: row.fuPlanPatientTimesId,
if(this.recordList.enteringDtos){ // planTimesId: row.planTimesId,
if(this.recordList.enteringDtos.length > 0) { // showBtn: 1
this.hasData = true; // }
}else { // });
this.hasData = false; this.scaleQuery = {
} doctorId: this.formList.doctorId,
scaleNo: this.formList.scalesList[0].resourceId,
planPatientsTimesId: row.fuPlanPatientTimesId,
planTimesId: row.planTimesId,
showBtn: 1
} }
const {pageNo, pageSize, count, finishedCount, unfinishedCount} = this.recordList; this.scaleNo = this.formList.scalesList[0].resourceId;
if(this.activeName == ''){ this.uniteValidateAction()
this.paginationSet.total = count;
}else if(this.activeName == 2){
this.paginationSet.total = finishedCount;
}else if(this.activeName == 1){
this.paginationSet.total = unfinishedCount;
}
this.paginationSet = {
...this.paginationSet,
pageNo,
pageSize: pageSize,
}
},
reseat(){
this.searchData.planName = '';
this.searchData.nickname = '';
this.searchData.mobilePhone = '';
this.timeRangeList = [];
this.searchData.beginTime = '';
this.searchData.endTime = '';
this.search(1);
},
async visitDetail(row){
await this.getEnteringInfo({patientId:row.patientId,fuPlanPatientTimesId:row.fuPlanPatientTimesId});
this.dialogDetailShow = true;
// this.enteringRow = row;
}, } else {
closeDetail(val){ this.$message.warning("暂无量表!");
this.dialogDetailShow = val; }
},
handlerClick(){
this.search(1);
},
async editRow(row){
await this.getFormList(row.fuPlanTimesId); //获取量表列表
//获取量表列表情况
if(this.formList.scalesList.length > 1){
this.selectFormShow = true
this.ScaleData = {
doctorId: this.formList.doctorId,
planPatientsTimesId: row.fuPlanPatientTimesId
}
}else if(this.formList.scalesList.length === 1){
this.$router.push({path: '/followup/record-manage/form-template',
query: {doctorId: this.formList.doctorId, scaleNo: this.formList.scalesList[0].resourceId, planPatientsTimesId: row.fuPlanPatientTimesId,planTimesId : row.planTimesId, showBtn: 1}})
}else {
this.$message.warning('暂无量表!')
}
// 不区分量表列表长度问题,直接调试量表录入 // 不区分量表列表长度问题,直接调试量表录入
// this.$router.push({ // this.$router.push({
// name: 'formTemplate', // name: 'formTemplate',
...@@ -236,76 +356,161 @@ ...@@ -236,76 +356,161 @@
// data: row // data: row
// } // }
// }) // })
},
changeStatusRow(row){
this.statusForm = row;
this.isShowChangeDialog = true;
},
sendRow(row){
let saasUrl = getSaasDomain(`/pica-frontend/patientEduManage/pica_patient_edu_manage.html#/pageTab/message?patientId=${row.patientId}&nickname=${row.nickname}&token=${this._token}`);
// let saasUrl = getSaasDomain(`/pica-frontend/patientEduManage/pica_patient_edu_manage.html#/pageTab/message?patientId=${row.patientId}&nickname=${row.nickname}&token=8143DC2A026B4602BF7B746FB5AEE9A1`);
window.open(saasUrl)
},
handleSizeChangePre(pageSize){
this.paginationSet['pageSize'] = pageSize;
this.paginationSet['pageNo'] = 1;
this.search();
},
handleCurrentChangePre(pageNo){
this.paginationSet['pageNo'] = pageNo;
this.search();
},
closeChangeStatus(val){
this.isShowChangeDialog = val;
this.search();
// let getArguments = arguments[0];
// this.isShowChangeDialog = getArguments[0];
// this.statusForm = getArguments[1];
},
goFormView(item) {
this.selectFormShow = false;
this.$router.push({path: '/followup/record-manage/form-template',
query: {doctorId: this.ScaleData.doctorId, scaleNo: item.resourceId, planPatientsTimesId: this.ScaleData.planPatientsTimesId,planTimesId : item.planTimesId, showBtn: 1}});
},
closeForm() {
this.selectFormShow = false;
},
}, },
filters: { changeStatusRow(row) {
statusFileter: function(value) { this.statusForm = row;
if (!value && value != 0) { this.isShowChangeDialog = true;
return ''; },
} else { sendRow(row) {
let hash = { let saasUrl = getSaasDomain(
1: '未完成', `/pica-frontend/patientEduManage/pica_patient_edu_manage.html#/pageTab/message?patientId=${row.patientId}&nickname=${row.nickname}&token=${this._token}`
2: '已完成' );
}; // let saasUrl = getSaasDomain(`/pica-frontend/patientEduManage/pica_patient_edu_manage.html#/pageTab/message?patientId=${row.patientId}&nickname=${row.nickname}&token=8143DC2A026B4602BF7B746FB5AEE9A1`);
return hash[value]; window.open(saasUrl);
},
handleSizeChangePre(pageSize) {
this.paginationSet["pageSize"] = pageSize;
this.paginationSet["pageNo"] = 1;
this.search();
},
handleCurrentChangePre(pageNo) {
this.paginationSet["pageNo"] = pageNo;
this.search();
},
closeChangeStatus(val) {
this.isShowChangeDialog = val;
this.search();
// let getArguments = arguments[0];
// this.isShowChangeDialog = getArguments[0];
// this.statusForm = getArguments[1];
},
goFormView(item) {
this.selectFormShow = false;
// this.$router.push({
// path: "/followup/record-manage/form-template",
// query: {
// doctorId: this.ScaleData.doctorId,
// scaleNo: item.resourceId,
// planPatientsTimesId: this.ScaleData.planPatientsTimesId,
// planTimesId: item.planTimesId,
// showBtn: 1
// }
// });
this.scaleQuery = {
doctorId: this.ScaleData.doctorId,
scaleNo: item.resourceId,
planPatientsTimesId: this.ScaleData.planPatientsTimesId,
planTimesId: item.planTimesId,
showBtn: 1
};
this.scaleNo = item.resourceId;
// this.patientIds = [this.ScaleData.patientId];
this.uniteValidateAction();
},
closeForm() {
this.selectFormShow = false;
},
// Add by Anndy Yang
// 统一验证:量表内是否存在敏感字段、居民是否签署隐私协议、7天内是否发送过授权短信
uniteValidateAction() {
let validParams = {
scaleNo: this.scaleNo,
patientIds: this.patientIds, // pc端只传这个字段
// planPatientsTimesId: planPatientsTimesId, // app端只传这个字段
protocolType: 5,
userType: 1,
validateType: 1
};
uniteValidate(validParams).then(res => {
let result = res;
// 请求成功
if (result.code === '000000') {
let levelType = result.data.levelType;
// 没有敏感字段或者居民已经签订过协议,则直接返回
if (levelType === 1 || levelType === 2) {
this.jumpToScale();
} else if (levelType === 3) {
this.isShowProtocolDialog = true;
this.isSentedProt = true;
} else if (levelType === 4) {
this.isShowProtocolDialog = true;
this.isSentedProt = false;
this.sendMsgPatientIds = result.data.ids;
}
} }
}, });
},
// 发送协议授权短信给居民
sendMsgToPatients() {
authMessage({ patientIds: this.sendMsgPatientIds }).then(res => {
if (res.code === '000000') {
this.$message({
message: '已发送,请尽快联系居民同意授权',
type: 'success'
});
}
});
this.isShowProtocolDialog = false;
},
// 统一跳转到量表页面
jumpToScale() {
this.$router.push({
path: "/followup/record-manage/form-template",
query: this.scaleQuery
});
}, },
// 关闭协议确认窗口
closeProtocolDialog() {
this.isShowProtocolDialog = false
this.jumpToScale()
},
// 发送短信通知
sendMsg() {
this.sendMsgToPatients();
this.closeProtocolDialog()
},
},
filters: {
statusFileter: function(value) {
if (!value && value != 0) {
return "";
} else {
let hash = {
1: "未完成",
2: "已完成"
};
return hash[value];
}
}
} }
};
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import "../../../style/followup/followup-common";
@import '../../../style/followup/followup-common'; @import "../../../style/followup/element-reset.css";
@import '../../../style/followup/element-reset.css'; .record-list-wrapper {
.record-list-wrapper{ .record-list-content {
.record-list-content{ .search-input {
.search-input{
max-width: none; max-width: none;
flex: 1; flex: 1;
} }
.margin-top20{ .margin-top20 {
margin-top: 20px; margin-top: 20px;
} }
.status-span{ .status-span {
color: $picaGreen; color: $picaGreen;
} }
} }
.list-content{ .list-content {
p{ p {
cursor: pointer; cursor: pointer;
line-height: 30px; line-height: 30px;
text-decoration: underline; text-decoration: underline;
......
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
<p class="warn-tips" v-if="reservationForm.appointmentDate">该日期已经成功预约{{getRevervationNum}}人,请确保能在此时间段完成预约的随访任务</p> <p class="warn-tips" v-if="reservationForm.appointmentDate">该日期已经成功预约{{getRevervationNum}}人,请确保能在此时间段完成预约的履约任务</p>
</el-form-item> </el-form-item>
<el-form-item label="变更原因" prop="reason"> <el-form-item label="变更原因" prop="reason">
<el-input type="textarea" v-model="reservationForm.changeReason" placeholder="请输入变更原因" maxlength="30" rows="3" style="width:60%;"></el-input> <el-input type="textarea" v-model="reservationForm.changeReason" placeholder="请输入变更原因" maxlength="30" rows="3" style="width:60%;"></el-input>
......
<template> <template>
<div class="dialog-wrap"> <div class="dialog-wrap">
<el-dialog title="预约随访居民" <el-dialog title="预约履约居民"
:visible.sync="reservationDialog" :visible.sync="reservationDialog"
v-if="isDialogShow" v-if="isDialogShow"
center center
...@@ -43,13 +43,13 @@ ...@@ -43,13 +43,13 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</div> </div>
<p class="warn-tips" v-if="reservationForm.appointmentDate">该日期已经成功预约{{getRevervationNum}}人,请确保能在此时间段完成预约的随访任务</p> <p class="warn-tips" v-if="reservationForm.appointmentDate">该日期已经成功预约{{getRevervationNum}}人,请确保能在此时间段完成预约的履约任务</p>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="reservation-content content-list" v-if="reservationForm.appointmentDate && reservationForm.appointmentRange"> <div class="reservation-content content-list" v-if="reservationForm.appointmentDate && reservationForm.appointmentRange">
<div class="item"> <div class="item">
<span class="title">发送内容:</span> <span class="title">发送内容:</span>
<p>{{userName}}医生邀请您在{{reservationForm.appointmentDate}}{{reservationForm.appointmentRange}}进行随访,请确认是否参加。</p> <p>{{userName}}医生邀请您在{{reservationForm.appointmentDate}}{{reservationForm.appointmentRange}}进行履约,请确认是否参加。</p>
</div> </div>
<div class="item"> <div class="item">
<span class="title">本次推送:</span> <span class="title">本次推送:</span>
......
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
<div class="search-div"> <div class="search-div">
<div class="search-input"> <div class="search-input">
<el-form :model="searchData" ref="searchData" :inline="true" :label-width="labelWidth"> <el-form :model="searchData" ref="searchData" :inline="true" :label-width="labelWidth">
<el-form-item label="随访计划名称:" prop="planName"> <el-form-item label="履约计划名称:" prop="planName">
<el-input v-model="searchData.planName" size="small" placeholder="请输入随访计划名称" clearable></el-input> <el-input v-model="searchData.planName" size="small" placeholder="请输入履约计划名称" clearable></el-input>
</el-form-item> </el-form-item>
<el-form-item label="姓名:" prop="nickname"> <el-form-item label="姓名:" prop="nickname">
<el-input v-model="searchData.nickname" size="small" placeholder="请输入姓名" clearable></el-input> <el-input v-model="searchData.nickname" size="small" placeholder="请输入姓名" clearable></el-input>
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<el-form-item label="手机号:" prop="mobilePhone"> <el-form-item label="手机号:" prop="mobilePhone">
<el-input v-model="searchData.mobilePhone" size="small" placeholder="请输入手机号" clearable></el-input> <el-input v-model="searchData.mobilePhone" size="small" placeholder="请输入手机号" clearable></el-input>
</el-form-item> </el-form-item>
<el-form-item label="随访时间范围:" prop="planTimes" clearable> <el-form-item label="履约时间范围:" prop="planTimes" clearable>
<el-date-picker <el-date-picker
v-model="searchData.planTimes" v-model="searchData.planTimes"
type="daterange" type="daterange"
...@@ -86,18 +86,18 @@ ...@@ -86,18 +86,18 @@
</el-table-column> </el-table-column>
<el-table-column <el-table-column
prop="name" prop="name"
label="随访计划名称" label="履约计划名称"
align="center"> align="center">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
width="160" width="160"
prop="fuPlanTime" prop="fuPlanTime"
label="随访计划时间" label="履约计划时间"
align="center"> align="center">
</el-table-column> </el-table-column>
<el-table-column <el-table-column
width="160" width="160"
label="随访预约时间" label="履约预约时间"
align="center"> align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span v-if="scope.row.status==1" style="color: #49C688;">未发送</span> <span v-if="scope.row.status==1" style="color: #49C688;">未发送</span>
...@@ -136,6 +136,13 @@ ...@@ -136,6 +136,13 @@
<no-enough :isNoEnoughShow="isNoEnoughShow" @closeTipsDialog="closeTipsDialog"></no-enough> <no-enough :isNoEnoughShow="isNoEnoughShow" @closeTipsDialog="closeTipsDialog"></no-enough>
<change-reservation :isChangeReservation="isChangeReservation" @closeChangeReserve="closeChangeReserve" :reservationForm="needPara"></change-reservation> <change-reservation :isChangeReservation="isChangeReservation" @closeChangeReserve="closeChangeReserve" :reservationForm="needPara"></change-reservation>
<followup-detail :dialogFormVisible="dialogDetailShow" @closeDetail="closeDetail" :enteringInfo="enteringInfo"></followup-detail> <followup-detail :dialogFormVisible="dialogDetailShow" @closeDetail="closeDetail" :enteringInfo="enteringInfo"></followup-detail>
<!-- 协议提醒 -->
<el-dialog class="prot-dialog" title="" :visible.sync="isShowProtocolDialog" width="30%" center :show-close=false>
<p class="prot-dialog-tips-1">根据相关规定,在您开展履约之前,需要居民授权同意《云鹊平台隐私协议》,否则将导致履约量表部分信息无法录入</p>
<span slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="isShowProtocolDialog = false"> 我知道了 </el-button>
</span>
</el-dialog>
</div> </div>
</template> </template>
...@@ -149,6 +156,7 @@ ...@@ -149,6 +156,7 @@
import NoEnough from './dialog/no-enough'; import NoEnough from './dialog/no-enough';
import ChangeReservation from "./dialog/change-reservation"; import ChangeReservation from "./dialog/change-reservation";
import followupDetail from "@/views/followup/record-manage/dialog/followupDetail"; import followupDetail from "@/views/followup/record-manage/dialog/followupDetail";
import { getFirstAccess } from '@/utils/followup/followapis'
export default { export default {
name: "reservation-list", name: "reservation-list",
components: { components: {
...@@ -161,7 +169,7 @@ ...@@ -161,7 +169,7 @@
data() { data() {
return { return {
/*面包屑配置*/ /*面包屑配置*/
curmbFirst: '随访管理', curmbFirst: '履约管理',
curmbSecond: '预约管理', curmbSecond: '预约管理',
/*面包屑配置*/ /*面包屑配置*/
labelWidth: '125px', //标题长度 labelWidth: '125px', //标题长度
...@@ -199,12 +207,17 @@ ...@@ -199,12 +207,17 @@
return row.fuPlanPatientTimesId; return row.fuPlanPatientTimesId;
}, },
statusTotal: null, //每种状态的总数 statusTotal: null, //每种状态的总数
isShowProtocolDialog: false,
} }
}, },
created() { created() {
}, },
mounted() { mounted() {
// 验证是否首次进入 ################
// this.init();
this.isFirstEnter();
if(this.$route.query.planName && this.$route.query.appointTime && this.$route.query.status) { if(this.$route.query.planName && this.$route.query.appointTime && this.$route.query.status) {
this.searchData.planName = this.$route.query.planName; this.searchData.planName = this.$route.query.planName;
this.searchData.planTimes = [this.$route.query.appointTime,this.$route.query.appointTime]; this.searchData.planTimes = [this.$route.query.appointTime,this.$route.query.appointTime];
...@@ -234,6 +247,15 @@ ...@@ -234,6 +247,15 @@
methods: { methods: {
...mapActions('reservationManage', ['getReservationList','getCheckReservation']), ...mapActions('reservationManage', ['getReservationList','getCheckReservation']),
...mapActions('recordManage', [ 'getEnteringInfo']), ...mapActions('recordManage', [ 'getEnteringInfo']),
// 验证是否首次进入 ################
isFirstEnter() {
getFirstAccess().then((res) => {
if(res.code == '000000') {
this.isShowProtocolDialog1 = res.data
}
});
},
handleSizeChangePre(pageSize) { handleSizeChangePre(pageSize) {
this.getReservationList({ this.getReservationList({
pageSize, pageSize,
...@@ -311,7 +333,7 @@ ...@@ -311,7 +333,7 @@
sendReservation() { sendReservation() {
// console.log('选择人员长度',this.selectionData.length) // console.log('选择人员长度',this.selectionData.length)
if(this.selectionData.length > 100) { if(this.selectionData.length > 100) {
this.$message.warning('每次最多选择100条单条随访进行预约!'); this.$message.warning('每次最多选择100条单条履约进行预约!');
return; return;
}else if(this.selectionData.length <= 0){ }else if(this.selectionData.length <= 0){
this.$message.warning('请选择要发送预约的居民!'); this.$message.warning('请选择要发送预约的居民!');
......
<template>
<div class="home-wrap">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="message-content">
<el-row>
<el-col class="visitor screenSet" :span="24">
<div class="visitor-title">
<div class="title">
今日履约:
<span style="color:#449284;margin-right: 10px">{{todayPlansList.length}}</span>
<span
class="type-button"
:style="{background:(planBtn?'rgba(68,146,132,0.06)':'#ffffff')}"
@click="changeTodayPlansList(0)"
>未完成</span>
<span
class="type-button"
:style="{background:(!planBtn?'rgba(68,146,132,0.06)':'#ffffff')}"
@click="changeTodayPlansList(1)"
>已过期</span>
</div>
<span class="visitor-more" @click="lookMore(1)">查看更多</span>
</div>
<div class="visitor-info">
<el-table :data="todayPlansList" style="width: 100%">
<el-table-column prop="patientName" label="姓名" align="center"></el-table-column>
<el-table-column prop="appointTime" label="预约时间" align="center"></el-table-column>
<el-table-column prop="fuTypeStr" label="履约方式" align="center"></el-table-column>
<el-table-column prop="content" label="操作" align="center">
<template slot-scope="scope">
<span class="text-btn" @click="goToScale(scope.row)">履约录入</span> |
<span class="text-btn" @click="changeFollowStatus(scope.row)">变更履约状态</span>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col class="visitor screenSet" :span="24" style="margin-top: 0;margin-bottom: 0;">
<div class="visitor-title">
<div class="title">
今日预约
<span
class="type-button"
:style="{background:(appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}"
@click="changeTodayAppointsList(0)"
style="margin-left: 10px;"
>未完成</span>
<span
class="type-button"
:style="{background:(!appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}"
@click="changeTodayAppointsList(1)"
>已过期</span>
</div>
<span class="visitor-more" @click="lookMore(2)">查看更多</span>
</div>
<div class="visitor-info">
<el-table :data="todayAppointsList" style="width: 100%">
<el-table-column prop="planName" label="履约计划名称" align="center"></el-table-column>
<el-table-column prop="appointTime" label="履约计划时间" align="center"></el-table-column>
<el-table-column prop="appointedCount" label="已经预约" align="center"></el-table-column>
<el-table-column prop="notAppointedCount" label="未预约" align="center"></el-table-column>
<el-table-column prop="content" label="操作" align="center">
<template slot-scope="scope">
<span
class="text-btn"
@click="goToReservation(scope.row.planName, scope.row.appointTime)"
>去预约</span>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col class="message screenSet" :span="24" id="screenSet">
<div class="message-title">
系统消息
<span>今日消息:{{count}}条</span>
</div>
<div class="message-info" v-if="messageList.length > 0">
<div class="message-item" v-for="(item,index) in messageList" :key="index">
<div class="text-top">
<img :src="item.url" />
<span>{{item.menuName}}</span>
<span>{{item.portalTime}}</span>
</div>
<div class="text-bottom" v-html="item.content"></div>
</div>
</div>
<div class="no-message" v-else>
<div>
<img src="../assets/image/noData.png" />
</div>
</div>
</el-col>
</el-row>
</div>
<change-followup-status
:isShowChangeDialog="isShowChangeDialog"
:statusForm="statusForm"
@closeChangeStatus="closeChangeStatus()"
></change-followup-status>
<el-dialog
title="选择量表"
:visible.sync="selectFormShow"
center
:close-on-click-modal="false"
:close-on-press-escape="false"
width="400px"
:before-close="closeForm"
>
<div class="list-content">
<p
v-for="(item, index) in formList.scalesList"
:key="index"
@click="goFormView(item)"
>{{item.sendContent}}</p>
</div>
</el-dialog>
<!-- 敏感词及协议校验 -->
<el-dialog class="prot-dialog" title="" :visible.sync="isShowProtocolDialog" width="30%" center :show-close=false>
<p class="prot-dialog-tips-1">由于该居民尚未同意《云鹊平台隐私协议》,将导致履约量表部分信息无法录入,为了方便您的工作开展,请您发送短信提醒居民完成授权</p>
<p v-show="!isSentedProt" class="prot-dialog-tips-2">若您选择暂不发送,您只能录入量表的非敏感信息</p>
<p v-show="isSentedProt" class="prot-dialog-tips-3">为避免打扰居民,7天内只能发送1次,您已发送过短信,请尽快联系居民同意授权</p>
<span v-show="!isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" @click="closeProtocolDialog"> 暂不发送 </el-button>
<el-button size="small" type="primary" @click="sendMsg"> 发送短信 </el-button>
</span>
<span v-show="isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="closeProtocolDialog"> 我知道了 </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import BreadCrumb from "../components/breadcrumb.vue";
import { setTimeout, setInterval } from "timers";
import ChangeFollowupStatus from "./followup/record-manage/dialog/change-followup-status";
import { mapGetters, mapState, mapActions } from "vuex";
import * as commonUtil from "../utils/utils";
import { uniteValidate, authMessage } from '@/utils/followup/followapis'
let vm = null;
export default {
components: {
BreadCrumb,
ChangeFollowupStatus
},
data() {
return {
curmbFirst: "数据总览",
spanFirstNum: 12,
spanSecondNum: 12,
tableData: [],
count: 0,
messageList: [],
planBtn: true,
appointBtn: true,
isShowChangeDialog: false,
statusForm: {},
selectFormShow: false,
ScaleData: {},
isShowProtocolDialog: true,
scaleQuery: {},
isSentedProt: false,
scaleNo: '',
patientIds: [],
sendMsgPatientIds: [],
};
},
created() {
vm = this;
vm.getSystemData();
vm.getTodayPlansList({
status: 0
});
vm.getTodayAppointsList({
status: 0
});
/*vm.getTodayOverview({
status:0
});*/
},
computed: {
...mapGetters(["_token"]),
...mapState("workbench", {
todayPlansList: state => state.todayPlansList,
todayAppointsList: state => state.todayAppointsList
//todayOverview: state => state.todayOverview,
}),
...mapState("recordManage", {
formList: state => state.formList
})
},
// 挂载到Dom完成时
mounted: function() {
// commonUtil.resizeHeight()
},
methods: {
...mapActions("workbench", [
"getTodayPlansList",
"getTodayAppointsList",
"getTodayOverview"
]),
...mapActions("recordManage", ["getFormList"]),
// 查看更多
lookMore(type) {
if (type == 1) {
this.$router.push("/followup/record-manage/record-list");
} else if (type == 2) {
this.$router.push("/followup/reservation-manage/reservation-list");
}
},
// 获取系统消息数据
getSystemData() {
vm.GET("portal/portalMessage/queryPortalMessageInfo", {
token: vm._token,
pageNo: 1,
pageSize: 15
}).then(res => {
if (res.code == "000000") {
vm.messageList = res.data.portalMessageModels;
vm.count = res.data.count;
} else {
vm.$message.info(res.message);
}
});
},
changeTodayPlansList(status) {
if (status == 0) {
vm.planBtn = true;
} else {
vm.planBtn = false;
}
vm.getTodayPlansList({
status: status
});
},
changeTodayAppointsList(status) {
if (status == 0) {
vm.appointBtn = true;
} else {
vm.appointBtn = false;
}
vm.getTodayAppointsList({
status: status
});
},
goToReservation(planName, appointTime) {
this.$router.push({
path: "/followup/reservation-manage/reservation-list",
query: { planName: planName, appointTime: appointTime, status: 1 }
});
},
closeChangeStatus(val) {
this.isShowChangeDialog = val;
let status = null;
if (this.planBtn == true) {
status = 0;
} else {
status = 1;
}
this.getTodayPlansList({
status: status
});
},
goFormView(item) {
this.selectFormShow = false;
this.$router.push({
path: "/followup/record-manage/form-template",
query: {
doctorId: this.ScaleData.doctorId,
scaleNo: item.resourceId,
planPatientsTimesId: this.ScaleData.planPatientsTimesId,
planTimesId: item.planTimesId,
showBtn: 1
}
});
// this.scaleQuery = {
// doctorId: this.ScaleData.doctorId,
// scaleNo: item.resourceId,
// planPatientsTimesId: this.ScaleData.planPatientsTimesId,
// planTimesId: item.planTimesId,
// showBtn: 1
// }
// this.needSign()
// this.scaleNo = this.formList.scalesList[0].resourceId;
// this.patientIds = [row.patientId];
// this.uniteValidateAction()
},
closeForm() {
this.selectFormShow = false;
},
async goToScale(row) {
await this.getFormList(row.planTimesId); //获取量表列表
//获取量表列表情况
if (this.formList.scalesList.length > 1) {
this.selectFormShow = true;
this.ScaleData = {
doctorId: this.formList.doctorId,
planPatientsTimesId: row.planPatientTimesId
};
} else if (this.formList.scalesList.length === 1) {
this.$router.push({
path: "/followup/record-manage/form-template",
query: {
doctorId: this.formList.doctorId,
scaleNo: this.formList.scalesList[0].resourceId,
planPatientsTimesId: row.planPatientTimesId,
planTimesId: row.planTimesId,
showBtn: 1
}
});
// this.scaleQuery = {
// doctorId: this.formList.doctorId,
// scaleNo: this.formList.scalesList[0].resourceId,
// planPatientsTimesId: row.planPatientTimesId,
// planTimesId: row.planTimesId,
// showBtn: 1
// }
// this.needSign()
// this.scaleNo = this.formList.scalesList[0].resourceId;
// this.patientIds = [row.patientId];
// this.uniteValidateAction()
} else {
this.$message.warning("暂无量表!");
}
},
changeFollowStatus(row) {
this.statusForm = {
fuPlanPatientTimesId: row.planPatientTimesId,
patientId: row.patientId,
nickname: row.patientName,
status: 1
};
this.isShowChangeDialog = true;
},
// Add by Anndy Yang
// 统一验证:量表内是否存在敏感字段、居民是否签署隐私协议、7天内是否发送过授权短信
async uniteValidateAction() {
let validParams = {
scaleNo: this.scaleNo,
patientIds: this.patientIds, // pc端只传这个字段
// planPatientsTimesId: planPatientsTimesId, // app端只传这个字段
protocolType: 5,
userType: 1,
validateType: 1
};
let r = await uniteValidate(validParams).then(res => {
let result = res;
// 请求成功
if (result.code === '000000') {
let levelType = result.data.levelType;
// 没有敏感字段或者居民已经签订过协议,则直接返回
if (levelType === 1 || levelType === 2) {
jumpToScale()
} else if (levelType === 3) {
this.isShowProtocolDialog = true;
this.isSentedProt = false;
} else if (levelType === 4) {
this.isShowProtocolDialog = true;
this.isSentedProt = true;
this.sendMsgPatientIds = result.data.ids;
}
}
});
},
// 发送协议授权短信给居民
sendMsgToPatients() {
authMessage({ patientIds: this.sendMsgPatientIds }).then(res => {
if (res.code === '000000') {
this.$message({
message: '已发送,请尽快联系居民同意授权',
type: 'success'
});
}
});
this.isShowDialog = false;
},
// 敏感词校验与签署协议逻辑
// 1. 判断量表内是否存在敏感词
// 2. 判断居民是否存签署协议
// 3. 七天内是否发送过
needSign(scaleId, query) {
// let statusConfig =await getStatusByScaleId(scaleId)
let statusConfig = {
isSensitive: 1, // 量表内是否存在敏感词 0: 否;1: 是
hasProtocol: 0, // 居民是否存签署协议 0: 否;1: 是
hasSented: 0 // 七天内是否发送过 0: 否;1: 是
};
if (statusConfig.isSensitive == 1 && statusConfig.hasProtocol == 0) {
this.isShowProtocolDialog = true
this.isSentedProt = statusConfig.hasSented == 1
} else {
this.jumpToScale()
}
},
// 统一跳转到量表页面
jumpToScale() {
// this.$router.push({
// path: "/followup/record-manage/form-template",
// query: this.scaleQuery
// });
},
// 关闭协议确认窗口
closeProtocolDialog() {
this.isShowProtocolDialog = false
this.jumpToScale()
},
// 发送短信通知
sendMsg() {
this.sendMsgToPatients();
this.closeProtocolDialog()
},
}
};
</script>
<style lang="scss">
.home-wrap {
.list-content {
p {
cursor: pointer;
line-height: 30px;
text-decoration: underline;
color: #449284;
}
}
.message-content {
.visitor {
padding: 0 25px 30px;
margin-bottom: 20px;
background: #fff;
margin-top: 88px;
// min-height: 348px;
@media screen and (min-width: 1240px) and (max-width: 1900px) {
width: 95%;
height: 300px !important;
}
@media screen and (min-width: 1900px) {
width: 96.7%;
height: 380px !important;
}
.visitor-title {
height: 80px;
line-height: 80px;
margin-right: 20px;
text-align: right;
.title {
float: left;
font-size: 20px;
}
.visitor-more {
font-size: 12px;
color: #449284;
border: 1px solid rgba(68, 146, 132, 0.3);
padding: 5px 14px;
border-radius: 3px;
background: rgba(68, 146, 132, 0.06);
cursor: pointer;
}
.type-button {
font-size: 12px;
color: #449284;
border: 1px solid rgba(68, 146, 132, 0.3);
padding: 5px 14px;
border-radius: 3px;
/*background: rgba(68,146,132,0.06);*/
background: #ffffff;
cursor: pointer;
}
}
.visitor-info {
margin-right: 20px;
.text-btn:hover {
cursor: pointer;
color: #449284;
}
}
}
.message {
padding: 0 25px 30px;
// margin-top: 20px;
margin-top: 20px;
background: #fff;
@media screen and (min-width: 1240px) and (max-width: 1900px) {
width: 95%;
// height: 320px !important;
}
@media screen and (min-width: 1900px) {
width: 96.7%;
// height: 400px !important;
}
.message-title {
font-size: 20px;
height: 80px;
line-height: 80px;
span {
font-size: 14px;
color: #717377;
margin-left: 8px;
}
}
.message-info {
padding: 7px;
.message-item {
padding: 10px 10px 15px;
border-bottom: 1px solid #ebeef5;
.text-top {
img {
float: left;
width: 16px;
margin-top: 3px;
}
span:nth-child(2) {
padding: 10px;
}
span:nth-child(3) {
font-size: 12px;
color: #999;
}
}
.text-bottom {
font-size: 14px;
color: #666;
margin-top: 15px;
}
}
}
}
.no-message {
text-align: center;
img {
width: 100px;
// margin-top: 17%;
margin: 6% 0 6%;
}
}
}
}
</style>
<template>
<div class="home-wrap">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="message-content">
<el-row>
<el-col class="visitor screenSet" :span="24">
<div class="visitor-title">
<div class="title">今日履约:
<span style="color:#449284;margin-right: 10px">{{todayPlansList.length}}</span>
<span class="type-button" :style="{background:(planBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayPlansList(0)">未完成</span>
<span class="type-button" :style="{background:(!planBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayPlansList(1)">已过期</span>
</div>
<span class="visitor-more" @click="lookMore(1)">查看更多</span>
</div>
<div class="visitor-info">
<el-table
:data="todayPlansList"
style="width: 100%">
<el-table-column prop="patientName" label="姓名" align="center"></el-table-column>
<el-table-column prop="appointTime" label="预约时间" align="center"></el-table-column>
<el-table-column prop="fuTypeStr" label="履约方式" align="center"></el-table-column>
<el-table-column prop="content" label="操作" align="center">
<template slot-scope="scope">
<span class="text-btn" @click="goToScale(scope.row)">履约录入</span> | <span class="text-btn" @click="changeFollowStatus(scope.row)">变更履约状态</span>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col class="visitor screenSet" :span="24" style="margin-top: 0;margin-bottom: 0;">
<div class="visitor-title">
<div class="title">今日预约
<span class="type-button" :style="{background:(appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayAppointsList(0)" style="margin-left: 10px;">未完成</span>
<span class="type-button" :style="{background:(!appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayAppointsList(1)" >已过期</span>
</div>
<span class="visitor-more" @click="lookMore(2)">查看更多</span>
</div>
<div class="visitor-info">
<el-table
:data="todayAppointsList"
style="width: 100%">
<el-table-column prop="planName" label="履约计划名称" align="center"></el-table-column>
<el-table-column prop="appointTime" label="履约计划时间" align="center"></el-table-column>
<el-table-column prop="appointedCount" label="已经预约" align="center"></el-table-column>
<el-table-column prop="notAppointedCount" label="未预约" align="center"></el-table-column>
<el-table-column prop="content" label="操作" align="center">
<template slot-scope="scope">
<span class="text-btn" @click="goToReservation(scope.row.planName, scope.row.appointTime)">去预约</span>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col class="message screenSet" :span="24" id="screenSet">
<div class="message-title">系统消息 <span>今日消息:{{count}}条</span></div>
<div class="message-info" v-if="messageList.length > 0">
<div class="message-item" v-for="(item,index) in messageList" :key="index">
<div class="text-top">
<img :src="item.url"/>
<span>{{item.menuName}}</span>
<span>{{item.portalTime}}</span>
</div>
<div class="text-bottom" v-html="item.content"></div>
</div>
</div>
<div class="no-message" v-else>
<div>
<img src="../assets/image/noData.png"/>
</div>
</div>
</el-col>
</el-row>
</div>
<change-followup-status :isShowChangeDialog="isShowChangeDialog" :statusForm="statusForm" @closeChangeStatus="closeChangeStatus()"></change-followup-status>
<el-dialog title="选择量表"
:visible.sync="selectFormShow"
center
:close-on-click-modal="false"
:close-on-press-escape="false"
width="400px"
:before-close="closeForm">
<div class="list-content">
<p v-for="(item, index) in formList.scalesList" :key="index" @click="goFormView(item)">{{item.sendContent}}</p>
</div>
</el-dialog>
</div>
</template>
<script>
import BreadCrumb from '../components/breadcrumb.vue'
import { setTimeout, setInterval } from 'timers'
import ChangeFollowupStatus from "./followup/record-manage/dialog/change-followup-status";
import { mapGetters, mapState, mapActions } from 'vuex'
import * as commonUtil from '../utils/utils'
let vm = null
export default {
components: {
BreadCrumb,
ChangeFollowupStatus
},
data() {
return {
curmbFirst: '数据总览',
spanFirstNum: 12,
spanSecondNum: 12,
tableData: [],
count: 0,
messageList:[],
planBtn: true,
appointBtn: true,
isShowChangeDialog: false,
statusForm: {},
selectFormShow: false,
ScaleData: {}
}
},
created() {
vm = this
vm.getSystemData()
vm.getTodayPlansList({
status:0
});
vm.getTodayAppointsList({
status:0
});
/*vm.getTodayOverview({
status:0
});*/
},
computed: {
...mapGetters([
'_token'
]),
...mapState('workbench', {
todayPlansList: state => state.todayPlansList,
todayAppointsList: state => state.todayAppointsList,
//todayOverview: state => state.todayOverview,
}),
...mapState('recordManage',{
formList: state => state.formList,
}),
},
// 挂载到Dom完成时
mounted: function() {
// commonUtil.resizeHeight()
},
methods: {
...mapActions('workbench', ['getTodayPlansList', 'getTodayAppointsList', 'getTodayOverview']),
...mapActions('recordManage', ['getFormList']),
// 查看更多
lookMore(type) {
if(type==1) {
this.$router.push('/followup/record-manage/record-list');
} else if(type == 2) {
this.$router.push('/followup/reservation-manage/reservation-list');
}
},
// 获取系统消息数据
getSystemData() {
vm.GET('portal/portalMessage/queryPortalMessageInfo',{token: vm._token, pageNo: 1, pageSize: 15}).then((res) => {
if( res.code == '000000') {
vm.messageList = res.data.portalMessageModels
vm.count = res.data.count
} else {
vm.$message.info(res.message)
}
})
},
changeTodayPlansList(status) {
if(status == 0) {
vm.planBtn = true
} else {
vm.planBtn = false
}
vm.getTodayPlansList({
status: status
});
},
changeTodayAppointsList(status) {
if(status == 0) {
vm.appointBtn = true
} else {
vm.appointBtn = false
}
vm.getTodayAppointsList({
status: status
});
},
goToReservation(planName, appointTime) {
this.$router.push({path: '/followup/reservation-manage/reservation-list', query: {planName: planName, appointTime:appointTime, status: 1}});
},
closeChangeStatus(val){
this.isShowChangeDialog = val;
let status = null
if(this.planBtn == true) {
status = 0
} else {
status = 1
}
this.getTodayPlansList({
status: status
})
},
goFormView(item) {
this.selectFormShow = false
this.$router.push({path: '/followup/record-manage/form-template',
query: {doctorId: this.ScaleData.doctorId, scaleNo: item.resourceId, planPatientsTimesId: this.ScaleData.planPatientsTimesId,planTimesId : item.planTimesId, showBtn: 1}});
},
closeForm() {
this.selectFormShow = false;
},
async goToScale(row) {
await this.getFormList(row.planTimesId); //获取量表列表
//获取量表列表情况
if(this.formList.scalesList.length > 1){
this.selectFormShow = true
this.ScaleData = {
doctorId: this.formList.doctorId,
planPatientsTimesId: row.planPatientTimesId
}
}else if(this.formList.scalesList.length === 1){
this.$router.push({path: '/followup/record-manage/form-template',
query: {doctorId: this.formList.doctorId, scaleNo: this.formList.scalesList[0].resourceId, planPatientsTimesId: row.planPatientTimesId,planTimesId : row.planTimesId, showBtn: 1}})
}else {
this.$message.warning('暂无量表!')
}
},
changeFollowStatus(row) {
this.statusForm = {
fuPlanPatientTimesId: row.planPatientTimesId,
patientId: row.patientId,
nickname: row.patientName,
status: 1,
}
this.isShowChangeDialog = true
}
}
}
</script>
<style lang="scss">
.home-wrap {
.list-content{
p{
cursor: pointer;
line-height: 30px;
text-decoration: underline;
color: #449284;
}
}
.message-content {
.visitor {
padding: 0 25px 30px;
margin-bottom: 20px;
background: #fff;
margin-top: 88px;
// min-height: 348px;
@media screen and (min-width:1240px) and (max-width:1900px) {
width: 95%;
height: 300px !important;
}
@media screen and (min-width:1900px) {
width: 96.7%;
height: 380px !important;
}
.visitor-title {
height: 80px;
line-height: 80px;
margin-right: 20px;
text-align: right;
.title {
float: left;
font-size: 20px;
}
.visitor-more {
font-size: 12px;
color: #449284;
border: 1px solid rgba(68,146,132,0.3);
padding: 5px 14px;
border-radius: 3px;
background: rgba(68,146,132,0.06);
cursor: pointer;
}
.type-button {
font-size: 12px;
color: #449284;
border: 1px solid rgba(68,146,132,0.3);
padding: 5px 14px;
border-radius: 3px;
/*background: rgba(68,146,132,0.06);*/
background: #ffffff;
cursor: pointer;
}
}
.visitor-info {
margin-right: 20px;
.text-btn:hover {
cursor: pointer;
color: #449284;
}
}
}
.message {
padding: 0 25px 30px;
/*margin-top: 20px;*/
margin-top: 90px;
background: #fff;
@media screen and (min-width:1240px) and (max-width:1900px) {
width: 95%;
// height: 320px !important;
}
@media screen and (min-width:1900px) {
width: 96.7%;
// height: 400px !important;
}
.message-title {
font-size: 20px;
height: 80px;
line-height: 80px;
span {
font-size: 14px;
color: #717377;
margin-left: 8px;
}
}
.message-info {
padding: 7px;
.message-item {
padding: 10px 10px 15px;
border-bottom: 1px solid #EBEEF5;
.text-top {
img {
float: left;
width: 16px;
margin-top: 3px;
}
span:nth-child(2) {
padding: 10px;
}
span:nth-child(3) {
font-size: 12px;
color: #999;
}
}
.text-bottom {
font-size: 14px;
color: #666;
margin-top: 15px;
}
}
}
}
.no-message {
text-align: center;
img {
width: 100px;
// margin-top: 17%;
margin: 6% 0 6%;
}
}
}
}
</style>
<template> <template>
<div class="home-wrap"> <div class="home-wrap">
<bread-crumb :curmbFirst="curmbFirst"></bread-crumb> <bread-crumb :curmbFirst="curmbFirst"></bread-crumb>
<div class="message-content"> <div class="message-content">
<el-row> <el-row>
<!--<el-col class="visitor screenSet" :span="24">--> <el-col class="visitor screenSet" :span="24">
<!--<div class="visitor-title">--> <div class="visitor-title">
<!--<div class="title">今日随访:--> <div class="title">
<!--<span style="color:#449284;margin-right: 10px">{{todayPlansList.length}}</span>--> 今日履约:
<!--<span class="type-button" :style="{background:(planBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayPlansList(0)">未完成</span>--> <span style="color:#449284;margin-right: 10px">{{todayPlansList.length}}</span>
<!--<span class="type-button" :style="{background:(!planBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayPlansList(1)">已过期</span>--> <span
<!--</div>--> class="type-button"
<!--<span class="visitor-more" @click="lookMore(1)">查看更多</span>--> :style="{background:(planBtn?'rgba(68,146,132,0.06)':'#ffffff')}"
<!--</div>--> @click="changeTodayPlansList(0)"
<!--<div class="visitor-info">--> >未完成</span>
<!--<el-table--> <span
<!--:data="todayPlansList"--> class="type-button"
<!--style="width: 100%">--> :style="{background:(!planBtn?'rgba(68,146,132,0.06)':'#ffffff')}"
<!--<el-table-column prop="patientName" label="姓名" align="center"></el-table-column>--> @click="changeTodayPlansList(1)"
<!--<el-table-column prop="appointTime" label="预约时间" align="center"></el-table-column>--> >已过期</span>
<!--<el-table-column prop="fuTypeStr" label="随访方式" align="center"></el-table-column>--> </div>
<!--<el-table-column prop="content" label="操作" align="center">--> <span class="visitor-more" @click="lookMore(1)">查看更多</span>
<!--<template slot-scope="scope">-->
<!--<span class="text-btn" @click="goToScale(scope.row)">随访录入</span> | <span class="text-btn" @click="changeFollowStatus(scope.row)">变更随访状态</span>-->
<!--</template>-->
<!--</el-table-column>-->
<!--</el-table>-->
<!--</div>-->
<!--</el-col>-->
<!--<el-col class="visitor screenSet" :span="24" style="margin-top: 0;margin-bottom: 0;">-->
<!--<div class="visitor-title">-->
<!--<div class="title">今日预约-->
<!--<span class="type-button" :style="{background:(appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayAppointsList(0)" style="margin-left: 10px;">未完成</span>-->
<!--<span class="type-button" :style="{background:(!appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}" @click="changeTodayAppointsList(1)" >已过期</span>-->
<!--</div>-->
<!--<span class="visitor-more" @click="lookMore(2)">查看更多</span>-->
<!--</div>-->
<!--<div class="visitor-info">-->
<!--<el-table-->
<!--:data="todayAppointsList"-->
<!--style="width: 100%">-->
<!--<el-table-column prop="planName" label="随访计划名称" align="center"></el-table-column>-->
<!--<el-table-column prop="appointTime" label="随访计划时间" align="center"></el-table-column>-->
<!--<el-table-column prop="appointedCount" label="已经预约" align="center"></el-table-column>-->
<!--<el-table-column prop="notAppointedCount" label="未预约" align="center"></el-table-column>-->
<!--<el-table-column prop="content" label="操作" align="center">-->
<!--<template slot-scope="scope">-->
<!--<span class="text-btn" @click="goToReservation(scope.row.planName, scope.row.appointTime)">去预约</span>-->
<!--</template>-->
<!--</el-table-column>-->
<!--</el-table>-->
<!--</div>-->
<!--</el-col>-->
<el-col class="message screenSet" :span="24" id="screenSet">
<div class="message-title">系统消息 <span>今日消息:{{count}}条</span></div>
<div class="message-info" v-if="messageList.length > 0">
<div class="message-item" v-for="(item,index) in messageList" :key="index">
<div class="text-top">
<img :src="item.url"/>
<span>{{item.menuName}}</span>
<span>{{item.portalTime}}</span>
</div>
<div class="text-bottom" v-html="item.content"></div>
</div>
</div>
<div class="no-message" v-else>
<div>
<img src="../assets/image/noData.png"/>
</div>
</div>
</el-col>
</el-row>
</div>
<change-followup-status :isShowChangeDialog="isShowChangeDialog" :statusForm="statusForm" @closeChangeStatus="closeChangeStatus()"></change-followup-status>
<el-dialog title="选择量表"
:visible.sync="selectFormShow"
center
:close-on-click-modal="false"
:close-on-press-escape="false"
width="400px"
:before-close="closeForm">
<div class="list-content">
<p v-for="(item, index) in formList.scalesList" :key="index" @click="goFormView(item)">{{item.sendContent}}</p>
</div> </div>
</el-dialog> <div class="visitor-info">
<el-table :data="todayPlansList" style="width: 100%">
<el-table-column prop="patientName" label="姓名" align="center"></el-table-column>
<el-table-column prop="appointTime" label="预约时间" align="center"></el-table-column>
<el-table-column prop="fuTypeStr" label="履约方式" align="center"></el-table-column>
<el-table-column prop="content" label="操作" align="center">
<template slot-scope="scope">
<span class="text-btn" @click="goToScale(scope.row)">履约录入</span> |
<span class="text-btn" @click="changeFollowStatus(scope.row)">变更履约状态</span>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col class="visitor screenSet" :span="24" style="margin-top: 0;margin-bottom: 0;">
<div class="visitor-title">
<div class="title">
今日预约
<span
class="type-button"
:style="{background:(appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}"
@click="changeTodayAppointsList(0)"
style="margin-left: 10px;"
>未完成</span>
<span
class="type-button"
:style="{background:(!appointBtn?'rgba(68,146,132,0.06)':'#ffffff')}"
@click="changeTodayAppointsList(1)"
>已过期</span>
</div>
<span class="visitor-more" @click="lookMore(2)">查看更多</span>
</div>
<div class="visitor-info">
<el-table :data="todayAppointsList" style="width: 100%">
<el-table-column prop="planName" label="履约计划名称" align="center"></el-table-column>
<el-table-column prop="appointTime" label="履约计划时间" align="center"></el-table-column>
<el-table-column prop="appointedCount" label="已经预约" align="center"></el-table-column>
<el-table-column prop="notAppointedCount" label="未预约" align="center"></el-table-column>
<el-table-column prop="content" label="操作" align="center">
<template slot-scope="scope">
<span
class="text-btn"
@click="goToReservation(scope.row.planName, scope.row.appointTime)"
>去预约</span>
</template>
</el-table-column>
</el-table>
</div>
</el-col>
<el-col class="message screenSet" :span="24" id="screenSet">
<div class="message-title">
系统消息
<span>今日消息:{{count}}条</span>
</div>
<div class="message-info" v-if="messageList.length > 0">
<div class="message-item" v-for="(item,index) in messageList" :key="index">
<div class="text-top">
<img :src="item.url" />
<span>{{item.menuName}}</span>
<span>{{item.portalTime}}</span>
</div>
<div class="text-bottom" v-html="item.content"></div>
</div>
</div>
<div class="no-message" v-else>
<div>
<img src="../assets/image/noData.png" />
</div>
</div>
</el-col>
</el-row>
</div> </div>
<change-followup-status
:isShowChangeDialog="isShowChangeDialog"
:statusForm="statusForm"
@closeChangeStatus="closeChangeStatus()"
></change-followup-status>
<el-dialog
title="选择量表"
:visible.sync="selectFormShow"
center
:close-on-click-modal="false"
:close-on-press-escape="false"
width="400px"
:before-close="closeForm"
>
<div class="list-content">
<p
v-for="(item, index) in formList.scalesList"
:key="index"
@click="goFormView(item)"
>{{item.sendContent}}</p>
</div>
</el-dialog>
<!-- 敏感词及协议校验 -->
<el-dialog class="prot-dialog" title="" :visible.sync="isShowProtocolDialog" width="30%" center :show-close=false>
<p class="prot-dialog-tips-1">由于该居民尚未同意《云鹊平台隐私协议》,将导致履约量表部分信息无法录入,为了方便您的工作开展,请您发送短信提醒居民完成授权</p>
<p v-show="!isSentedProt" class="prot-dialog-tips-2">若您选择暂不发送,您只能录入量表的非敏感信息</p>
<p v-show="isSentedProt" class="prot-dialog-tips-3">为避免打扰居民,7天内只能发送1次,您已发送过短信,请尽快联系居民同意授权</p>
<span v-show="!isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" @click="closeProtocolDialog"> 暂不发送 </el-button>
<el-button size="small" type="primary" @click="sendMsg"> 发送短信 </el-button>
</span>
<span v-show="isSentedProt" slot="footer" class="dialog-footer">
<el-button size="small" type="primary" @click="closeProtocolDialog"> 我知道了 </el-button>
</span>
</el-dialog>
</div>
</template> </template>
<script> <script>
import BreadCrumb from '../components/breadcrumb.vue'
import { setTimeout, setInterval } from 'timers'
import ChangeFollowupStatus from "./followup/record-manage/dialog/change-followup-status"; import BreadCrumb from "../components/breadcrumb.vue";
import { setTimeout, setInterval } from "timers";
import { mapGetters, mapState, mapActions } from 'vuex' import ChangeFollowupStatus from "./followup/record-manage/dialog/change-followup-status";
import * as commonUtil from '../utils/utils'
import { postTrace } from '@/utils/patients/patientsapi' import { postTrace } from '@/utils/patients/patientsapi'
let vm = null import { mapGetters, mapState, mapActions } from "vuex";
import * as commonUtil from "../utils/utils";
import { uniteValidate, authMessage } from '@/utils/followup/followapis'
let vm = null;
export default { export default {
components: { components: {
BreadCrumb, BreadCrumb,
ChangeFollowupStatus ChangeFollowupStatus
},
data() {
return {
curmbFirst: "数据总览",
spanFirstNum: 12,
spanSecondNum: 12,
tableData: [],
count: 0,
messageList: [],
planBtn: true,
appointBtn: true,
isShowChangeDialog: false,
statusForm: {},
selectFormShow: false,
ScaleData: {},
isShowProtocolDialog: false,
scaleQuery: {},
isSentedProt: false,
scaleNo: '',
patientIds: [],
sendMsgPatientIds: [],
};
},
created() {
vm = this;
vm.getSystemData();
vm.getTodayPlansList({
status: 0
});
vm.getTodayAppointsList({
status: 0
});
/*vm.getTodayOverview({
status:0
});*/
},
computed: {
...mapGetters(["_token"]),
...mapState("workbench", {
todayPlansList: state => state.todayPlansList,
todayAppointsList: state => state.todayAppointsList
//todayOverview: state => state.todayOverview,
}),
...mapState("recordManage", {
formList: state => state.formList
})
},
// 挂载到Dom完成时
mounted: function() {
// commonUtil.resizeHeight()
},
methods: {
...mapActions("workbench", [
"getTodayPlansList",
"getTodayAppointsList",
"getTodayOverview"
]),
...mapActions("recordManage", ["getFormList"]),
// 查看更多
lookMore(type) {
if (type == 1) {
this.$router.push("/followup/record-manage/record-list");
} else if (type == 2) {
this.$router.push("/followup/reservation-manage/reservation-list");
}
}, },
data() { // 获取系统消息数据
return { getSystemData() {
curmbFirst: '数据总览', vm.GET("portal/portalMessage/queryPortalMessageInfo", {
spanFirstNum: 12, token: vm._token,
spanSecondNum: 12, pageNo: 1,
tableData: [], pageSize: 15
count: 0, }).then(res => {
messageList:[], if (res.code == "000000") {
planBtn: true, vm.messageList = res.data.portalMessageModels;
appointBtn: true, vm.count = res.data.count;
isShowChangeDialog: false, } else {
statusForm: {}, vm.$message.info(res.message);
selectFormShow: false,
ScaleData: {}
} }
});
}, },
created() { created() {
vm = this vm = this
...@@ -130,241 +243,294 @@ export default { ...@@ -130,241 +243,294 @@ export default {
});*/ });*/
postTrace('ACTION_WEB_ENTER', `${window.location.href}`); postTrace('ACTION_WEB_ENTER', `${window.location.href}`);
}, },
computed: { changeTodayAppointsList(status) {
...mapGetters([ if (status == 0) {
'_token' vm.appointBtn = true;
]), } else {
...mapState('workbench', { vm.appointBtn = false;
todayPlansList: state => state.todayPlansList, }
todayAppointsList: state => state.todayAppointsList, vm.getTodayAppointsList({
//todayOverview: state => state.todayOverview, status: status
}), });
...mapState('recordManage',{
formList: state => state.formList,
}),
}, },
// 挂载到Dom完成时 goToReservation(planName, appointTime) {
mounted: function() { this.$router.push({
// commonUtil.resizeHeight() path: "/followup/reservation-manage/reservation-list",
query: { planName: planName, appointTime: appointTime, status: 1 }
});
},
closeChangeStatus(val) {
this.isShowChangeDialog = val;
let status = null;
if (this.planBtn == true) {
status = 0;
} else {
status = 1;
}
this.getTodayPlansList({
status: status
});
},
goFormView(item) {
// this.selectFormShow = false;
// this.$router.push({
// path: "/followup/record-manage/form-template",
// query: {
// doctorId: this.ScaleData.doctorId,
// scaleNo: item.resourceId,
// planPatientsTimesId: this.ScaleData.planPatientsTimesId,
// planTimesId: item.planTimesId,
// showBtn: 1
// }
// });
this.scaleQuery = {
doctorId: this.ScaleData.doctorId,
scaleNo: item.resourceId,
planPatientsTimesId: this.ScaleData.planPatientsTimesId,
planTimesId: item.planTimesId,
showBtn: 1
}
this.scaleNo = item.resourceId;
// this.patientIds = [this.ScaleData.patientId];
this.uniteValidateAction()
},
closeForm() {
this.selectFormShow = false;
},
async goToScale(row) {
await this.getFormList(row.planTimesId); //获取量表列表
//获取量表列表情况
this.patientIds = [row.patientId];
if (this.formList.scalesList.length > 1) {
this.selectFormShow = true;
this.ScaleData = {
doctorId: this.formList.doctorId,
planPatientsTimesId: row.planPatientTimesId
};
} else if (this.formList.scalesList.length === 1) {
// this.$router.push({
// path: "/followup/record-manage/form-template",
// query: {
// doctorId: this.formList.doctorId,
// scaleNo: this.formList.scalesList[0].resourceId,
// planPatientsTimesId: row.planPatientTimesId,
// planTimesId: row.planTimesId,
// showBtn: 1
// }
// });
this.scaleQuery = {
doctorId: this.formList.doctorId,
scaleNo: this.formList.scalesList[0].resourceId,
planPatientsTimesId: row.planPatientTimesId,
planTimesId: row.planTimesId,
showBtn: 1
}
this.scaleNo = this.formList.scalesList[0].resourceId;
this.uniteValidateAction()
} else {
this.$message.warning("暂无量表!");
}
},
changeFollowStatus(row) {
this.statusForm = {
fuPlanPatientTimesId: row.planPatientTimesId,
patientId: row.patientId,
nickname: row.patientName,
status: 1
};
this.isShowChangeDialog = true;
}, },
methods: {
...mapActions('workbench', ['getTodayPlansList', 'getTodayAppointsList', 'getTodayOverview']),
...mapActions('recordManage', ['getFormList']),
// 查看更多
lookMore(type) {
if(type==1) {
this.$router.push('/followup/record-manage/record-list');
} else if(type == 2) {
this.$router.push('/followup/reservation-manage/reservation-list');
}
},
// 获取系统消息数据
getSystemData() {
vm.GET('portal/portalMessage/queryPortalMessageInfo',{token: vm._token, pageNo: 1, pageSize: 15}).then((res) => {
if( res.code == '000000') {
vm.messageList = res.data.portalMessageModels
vm.count = res.data.count
} else {
vm.$message.info(res.message)
}
})
},
changeTodayPlansList(status) {
if(status == 0) {
vm.planBtn = true
} else {
vm.planBtn = false
}
vm.getTodayPlansList({ // Add by Anndy Yang
status: status // 统一验证:量表内是否存在敏感字段、居民是否签署隐私协议、7天内是否发送过授权短信
}); uniteValidateAction() {
}, let validParams = {
changeTodayAppointsList(status) { scaleNo: this.scaleNo,
if(status == 0) { patientIds: this.patientIds, // pc端只传这个字段
vm.appointBtn = true // planPatientsTimesId: planPatientsTimesId, // app端只传这个字段
} else { protocolType: 5,
vm.appointBtn = false userType: 1,
} validateType: 1
vm.getTodayAppointsList({ };
status: status
}); uniteValidate(validParams).then(res => {
}, let result = res;
goToReservation(planName, appointTime) { // 请求成功
this.$router.push({path: '/followup/reservation-manage/reservation-list', query: {planName: planName, appointTime:appointTime, status: 1}}); if (result.code === '000000') {
}, let levelType = result.data.levelType;
closeChangeStatus(val){ // 没有敏感字段或者居民已经签订过协议,则直接返回
this.isShowChangeDialog = val; if (levelType === 1 || levelType === 2) {
let status = null this.jumpToScale();
if(this.planBtn == true) { } else if (levelType === 3) {
status = 0 this.isShowProtocolDialog = true;
} else { this.isSentedProt = true;
status = 1 } else if (levelType === 4) {
} this.isShowProtocolDialog = true;
this.getTodayPlansList({ this.isSentedProt = false;
status: status this.sendMsgPatientIds = result.data.ids;
})
},
goFormView(item) {
this.selectFormShow = false
this.$router.push({path: '/followup/record-manage/form-template',
query: {doctorId: this.ScaleData.doctorId, scaleNo: item.resourceId, planPatientsTimesId: this.ScaleData.planPatientsTimesId,planTimesId : item.planTimesId, showBtn: 1}});
},
closeForm() {
this.selectFormShow = false;
},
async goToScale(row) {
await this.getFormList(row.planTimesId); //获取量表列表
//获取量表列表情况
if(this.formList.scalesList.length > 1){
this.selectFormShow = true
this.ScaleData = {
doctorId: this.formList.doctorId,
planPatientsTimesId: row.planPatientTimesId
}
}else if(this.formList.scalesList.length === 1){
this.$router.push({path: '/followup/record-manage/form-template',
query: {doctorId: this.formList.doctorId, scaleNo: this.formList.scalesList[0].resourceId, planPatientsTimesId: row.planPatientTimesId,planTimesId : row.planTimesId, showBtn: 1}})
}else {
this.$message.warning('暂无量表!')
}
},
changeFollowStatus(row) {
this.statusForm = {
fuPlanPatientTimesId: row.planPatientTimesId,
patientId: row.patientId,
nickname: row.patientName,
status: 1,
} }
this.isShowChangeDialog = true
} }
} });
} },
// 发送协议授权短信给居民
sendMsgToPatients() {
authMessage({ patientIds: this.sendMsgPatientIds }).then(res => {
if (res.code === '000000') {
this.$message({
message: '已发送,请尽快联系居民同意授权',
type: 'success'
});
}
});
this.isShowProtocolDialog = false;
},
// 统一跳转到量表页面
jumpToScale() {
this.$router.push({
path: "/followup/record-manage/form-template",
query: this.scaleQuery
});
},
// 关闭协议确认窗口
closeProtocolDialog() {
this.isShowProtocolDialog = false
this.jumpToScale()
},
// 发送短信通知
sendMsg() {
this.sendMsgToPatients();
this.closeProtocolDialog()
},
}
};
</script> </script>
<style lang="scss"> <style lang="scss">
.home-wrap { .home-wrap {
.list-content{ .list-content {
p{ p {
cursor: pointer; cursor: pointer;
line-height: 30px; line-height: 30px;
text-decoration: underline; text-decoration: underline;
color: #449284; color: #449284;
} }
}
.message-content {
.visitor {
padding: 0 25px 30px;
margin-bottom: 20px;
background: #fff;
margin-top: 88px;
// min-height: 348px;
@media screen and (min-width: 1240px) and (max-width: 1900px) {
width: 95%;
height: 300px !important;
}
@media screen and (min-width: 1900px) {
width: 96.7%;
height: 380px !important;
}
.visitor-title {
height: 80px;
line-height: 80px;
margin-right: 20px;
text-align: right;
.title {
float: left;
font-size: 20px;
}
.visitor-more {
font-size: 12px;
color: #449284;
border: 1px solid rgba(68, 146, 132, 0.3);
padding: 5px 14px;
border-radius: 3px;
background: rgba(68, 146, 132, 0.06);
cursor: pointer;
}
.type-button {
font-size: 12px;
color: #449284;
border: 1px solid rgba(68, 146, 132, 0.3);
padding: 5px 14px;
border-radius: 3px;
/*background: rgba(68,146,132,0.06);*/
background: #ffffff;
cursor: pointer;
}
}
.visitor-info {
margin-right: 20px;
.text-btn:hover {
cursor: pointer;
color: #449284;
}
}
}
.message {
padding: 0 25px 30px;
// margin-top: 20px;
margin-top: 20px;
background: #fff;
@media screen and (min-width: 1240px) and (max-width: 1900px) {
width: 95%;
// height: 320px !important;
}
@media screen and (min-width: 1900px) {
width: 96.7%;
// height: 400px !important;
}
.message-title {
font-size: 20px;
height: 80px;
line-height: 80px;
span {
font-size: 14px;
color: #717377;
margin-left: 8px;
} }
.message-content { }
.visitor { .message-info {
padding: 0 25px 30px; padding: 7px;
margin-bottom: 20px; .message-item {
background: #fff; padding: 10px 10px 15px;
margin-top: 88px; border-bottom: 1px solid #ebeef5;
// min-height: 348px; .text-top {
@media screen and (min-width:1240px) and (max-width:1900px) { img {
width: 95%; float: left;
height: 300px !important; width: 16px;
} margin-top: 3px;
@media screen and (min-width:1900px) {
width: 96.7%;
height: 380px !important;
}
.visitor-title {
height: 80px;
line-height: 80px;
margin-right: 20px;
text-align: right;
.title {
float: left;
font-size: 20px;
}
.visitor-more {
font-size: 12px;
color: #449284;
border: 1px solid rgba(68,146,132,0.3);
padding: 5px 14px;
border-radius: 3px;
background: rgba(68,146,132,0.06);
cursor: pointer;
}
.type-button {
font-size: 12px;
color: #449284;
border: 1px solid rgba(68,146,132,0.3);
padding: 5px 14px;
border-radius: 3px;
/*background: rgba(68,146,132,0.06);*/
background: #ffffff;
cursor: pointer;
}
}
.visitor-info {
margin-right: 20px;
.text-btn:hover {
cursor: pointer;
color: #449284;
}
}
} }
.message { span:nth-child(2) {
padding: 0 25px 30px; padding: 10px;
/*margin-top: 20px;*/
margin-top: 90px;
background: #fff;
@media screen and (min-width:1240px) and (max-width:1900px) {
width: 95%;
// height: 320px !important;
}
@media screen and (min-width:1900px) {
width: 96.7%;
// height: 400px !important;
}
.message-title {
font-size: 20px;
height: 80px;
line-height: 80px;
span {
font-size: 14px;
color: #717377;
margin-left: 8px;
}
}
.message-info {
padding: 7px;
.message-item {
padding: 10px 10px 15px;
border-bottom: 1px solid #EBEEF5;
.text-top {
img {
float: left;
width: 16px;
margin-top: 3px;
}
span:nth-child(2) {
padding: 10px;
}
span:nth-child(3) {
font-size: 12px;
color: #999;
}
}
.text-bottom {
font-size: 14px;
color: #666;
margin-top: 15px;
}
}
}
} }
.no-message { span:nth-child(3) {
text-align: center; font-size: 12px;
img { color: #999;
width: 100px;
// margin-top: 17%;
margin: 6% 0 6%;
}
} }
}
.text-bottom {
font-size: 14px;
color: #666;
margin-top: 15px;
}
} }
}
}
.no-message {
text-align: center;
img {
width: 100px;
// margin-top: 17%;
margin: 6% 0 6%;
}
} }
}
}
</style> </style>
...@@ -154,7 +154,7 @@ ...@@ -154,7 +154,7 @@
}, },
mounted(){ mounted(){
if(vm.storageIdType==2){ if(vm.storageIdType==2){
// vm.setFollowSide() vm.setFollowSide()
} }
}, },
watch: { watch: {
...@@ -170,15 +170,15 @@ ...@@ -170,15 +170,15 @@
} }
}, },
storageIdType(val,ov){ storageIdType(val,ov){
if(val==2){ // if(val==2){ // 调试时已经去掉了
// vm.setFollowSide() vm.setFollowSide()
} // } // 调试时已经去掉了
} }
}, },
methods: { methods: {
setFollowSide(){ setFollowSide(){
const followSider = { const followSider = {
title: '随访管理', title: '履约管理',
icon: 'el-icon-edit-outline', icon: 'el-icon-edit-outline',
index: 'followup', index: 'followup',
subs: [ subs: [
......
...@@ -27,8 +27,8 @@ export default { ...@@ -27,8 +27,8 @@ export default {
color: ["#FF9999", "#66CCFF"], color: ["#FF9999", "#66CCFF"],
text: '培训前后知识点掌握情况变化', text: '培训前后知识点掌握情况变化',
xAxisData: [ xAxisData: [
"转诊与随访", "转诊与履约",
"转诊与随访", "转诊与履约",
"周三", "周三",
"治疗原则及降压目标", "治疗原则及降压目标",
"周五", "周五",
...@@ -42,8 +42,8 @@ export default { ...@@ -42,8 +42,8 @@ export default {
color: ["#33FFFF", "#FF9999"], color: ["#33FFFF", "#FF9999"],
text: '不同学历培训前后正确率对比', text: '不同学历培训前后正确率对比',
xAxisData: [ xAxisData: [
"转诊与随访", "转诊与履约",
"转诊与随访", "转诊与履约",
"周三", "周三",
"治疗原则及降压目标", "治疗原则及降压目标",
"周五", "周五",
......
<template>
<div class="select-patient-dialog">
<el-dialog
title="添加居民"
:visible.sync="showSelectPatient"
v-if="isShowSelectPatient"
:before-close="clickClose"
:close-on-click-modal="false"
:close-on-press-escape="false"
width="1100px"
top="2%"
center>
<div class="finish-content">
<el-form
ref="searchData"
:model="searchData"
:inline="true"
class="select-width"
size="small">
<div style="display: flex;justify-content: flex-end;margin-bottom: 15px">
<el-button plain size="small" @click="goAddPatient">+ 新增居民</el-button>
</div>
<div style="display: flex;justify-content: space-between;">
<div>
<el-form-item prop="sex">
<el-select
class="init-width"
v-model="searchData.sex"
placeholder="请选择性别"
clearable>
<el-option
v-for="(item,index) in sexOptions"
:key="index"
:label="item.value"
:value="item.no">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="ageRange">
<el-select
v-model="searchData.ageRange"
multiple
collapse-tags
filterable
placeholder="请选择年龄段"
class="init-width2"
clearable>
<el-option
v-for="(item,index) in ageOptions"
:key="index"
:label="item.value"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="diseaseId">
<!--<el-select
v-model="searchData.diseaseId"
multiple
collapse-tags
filterable
placeholder="请选择诊断"
class="set-width"
clearable>
<el-option
v-for="(item,index) in diseaseOptions"
:key="index"
:label="item.diseaseName"
:value="item.diseaseId">
</el-option>-->
<!--</el-select>-->
<el-select
v-model="searchData.icdCodeList"
multiple
collapse-tags
filterable
remote
reserve-keyword
placeholder="请选择或搜索诊断"
:remote-method="getDiseaseData"
:loading="loading"
class="set-width"
>
<el-option
v-for="item in icdOptions"
:key="item.icdCode"
:label="item.diseaseName"
:value="item.icdCode">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="labelId">
<el-select
v-model="searchData.labelId"
multiple
collapse-tags
filterable
class="set-width"
placeholder="请选择或搜索分组"
clearable>
<el-option
v-for="(item,index) in labelOptions"
:key="index"
:label="item.labelName"
:value="item.labelId">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="fuPlanIdList" v-if="selectPatientType == 1">
<el-select
v-model="searchData.fuPlanIdList"
multiple
collapse-tags
filterable
class="set-width"
placeholder="请选择履约计划"
clearable>
<el-option
v-for="(item,index) in fuPlanOptions"
:key="index"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="searchCondition">
<el-input
v-model="searchData.searchCondition"
placeholder="请输入姓名,手机号,身份证"
clearable
class="set-width">
<!--<i slot="prefix" class="el-input__icon el-icon-search" @click="searchHandler" style="cursor: pointer"></i>-->
</el-input>
</el-form-item>
</div>
<div>
<el-button type="primary" @click="searchHandler" size="small">查询</el-button>
<el-button plain @click="resetData('searchData')" size="small">重置</el-button>
</div>
</div>
</el-form>
<el-table
:data="patientsData"
ref="multipleTable"
center
style="width: 100%;margin-top: 10px;"
height="250"
:row-key="getRowKeys"
class="spe-table"
@selection-change="handleSelectionChange">
<el-table-column
type="selection"
align="center"
:reserve-selection="true"
:selectable="checkboxInit">
</el-table-column>
<el-table-column
prop="nickname"
label="姓名"
align="center">
</el-table-column>
<el-table-column
prop="sexStr"
label="性别"
min-width="50"
align="center">
</el-table-column>
<el-table-column
prop="ageStr"
label="年龄"
min-width="50"
align="center">
</el-table-column>
<el-table-column
prop="mobilePhone"
label="手机"
align="center"
min-width="130">
</el-table-column>
<el-table-column
prop="idNoStr"
label="身份证"
align="center"
min-width="130">
</el-table-column>
<el-table-column
prop="showDiseaseNames"
label="诊断"
align="center"
width="180"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column
prop="showLabelName"
label="分组"
align="center"
width="180"
:show-overflow-tooltip="true">
</el-table-column>
<el-table-column
v-if="selectPatientType == 1"
prop="fuPlanName"
label="履约计划"
align="center"
width="180"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.fuPlanName">{{scope.row.fuPlanName}}</span>
<span v-else>-</span>
</template>
</el-table-column>
</el-table>
<el-row type="flex" justify="space-between" align="middle" class="margin-top15">
<!--<span>已选:{{newSelects.length}}人</span>-->
<span></span>
<el-pagination
background
v-if="patientsData.length"
@size-change="handleSizeChangePre"
@current-change="handleCurrentChangePre"
layout="total, sizes, prev, pager, next, jumper"
:current-page="paginationSet.pageNum"
:page-sizes="[15,30,50,100]"
:page-size="paginationSet.pageSize"
:total="paginationSet.total">
</el-pagination>
</el-row>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="clickClose" size="small" plain>取 消</el-button>
<el-button type="primary" size="small" @click="sureClick">确 定</el-button>
</div>
</el-dialog>
<el-dialog
class="reload-label-modal"
:visible.sync="showReloadModal"
width="320px"
:show-close="false"
:close-on-click-modal="false"
center>
<p class="tips">您刚才跳转到新增居民页面进行新增居民,请点击下方按钮刷新数据</p>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleReload">重新加载</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { mapState, mapActions } from 'vuex'
import { getConstants, getPatientInfoList, getDiseasesList, getLabelList, getIcdList } from '@/utils/patients/patientsapi'
import { getPlanList } from '@/utils/followup/followapis'
export default {
components: {},
name: "select-patient",
data() {
return {
showSelectPatient: true,
allSelects: [],
// eachSelects: [],//仅仅是操作选择的总人员
// totalSelect: [],// 当前所选的人
srvPackageId: '',
patientsData: [],
searchData: {
sex: null,
ageRange: [],
diseaseId: [],
labelId: [],
fuPlanIdList: [],
searchCondition: '',
icdCodeList: [],
},
paginationSet: {
pageNum: 1,
pageSize: 15,
total: 0
},
sexOptions: [{
no: '',
value: '不限'
}],
ageOptions: [
// {no: '', value: '年龄范围'}
],
diseaseOptions: [
// {diseaseId: '', diseaseName: '基础疾病'}
],
labelOptions: [
// {labelId: '', labelName: '分组'}
],
fuPlanOptions: [],
newSelects: [], //新选中的人
oldPatientList: [],
showReloadModal: false,
loading: false,
icdOptions: [],
getRowKeys(row) {
return row.patientId;
},
}
},
props: {
isShowSelectPatient: Boolean, //是否显示model,
patientIdList: Array,// 确定已经选过的居民
oldPatientIdList: Array,// 确定已经选过的居民
selectPatientType: Number, //获取居民列表所需字段,履约是1,分组是2,患教是3
sourceId: {
type: String,
required: false,
default: '',
},
},
watch: {
isShowSelectPatient(val){
if(val){
this.getPatientsList()
//获取搜索诊断
this.getDiseaseData();
// 获取常量 性别、年龄
getConstants({
numList: 'P057,P006'
}).then(res=>{
this.sexOptions = [{
no: '',
value: '不限'
}];
this.sexOptions = this.sexOptions.concat(res.data.P006);//性别
this.ageOptions = [
// {no: '', value: '年龄范围'}
];
this.ageOptions = this.ageOptions.concat(res.data.P057);//年龄段
});
// 获取所有疾病
getDiseasesList().then(res=>{
this.diseaseOptions = [
// {diseaseId: '', diseaseName: '基础疾病'}
];
this.diseaseOptions = this.diseaseOptions.concat(res.data);
});
// 获取所有分组
getLabelList({type: 1}).then(res=>{
this.labelOptions = [
// {labelId: '', labelName: '分组'}
]
this.labelOptions = this.labelOptions.concat(res.data.labelNameList);
});
// 获取履约计划列表
getPlanList({
pageNo: -1,
}).then(res => {
if(res.code == '000000') {
this.fuPlanOptions = res.data.fPlanDtoList;
}
})
}
},
},
methods: {
checkboxInit(row,index){
if(row.disableNum == undefined) {
return 1
} else {
return row.disableNum
}
},
getDiseaseData(query) {
// if (query !== '') {
let params = {
diseaseName: query ? query : '',
pageSize: 200,
pageNum: 1,
};
this.loading = true;
getIcdList(params).then(data => {
this.loading = false;
if(data.code == "000000") {
this.icdOptions = data.data;
}
}).catch((error) => {
this.$message({
message: error,
type: 'error'
});
});
// }else {
// this.icdOptions = [];
// }
},
getPatientsList(){
const data = {
pageSize: this.paginationSet.pageSize,
pageNo: this.paginationSet.pageNum,
labelIdList:this.searchData.labelId,
diseaseIdList: this.searchData.diseaseId,
ageList: this.searchData.ageRange,
sex: this.searchData.sex,
searchCondition:this.searchData.searchCondition,
srvPackageId:this.srvPackageId,
addType: this.selectPatientType, //履约是1,分组是2,患教是3
fuPlanIdList: this.searchData.fuPlanIdList || [],
sourceId: this.sourceId, //若是履约的话,传planId;若是分组的话,传labeledId;
icdCodeList: this.searchData.icdCodeList
}
getPatientInfoList(data).then(res=>{
if(res.data.patientList){
this.patientsData = res.data.patientList //接口获取的当页居民
this.getSex()
this.paginationSet.total = res.data.totalRows
// 设置所请求的当页人员是否成为选中状态
// console.log('传入的已选居民',this.patientIdList)
this.patientsData.forEach((item)=>{
item.disableNum = 1;
let diseaseNames = [];
let groupNames = []
//转化分组
if(item.labelModels) {
item.labelModels.forEach(item => {
groupNames.push(item.label)
});
item.showLabelName = groupNames.join('、');
} else {
item.showLabelName = '-';
}
//转化诊断
if(item.patientTypeModels) {
item.patientTypeModels.forEach(item => {
diseaseNames.push(item.diseaseName)
})
item.showDiseaseNames = diseaseNames.join('、');
}else {
item.showDiseaseNames = '-';
}
//针对履约项目
if(this.patientIdList.length > 0){
if(this.patientIdList.includes(item.patientId)){// 如果已经选过居民
this.$nextTick(()=>{
this.$refs.multipleTable.toggleRowSelection(item,true);
})
}
}
if(this.oldPatientIdList!=undefined&&this.oldPatientIdList.length) {
this.oldPatientList = [];
this.patientsData.forEach((item)=>{
if(this.oldPatientIdList.includes(item.patientId)){// 如果已经选过居民
item.disableNum = 0;
this.oldPatientList.push(item);
} else {
item.disableNum = 1
}
})
}
//针对分组详情
// this.patientIdList = res.data.selectedPatientIdList;
let selectedPatientIdList = res.data.selectedPatientIdList;
if(selectedPatientIdList && selectedPatientIdList.length > 0){
if(selectedPatientIdList.includes(item.patientId)){// 如果已经选过居民
this.$nextTick(()=>{
this.$refs.multipleTable.toggleRowSelection(item,true);
})
}
}
if(selectedPatientIdList && selectedPatientIdList.length > 0) {
this.patientsData.forEach((item)=>{
if(selectedPatientIdList.includes(item.patientId)){// 如果已经选过居民
item.disableNum = 0;
this.oldPatientList.push(item);
} else {
item.disableNum = 1
}
})
}
})
// console.log(this.oldPatientIdList)
}else{
this.patientsData = []
}
})
},
getSex(){
this.patientsData.forEach((item,index)=>{
if(item.sex==1){
this.patientsData[index].sexStr = '男'
}else if(item.sex==2){
this.patientsData[index].sexStr = '女'
}else{
this.patientsData[index].sexStr = '-'
}
if(!item.idNo) {
this.patientsData[index].idNoStr = '-'
}else {
this.patientsData[index].idNoStr = item.idNo
}
if(item.age || item.age == 0) {
this.patientsData[index].ageStr = item.age
}else {
this.patientsData[index].ageStr = '-'
}
})
},
// 对选中的居民进行去重
removeDuplicates(list){
return Array.from(new Set(list))
},
// 选择居民
handleSelectionChange(val) {
const _this = this;
_this.newSelects = [];
val.forEach(item => {
if(item.disableNum == 1) {
_this.newSelects.push(item)
}
})
},
// 切换分页
handleCurrentChangePre(val) {
this.paginationSet.pageNum = val
this.getPatientsList()
//控制切换页码的时候,滚动条滚到最上面
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
},
clickClose(){
// this.searchData.searchCondition = ''
this.searchData = {
sex: null,
ageRange: [],
diseaseId: [],
labelId: [],
fuPlanIdList: [],
searchCondition: '',
icdCodeList: [],
}
this.$emit('closeSelectPatient',false)
},
sureClick(){
if(this.newSelects.length) {
// this.searchData.searchCondition = ''
this.searchData = {
sex: null,
ageRange: [],
diseaseId: [],
labelId: [],
fuPlanIdList: [],
searchCondition: '',
icdCodeList: [],
}
this.$emit('sureSelectPatient',false,this.newSelects,this.oldPatientList)
} else {
this.$message.warning('请先选择!')
}
},
handleSizeChangePre(val) {
this.paginationSet.pageSize = val;
this.getPatientsList();
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
},
searchHandler() {
this.paginationSet.pageNum = 1;
this.getPatientsList();
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
},
resetData(formName) {
this.$refs[formName].resetFields();
this.getPatientsList();
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
},
goAddPatient() {
// this.$router.push({
// path: '/patients-manage/new-manage/new-patient'
// })
let routeData = this.$router.resolve({ path: '/patients-manage/new-manage/new-patient' });
window.open(routeData.href, '_blank');
this.showReloadModal = true;
},
handleReload() {
this.paginationSet.pageNum = 1;
this.getPatientsList();
this.$refs.multipleTable.bodyWrapper.scrollTop = 0;
this.showReloadModal = false;
},
ageDate(val){
let ageObj;
if(!val){
ageObj = {
ageBegin:'',
ageEnd:''
}
}else if(val.indexOf('+') > -1){
ageObj = {
ageBegin: 84,
ageEnd: 200
}
}else {
let ageItem = val.split('-');
ageObj = {
ageBegin:ageItem[0],
ageEnd:ageItem[1]
}
}
return ageObj;
}
},
}
</script>
<style lang="scss">
.init-width{
width: 100px !important;
.el-input{
width: 100px!important;
}
}
.init-width2{
width: 110px !important;
.el-input{
width: 110px!important;
}
}
.set-width{
width: 150px !important;
.el-input{
width: 150px!important;
}
}
</style>
<style lang="scss">
@import '../../../../style/patients-style/element-reset.css';
.select-patient-dialog {
.el-dialog__wrapper {
overflow: hidden;
.el-dialog--center {
/*height: 580px;*/
.el-dialog__body{
padding: 10px 25px 15px;
}
.el-table--scrollable-y,.el-table__body-wrapper {
&::-webkit-scrollbar{
width:5px;
}
&::-webkit-scrollbar-thumb {/*滚动条里面小方块*/
border-radius: 10px;
-webkit-box-shadow: inset 0 0 5px rgba(0,0,0,0.2);
background: rgba(0,0,0,0.1);
}
}
/*.el-dialog__body {
max-height: 80%;
overflow: hidden;
.finish-content {
height: 100%;
.el-table {
.el-table--scrollable-y .el-table__body-wrapper {
height: 80%;
}
}
}
}*/
}
}
.select-width .el-form-item{
/*width: 130px;*/
}
.margin-top15{
margin-top: 15px;
}
.el-form-item--mini.el-form-item, .el-form-item--small.el-form-item{
margin-bottom: 5px;
}
.el-select__tags-text{
display: inline-block;
max-width: 70px;
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;
}
.el-select .el-tag__close.el-icon-close{
top: -5px;
}
}
</style>
<template> <template>
<div class="select-patient-dialog"> <div class="select-patient-dialog">
<el-dialog <el-dialog
title="添加居民" :title="selectPatientDialogTitle"
:visible.sync="showSelectPatient" :visible.sync="showSelectPatient"
v-if="isShowSelectPatient" v-if="isShowSelectPatient"
:before-close="clickClose" :before-close="clickClose"
...@@ -113,7 +113,7 @@ ...@@ -113,7 +113,7 @@
collapse-tags collapse-tags
filterable filterable
class="set-width" class="set-width"
placeholder="请选择随访计划" placeholder="请选择履约计划"
clearable> clearable>
<el-option <el-option
v-for="(item,index) in fuPlanOptions" v-for="(item,index) in fuPlanOptions"
...@@ -200,7 +200,7 @@ ...@@ -200,7 +200,7 @@
<el-table-column <el-table-column
v-if="selectPatientType == 1" v-if="selectPatientType == 1"
prop="fuPlanName" prop="fuPlanName"
label="随访计划" label="履约计划"
align="center" align="center"
width="180" width="180"
:show-overflow-tooltip="true"> :show-overflow-tooltip="true">
...@@ -297,18 +297,23 @@ ...@@ -297,18 +297,23 @@
getRowKeys(row) { getRowKeys(row) {
return row.patientId; return row.patientId;
}, },
// 添加居民
} }
}, },
props: { props: {
isShowSelectPatient: Boolean, //是否显示model, isShowSelectPatient: Boolean, //是否显示model,
patientIdList: Array,// 确定已经选过的居民 patientIdList: Array,// 确定已经选过的居民
oldPatientIdList: Array,// 确定已经选过的居民 oldPatientIdList: Array,// 确定已经选过的居民
selectPatientType: Number, //获取居民列表所需字段,随访是1,分组是2,患教是3 selectPatientType: Number, //获取居民列表所需字段,履约是1,分组是2,患教是3
sourceId: { sourceId: {
type: String, type: String,
required: false, required: false,
default: '', default: '',
}, },
selectPatientDialogTitle: {
type: String,
default: '添加居民'
}
}, },
watch: { watch: {
isShowSelectPatient(val){ isShowSelectPatient(val){
...@@ -347,7 +352,7 @@ ...@@ -347,7 +352,7 @@
this.labelOptions = this.labelOptions.concat(res.data.labelNameList); this.labelOptions = this.labelOptions.concat(res.data.labelNameList);
}); });
// 获取随访计划列表 // 获取履约计划列表
getPlanList({ getPlanList({
pageNo: -1, pageNo: -1,
}).then(res => { }).then(res => {
...@@ -399,9 +404,9 @@ ...@@ -399,9 +404,9 @@
sex: this.searchData.sex, sex: this.searchData.sex,
searchCondition:this.searchData.searchCondition, searchCondition:this.searchData.searchCondition,
srvPackageId:this.srvPackageId, srvPackageId:this.srvPackageId,
addType: this.selectPatientType, //随访是1,分组是2,患教是3 addType: this.selectPatientType, //履约是1,分组是2,患教是3
fuPlanIdList: this.searchData.fuPlanIdList || [], fuPlanIdList: this.searchData.fuPlanIdList || [],
sourceId: this.sourceId, //若是随访的话,传planId;若是分组的话,传labeledId; sourceId: this.sourceId, //若是履约的话,传planId;若是分组的话,传labeledId;
icdCodeList: this.searchData.icdCodeList icdCodeList: this.searchData.icdCodeList
} }
getPatientInfoList(data).then(res=>{ getPatientInfoList(data).then(res=>{
...@@ -435,7 +440,7 @@ ...@@ -435,7 +440,7 @@
}else { }else {
item.showDiseaseNames = '-'; item.showDiseaseNames = '-';
} }
//针对随访项目 //针对履约项目
if(this.patientIdList.length > 0){ if(this.patientIdList.length > 0){
if(this.patientIdList.includes(item.patientId)){// 如果已经选过居民 if(this.patientIdList.includes(item.patientId)){// 如果已经选过居民
this.$nextTick(()=>{ this.$nextTick(()=>{
......
...@@ -94,7 +94,7 @@ ...@@ -94,7 +94,7 @@
<div class="record-date">{{item.finishedTime}}</div> <div class="record-date">{{item.finishedTime}}</div>
<div class="record-content"> <div class="record-content">
<div class="record-title"> <div class="record-title">
<p>{{item.name}}-{{item.seqNo}}随访</p> <p>{{item.name}}-{{item.seqNo}}履约</p>
<span>{{item.fuTypeValue}}</span> <span>{{item.fuTypeValue}}</span>
</div> </div>
<div class="list-visit"> <div class="list-visit">
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
<div class="right-item">{{item.sendContent | emptyFilter}}</div> <div class="right-item">{{item.sendContent | emptyFilter}}</div>
</div> </div>
<div class="list-visit"> <div class="list-visit">
<span class="left-label">随访量表:</span> <span class="left-label">履约量表:</span>
<div class="right-item"> <div class="right-item">
<p v-for="(item2, index2) in item.scaleSimpleDtos" :key="index2" v-if="item.scaleSimpleDtos.length">{{item2.name}} <p v-for="(item2, index2) in item.scaleSimpleDtos" :key="index2" v-if="item.scaleSimpleDtos.length">{{item2.name}}
<span class="check-btn" @click="openScaleDetail(item2)">查看量表</span> <span class="check-btn" @click="openScaleDetail(item2)">查看量表</span>
...@@ -119,7 +119,7 @@ ...@@ -119,7 +119,7 @@
<div class="no-record-content" v-if="!recordList.length"> <div class="no-record-content" v-if="!recordList.length">
<div class="no-record-info"> <div class="no-record-info">
<img src="../../../assets/image/no-content1.png"/> <img src="../../../assets/image/no-content1.png"/>
<p>暂无随访记录或您没有权限访问</p> <p>暂无履约记录或您没有权限访问</p>
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
...@@ -278,7 +278,7 @@ ...@@ -278,7 +278,7 @@
tabChangeHandler(tab) {}, tabChangeHandler(tab) {},
deleteCurrentPatient() { deleteCurrentPatient() {
// 把写的提示信息需要换行的地方分成数组 confirmText // 把写的提示信息需要换行的地方分成数组 confirmText
const confirmText = ['您确定要删除此居民吗?', '删除后,您将无法对该居民发送患教和进行随访,重新添加该居民依旧可查看历史发送记录及随访记录']; const confirmText = ['您确定要删除此居民吗?', '删除后,您将无法对该居民发送患教和进行履约,重新添加该居民依旧可查看历史发送记录及履约记录'];
const newDatas = []; const newDatas = [];
const h = this.$createElement; const h = this.$createElement;
for (const i in confirmText) { for (const i in confirmText) {
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<section class="not-complete-content screenSet"> <section class="not-complete-content screenSet">
<h1 class="page-title">资料不全居民</h1> <h1 class="page-title">资料不全居民</h1>
<p class="tip" v-if="notCompleteList.length"> <p class="tip" v-if="notCompleteList.length">
<span class="fontGreen">{{pagination.totalRows}}</span>居民仅通过微信扫码与您绑定,但未完善姓名、手机号等关键信息。提醒居民完善信息后,您将可以对居民进行消息推送和随访计划设置。 <span class="fontGreen">{{pagination.totalRows}}</span>居民仅通过微信扫码与您绑定,但未完善姓名、手机号等关键信息。提醒居民完善信息后,您将可以对居民进行消息推送和履约计划设置。
<el-button type="primary" style="float: right;" size="small" @click="sendCompleteMessageMultiple">批量提醒</el-button> <el-button type="primary" style="float: right;" size="small" @click="sendCompleteMessageMultiple">批量提醒</el-button>
</p> </p>
<el-table <el-table
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册