<template>
|
<div class="Questionnairemanagement">
|
<!-- 左侧栏 -->
|
<!-- <div class="sidecolumn">
|
<div class="sidecolumn-top">
|
<div class="top-wj">患者范围</div>
|
</div>
|
|
<div class="bottom-fl">
|
<el-tabs
|
tab-position="right"
|
v-model="activeName"
|
@tab-click="handleClick"
|
>
|
<el-tab-pane label="全部" name="first"></el-tab-pane>
|
<el-tab-pane label="住院" name="bhospitalized"></el-tab-pane>
|
<el-tab-pane label="在院" name="Inhospital"></el-tab-pane>
|
<el-tab-pane label="门诊" name="outpatient"></el-tab-pane>
|
<el-tab-pane label="体检" name="physical"></el-tab-pane>
|
</el-tabs>
|
</div>
|
</div> -->
|
<!-- 右侧数据 -->
|
<div class="leftvlue">
|
<!-- <div class="leftvlue-top">
|
<el-tabs v-model="topactiveName" @tab-click="tophandleClick">
|
<el-tab-pane name="Local">
|
<span class="mulsz" slot="label">按出院病区统计 </span>
|
</el-tab-pane>
|
<el-tab-pane name="sharing">
|
<span class="mulsz" slot="label">按出院科室统计 </span>
|
</el-tab-pane>
|
</el-tabs>
|
</div> -->
|
<div class="leftvlue-bg">
|
<el-row :gutter="20">
|
<!--标签数据-->
|
<el-col :span="24" :xs="24">
|
<el-form
|
:model="queryParams"
|
ref="queryForm"
|
size="small"
|
:inline="true"
|
v-show="showSearch"
|
label-width="98px"
|
>
|
<!-- <el-form-item label="医院" prop="userName">
|
<el-select v-model="queryParams.value1" placeholder="请选择">
|
<el-option
|
v-for="item in options"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
>
|
</el-option>
|
</el-select>
|
</el-form-item> -->
|
<el-form-item label="出院病区" prop="userName">
|
<!-- <el-select v-model="queryParams.leavehospitaldistrictcodes" placeholder="请选择">
|
<el-option
|
v-for="item in flatArray"
|
:key="item.deptCode"
|
:label="item.label"
|
:value="item.deptCode"
|
>
|
</el-option>
|
</el-select> -->
|
<el-select
|
v-model="queryParams.leavehospitaldistrictcodes"
|
size="medium"
|
multiple
|
filterable
|
placeholder="请选择病区"
|
>
|
<el-option
|
v-for="item in flatArray"
|
:key="item.deptCode"
|
:label="item.label"
|
:value="item.deptCode"
|
>
|
</el-option>
|
</el-select>
|
</el-form-item>
|
<!-- <el-form-item label="管理方案" prop="userName">
|
<el-select v-model="queryParams.value3" placeholder="请选择">
|
<el-option
|
v-for="item in options"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
>
|
</el-option>
|
</el-select>
|
</el-form-item> -->
|
<!-- <el-form-item label="出院日期" prop="userName">
|
<el-date-picker
|
v-model="queryParams.valuetime1"
|
align="right"
|
type="date"
|
placeholder="选择日期"
|
:picker-options="pickerOptionsa"
|
>
|
</el-date-picker>
|
</el-form-item> -->
|
<el-select
|
v-model="queryParams.serviceType"
|
multiple
|
placeholder="请选择"
|
>
|
<el-option
|
v-for="item in options"
|
:key="item.value"
|
:label="item.label"
|
:value="item.value"
|
>
|
</el-option>
|
</el-select>
|
<el-form-item
|
label-width="200"
|
label="应随访时间范围"
|
prop="userName"
|
>
|
<el-date-picker
|
v-model="queryParams.dateRange"
|
type="daterange"
|
range-separator="至"
|
start-placeholder="开始日期"
|
end-placeholder="结束日期"
|
>
|
</el-date-picker>
|
</el-form-item>
|
|
<el-form-item>
|
<el-button
|
type="primary"
|
icon="el-icon-search"
|
size="medium"
|
@click="handleQuery"
|
>搜索</el-button
|
>
|
<el-button
|
icon="el-icon-refresh"
|
size="medium"
|
@click="resetQuery"
|
>重置</el-button
|
>
|
</el-form-item>
|
</el-form>
|
|
<el-row :gutter="10" class="mb8">
|
<el-col :span="1.5">
|
<el-button
|
type="primary"
|
plain
|
icon="el-icon-plus"
|
size="medium"
|
@click="addladeltag"
|
v-hasPermi="['system:user:add']"
|
>新增</el-button
|
>
|
</el-col>
|
|
<el-col :span="1.5">
|
<el-button
|
type="danger"
|
plain
|
icon="el-icon-delete"
|
size="medium"
|
:disabled="multiple"
|
@click="handleDelete"
|
v-hasPermi="['system:user:remove']"
|
>删除</el-button
|
>
|
</el-col>
|
<el-col :span="1.5">
|
<div class="documentf">
|
<div class="document">
|
<el-button
|
type="warning"
|
plain
|
icon="el-icon-download"
|
size="medium"
|
@click="handleExport"
|
v-hasPermi="['system:user:export']"
|
>导出</el-button
|
>
|
</div>
|
</div>
|
</el-col>
|
|
<!-- <el-col :span="1.5"> </el-col> -->
|
</el-row>
|
<!-- <right-toolbar
|
:showSearch.sync="showSearch"
|
@queryTable="getList"
|
:columns="columns"
|
></right-toolbar> -->
|
<el-table
|
v-loading="loading"
|
:data="userList"
|
:border="true"
|
@selection-change="handleSelectionChange"
|
>
|
<el-table-column type="selection" width="50" align="center" />
|
<!-- <el-table-column
|
fixed
|
label="序号"
|
align="center"
|
key="tagid"
|
prop="tagid"
|
width="50"
|
/> -->
|
<el-table-column
|
fixed
|
label="出院病区"
|
align="center"
|
key="leavehospitaldistrictname"
|
prop="leavehospitaldistrictname"
|
width="100"
|
:show-overflow-tooltip="true"
|
/>
|
<el-table-column
|
label="服务总量"
|
align="center"
|
key="serviceCount"
|
prop="serviceCount"
|
>
|
<template slot-scope="scope">
|
<span
|
>{{ scope.row.updateBy }}
|
<p>{{ scope.row.serviceCount }}</p></span
|
>
|
</template>
|
</el-table-column>
|
|
<el-table-column
|
label="不执行"
|
align="center"
|
width="120"
|
key="bzxCount"
|
prop="bzxCount"
|
>
|
</el-table-column>
|
<el-table-column
|
label="应随访量"
|
align="center"
|
key="ysfCount"
|
prop="ysfCount"
|
>
|
</el-table-column
|
><el-table-column
|
label="发送失败"
|
align="center"
|
key="fssbCount"
|
prop="fssbCount"
|
>
|
</el-table-column
|
><el-table-column
|
label="待随访"
|
align="center"
|
key="dfsCount"
|
prop="dfsCount"
|
>
|
</el-table-column
|
><el-table-column
|
label="已发送"
|
align="center"
|
key="yfsCount"
|
prop="yfsCount"
|
>
|
</el-table-column>
|
<el-table-column
|
label="已完成"
|
align="center"
|
key="ywcCount"
|
prop="ywcCount"
|
>
|
</el-table-column>
|
<el-table-column
|
label="随访完成率"
|
align="center"
|
width="120"
|
key="sfwcl"
|
prop="sfwcl"
|
>
|
<template slot-scope="scope">
|
<span>{{ (Number(scope.row.sfwcl) * 100).toFixed(2) }}%</span>
|
</template>
|
</el-table-column>
|
<!-- <el-table-column
|
label="公众号发送次数"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
>
|
</el-table-column>
|
<el-table-column
|
label="公众号随访完成数"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
>
|
</el-table-column>
|
<el-table-column
|
label="公众号随访完成率"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
>
|
</el-table-column> -->
|
<!-- <el-table-column
|
label="短信发送次数"
|
align="center"
|
width="120"
|
key="dxfscs"
|
prop="dxfscs"
|
>
|
</el-table-column>
|
<el-table-column
|
label="短信随访完成数"
|
align="center"
|
width="120"
|
key="dxsfwccs"
|
prop="dxsfwccs"
|
>
|
</el-table-column>
|
<el-table-column
|
label="短信随访完成率"
|
align="center"
|
width="120"
|
key="dxsfwcl"
|
prop="dxsfwcl"
|
>
|
</el-table-column> -->
|
<!-- <el-table-column
|
label="人工随访次数"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
>
|
</el-table-column>
|
<el-table-column
|
label="人工随访完成数"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
>
|
</el-table-column>
|
<el-table-column
|
label="人工随访完成率"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
>
|
</el-table-column> -->
|
<!-- <el-table-column
|
label="失访数"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
>
|
</el-table-column>
|
<el-table-column
|
label="失访率"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
>
|
</el-table-column>
|
<el-table-column
|
label="失访率"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
> -->
|
<!-- </el-table-column> -->
|
<el-table-column
|
label="异常总数"
|
align="center"
|
key="yczs"
|
prop="yczs"
|
>
|
<template slot-scope="scope">
|
<el-button
|
size="medium"
|
type="danger"
|
plain
|
@click="routerErr(scope.row)"
|
><span class="button-zx">{{
|
scope.row.yczs
|
}}</span></el-button
|
>
|
</template>
|
</el-table-column>
|
<!-- <el-table-column
|
label="总异常率"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
>
|
</el-table-column> -->
|
<el-table-column
|
label="回复异常数"
|
align="center"
|
width="100"
|
key="hfycs"
|
prop="hfycs"
|
>
|
</el-table-column>
|
<!-- <el-table-column
|
label="回复异常及时处理数"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
>
|
</el-table-column>
|
<el-table-column
|
label="回复异常及时处理率"
|
align="center"
|
key="tagdescription"
|
prop="tagdescription"
|
>
|
</el-table-column> -->
|
|
<!-- <el-table-column
|
label="操作"
|
align="center"
|
width="300"
|
class-name="small-padding fixed-width"
|
>
|
<template slot-scope="scope">
|
<el-button
|
size="medium"
|
type="text"
|
@click="handleUpdate(scope.row)"
|
v-hasPermi="['system:user:edit']"
|
><span class="button-textxg"
|
><i class="el-icon-edit"></i>修改</span
|
></el-button
|
>
|
<el-button
|
size="medium"
|
type="text"
|
@click="handleDelete(scope.row)"
|
v-hasPermi="['system:user:remove']"
|
><span class="button-textsc"
|
><i class="el-icon-delete"></i>删除</span
|
></el-button
|
>
|
</template>
|
</el-table-column> -->
|
</el-table>
|
|
<!-- <pagination
|
v-show="total > 0"
|
:total="total"
|
:page.sync="queryParams.pageNum"
|
:limit.sync="queryParams.pageSize"
|
@pagination="getList"
|
/> -->
|
</el-col>
|
</el-row>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import {
|
toamendtag,
|
addapitag,
|
detailstag,
|
deletetag,
|
changetagcategory,
|
toamendtagcategory,
|
addtagcategory,
|
deletetagcategory,
|
listtag,
|
tagclassifylist,
|
} from "@/api/system/label";
|
import { getSfStatistics, deptTreeSelect } from "@/api/system/user";
|
|
import Treeselect from "@riophae/vue-treeselect";
|
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
|
const shortcuts = [
|
{
|
text: "今天",
|
onClick(picker) {
|
picker.$emit("pick", new Date());
|
},
|
},
|
{
|
text: "昨天",
|
onClick(picker) {
|
const date = new Date();
|
date.setTime(date.getTime() - 3600 * 1000 * 24);
|
picker.$emit("pick", date);
|
},
|
},
|
{
|
text: "一周前",
|
onClick(picker) {
|
const date = new Date();
|
date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
|
picker.$emit("pick", date);
|
},
|
},
|
];
|
export default {
|
name: "questionnaire",
|
dicts: ["sys_normal_disable", "sys_user_sex"],
|
components: { Treeselect },
|
data() {
|
return {
|
topactiveName: "Local", //顶部选择
|
activeName: "first", //侧边选择
|
// 遮罩层
|
loading: false,
|
// 选中数组
|
ids: [],
|
// 非单个禁用
|
single: true,
|
// 非多个禁用
|
multiple: true,
|
// 显示搜索条件
|
showSearch: true,
|
idds: "", //分类id
|
// 总条数
|
total: 0,
|
flatArray: [],
|
amendtag: false, //是否修改类别
|
lstamendtag: false, //是否修改标签
|
scavisible: false, //删除弹框
|
deleteVisible: false, //分类删除弹框
|
deletefenl: "高血压", //删除项
|
//修改添加标签弹框数据
|
tagform: {
|
isupload: "",
|
tagname: "",
|
tagcategoryid: "",
|
tagdescription: "",
|
},
|
classifyform: {
|
categoryname: "",
|
},
|
// 标签表格数据
|
userList: [],
|
// 弹出层标题
|
title: "",
|
// 是否显示弹出层
|
open: false,
|
// 日期范围
|
dateRange: [],
|
// 岗位选项
|
postOptions: [],
|
// 角色选项
|
roleOptions: [],
|
// 表单参数
|
form: {},
|
forms: {
|
name: "",
|
},
|
numberlb: 22,
|
dialogFormVisible: false, //添加、修改类别弹框
|
lstamendtagVisible: false, //添加、修改标签弹框
|
goQRCodeVisible: false, //二维码弹框
|
sidecolumnval: "", //类别搜索
|
propss: { multiple: true },
|
|
options: [
|
{
|
value: 1,
|
label: "监测评估",
|
},
|
{
|
value: 2,
|
label: "出院随访",
|
},
|
{
|
value: 3,
|
label: "门诊随访",
|
},
|
{
|
value: 4,
|
label: "宣教关怀",
|
},
|
{
|
value: 5,
|
label: "复诊管理",
|
},
|
|
{
|
value: 7,
|
label: "患者报告",
|
},
|
|
{
|
value: 9,
|
label: "体检随访",
|
},
|
|
{
|
value: 11,
|
label: "影像随访",
|
},
|
{
|
value: 12,
|
label: "心电随访",
|
},
|
{
|
value: 13,
|
label: "专病随访",
|
},
|
],
|
pickerOptions: {
|
disabledDate(time) {
|
return time.getTime() < Date.now() - 3600 * 1000 * 24;
|
},
|
shortcuts: shortcuts,
|
},
|
pickerOptionsa: {
|
disabledDate(time) {
|
return time.getTime() > Date.now();
|
},
|
shortcuts: shortcuts,
|
},
|
// 查询标签列表参数
|
queryParams: {
|
pageNum: 1,
|
pageSize: 10,
|
serviceType: [2],
|
dateRange: [],
|
},
|
// 列信息
|
columns: [
|
{ key: 0, label: `标签编号`, visible: true },
|
{ key: 1, label: `标签名称`, visible: true },
|
{ key: 2, label: `标签昵称`, visible: true },
|
{ key: 3, label: `部门`, visible: true },
|
{ key: 4, label: `手机号码`, visible: true },
|
{ key: 5, label: `状态`, visible: true },
|
{ key: 6, label: `创建时间`, visible: true },
|
],
|
};
|
},
|
watch: {},
|
created() {
|
this.getList();
|
this.getDeptTree();
|
},
|
|
methods: {
|
/** 查询标签列表 */
|
getList() {
|
getSfStatistics(this.queryParams).then((response) => {
|
console.log(response);
|
// this.total = response.total;
|
this.userList = response.data;
|
});
|
},
|
/** 修改标签 */
|
handleUpdate(row) {
|
console.log(row, "修改标签");
|
this.lstamendtagVisible = true;
|
this.lstamendtag = true;
|
this.tagform = {
|
isupload: row.isupload,
|
tagname: row.tagname,
|
tagcategoryid: row.tagcategoryid,
|
tagdescription: row.tagdescription,
|
tagid: row.tagid,
|
};
|
},
|
// 获取科室树
|
getDeptTree() {
|
// 科室列表
|
deptTreeSelect().then((response) => {
|
this.deptOptions = response.data;
|
console.log(this.deptOptions, " this.deptOptions");
|
|
this.flatArray = this.flattenArray(response.data);
|
console.log(this.flatArray, "this.flatArray");
|
});
|
},
|
flattenArray(multiArray) {
|
let result = [];
|
|
// 递归函数,用于将多级数组转换为一维数组,只包含最底层的元素
|
function flatten(element) {
|
// 如果当前元素有子元素,继续递归
|
if (element.children && element.children.length > 0) {
|
element.children.forEach((child) => flatten(child));
|
} else {
|
// 克隆元素以避免修改原始数据
|
let item = JSON.parse(JSON.stringify(element));
|
result.push(item); // 将最底层的元素添加到结果数组
|
}
|
}
|
|
// 从顶层元素开始递归
|
multiArray.forEach((element) => flatten(element));
|
return result; // 返回只包含最底层元素的一维数组
|
},
|
addladeltag() {
|
this.lstamendtagVisible = true;
|
this.lstamendtag = false;
|
this.tagform = {
|
isupload: "",
|
tagname: "",
|
tagcategoryid: "",
|
tagdescription: "",
|
tagid: "",
|
};
|
},
|
// 添加/修改标签
|
Maintenancetag() {
|
if (this.lstamendtag) {
|
toamendtag(this.addDateRange(this.tagform)).then((response) => {
|
console.log(response);
|
this.getList();
|
});
|
} else {
|
addapitag(this.addDateRange(this.tagform)).then((response) => {
|
console.log(response);
|
this.getList();
|
});
|
}
|
this.tagform = {
|
isupload: "",
|
tagname: "",
|
tagcategoryid: "",
|
tagdescription: "",
|
tagid: "",
|
};
|
},
|
routerErr(row) {
|
console.log(row, "跳转异常");
|
this.$router.push({
|
path: "/followvisit/discharge",
|
query: {
|
errtype: 1,
|
leavehospitaldistrictcode: row.leavehospitaldistrictcode,
|
},
|
});
|
},
|
|
// 表单重置
|
reset() {
|
this.form = {
|
userId: undefined,
|
deptId: undefined,
|
userName: undefined,
|
nickName: undefined,
|
password: undefined,
|
phonenumber: undefined,
|
email: undefined,
|
sex: undefined,
|
status: "0",
|
remark: undefined,
|
postIds: [],
|
roleIds: [],
|
};
|
this.resetForm("form");
|
},
|
// 标签状态修改
|
handleStatusChange(row) {
|
console.log(row.isupload);
|
let text = row.isupload === "0" ? "启用" : "停用";
|
this.$modal
|
.confirm('确认要"' + text + '""' + row.tagname + '"标签吗?')
|
.then(function () {
|
return changetagcategory(row.tagid, row.isupload);
|
})
|
.then(() => {
|
this.$modal.msgSuccess(text + "成功");
|
})
|
.catch(function () {
|
row.isupload = row.isupload === "0" ? "1" : "0";
|
});
|
},
|
/** 搜索按钮操作 */
|
handleQuery() {
|
this.queryParams.pageNum = 1;
|
console.log();
|
this.queryParams.startTime = this.parseTime(
|
this.queryParams.dateRange[0]
|
);
|
this.queryParams.endTime = this.parseTime(this.queryParams.dateRange[1]);
|
this.getList();
|
},
|
/** 重置按钮操作 */
|
resetQuery() {
|
this.queryParams.dateRange = [];
|
this.queryParams.leavehospitaldistrictcodes = [];
|
this.handleQuery();
|
},
|
// 多选框选中数据
|
handleSelectionChange(selection) {
|
this.ids = selection.map((item) => item.tagid);
|
this.single = selection.length != 1;
|
this.multiple = !selection.length;
|
},
|
|
/** 删除按钮操作 */
|
handleDelete(row) {
|
console.log(row, "删除弹窗");
|
const tagids = row.tagid || this.ids;
|
console.log(tagids);
|
const tagname = row.tagname;
|
this.$modal
|
.confirm(
|
tagname
|
? '是否确认删除标签名称为"' + tagname + '"的数据项?'
|
: "是否确认删除选中的数据项?"
|
)
|
.then(function () {
|
return deletetag(tagids);
|
})
|
.then(() => {
|
this.getList();
|
this.$modal.msgSuccess("删除成功");
|
})
|
.catch(() => {});
|
},
|
/** 导出按钮操作 */
|
handleExport() {
|
this.download(
|
"smartor/serviceSubtask/getSfStatisticsExport",
|
{
|
...this.queryParams,
|
},
|
`user_${new Date().getTime()}.xlsx`
|
);
|
},
|
},
|
};
|
</script>
|
|
<style lang="scss" scoped>
|
.sidecolumn {
|
width: 180px;
|
min-height: 100vh;
|
text-align: center;
|
// display: flex;
|
margin-top: 20px;
|
margin: 20px;
|
padding: 30px;
|
background: #edf1f7;
|
border: 1px solid #dcdfe6;
|
-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
|
0 0 6px 0 rgba(0, 0, 0, 0.04);
|
.sidecolumn-top {
|
display: flex;
|
justify-content: space-between;
|
.top-wj {
|
font-size: 20px;
|
}
|
.top-tj {
|
font-size: 18px;
|
|
color: rgb(0, 89, 255);
|
cursor: pointer;
|
}
|
}
|
.center-ss {
|
margin-top: 30px;
|
.input-with-select {
|
height: 40px !important;
|
}
|
}
|
.bottom-fl {
|
margin-top: 30px;
|
display: center !important;
|
}
|
}
|
.qrcode-dialo {
|
text-align: center;
|
// display: flex;
|
margin: 20px;
|
padding: 30px;
|
background: #edf1f7;
|
border: 1px solid #dcdfe6;
|
-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
|
0 0 6px 0 rgba(0, 0, 0, 0.04);
|
.qrcode-text {
|
font-size: 20px;
|
span {
|
margin-left: 20px;
|
}
|
}
|
.qrcode-img {
|
width: 300px;
|
height: 400px;
|
}
|
}
|
::v-deep.el-tabs--left,
|
.el-tabs--right {
|
overflow: hidden;
|
align-items: center;
|
display: flex;
|
}
|
::v-deep.el-input--medium .el-input__inner {
|
height: 40px !important;
|
}
|
::v-deep.el-tabs--right .el-tabs__active-bar.is-right {
|
height: 40px;
|
width: 5px;
|
left: 0;
|
}
|
::v-deep.el-tabs--right .el-tabs__item.is-right {
|
display: block;
|
text-align: left;
|
font-size: 20px;
|
}
|
|
.leftvlue {
|
// display: flex;
|
// flex: 1;
|
// width: 80%;
|
// margin-top: 20px;
|
margin: 20px;
|
padding: 30px;
|
background: #ffff;
|
border: 1px solid #dcdfe6;
|
-webkit-box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.12),
|
0 0 6px 0 rgba(0, 0, 0, 0.04);
|
.mulsz {
|
font-size: 20px;
|
}
|
}
|
.document {
|
width: 100px;
|
height: 50px;
|
}
|
.documentf {
|
display: flex;
|
justify-content: flex-end;
|
}
|
.button-text {
|
color: rgb(70, 204, 238);
|
}
|
.button-textck {
|
color: rgb(39, 167, 67);
|
}
|
.button-textxg {
|
color: rgb(35, 81, 233);
|
}
|
.button-textsc {
|
color: rgb(235, 23, 23);
|
}
|
</style>
|