| | |
| | | <template> |
| | | <div class="app-container"> |
| | | <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <!-- <div class="leftvlue" style="margin-bottom: 20px"> |
| | | <el-row :gutter="10"> |
| | | <el-col :span="2.5" v-for="(item, index) in cardlist" :key="index"> |
| | | <el-card |
| | |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ item.value }} |
| | | {{ item.value ? item.value : 0 }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | </div> --> |
| | | <statistics-cards |
| | | :cardlist="cardlist" |
| | | :ycvalue="ycvalue" |
| | | :jgvalue="jgvalue" |
| | | :show-warning-condition="orgname == '省立同德翠苑院区'" |
| | | /> |
| | | <el-row :gutter="20"> |
| | | <!--用户数据--> |
| | | <el-form |
| | |
| | | v-model="topqueryParams.scopetype" |
| | | placeholder="默认全部" |
| | | :options="sourcetype" |
| | | filterable |
| | | clearable |
| | | :props="{ expandTrigger: 'hover' }" |
| | | @change="handleChange" |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="任务状态" prop="status"> |
| | | <el-select v-model="topqueryParams.sendstate" placeholder="请选择"> |
| | | <el-option |
| | | v-for="item in topicoptions" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-form-item label="随访状态" prop="status"> |
| | | <el-cascader |
| | | v-model="serviceStatusValue" |
| | | placeholder="请选择" |
| | | :options="serviceStatusOptions" |
| | | :props="cascaderProps" |
| | | @change="handleServiceStatusChange" |
| | | clearable |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | |
| | | <el-col :span="1.5"> |
| | | <el-button |
| | | type="primary" |
| | | plain |
| | | icon="el-icon-plus" |
| | | size="medium" |
| | | @click="handleAdd" |
| | |
| | | icon="el-icon-upload2" |
| | | size="medium" |
| | | @click="handleExport" |
| | | v-hasPermi="['system:user:export']" |
| | | >导出</el-button |
| | | > |
| | | </div> |
| | |
| | | <el-table |
| | | v-loading="loading" |
| | | :data="userList" |
| | | height="660" |
| | | height="808" |
| | | :row-class-name="tableRowClassName" |
| | | @selection-change="handleSelectionChange" |
| | | > |
| | |
| | | <!-- <el-table-column label="序号" fixed align="center" key="id" prop="id" /> --> |
| | | <el-table-column |
| | | label="姓名" |
| | | width="100" |
| | | fixed |
| | | align="center" |
| | | key="sendname" |
| | | prop="sendname" |
| | | /> |
| | | <el-table-column |
| | | label="任务状态" |
| | | label="随访状态" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | key="sendstateView" |
| | | prop="sendstateView" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表单已领取</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >待执行</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表单已发送</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">不执行</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >发送失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="danger" :disable-transitions="false">已完成</el-tag> |
| | | </div> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstateView == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >待随访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 2"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已完成</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstateView == 3"> |
| | | <el-tag type="warning" :disable-transitions="false" |
| | | >无需随访</el-tag |
| | | > |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column |
| | |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="人工处理意见" |
| | | label="处理意见" |
| | | align="center" |
| | | key="suggest" |
| | | prop="suggest" |
| | |
| | | <el-table-column |
| | | label="随访人员" |
| | | align="center" |
| | | key="createBy" |
| | | prop="createBy" |
| | | key="updateBy" |
| | | prop="updateBy" |
| | | width="120" |
| | | /> |
| | | <el-table-column |
| | | label="随访时间" |
| | | label="随访完成时间" |
| | | sortable |
| | | align="center" |
| | | prop="finishtime" |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="出院日期" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="endtime" |
| | | prop="endtime" |
| | |
| | | > |
| | | <el-table-column |
| | | label="应随访日期" |
| | | width="200" |
| | | width="146" |
| | | align="center" |
| | | key="longSendTime" |
| | | prop="longSendTime" |
| | | key="visitTime" |
| | | prop="visitTime" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ formatTime(scope.row.longSendTime) }}</span> |
| | | <span>{{ formatTime(scope.row.visitTime) }}</span> |
| | | </template></el-table-column |
| | | > |
| | | <el-table-column |
| | |
| | | /> --> |
| | | |
| | | <!-- <el-table-column label="年龄" align="center" key="age" prop="age" /> --> |
| | | <!-- <el-table-column label="性别" align="center" key="sex" prop="sex" /> --> |
| | | <!-- <el-table-column label="性别"width="100" align="center" key="sex" prop="sex" /> --> |
| | | <!-- <el-table-column label="床号" align="center" key="badNo" prop="badNo" /> --> |
| | | <el-table-column |
| | | label="科室" |
| | |
| | | prop="templatename" |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | label="任务状态" |
| | | align="center" |
| | | key="sendstate" |
| | | prop="sendstate" |
| | | width="120" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <el-tooltip |
| | | class="item" |
| | | effect="dark" |
| | | :content="scope.row.remark" |
| | | placement="top-start" |
| | | > |
| | | <div v-if="scope.row.sendstate == 1"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >表单已领取</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 2"> |
| | | <el-tag type="primary" :disable-transitions="false" |
| | | >待随访</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 3"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >表单已发送</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 4"> |
| | | <el-tag type="info" :disable-transitions="false">不执行</el-tag> |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 5"> |
| | | <el-tag type="danger" :disable-transitions="false" |
| | | >发送失败</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 6"> |
| | | <el-tag type="success" :disable-transitions="false" |
| | | >已完成</el-tag |
| | | > |
| | | </div> |
| | | <div v-if="scope.row.sendstate == 7"> |
| | | <el-tag type="danger" :disable-transitions="false">超时</el-tag> |
| | | </div> |
| | | </el-tooltip> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="任务执行方式" |
| | | align="center" |
| | |
| | | size="medium" |
| | | type="text" |
| | | @click="followupvisit(scope.row)" |
| | | v-hasPermi="['system:user:edit']" |
| | | |
| | | ><span class="button-bb" |
| | | ><i class="el-icon-s-promotion"></i></span |
| | | ></el-button> |
| | |
| | | size="medium" |
| | | type="text" |
| | | @click="handlestop(scope.row)" |
| | | v-hasPermi="['system:user:edit']" |
| | | |
| | | ><span class="button-sc"><i class="el-icon-delete"></i></span |
| | | ></el-button> |
| | | </el-tooltip> --> |
| | |
| | | } from "@/api/system/user"; |
| | | import { getTaskservelist } from "@/api/AiCentre/index"; |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import StatisticsCards from "@/components/StatisticsCards"; |
| | | |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect, StatisticsCards }, |
| | | data() { |
| | | return { |
| | | // 遮罩层 |
| | |
| | | ids: [], |
| | | // 非单个禁用 |
| | | single: true, |
| | | jgvalue: 0, |
| | | |
| | | // 非多个禁用 |
| | | multiple: true, |
| | | // 显示搜索条件 |
| | |
| | | }, |
| | | dynamicTags: ["选项一", "选项二", "选项三"], //选项 |
| | | inputVisible: false, |
| | | ycvalue: "", |
| | | yfsvalue: "", |
| | | inputValue: "", |
| | | preachform: "", |
| | |
| | | }, |
| | | value: [], |
| | | list: [], |
| | | orgname: "", |
| | | |
| | | sourcetype: [ |
| | | { |
| | |
| | | }, |
| | | ], |
| | | loading: false, |
| | | serviceStatusValue: 10, |
| | | cascaderProps: { |
| | | expandTrigger: "hover", // 悬停展开 |
| | | checkStrictly: true, // ✅ 关键:允许选中任意一级 |
| | | emitPath: false, // ✅ 只返回选中的值,不返回路径数组 |
| | | }, |
| | | // 随访状态级联选择器 |
| | | serviceStatusOptions: [ |
| | | { |
| | | value: null, |
| | | label: "全部", |
| | | }, |
| | | { |
| | | value: 10, // 一级:待随访 |
| | | label: "待随访", |
| | | children: [ |
| | | { value: 1, label: "被领取" }, |
| | | { value: 2, label: "待发送" }, |
| | | { value: 3, label: "已发送" }, |
| | | { value: 5, label: "发送失败" }, |
| | | { value: 7, label: "超时" }, |
| | | ], |
| | | }, |
| | | { |
| | | value: 20, // 一级:已完成 |
| | | label: "已完成", |
| | | children: [{ value: 6, label: "已完成" }], |
| | | }, |
| | | { |
| | | value: 30, // 一级:无需随访 |
| | | label: "无需随访", |
| | | children: [{ value: 4, label: "不执行" }], |
| | | }, |
| | | ], |
| | | cardlist: [ |
| | | { |
| | | name: "出院服务总量", |
| | |
| | | name: "待执行", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "已发送", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "已发送", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表单已发送", |
| | |
| | | pageSize: 10, |
| | | serviceType: 7, |
| | | searchscope: 3, |
| | | sendstate: 2, |
| | | scopetype: [], |
| | | leaveldeptcodes: [], |
| | | leavehospitaldistrictcodes: [], |
| | |
| | | |
| | | topicoptions: [ |
| | | { |
| | | value: null, |
| | | label: "全部", |
| | | }, |
| | | { |
| | | value: 1, |
| | | label: "表单已领取", |
| | | label: "待随访", |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: "待执行", |
| | | label: "随访中", |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: "表单已发送", |
| | | label: "未完成", |
| | | }, |
| | | { |
| | | value: 4, |
| | | label: "不执行", |
| | | label: "已完成", |
| | | }, |
| | | { |
| | | value: 5, |
| | | label: "发送失败", |
| | | }, |
| | | { |
| | | value: 6, |
| | | label: "已完成", |
| | | label: "无需随访", |
| | | }, |
| | | ], |
| | | topicoptionsyj: [ |
| | |
| | | }, |
| | | ], |
| | | errtype: "", |
| | | ycvalue: 0, |
| | | jgvalue: 0, |
| | | |
| | | leavehospitaldistrictcode: "", |
| | | serviceState: [], |
| | | checkboxlist: [], |
| | |
| | | this.errtype = this.$route.query.errtype; |
| | | this.leavehospitaldistrictcode = |
| | | this.$route.query.leavehospitaldistrictcode; |
| | | this.orgname = localStorage.getItem("orgname"); |
| | | |
| | | this.sourcetype[0].children = store.getters.belongDepts.map((dept) => { |
| | | return { |
| | | label: dept.deptName, |
| | |
| | | }, |
| | | methods: { |
| | | /** 查询门诊随访服务列表 */ |
| | | getList(refresh) { |
| | | async getList(refresh) { |
| | | // 默认全部 |
| | | if (this.topqueryParams.searchscope == 3) { |
| | | this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( |
| | | (obj) => obj.deptCode |
| | | this.applyDeptWardScope(); |
| | | if (this.endOut == 0) { |
| | | this.topqueryParams.endSendDateTime = this.formatDateToYYYYMMDDHHMMSS( |
| | | this.getEndOfDay() |
| | | ); |
| | | this.topqueryParams.leavehospitaldistrictcodes = |
| | | store.getters.belongWards.map((obj) => obj.districtCode); |
| | | } |
| | | |
| | | // 接受异常跳转 |
| | | if (this.errtype) { |
| | | this.topqueryParams.leavehospitaldistrictcodes.push( |
| | | this.leavehospitaldistrictcode |
| | | ); |
| | | console.log(this.topqueryParams.leavehospitaldistrictcodes, "11"); |
| | | } |
| | | |
| | | this.loading = true; |
| | | getTaskservelist(this.topqueryParams).then((response) => { |
| | | |
| | | if ( |
| | | this.topqueryParams.leavehospitaldistrictcodes[0] && |
| | | this.topqueryParams.leaveldeptcodes[0] |
| | | ) { |
| | | this.topqueryParams.deptOrDistrict = 2; |
| | | } else { |
| | | this.topqueryParams.deptOrDistrict = 1; |
| | | } |
| | | |
| | | if (!this.followupAuthority()) { |
| | | this.$message.warning("未配置科室/病区相关权限不可查询"); |
| | | this.loading = false; |
| | | return Promise.reject(new Error("无权限查询")); |
| | | } |
| | | |
| | | try { |
| | | const response = await getTaskservelist(this.topqueryParams); |
| | | |
| | | // ✅ 第一步:先锁定恢复状态 |
| | | this.isRestoring = true; |
| | | |
| | | // ✅ 第二步:再更新数据(这会触发 selection-change,但被锁住了) |
| | | this.userList = response.rows[0].serviceSubtaskList; |
| | | this.total = response.total; |
| | | |
| | | // ✅ 第三步:恢复选中状态 |
| | | // this.restoreSelection(); |
| | | this.$nextTick(() => { |
| | | this.restoreSelection(); |
| | | }); |
| | | |
| | | // ✅ 第四步:处理其他数据 |
| | | if (refresh) { |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | this.cardlist[1].value = response.rows[0].wzx; |
| | | this.cardlist[2].value = response.rows[0].ysf; |
| | | this.ycvalue = response.rows[0].yc; |
| | | this.cardlist[3].value = response.rows[0].fssb; |
| | | this.cardlist[4].value = response.rows[0].dfs; |
| | | this.cardlist[5].value = response.rows[0].yfs2; |
| | | Number(response.rows[0].wxsf) + Number(response.rows[0].xsf) || 0; |
| | | this.cardlist[1].value = response.rows[0].wxsf || 0; |
| | | this.ycvalue = Number(response.rows[0].yc) || 0; |
| | | this.jgvalue = response.rows[0].jg; |
| | | this.cardlist[2].value = response.rows[0].xsf || 0; |
| | | this.cardlist[3].value = response.rows[0].dsf || 0; |
| | | this.cardlist[4].value = response.rows[0].ywc || 0; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | | |
| | | // ✅ 第五步:处理 preachform 等其他数据 |
| | | this.userList.forEach((item) => { |
| | | let idArray = null; |
| | | if (item.endtime) { |
| | |
| | | } |
| | | |
| | | if (item.preachform) { |
| | | if (item.endtime) { |
| | | item.preachformson = item.preachform; |
| | | idArray = item.preachform.split(","); |
| | | } |
| | | item.preachformson = item.preachform; |
| | | idArray = item.preachform.split(","); |
| | | |
| | | item.preachform = idArray.map((value) => { |
| | | // 查找id对应的对象 |
| | | const item = this.checkboxlist.find( |
| | | (item) => item.value == value |
| | | ); |
| | | // 如果找到对应的id,返回label值,否则返回null |
| | | return item ? item.label : null; |
| | | }); |
| | | } |
| | | if (item.currentPreachform) { |
| | | item.currentPreachform = this.checkboxlist.find( |
| | | (item) => item.value == item.currentPreachform |
| | | )?.value; |
| | | console.log(item.currentPreachform, "mi"); |
| | | } |
| | | }); |
| | | |
| | | this.total = response.total; |
| | | }); |
| | | this.loading = false; |
| | | |
| | | // ✅ 第六步:解锁 |
| | | this.$nextTick(() => { |
| | | this.isRestoring = false; |
| | | }); |
| | | } catch (error) { |
| | | console.error("获取列表失败:", error); |
| | | this.loading = false; |
| | | this.isRestoring = false; |
| | | } |
| | | }, |
| | | // 查看影像随访详情 |
| | | Referencequestion(row) { |
| | |
| | | |
| | | this.getList(refresh); |
| | | }, |
| | | // 随访状态变更处理 |
| | | handleServiceStatusChange(value) { |
| | | // 清空选择 |
| | | if (value === null || value === undefined || value === "") { |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = null; |
| | | return; |
| | | } |
| | | console.log(value, "value"); |
| | | |
| | | // 一级节点的值(大于等于10) |
| | | if (value >= 10) { |
| | | // 选中了一级 |
| | | switch (value) { |
| | | case 10: |
| | | this.topqueryParams.sendstateView = 1; // 待随访 |
| | | break; |
| | | case 20: |
| | | this.topqueryParams.sendstateView = 2; // 已完成 |
| | | break; |
| | | case 30: |
| | | this.topqueryParams.sendstateView = 3; // 无需随访 |
| | | break; |
| | | } |
| | | this.topqueryParams.sendstate = null; |
| | | } else { |
| | | // 选中了二级(具体状态) |
| | | this.topqueryParams.sendstateView = null; |
| | | this.topqueryParams.sendstate = value; |
| | | } |
| | | }, |
| | | // 患者范围处理 |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | |
| | | pageSize: 10, |
| | | serviceType: 7, |
| | | searchscope: 2, |
| | | sendstate: 2, |
| | | }; |
| | | this.handleQuery(1); |
| | | }, |
| | |
| | | Seedetails(row) { |
| | | let type = ""; |
| | | console.log(row, "rwo"); |
| | | if (row.preachformson) { |
| | | if (row.preachformson.includes("3")) { |
| | | type = 1; |
| | | console.log(type, "rwo"); |
| | | } |
| | | if (row.type == 1) { |
| | | type = 1; |
| | | } |
| | | this.$router.push({ |
| | | path: "/followvisit/record/detailpage/", |
| | |
| | | this.topqueryParams.pageNum = null; |
| | | this.topqueryParams.pageSize = null; |
| | | this.download( |
| | | "smartor/serviceSubtask/export", |
| | | "smartor/serviceSubtask/patItemExport", |
| | | { |
| | | ...this.topqueryParams, |
| | | }, |
| | |
| | | } |
| | | } |
| | | ::v-deep.leftvlue .el-card__body { |
| | | background: #d0e9fd; |
| | | background: #f2f8ff; |
| | | color: #324a9b; |
| | | } |
| | | ::v-deep.leftvlue .el-card__body:hover { |
| | | background: #8dc8f8; |
| | | background: #3664d9; |
| | | color: #fff; |
| | | cursor: pointer; /* 鼠标悬浮时变为手形 */ |
| | | } |
| | | ::v-deep.errleftvlue .el-card__body { |