暫無描述

consultation.vue 14KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385
  1. <template>
  2. <el-form :model="form" ref="orderRef" label-width="150" style="width: 800px" :rules="rules">
  3. <el-form-item label="工单类别" prop="workordercate">
  4. <el-cascader ref="workOrderRef" v-model="form.workordercate" :props="{value: 'id',}" placeholder="请选择工单类别" @change="workordercateChange" :options="childrenTypes" filterable />
  5. </el-form-item>
  6. <el-form-item label="申请科室" prop="applicantDept">
  7. <el-tree-select
  8. style="width: 100%"
  9. v-model="form.applicantDept"
  10. filterable
  11. :data="deptData"
  12. check-strictly
  13. @change="deptChange"
  14. :render-after-expand="false"
  15. />
  16. </el-form-item>
  17. <el-form-item label="联系人姓名" prop="callcode">
  18. <el-select v-model="form.callcode" filterable placeholder="请选择联系人姓名" @change="userChange" style="width: 214px;">
  19. <el-option v-for="item in deptUsers" :key="item.userName" :label="item.nickName" :value="item.userName" />
  20. </el-select>
  21. </el-form-item>
  22. <el-form-item label="联系人电话" prop="callnum">
  23. <el-input v-model="form.callnum" placeholder="请输入联系人电话" />
  24. </el-form-item>
  25. <el-form-item label="患者姓名" prop="patientName">
  26. <el-input v-model="form.patientName" placeholder="请输入患者姓名" />
  27. </el-form-item>
  28. <el-form-item label="住院号" prop="hospitalNum">
  29. <el-input v-model="form.hospitalNum" placeholder="请输入住院号" />
  30. </el-form-item>
  31. <el-form-item label="管床医师" prop="attendingDoctor">
  32. <el-input v-model="form.attendingDoctor" placeholder="请输入管床医师" />
  33. </el-form-item>
  34. <el-form-item v-if="workOrderCode !== YCHZ" label="邀请科室" prop="applicantDept">
  35. <el-tree-select
  36. style="width: 100%"
  37. v-model="form.inviteDept"
  38. filterable
  39. :data="deptData"
  40. check-strictly
  41. :render-after-expand="false"
  42. />
  43. </el-form-item>
  44. <el-form-item v-if="workOrderCode !== YCHZ" label="会诊地点" prop="consultationLocation">
  45. <el-input v-model="form.consultationLocation" placeholder="请输入会诊地点" />
  46. </el-form-item>
  47. <el-form-item v-if="workOrderCode === YCHZ" label="邀请医院" prop="inviteHospital">
  48. <el-input v-model="form.inviteHospital" placeholder="请输入邀请医院" />
  49. </el-form-item>
  50. <el-form-item v-if="workOrderCode === YCHZ" label="邀请医师" prop="inviteDoctor">
  51. <el-input v-model="form.inviteDoctor" placeholder="请输入邀请医师" />
  52. </el-form-item>
  53. <el-form-item label="会诊时间" prop="consultationTime">
  54. <el-date-picker v-model="form.consultationTime" type="datetime" placeholder="请选择会诊时间"/>
  55. </el-form-item>
  56. <el-form-item label="备注" prop="content">
  57. <el-input v-model="form.content" type="textarea" />
  58. </el-form-item>
  59. <el-form-item label="是否完结" prop="delivery">
  60. <el-switch v-model="form.isend" />
  61. </el-form-item>
  62. </el-form>
  63. <div class="order-layout" style=" width: 100%;">
  64. <div style="text-align: center; margin: 0 auto; margin-bottom: 100px;">
  65. <el-button type="primary" @click="onStage(orderRef)" v-if="stageFlag">暂存</el-button>
  66. <el-button @click="resetForm()">重置</el-button>
  67. <el-button type="primary" @click="onSubmit(orderRef)">提交</el-button>
  68. </div>
  69. </div>
  70. </template>
  71. <script lang="ts" setup>
  72. import { reactive, ref,toRaw } from 'vue'
  73. import useSelectStore from '@/store/commonSelect/common';
  74. import { createPageData, editPageData,getPageListData } from '@/api/main/system/system';
  75. import { getUnprefixNuber } from '@/utils';
  76. import moment from 'moment';
  77. import { userDecryptToAsterisk, userToAsterisk } from '@/utils/aes'
  78. import useSocketStore from '@/store/modules/socket'
  79. import { initDb } from '@/utils/indexdb'
  80. import { getInstance } from "@michaelray/indexdb";
  81. const lineState = computed(() => {
  82. return useSocketStore().lineState
  83. })
  84. const { proxy } = getCurrentInstance();
  85. const workOrderCode = ref('')
  86. const workOrderRef: any = ref(null)
  87. // do not use same name with ref
  88. const form = ref({
  89. firsttype:1000,
  90. workordercate: [], // 工单类型
  91. callnum: '', // 申请人电话
  92. callcode: '', // 申请人编号
  93. caller: '', // 患者姓名
  94. patientName: '', // 患者姓名
  95. content: '', // 咨询内容
  96. isend: 0, // 是否完结
  97. applicantName: '', // 申请人员
  98. hospitalNum: '', // 住院号
  99. // applicantPhone: '', // 申请人员电话
  100. applicantDept: '', // 申请部门
  101. attendingDoctor: '', // 管床医师
  102. inviteDept: '', // 邀请科室
  103. consultationLocation: '', // 会诊地点
  104. inviteHospital: '', // 邀请医院
  105. inviteDoctor: '', // 邀请医师
  106. consultationTime: '', // 会诊时间
  107. });
  108. const YCHZ = 'hz_ychz';
  109. const getRequired = () => {
  110. return workOrderCode.value === YCHZ
  111. }
  112. const rules = reactive({
  113. workordercate: [
  114. { required: true, message: '请选择工单类型', trigger: 'blur' },
  115. ],
  116. applicantDept: [
  117. { required: true, message: '请选择申请科室', trigger: 'blur' },
  118. ],
  119. callcode: [
  120. { required: true, message: '请选择申请人', trigger: 'blur' },
  121. ],
  122. // callnum: [
  123. // { required: true, message: '请输入申请人电话', trigger: 'blur' },
  124. // ],
  125. patientName: [
  126. { required: true, message: '请输入患者姓名', trigger: 'blur' },
  127. ],
  128. hospitalNum: [
  129. { required: true, message: '请输入住院号', trigger: 'blur' },
  130. ],
  131. attendingDoctor: [
  132. { required: true, message: '请输入管床医师', trigger: 'blur' },
  133. ],
  134. inviteDept: [
  135. { required: !getRequired(), message: '请选择邀请科室', trigger: 'blur' },
  136. ],
  137. consultationLocation: [
  138. { required: !getRequired(), message: '请输入会诊地点', trigger: 'blur' },
  139. ],
  140. inviteHospital: [
  141. { required: getRequired(), message: '请输入邀请医院', trigger: 'blur' },
  142. ],
  143. inviteDoctor: [
  144. { required: getRequired(), message: '请输入邀请医师', trigger: 'blur' },
  145. ],
  146. consultationTime: [
  147. { required: true, message: '请选择会诊时间', trigger: 'blur' },
  148. ],
  149. // content: [
  150. // { required: true, message: '请输入内容', trigger: 'blur' },
  151. // ]
  152. });
  153. const childrenTypes = ref([]);
  154. const orderRef = ref();
  155. const props = defineProps({
  156. orderInfo: {
  157. type: Object,
  158. default: () => ({}),
  159. }
  160. });
  161. const emit = defineEmits([ "updateSuccess" ]);
  162. const deptData = ref([])
  163. const userData =ref([])
  164. watch(props, (nweProps) => {
  165. initMethod(nweProps)
  166. });
  167. onMounted(() => {
  168. initMethod(props)
  169. });
  170. const stageState = computed(() => {
  171. return useSocketStore().stageState
  172. })
  173. const stageFlag = ref(true)
  174. const initMethod = async (props) => {
  175. userData.value = useSelectStore().userData;
  176. deptData.value = useSelectStore().deptListData;
  177. if (props.orderInfo && props.orderInfo.type) {
  178. getOrderType(props.orderInfo.type)
  179. }
  180. if (!props.orderInfo.callId) {
  181. stageFlag.value = false
  182. }
  183. if (props.orderInfo.workordercode || props.orderInfo.callId) {
  184. if (props.orderInfo.id || props.orderInfo.workordercode) {
  185. stageFlag.value = false
  186. }
  187. form.value.workorderId = props.orderInfo.workorderId
  188. form.value.workordercode = props.orderInfo.workordercode
  189. workOrderCode.value = props.orderInfo.workordercatecode
  190. workordercateChange();
  191. form.value.firsttype = props.orderInfo.firsttype
  192. // form.value.customerno = props.orderInfo.customerno
  193. form.value.workordercate = props.orderInfo.workordercate
  194. form.value.applicantDept = props.orderInfo.applicantDept
  195. await deptChange(form.value.applicantDept);
  196. form.value.callnum = userToAsterisk(props.orderInfo.callnum)
  197. form.value.callcode = props.orderInfo.callcode
  198. form.value.patientName = props.orderInfo.patientName
  199. form.value.hospitalNum = props.orderInfo.hospitalNum
  200. form.value.attendingDoctor = props.orderInfo.attendingDoctor
  201. form.value.inviteDept = props.orderInfo.inviteDept
  202. form.value.consultationLocation = props.orderInfo.consultationLocation
  203. form.value.inviteHospital = props.orderInfo.inviteHospital
  204. form.value.inviteDoctor = props.orderInfo.inviteDoctor
  205. form.value.consultationTime = props.orderInfo.consultationTime
  206. // form.value.callnum = userToAsterisk(props.orderInfo.callnum)
  207. // form.value.caller = props.orderInfo.caller
  208. form.value.content = props.orderInfo.content
  209. form.value.isend = props.orderInfo.isend?true:false
  210. }
  211. if (props.orderInfo && props.orderInfo.caller) form.value.caller = props.orderInfo.caller
  212. if (props.orderInfo && props.orderInfo.callnum) form.value.callnum = props.orderInfo.callnum
  213. // if (form.value.callnum) {
  214. // customerDetail(form.value.callnum)
  215. // }
  216. if (props.orderInfo.callId) {
  217. form.value.callId = props.orderInfo.callId
  218. // form.value.callnum = getUnprefixNuber(props.orderInfo.callnum)
  219. if (props.orderInfo.callnum.length>12) {
  220. form.value.callnum = userToAsterisk(props.orderInfo.callnum)
  221. } else{
  222. form.value.callnum = getUnprefixNuber(props.orderInfo.callnum)
  223. }
  224. customerDetail(form.value.callnum)
  225. }
  226. }
  227. async function getOrderType(id) {
  228. const resultData = await getPageListData('/worker/type/getTreeselectById',{id});
  229. childrenTypes.value = resultData.data ?? []
  230. }
  231. async function customerDetail(customerno) {
  232. const resultData = await getPageListData('/system/addressbook/Affiliation/'+customerno);
  233. console.log(resultData.data,'consultation')
  234. patientName.value.caller = resultData.data.name
  235. }
  236. defineExpose({
  237. onStage
  238. })
  239. function onStage(type) {
  240. const params = form.value
  241. // params.consultationLocation = form.value.consultationLocation
  242. // params.inviteHospital = form.value.inviteHospital
  243. // params.inviteDoctor = form.value.inviteDoctor
  244. params.workordercatecode = workOrderCode.value
  245. params.firsttype = props.orderInfo.type*1
  246. params.customerno = params.callnum
  247. params.caller = params.caller
  248. if (params.workordercate) {
  249. params.workordercate.length && (params.workordercate = params.workordercate[params.workordercate.length-1] )
  250. }
  251. if (params.consultationTime) {
  252. params.consultationTime = moment(params.consultationTime).format('YYYY-MM-DD HH:mm:ss')
  253. }
  254. params.isend && (params.isend = params.isend ?1:0)
  255. params.createtime = moment(new Date()).format('YYYY-MM-DD HH:mm:ss')
  256. setDb(params,type)
  257. }
  258. async function setDb(data,type){
  259. await initDb();
  260. {
  261. await getInstance().insert({
  262. tableName: 'orderList',
  263. data:toRaw(data)
  264. })
  265. }
  266. proxy.$modal.msgSuccess('暂存成功!');
  267. if (type === 2) {
  268. emit('updateSuccess');
  269. useSocketStore().setStageState(0)
  270. }
  271. }
  272. const onSubmit = (formEl) => {
  273. if (!formEl) return
  274. formEl.validate((valid, fields) => {
  275. if (valid) {
  276. const params: any = {
  277. ...form.value,
  278. };
  279. params.firsttype =props.orderInfo.type*1
  280. // form.value.customerno = form.value.callnum
  281. if (params.workordercate) {
  282. if (params.workordercate.length) {
  283. params.workordercate = params.workordercate[params.workordercate.length-1]
  284. }
  285. }
  286. if (params.consultationTime) {
  287. params.consultationTime = moment(params.consultationTime).format('YYYY-MM-DD HH:mm:ss')
  288. }
  289. params.isend = params.isend ? 1:0
  290. if (props.orderInfo.workorderId) {
  291. editPageData('/order/workorder', params).then((data) => {
  292. proxy.$modal.msgSuccess('编辑成功!');
  293. resetForm()
  294. useSocketStore().setStageState(0)
  295. emit('updateSuccess');
  296. });
  297. }else{
  298. if (lineState.value === '通话中') {
  299. proxy.$modal.msgSuccess('正在通话中');
  300. return
  301. }
  302. createPageData('/order/workorder', params).then((data) => {
  303. proxy.$modal.msgSuccess('提交成功!');
  304. resetForm()
  305. emit('updateSuccess');
  306. if (params.callId) {
  307. useSocketStore().setStageState(0)
  308. emit('stageSuccess',params.callId);
  309. }
  310. })
  311. }
  312. } else {
  313. console.log('error submit!', fields)
  314. }
  315. })
  316. }
  317. function resetForm() {
  318. if (!orderRef.value) return
  319. orderRef.value.resetFields()
  320. }
  321. const userChange = (val) => {
  322. const obj: any = userData.value.find(function(i: any){
  323. return i.userName === val
  324. });
  325. form.value.callnum = obj.phonenumber
  326. }
  327. const deptUsers = ref([]);
  328. const deptChange = async (val) => {
  329. const users = await useSelectStore().userData.filter((o: any) => {
  330. return o.deptId === val;
  331. });
  332. if (users && users.length > 0) {
  333. deptUsers.value = users
  334. } else {
  335. deptUsers.value = []
  336. }
  337. }
  338. // 工单类型变更,切换对应数据
  339. const workordercateChange = () => {
  340. const node = workOrderRef.value.getCheckedNodes();
  341. if (node && node.length > 0) {
  342. workOrderCode.value = node[0].data.code
  343. } else {
  344. form.value.teshuyaopin = 0;
  345. form.value.contactPhone = '';
  346. form.value.diagnosis = '';
  347. form.value.huxiji = '';
  348. form.value.weiliangbeng = 0;
  349. }
  350. }
  351. </script>