<template> <view class="quickCreateOrder"> <view class="qco_msg" v-html="patientMsg" v-if="qucikCreateOrderType === 'patient'"></view> <view class="qco_msg" v-html="dataObj.msg" v-else></view> <!-- 起点科室,终点科室 --> <block v-if="(qucikCreateOrderType === 'other' || qucikCreateOrderType === 'patient') && (dataObj.start || dataObj.end)"> <view class="select_block" @click="selectDept('start')" v-if="qucikCreateOrderType !== 'patient'||(qucikCreateOrderType === 'patient'&&!(dataObj.start.start.departmentStrategy == DEPARTMENT_STRATEGY['默认发起科室'] || dataObj.start.start.departmentStrategy == DEPARTMENT_STRATEGY['固定科室']|| dataObj.start.start.departmentStrategy == DEPARTMENT_STRATEGY['默认患者所在科室']))"> <!-- 默认科室和固定科室和默认患者所在科室 --> <text class="select_label" :class="{disableColor:dataObj.start.start.departmentStrategy == DEPARTMENT_STRATEGY['默认发起科室'] || dataObj.start.start.departmentStrategy == DEPARTMENT_STRATEGY['固定科室']}">起点科室</text> <view class="select_placeholder" v-if="dataObj.start.start.departmentStrategy == DEPARTMENT_STRATEGY['默认发起科室'] || dataObj.start.start.departmentStrategy == DEPARTMENT_STRATEGY['固定科室']"> {{deptDisplay == 1? startDept.dept: startDept.deptalias}} </view> <!-- 固定科室范围,固定科室类型,自主选择 --> <view class="select_placeholder" v-else> <text>{{startDept.id?(deptDisplay == 1? startDept.dept: startDept.deptalias):'请选择起点科室'}}</text> <text class="pda pda-xiangyou"></text> </view> </view> <view class="select_block" @click="selectDept('end')" v-if="qucikCreateOrderType !== 'patient'||(qucikCreateOrderType === 'patient'&&!(dataObj.end.end.departmentStrategy == DEPARTMENT_STRATEGY['默认发起科室'] || dataObj.end.end.departmentStrategy == DEPARTMENT_STRATEGY['固定科室']|| dataObj.end.end.departmentStrategy == DEPARTMENT_STRATEGY['默认患者所在科室']))"> <!-- 默认科室和固定科室和默认患者所在科室 --> <text class="select_label" :class="{disableColor:dataObj.end.end.departmentStrategy == DEPARTMENT_STRATEGY['默认发起科室'] || dataObj.end.end.departmentStrategy == DEPARTMENT_STRATEGY['固定科室']}">终点科室</text> <view class="select_placeholder" v-if="dataObj.end.end.departmentStrategy == DEPARTMENT_STRATEGY['默认发起科室'] || dataObj.end.end.departmentStrategy == DEPARTMENT_STRATEGY['固定科室']"> {{deptDisplay == 1? endDept.dept: endDept.deptalias}} </view> <!-- 固定科室范围,固定科室类型,自主选择 --> <view class="select_placeholder" v-else> <text>{{endDept.id?(deptDisplay == 1? endDept.dept: endDept.deptalias):'请选择终点科室'}}</text> <text class="pda pda-xiangyou"></text> </view> </view> </block> <!-- 备注 --> <view class="remarks" v-if="dataObj.remarksSwitch == 1"> <textarea :focus="remarksFocus" class="remarks_textarea" auto-height :maxlength="100" placeholder-style="color:#999" :placeholder=" dataObj.remarksPrompts || '请填写工单备注,不超过100个字符' " v-model="workOrderRemark" :adjust-position="false" /> </view> <!-- 快捷输入,历史输入 --> <view class="quickAndHistory" v-if="dataObj.remarksSwitch == 1 && dataObj.customRemarks.length"> <view class="quickAndHistory_header"> 快捷输入 </view> <view class="quickAndHistory_container"> <view class="quickAndHistory_item" @click="addRemarks(customRemark)" v-for="(customRemark, i) in dataObj.customRemarks" :key="i"> {{ customRemark }} </view> </view> </view> <view class="quickAndHistory" v-if="dataObj.remarksSwitch == 1 && historyCustomRemarks.length"> <view class="quickAndHistory_header"> 历史输入 </view> <view class="quickAndHistory_container"> <view class="quickAndHistory_item" @click="addRemarks(historyCustomRemark)" v-for="(historyCustomRemark, i) in historyCustomRemarks" :key="i"> {{ historyCustomRemark }} </view> </view> </view> <!-- 底部 --> <seiminFooterBtn :btns="btns"></seiminFooterBtn> <seiminModel ref="seiminModel"></seiminModel> <seiminPicker ref="sPicker" :title="pickerTitle" titleColor="#808080" titleFontSize="28rpx" confirmColor="#333" confirmFontSize="38rpx" confirmFontWeight="500" itemFontSize="32rpx" @onClose="closePicker" @onConfirm="confirmPicker" :pickerList="deptList"> </seiminPicker> </view> </template> <script> import { backPress } from '../../utils/index.js'; import cloneDeep from 'lodash/cloneDeep'; import { mapState, mapMutations } from "vuex"; import { reqBuildTrip, reqRecentRemarks, reqBuildOrder, } from "../../request/api.js"; import { SOURCEID } from "../../utils/enum.sourceid.js"; import { DEPARTMENT_STRATEGY } from "../../utils/enum.departmentStrategy.js"; export default { onBackPress() { backPress(); }, data() { return { reFresh: '', DEPARTMENT_STRATEGY, //患者建单信息展示 patientMsg: '', // 传递过来的参数 queryParams: {}, // 选择的起点科室 startDept: {}, // 选择的终点科室 endDept: {}, // 固定科室范围的科室列表 deptList: [], //选择起点科室(start)或终点科室(end) selectdDeptType: '', //选择院区picker的title pickerTitle: '', // 工单备注是否获取焦点 remarksFocus: false, // 工单备注 workOrderRemark: "", // 获取到的数据集合对象(历史输入除外) dataObj: {}, // 历史输入 historyCustomRemarks: [], //底部按钮 btns: [], }; }, computed: { ...mapState('login', ['loginInfo']), ...mapState('other', [ "qucikCreateOrderType", "qucikCreateOrderTypeId", "deptDisplay", 'searchDeptParams', 'searchDeptResultList', 'patientBuildTrip', 'patientTaskType' ]), isWriteDept() { return { startDept: this.startDept, endDept: this.endDept } } }, watch: { isWriteDept(newVal) { console.log(newVal); if (this.qucikCreateOrderType !== 'patient') { return; } if (newVal.startDept.id && newVal.endDept.id) { this.btns = [{ name: "返回列表", type: "default", click: () => { uni.navigateTo({ url: '/pages/patientList/patientList' }) }, }, { name: "下一步", type: "primary", click: () => { this.changePatientBuildData({ key: 'dept', value: { startDept: newVal.startDept, endDept: newVal.endDept, } }) uni.navigateTo({ url: "/pages/patientBuild/patientBuild", }); }, }, ]; } else { this.btns = [{ name: "返回列表", type: "default", click: () => { uni.navigateTo({ url: '/pages/patientList/patientList' }) }, }, ]; } } }, methods: { ...mapMutations('other', ['changeSearchDeptParams', 'changeSearchDeptResultList', 'changePatientBuildData']), // 添加备注 addRemarks(customRemark) { this.remarksFocus = false; this.$nextTick(() => { this.remarksFocus = true; }); this.workOrderRemark += customRemark; console.log(this.workOrderRemark.replace(/\s/g, '')) this.workOrderRemark = this.workOrderRemark.replace(/\s/g, '').slice(0, 100); }, //获取所有数据 getData(qucikCreateOrderType, qucikCreateOrderTypeId) { if (qucikCreateOrderType === 'patient') { //患者建单,则无需请求 this.getBuildTrip(this.patientBuildTrip); return; } uni.showLoading({ title: "加载中", }); let postData1 = {}; let postData2 = { taskTypeId: qucikCreateOrderTypeId, deptId: this.loginInfo.user.dept.id, }; if (qucikCreateOrderType === "specimen") { //标本快捷建单 postData1 = { taskTypeId: qucikCreateOrderTypeId, deptId: this.loginInfo.user.dept.id, }; } else if (qucikCreateOrderType === "other") { //其他临床服务快捷建单 postData1 = { taskTypeId: qucikCreateOrderTypeId, }; } Promise.all([reqBuildTrip(postData1), reqRecentRemarks(postData2)]).then( (values) => { uni.hideLoading(); this.getBuildTrip(values[0]); this.getRecentRemarks(values[1]); } ); }, // 获取数据(除历史输入) getBuildTrip(res) { res = cloneDeep(res); if ( res.status == 200 || res.status == 100012 || res.status == 100013 || res.status == 100014 || res.status == 100015 ) { // 处理返回的数据 if (res.customRemarks) { res.customRemarks = res.customRemarks.split("$"); } else { res.customRemarks = []; } // 处理msg res.msg = res.msg || ''; if (res.msg.includes("<b>")) { res.msg = res.msg.replace(/<b>/g, '<text class="green">'); res.msg = res.msg.replace(/<\/b>/g, "</text>"); } if (res.start) { //其他服务或患者其他服务业务 if ( res.start.start.departmentStrategy == this.DEPARTMENT_STRATEGY['默认患者所在科室'] || res.start.start.departmentStrategy == this.DEPARTMENT_STRATEGY['默认发起科室'] || res.start.start.departmentStrategy == this.DEPARTMENT_STRATEGY['固定科室']) { this.startDept = res.start.start.list[0]; } if ( res.start.start.departmentStrategy == this.DEPARTMENT_STRATEGY['固定科室范围'] || res.start.start.departmentStrategy == this.DEPARTMENT_STRATEGY['自主填写'] || res.start.start.departmentStrategy == this.DEPARTMENT_STRATEGY['固定科室类型'] ) { if (this.queryParams.isShow) { this.startDept = this.searchDeptResultList.start || {}; } else { this.changeSearchDeptResultList({}); } } } if (res.end) { //其他服务或患者其他服务业务 if ( res.end.end.departmentStrategy == this.DEPARTMENT_STRATEGY['默认患者所在科室'] || res.end.end.departmentStrategy == this.DEPARTMENT_STRATEGY['默认发起科室'] || res.end.end.departmentStrategy == this.DEPARTMENT_STRATEGY['固定科室']) { this.endDept = res.end.end.list[0]; } if ( res.end.end.departmentStrategy == this.DEPARTMENT_STRATEGY['固定科室范围'] || res.end.end.departmentStrategy == this.DEPARTMENT_STRATEGY['自主填写'] || res.end.end.departmentStrategy == this.DEPARTMENT_STRATEGY['固定科室类型'] ) { if (this.queryParams.isShow) { this.endDept = this.searchDeptResultList.end || {}; } else { this.changeSearchDeptResultList({}); } } } this.dataObj = res; } else { this.$refs.seiminModel.show({ skin: "toast", icon: "error", content: res.msg || "获取数据失败", }); throw new Error(res.msg || '获取数据失败'); } }, // 获取历史输入 getRecentRemarks(res) { if (res.state == 200 || res.state == 201) { this.historyCustomRemarks = res.data || []; } else { this.$refs.seiminModel.show({ skin: "toast", icon: "error", content: res.msg || "获取数据失败", }); throw new Error(res.msg || '获取数据失败'); } }, // 提交数据,建单 submitData() { let postData = {}; uni.showLoading({ title: "加载中", mask: true, }); if (this.qucikCreateOrderType === "specimen") { //标本建单 postData = { urgent: 0, workOrder: { sourceId: SOURCEID["PDA"], workOrderRemark: this.workOrderRemark, taskType: { id: this.qucikCreateOrderTypeId, }, createDept: this.loginInfo.user.dept.id, startDept: { id: this.loginInfo.user.dept.id, }, }, }; } else if (this.qucikCreateOrderType === "other") { // 其他服务建单 let startDept = { id: this.startDept.id, };; //起点科室 let endDepts = [{ id: this.endDept.id, }]; //终点科室 // 验证起点科室和终点科室必填 if (!startDept.id) { this.$refs.seiminModel.show({ skin: "toast", icon: "error", content: "请选择起点科室", }); uni.hideLoading(); return; } if (!endDepts[0].id) { this.$refs.seiminModel.show({ skin: "toast", icon: "error", content: "请选择终点科室", }); uni.hideLoading(); return; } //请求参数 postData = { workOrder: { sourceId: SOURCEID["PDA"], workOrderRemark: this.workOrderRemark, taskType: { id: this.qucikCreateOrderTypeId, }, createDept: this.loginInfo.user.dept.id, startDept, endDepts, }, }; } reqBuildOrder(postData).then((res) => { uni.hideLoading(); if (res.status == 200) { this.$refs.seiminModel.show({ skin: "toast", content: "创建成功", btns: [{ name: "知道了", textColor: "#49B856", flex: 1, click() { uni.navigateTo({ url: "/pages/index/index", }); }, }, ], }); } else { this.$refs.seiminModel.show({ skin: "toast", icon: "error", content: res.msg || "建单失败", }); throw new Error(res.msg || '建单失败'); } }); }, //关闭 closePicker() { this.$refs.sPicker._close(); }, //打开 openPicker() { this.$refs.sPicker._open(); }, //确定:接收子组件传来的参数 confirmPicker(checkedObj) { this[this.selectdDeptType + 'Dept'] = { id: checkedObj.value, dept: checkedObj.label, deptalias: checkedObj.labelAlias }; // 防止后选择不回显 let searchDeptResultList = this.searchDeptResultList; searchDeptResultList[this.selectdDeptType] = { id: checkedObj.value, dept: checkedObj.label, deptalias: checkedObj.labelAlias } this.changeSearchDeptResultList(searchDeptResultList); }, // 选择起点科室 selectDept(type) { this.selectdDeptType = type; //存储类型 if ( (this.dataObj.start.start.departmentStrategy == this.DEPARTMENT_STRATEGY['默认发起科室'] || this.dataObj.start.start.departmentStrategy == this.DEPARTMENT_STRATEGY['固定科室']) && type === 'start') { //默认科室和固定科室不能选科室 return; } if ( (this.dataObj.end.end.departmentStrategy == this.DEPARTMENT_STRATEGY['默认发起科室'] || this.dataObj.end.end.departmentStrategy == this.DEPARTMENT_STRATEGY['固定科室']) && type === 'end') { //默认科室和固定科室不能选科室 return; } if (this.dataObj[type][type].departmentStrategy == this.DEPARTMENT_STRATEGY['固定科室范围']) { // 固定科室范围 this.pickerTitle = type === 'start' ? '请选择起点科室' : '请选择终点科室'; this.deptList = this.dataObj[type][type].list.map(v => ({ value: v.id, label: v.dept, labelAlias: v.deptalias })) console.log(this.deptList, this.pickerTitle) this.openPicker(); } else if (this.dataObj[type][type].departmentStrategy == this.DEPARTMENT_STRATEGY['自主填写'] || this.dataObj[type] [type].departmentStrategy == this.DEPARTMENT_STRATEGY['固定科室类型']) { // 固定科室类型,自主选择 let params = { backUrl: "/pages/quickCreateOrder/quickCreateOrder?isShow=true", //返回的url type: `selectDept_${type}_qucikCreateOrder`, //快捷建单选择起点科室 ids: this.dataObj[type].deptIds || '', departmentStrategy: this.dataObj[type][type].departmentStrategy, //固定科室类型,自主选择 }; if (this.dataObj[type][type].departmentStrategy == this.DEPARTMENT_STRATEGY['固定科室类型']) { //固定科室类型 params.deptType = this.dataObj[type][type][type + 'TypeId']; //科室类型 } this.changeSearchDeptParams(params); uni.navigateTo({ url: "/pages/searchDept/searchDept", }); } } }, onLoad(queryParams) { this.queryParams = queryParams; if (this.qucikCreateOrderType === 'patient') { this.patientMsg = `您选择类型为<b class="green">${this.patientTaskType.taskName}</b>,需要填写科室,选择完成后点击下一步`; //患者建单选科室 this.btns = [{ name: "返回列表", type: "default", click: () => { uni.navigateTo({ url: '/pages/patientList/patientList' }) }, }, ]; } else { this.btns = [{ name: "回到首页", type: "default", click: () => { uni.navigateTo({ url: "/pages/index/index", }); }, }, { name: "确认", type: "primary", click: () => { this.submitData(); }, }, ] } this.getData(this.qucikCreateOrderType, this.qucikCreateOrderTypeId); }, }; </script> <style lang="scss" scoped> .quickCreateOrder { margin-bottom: 100rpx; .qco_msg { min-height: 144rpx; padding: 32rpx; color: #999; line-height: 40rpx; font-size: 32rpx; text-align: center; } // 起点科室,终点科室 .select_block { padding: 0 30rpx; height: 88rpx; font-size: 34rpx; background-color: #fff; @include border(top); @include flex(space-between, center); .select_label { color: #000; &.disableColor { color: #999; } } .select_placeholder { color: #888; @include flex(flex-start, center); .pda-xiangyou { font-size: 24rpx; margin-left: 30rpx; } } } // 备注 .remarks { min-height: 150rpx; background-color: #fff; padding: 22rpx 25rpx; @include border(top); @include border(bottom); .remarks_textarea { width: 100%; min-height: 100rpx; } } // 快捷输入,历史输入 .quickAndHistory { padding: 43rpx 25rpx 0; .quickAndHistory_header { font-weight: bold; font-size: 34rpx; padding-bottom: 24rpx; color: #333; } .quickAndHistory_container { @include flex; flex-wrap: wrap; .quickAndHistory_item { height: 66rpx; font-size: 28rpx; border-radius: 33rpx; background-color: #fff; line-height: 66rpx; padding: 0 24rpx; color: #666; margin-bottom: 11rpx; margin-right: 24rpx; @include clamp; } } } } </style>