| | |
| | | </div> |
| | | </el-card> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="ysfleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>表单已发送</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ yfsvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="2.5"> |
| | | <div class="errleftvlue"> |
| | | <el-card shadow="hover"> |
| | | <div style="padding: 8px"> |
| | | <span>异常</span> |
| | | <div |
| | | style=" |
| | | text-align: center; |
| | | font-size: 18px; |
| | | margin-top: 10px; |
| | | font-weight: 600; |
| | | " |
| | | > |
| | | {{ ycvalue }} |
| | | </div> |
| | | </div> |
| | | </el-card> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | </div> |
| | | <el-row :gutter="20"> |
| | |
| | | <el-input |
| | | v-model="topqueryParams.sendname" |
| | | placeholder="请输入患者姓名" |
| | | @keyup.enter.native="handleQuery" |
| | | ></el-input> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="患者范围" prop="status"> |
| | | <el-select |
| | | v-model="topqueryParams.searchscope" |
| | | placeholder="请选择患者范围" |
| | | > |
| | | <el-option |
| | | v-for="item in source" |
| | | :key="item.value" |
| | | :label="item.label" |
| | | :value="item.value" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | | <el-cascader |
| | | v-model="topqueryParams.scopetype" |
| | | placeholder="默认全部" |
| | | :options="sourcetype" |
| | | :props="{ expandTrigger: 'hover' }" |
| | | @change="handleChange" |
| | | ></el-cascader> |
| | | </el-form-item> |
| | | |
| | | <el-form-item label="任务状态" prop="status"> |
| | |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="患者标签" prop="tagname"> |
| | | <el-input |
| | | v-model="topqueryParams.tagname" |
| | | placeholder="输入进行模糊查询" |
| | | maxlength="30" |
| | | @keyup.enter.native="handleQuery" |
| | | /> |
| | | </el-form-item> |
| | | |
| | | <el-form-item> |
| | | <el-button |
| | | type="primary" |
| | | icon="el-icon-search" |
| | | size="medium" |
| | | @click="handleQuery" |
| | | @click="handleQuery(1)" |
| | | >搜索</el-button |
| | | > |
| | | <el-button icon="el-icon-refresh" size="medium" @click="resetQuery" |
| | |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="1.5"> |
| | | <div class="documentf"> |
| | | <div class="document"> |
| | | <el-button |
| | | type="success" |
| | | plain |
| | | size="medium" |
| | | @click="buidegetTasklist()" |
| | | >待办服务</el-button |
| | | > |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-table |
| | | v-loading="loading" |
| | |
| | | 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.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> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- <el-table-column |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="标签" |
| | | align="center" |
| | | key="tagname" |
| | | prop="tagname" |
| | | show-overflow-tooltip |
| | | width="180" |
| | | /> |
| | | <el-table-column |
| | | label="随访人员" |
| | | align="center" |
| | | key="createBy" |
| | | prop="createBy" |
| | | width="120" |
| | | /> |
| | | |
| | | <el-table-column |
| | | label="随访时间" |
| | | sortable |
| | | align="center" |
| | | prop="visitTime" |
| | | width="160" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ parseTime(scope.row.visitTime) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="完成时间" |
| | | sortable |
| | | align="center" |
| | | prop="finishtime" |
| | |
| | | prop="endDay" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span>{{ |
| | | scope.row.endDay ? scope.row.endDay + "天" : "日期缺失" |
| | | }}</span> |
| | | <span>{{ scope.row.endDay ? scope.row.endDay + "天" : "" }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | width="200" |
| | | /> |
| | | <el-table-column |
| | | |
| | | label="任务执行方式" |
| | | align="center" |
| | | key="preachform" |
| | |
| | | :show-overflow-tooltip="true" |
| | | > |
| | | <template slot-scope="scope"> |
| | | <span v-for="item in scope.row.preachform" |
| | | >{{ item }}、 |
| | | </span> |
| | | <span v-for="item in scope.row.preachform">{{ item }}、 </span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | |
| | | <!-- <el-table-column |
| | | label="任务发送流程" |
| | | align="center" |
| | | key="serviceSubtaskRecordList" |
| | |
| | | >{{ item.remark }}、 |
| | | </span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table-column> --> |
| | | <el-table-column |
| | | |
| | | label="任务结果说明" |
| | | width="120" |
| | | width="200" |
| | | align="center" |
| | | key="remark" |
| | | prop="remark" |
| | | > |
| | | <template slot-scope="scope" v-if="scope.row.remark"> |
| | | <el-tag |
| | | type="success" |
| | | type="warning" |
| | | v-if="scope.row.sendstate != 5 && scope.row.sendstate != 4" |
| | | >{{ scope.row.remark }}</el-tag |
| | | > |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="操作" |
| | | |
| | | align="center" |
| | | fixed="right" |
| | | width="200" |
| | | class-name="small-padding fixed-width" |
| | | > |
| | |
| | | <el-button size="medium" type="text" @click="Seedetails(scope.row)" |
| | | ><span class="button-zx" |
| | | ><i class="el-icon-s-order"></i>查看详情</span |
| | | ></el-button |
| | | > |
| | | <el-button size="medium" type="text" @click="outPathQr(scope.row)" |
| | | ><span class="button-qr" |
| | | ><i class="el-icon-view"></i>二维码</span |
| | | ></el-button |
| | | > |
| | | </template> |
| | |
| | | > |
| | | </span> |
| | | </el-dialog> |
| | | <!-- 二维码 --> |
| | | <el-dialog |
| | | :title="qrDialog.title" |
| | | :visible.sync="qrDialog.visible" |
| | | width="400px" |
| | | center |
| | | @close="handleQrClose" |
| | | > |
| | | <div class="qrcode-container"> |
| | | <!-- 加载状态 --> |
| | | <div v-if="qrLoading" class="qrcode-loading"> |
| | | <i class="el-icon-loading"></i> |
| | | <span>二维码生成中...</span> |
| | | </div> |
| | | |
| | | <!-- 有有效数据时显示二维码 --> |
| | | <div v-else-if="safeQrUrl" class="qrcode-content"> |
| | | <vue-qr |
| | | :text="safeQrUrl" |
| | | :size="280" |
| | | :margin="10" |
| | | :logoSrc="qrDialog.logo" |
| | | :logoScale="0.2" |
| | | colorDark="#191a23" |
| | | colorLight="#ffffff" |
| | | ></vue-qr> |
| | | |
| | | <div class="qrcode-info"> |
| | | <p><strong>患者姓名:</strong>{{ qrDialog.patientName }}</p> |
| | | <p><strong>任务名称:</strong>{{ qrDialog.taskName }}</p> |
| | | </div> |
| | | |
| | | <div class="qrcode-actions"> |
| | | <el-button type="primary" size="small" @click="downloadQrCode"> |
| | | <i class="el-icon-download"></i> 下载二维码 |
| | | </el-button> |
| | | <el-button type="success" size="small" @click="copyQrUrl"> |
| | | <i class="el-icon-document-copy"></i> 复制链接 |
| | | </el-button> |
| | | </div> |
| | | </div> |
| | | |
| | | <!-- 无数据提示 --> |
| | | <div v-else class="qrcode-empty"> |
| | | <i class="el-icon-warning"></i> |
| | | <span>暂无有效的二维码链接</span> |
| | | </div> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | resetUserPwd, |
| | | changeUserStatus, |
| | | } from "@/api/system/user"; |
| | | import { getTaskservelist } from "@/api/AiCentre/index"; |
| | | import { getTaskservelist, buidegetTasklist } from "@/api/AiCentre/index"; |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import store from "@/store"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | |
| | | import VueQr from "vue-qr"; |
| | | import Clipboard from "clipboard"; |
| | | export default { |
| | | name: "Discharge", |
| | | dicts: ["sys_normal_disable", "sys_user_sex", "sys_yujing", "sys_suggest"], |
| | | components: { Treeselect }, |
| | | components: { Treeselect, VueQr }, |
| | | data() { |
| | | return { |
| | | // 遮罩层 |
| | |
| | | addalteropen: false, |
| | | // 修改发送时间对话框 |
| | | modificationVisible: false, |
| | | resetQrurl: "", |
| | | // 部门名称 |
| | | deptName: undefined, |
| | | // 默认密码 |
| | |
| | | }, |
| | | dynamicTags: ["选项一", "选项二", "选项三"], //选项 |
| | | inputVisible: false, |
| | | ycvalue: "", |
| | | yfsvalue: "", |
| | | inputValue: "", |
| | | preachform: "", |
| | | previewVisible: false, //门诊随访预览弹框 |
| | | radio: "", |
| | | radios: [], |
| | |
| | | }, |
| | | value: [], |
| | | list: [], |
| | | source: [ |
| | | { |
| | | value: 0, |
| | | label: "所属患者", |
| | | }, |
| | | qrDialog: { |
| | | visible: false, |
| | | title: "随访二维码", |
| | | url: "", |
| | | patientName: "", |
| | | taskName: "", |
| | | logo: require("@/assets/logo/logoxh.png"), // 可选的Logo,请确保路径正确 |
| | | }, |
| | | qrLoading: false, |
| | | sourcetype: [ |
| | | { |
| | | value: 1, |
| | | label: "科室患者", |
| | | label: "科室", |
| | | children: [], |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: "病区患者", |
| | | label: "病区", |
| | | children: [], |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: "全部", |
| | | }, |
| | | ], |
| | | loading: false, |
| | | cardlist: [ |
| | | { |
| | | name: "全部服务", |
| | | name: "出院服务总量", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "患者过滤", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "应随访", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "不执行", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "异常", |
| | | value: 0, |
| | | }, |
| | | |
| | | // { |
| | | // name: "异常", |
| | | // value: 0, |
| | | // }, |
| | | { |
| | | name: "发送失败", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "被领取", |
| | | name: "待执行", |
| | | value: 0, |
| | | }, |
| | | { |
| | | name: "已发送未领取", |
| | | value: 0, |
| | | }, |
| | | // { |
| | | // name: "已发送", |
| | | // value: 0, |
| | | // }, |
| | | |
| | | // { |
| | | // name: "表单已发送", |
| | | // value: 0, |
| | | // }, |
| | | ], |
| | | pickerOptions: { |
| | | disabledDate(time) { |
| | | return time.getTime() > Date.now(); |
| | | }, |
| | | 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); |
| | | }, |
| | | }, |
| | | ], |
| | | }, |
| | | |
| | | // 表单参数 |
| | | form: { |
| | | phonenumber: "", |
| | |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | serviceType: 2, |
| | | searchscope: 2, |
| | | searchscope: 3, |
| | | scopetype: [], |
| | | leaveldeptcodes: [], |
| | | leavehospitaldistrictcodes: [], |
| | | }, |
| | | propss: { multiple: true }, |
| | | options: [], |
| | |
| | | topicoptions: [ |
| | | { |
| | | value: 1, |
| | | label: "被领取", |
| | | label: "表单已领取", |
| | | }, |
| | | { |
| | | value: 2, |
| | | label: "待发送", |
| | | label: "待执行", |
| | | }, |
| | | { |
| | | value: 3, |
| | | label: "已发送未领取", |
| | | label: "表单已发送", |
| | | }, |
| | | { |
| | | value: 4, |
| | |
| | | label: "正常", |
| | | }, |
| | | ], |
| | | errtype: "", |
| | | leavehospitaldistrictcode: "", |
| | | serviceState: [], |
| | | checkboxlist: [], |
| | | // 表单校验 |
| | |
| | | created() { |
| | | this.serviceState = store.getters.serviceState; |
| | | this.checkboxlist = store.getters.checkboxlist; |
| | | this.errtype = this.$route.query.errtype; |
| | | this.leavehospitaldistrictcode = |
| | | this.$route.query.leavehospitaldistrictcode; |
| | | this.sourcetype[0].children = store.getters.belongDepts.map((dept) => { |
| | | return { |
| | | label: dept.deptName, |
| | | value: dept.deptCode, |
| | | }; |
| | | }); |
| | | this.sourcetype[1].children = store.getters.belongWards.map((dept) => { |
| | | return { |
| | | label: dept.districtName, |
| | | value: dept.districtCode, |
| | | }; |
| | | }); |
| | | |
| | | this.getList(); |
| | | if (store.getters.belongWards.length) { |
| | | this.topqueryParams.leavehospitaldistrictcodes = [ |
| | | store.getters.belongWards[0].districtCode, |
| | | ]; |
| | | this.topqueryParams.scopetype = [ |
| | | 2, |
| | | store.getters.belongWards[0].districtCode, |
| | | ]; |
| | | } |
| | | if (this.errtype) { |
| | | this.toleadExport(2); |
| | | } else { |
| | | this.getList(1); |
| | | } |
| | | this.getConfigKey("sys.user.initPassword").then((response) => { |
| | | this.initPassword = response.msg; |
| | | }); |
| | | }, |
| | | activated() { |
| | | this.getList(); |
| | | this.getList(1); |
| | | }, |
| | | computed: { |
| | | safeQrUrl() { |
| | | return this.qrDialog.url && this.qrDialog.url !== 'undefined' |
| | | ? this.qrDialog.url.toString() |
| | | : '' |
| | | } |
| | | }, |
| | | methods: { |
| | | /** 查询门诊随访服务列表 */ |
| | | getList() { |
| | | if (this.topqueryParams.searchscope == 1) { |
| | | this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( |
| | | (obj) => obj.deptCode |
| | | ); |
| | | this.topqueryParams.leavehospitaldistrictcodes = null; |
| | | } else if (this.topqueryParams.searchscope == 2) { |
| | | this.topqueryParams.leavehospitaldistrictcodes = |
| | | store.getters.belongWards.map((obj) => obj.districtCode); |
| | | this.topqueryParams.leaveldeptcodes = null; |
| | | } else { |
| | | getList(refresh) { |
| | | // 默认全部 |
| | | if (this.topqueryParams.searchscope == 3) { |
| | | this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( |
| | | (obj) => obj.deptCode |
| | | ); |
| | | 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; |
| | | if ( |
| | | this.topqueryParams.leavehospitaldistrictcodes[0] && |
| | | this.topqueryParams.leaveldeptcodes[0] |
| | | ) { |
| | | this.topqueryParams.deptOrDistrict = 2; |
| | | } else { |
| | | this.topqueryParams.deptOrDistrict = 1; |
| | | } |
| | | getTaskservelist(this.topqueryParams).then((response) => { |
| | | this.userList = response.rows[0].serviceSubtaskList; |
| | | this.cardlist[0].value = |
| | | Number(response.rows[0].wzx) + Number(response.rows[0].ysf); |
| | | this.cardlist[1].value = response.rows[0].ysf; |
| | | this.cardlist[2].value = response.rows[0].wzx; |
| | | this.cardlist[3].value = response.rows[0].yc; |
| | | this.cardlist[4].value = response.rows[0].fssb; |
| | | this.cardlist[5].value = response.rows[0].blq; |
| | | this.cardlist[6].value = response.rows[0].yfs; |
| | | this.total = response.total; |
| | | 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].dsf; |
| | | // this.cardlist[5].value = response.rows[0].yfs2; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | | this.userList.forEach((item) => { |
| | | let idArray = null; |
| | | if (item.endtime) { |
| | | item.endDay = this.daysBetween(item.endtime); |
| | | } |
| | | const 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.preachform) { |
| | | if (item.endtime) { |
| | | 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; |
| | | }); |
| | | } |
| | | }); |
| | | this.total = response.total; |
| | | }); |
| | | }, |
| | | buidegetTasklist(type) { |
| | | if (this.topqueryParams.searchscope == 3) { |
| | | this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( |
| | | (obj) => obj.deptCode |
| | | ); |
| | | this.topqueryParams.leavehospitaldistrictcodes = |
| | | store.getters.belongWards.map((obj) => obj.districtCode); |
| | | } |
| | | // 接受异常跳转 |
| | | if (this.errtype) { |
| | | this.topqueryParams.leavehospitaldistrictcodes.push( |
| | | this.leavehospitaldistrictcode |
| | | ); |
| | | } |
| | | let obj = { |
| | | pageNum: 1, |
| | | pageSize: 10, |
| | | leavehospitaldistrictcodes: |
| | | this.topqueryParams.leavehospitaldistrictcodes, |
| | | sendstates: [2, 3], |
| | | leaveldeptcodes: this.topqueryParams.leaveldeptcodes, |
| | | }; |
| | | buidegetTasklist(obj).then((response) => { |
| | | this.userList = response.rows[0].serviceSubtaskList; |
| | | this.total = response.total; |
| | | 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; |
| | | this.yfsvalue = response.rows[0].yfs; |
| | | } |
| | | this.loading = false; |
| | | this.userList.forEach((item) => { |
| | | let idArray = null; |
| | | if (item.endtime) { |
| | | item.endDay = this.daysBetween(item.endtime); |
| | | } |
| | | |
| | | if (item.preachform) { |
| | | if (item.endtime) { |
| | | 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; |
| | | }); |
| | | } |
| | | }); |
| | | this.total = response.total; |
| | | }); |
| | | }, |
| | | // 查看门诊随访详情 |
| | |
| | | this.resetForm("form"); |
| | | }, |
| | | /** 搜索按钮操作 */ |
| | | handleQuery() { |
| | | if (this.topqueryParams.searchscope == 1) { |
| | | this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( |
| | | (obj) => obj.deptCode |
| | | ); |
| | | this.topqueryParams.leavehospitaldistrictcodes = null; |
| | | } else if (this.topqueryParams.searchscope == 2) { |
| | | this.topqueryParams.leavehospitaldistrictcodes = |
| | | store.getters.belongWards.map((obj) => obj.districtCode); |
| | | this.topqueryParams.leaveldeptcodes = null; |
| | | } else { |
| | | handleQuery(refresh) { |
| | | if (this.topqueryParams.searchscope == 3) { |
| | | this.topqueryParams.leaveldeptcodes = store.getters.belongDepts.map( |
| | | (obj) => obj.deptCode |
| | | ); |
| | |
| | | this.topqueryParams.startOutHospTime = this.dateRange[0]; |
| | | this.topqueryParams.endOutHospTime = this.dateRange[1]; |
| | | |
| | | this.getList(); |
| | | this.getList(refresh); |
| | | }, |
| | | // 患者范围处理 |
| | | handleChange(value) { |
| | | let type = value[0]; |
| | | let code = value.slice(-1)[0]; |
| | | this.topqueryParams.leavehospitaldistrictcodes = []; |
| | | this.topqueryParams.leaveldeptcodes = []; |
| | | |
| | | if (type == 1) { |
| | | this.topqueryParams.leaveldeptcodes.push(code); |
| | | this.topqueryParams.leavehospitaldistrictcodes = []; |
| | | this.topqueryParams.searchscope = 1; |
| | | } else if (type == 2) { |
| | | this.topqueryParams.leavehospitaldistrictcodes.push(code); |
| | | this.topqueryParams.leaveldeptcodes = []; |
| | | this.topqueryParams.searchscope = 2; |
| | | } else { |
| | | this.topqueryParams.searchscope = 3; |
| | | } |
| | | }, |
| | | /** 重置按钮操作 */ |
| | | resetQuery() { |
| | |
| | | serviceType: 2, |
| | | searchscope: 2, |
| | | }; |
| | | this.handleQuery(); |
| | | this.handleQuery(1); |
| | | }, |
| | | // 多选框选中数据 |
| | | handleSelectionChange(selection) { |
| | |
| | | updateUser(this.form).then((response) => { |
| | | this.$modal.msgSuccess("修改成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | this.getList(1); |
| | | }); |
| | | } else { |
| | | addUser(this.form).then((response) => { |
| | | this.$modal.msgSuccess("新增成功"); |
| | | this.open = false; |
| | | this.getList(); |
| | | this.getList(1); |
| | | }); |
| | | } |
| | | } |
| | |
| | | return delUser(userIds); |
| | | }) |
| | | .then(() => { |
| | | this.getList(); |
| | | this.getList(1); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }) |
| | | .catch(() => {}); |
| | |
| | | return console.log("停止成功"); |
| | | }) |
| | | .then(() => { |
| | | this.getList(); |
| | | this.getList(1); |
| | | this.$modal.msgWarning("停止成功"); |
| | | }) |
| | | .catch(() => {}); |
| | |
| | | return console.log("开启成功"); |
| | | }) |
| | | .then(() => { |
| | | this.getList(); |
| | | this.getList(1); |
| | | this.$modal.msgSuccess("开启成功"); |
| | | }) |
| | | .catch(() => {}); |
| | |
| | | return console.log("选中成功"); |
| | | }) |
| | | .then(() => { |
| | | this.getList(); |
| | | this.getList(1); |
| | | this.$modal.msgSuccess("重置成功"); |
| | | }) |
| | | .catch(() => {}); |
| | |
| | | }, |
| | | // 跳转详情页 |
| | | Seedetails(row) { |
| | | let type = ""; |
| | | console.log(row, "rwo"); |
| | | if (row.preachformson) { |
| | | if (row.preachformson.includes("3")) { |
| | | type = 1; |
| | | console.log(type, "rwo"); |
| | | } |
| | | } |
| | | this.$router.push({ |
| | | path: "/followvisit/record/detailpage/", |
| | | query: { taskid: row.taskid, patid: row.patid, id: row.id }, |
| | | query: { |
| | | taskid: row.taskid, |
| | | patid: row.patid, |
| | | id: row.id, |
| | | Voicetype: type, |
| | | }, |
| | | }); |
| | | }, |
| | | // 便捷按钮 |
| | |
| | | } |
| | | this.handleQuery(); |
| | | }, |
| | | // 显示二维码弹框 |
| | | outPathQr(row) { |
| | | console.log(row); |
| | | |
| | | if (!row || !row.outPath || row.outPath === 'undefined') { |
| | | this.$message.warning('该记录暂无有效的二维码链接') |
| | | return |
| | | } |
| | | |
| | | this.qrLoading = true |
| | | this.qrDialog = { |
| | | visible: true, |
| | | title: `${row.sendname || '患者'}的随访二维码`, |
| | | url: row.outPath, |
| | | patientName: row.sendname || '未知', |
| | | taskName: row.taskName || '未知任务', |
| | | logo: require("@/assets/logo/logoxh.png"), |
| | | }; |
| | | // 确保组件有足够时间渲染 |
| | | this.$nextTick(() => { |
| | | this.qrLoading = false |
| | | }) |
| | | }, |
| | | |
| | | // 二维码生成回调 |
| | | qrCodeCallback(dataUrl, id) { |
| | | console.log("二维码生成成功:", id); |
| | | // 这里可以保存dataUrl用于后续操作 |
| | | }, |
| | | |
| | | // 下载二维码 |
| | | downloadQrCode() { |
| | | try { |
| | | const qrComponent = this.$refs.vueQr; |
| | | // 获取二维码图片的URL |
| | | const qrImageUrl = qrComponent.$el.src; |
| | | |
| | | const downloadLink = document.createElement("a"); |
| | | downloadLink.href = qrImageUrl; |
| | | downloadLink.download = `随访二维码_${ |
| | | this.qrDialog.patientName |
| | | }_${new Date().getTime()}.png`; |
| | | document.body.appendChild(downloadLink); |
| | | downloadLink.click(); |
| | | document.body.removeChild(downloadLink); |
| | | |
| | | this.$message.success("二维码下载成功"); |
| | | } catch (error) { |
| | | console.error("下载失败:", error); |
| | | this.$message.error("下载失败,请重试"); |
| | | } |
| | | }, |
| | | |
| | | // 复制链接 |
| | | copyQrUrl() { |
| | | if (!this.qrDialog.url) { |
| | | this.$message.warning("无有效链接可复制"); |
| | | return; |
| | | } |
| | | |
| | | // 方法1: 使用clipboard库(如果安装了) |
| | | // this.copyWithClipboard() |
| | | |
| | | // 方法2: 使用现代浏览器的Clipboard API |
| | | this.copyWithModernAPI(); |
| | | }, |
| | | |
| | | // 使用现代Clipboard API复制 |
| | | async copyWithModernAPI() { |
| | | try { |
| | | await navigator.clipboard.writeText(this.qrDialog.url); |
| | | this.$message.success("链接已复制到剪贴板"); |
| | | } catch (error) { |
| | | // 降级方案 |
| | | this.copyWithFallback(); |
| | | } |
| | | }, |
| | | |
| | | // 兼容性降级方案 |
| | | copyWithFallback() { |
| | | const textArea = document.createElement("textarea"); |
| | | textArea.value = this.qrDialog.url; |
| | | textArea.style.position = "fixed"; |
| | | textArea.style.left = "-999999px"; |
| | | textArea.style.top = "-999999px"; |
| | | document.body.appendChild(textArea); |
| | | textArea.focus(); |
| | | textArea.select(); |
| | | |
| | | try { |
| | | document.execCommand("copy"); |
| | | this.$message.success("链接已复制到剪贴板"); |
| | | } catch (error) { |
| | | this.$message.warning("浏览器不支持自动复制,请手动复制链接"); |
| | | } finally { |
| | | document.body.removeChild(textArea); |
| | | } |
| | | }, |
| | | |
| | | // 关闭二维码弹框 |
| | | handleQrClose() { |
| | | this.qrDialog.visible = false; |
| | | this.qrLoading = false |
| | | |
| | | // 重置数据 |
| | | setTimeout(() => { |
| | | this.qrDialog = { |
| | | visible: false, |
| | | title: "随访二维码", |
| | | url: "", |
| | | patientName: "", |
| | | taskName: "", |
| | | logo: require("@/assets/logo/logoxh.png"), |
| | | }; |
| | | }, 300); |
| | | }, |
| | | /** 导出按钮操作 */ |
| | | handleExport() { |
| | | this.topqueryParams.pageNum = null; |
| | | this.topqueryParams.pageSize = null; |
| | | this.download( |
| | | "system/user/export", |
| | | "smartor/serviceSubtask/export", |
| | | { |
| | | ...this.topqueryParams, |
| | | }, |
| | |
| | | background: #8dc8f8; |
| | | cursor: pointer; /* 鼠标悬浮时变为手形 */ |
| | | } |
| | | ::v-deep.errleftvlue .el-card__body { |
| | | background: #fdd0d7; |
| | | } |
| | | ::v-deep.errleftvlue .el-card__body:hover { |
| | | background: #f88d96; |
| | | cursor: pointer; /* 鼠标悬浮时变为手形 */ |
| | | } |
| | | |
| | | ::v-deep.ysfleftvlue .el-card__body { |
| | | background: #d0fdd8; |
| | | } |
| | | ::v-deep.ysfleftvlue .el-card__body:hover { |
| | | background: #8df8a4; |
| | | cursor: pointer; /* 鼠标悬浮时变为手形 */ |
| | | } |
| | | .button-bb { |
| | | font-weight: 500; |
| | | background-color: #2ba05c; |
| | |
| | | border-radius: 1px; |
| | | color: #ffffff; |
| | | } |
| | | .button-qr { |
| | | background: #6c14a2; |
| | | padding: 5px; |
| | | border-radius: 1px; |
| | | color: #ffffff; |
| | | } |
| | | |
| | | ::v-deep.el-radio-group { |
| | | span { |
| | |
| | | } |
| | | } |
| | | |
| | | // 选项字体放大 |
| | | // ::v-deep.el-checkbox-group { |
| | | // span { |
| | | // font-size: 24px; |
| | | // } |
| | | // } |
| | | /* 二维码弹框样式 */ |
| | | .qrcode-container { |
| | | text-align: center; |
| | | padding: 10px; |
| | | } |
| | | |
| | | .qrcode-wrapper { |
| | | margin: 0 auto 20px; |
| | | padding: 15px; |
| | | background: #f8f9fa; |
| | | border-radius: 8px; |
| | | display: inline-block; |
| | | } |
| | | |
| | | .qrcode-info { |
| | | margin: 15px 0; |
| | | padding: 12px; |
| | | background: #f0f2f5; |
| | | border-radius: 6px; |
| | | text-align: left; |
| | | } |
| | | |
| | | .qrcode-info p { |
| | | margin: 8px 0; |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .qrcode-actions { |
| | | display: flex; |
| | | justify-content: center; |
| | | gap: 12px; |
| | | margin-top: 20px; |
| | | } |
| | | |
| | | /* 响应式设计 */ |
| | | @media (max-width: 480px) { |
| | | .qrcode-actions { |
| | | flex-direction: column; |
| | | align-items: center; |
| | | } |
| | | |
| | | .qrcode-actions .el-button { |
| | | width: 200px; |
| | | } |
| | | } |
| | | </style> |