TianJiaHuiZhenShenQing.vue 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  1. <template>
  2. <div style="width: 550px">
  3. <el-form ref="huiZhenShenQingForm"
  4. :model="huiZhenShenQing"
  5. :rules="huiZhenShenQingRules"
  6. label-width="100px">
  7. <el-form-item label="会诊科室:" prop="reqDept1">
  8. <el-select
  9. style="width: 120px"
  10. v-model="huiZhenShenQing.huiZhenKeShi"
  11. :remote-method="remoteMethodHuiZhenKeShi"
  12. clearable
  13. filterable
  14. placeholder="根据拼音首字母查找"
  15. remote
  16. value-key="code"
  17. @change="huiZhenYiShengPanDuan">
  18. <el-option v-for="item in deptList" :key="item.code" :label="item.name"
  19. :value="deptOptionValue(item)">
  20. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  21. <el-divider direction="vertical"></el-divider>
  22. <span>{{ item.name }}</span>
  23. </el-option>
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="会诊类别:" prop="hzLevel">
  27. <el-select v-model="huiZhenShenQing.hzLevel" placeholder="请选择">
  28. <el-option v-for="item in huiZhenLeiBieList" :key="item.code" :label="item.name" :value="item.code"
  29. clearable>
  30. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  31. <el-divider direction="vertical"/>
  32. <span>{{ item.name }}</span>
  33. </el-option>
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="会诊级别:" prop="hzType">
  37. <el-select v-model="huiZhenShenQing.hzType" :remote-method="remoteMethodHuiZhenKeShi"
  38. clearable placeholder="请选择"
  39. @change="huiZhenYiShengPanDuan">
  40. <el-option v-for="item in huiZhenTypeList" :key="item.code" :label="item.name"
  41. :value="item.code">
  42. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  43. <el-divider direction="vertical"></el-divider>
  44. <span>{{ item.name }}</span>
  45. </el-option>
  46. </el-select>
  47. </el-form-item>
  48. <el-form-item label="会诊医生:" prop="hzDoctor1">
  49. <el-select v-model="huiZhenShenQing.hzDoctor1"
  50. clearable
  51. filterable
  52. remote
  53. @change="autofillData"
  54. :remote-method="inquireAboutTheConsultingDoctor">
  55. <el-option v-for="item in huiZhenYiShengList" :key="item.code" :label="item.name"
  56. :value="item.code">
  57. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  58. <el-divider direction="vertical"></el-divider>
  59. <span style="color:#67C23A">{{ item.name }}</span>
  60. <el-divider direction="vertical"></el-divider>
  61. <span style="color:#E6A23C">{{ item.deptName }}</span>
  62. <el-divider direction="vertical"></el-divider>
  63. <span style="color:#a5673f">{{ item.empTitName }}</span>
  64. </el-option>
  65. </el-select>
  66. </el-form-item>
  67. <el-form-item label="自费:" prop="ybSelfFlag">
  68. <el-switch
  69. v-model="huiZhenShenQing.ybSelfFlag"
  70. :active-value="1"
  71. :inactive-value="0"
  72. active-color="#13ce66"
  73. active-text="是"
  74. inactive-color="#ff4949"
  75. inactive-text="否">
  76. </el-switch>
  77. </el-form-item>
  78. <el-form-item label="紧急:" prop="emergencyFlag">
  79. <el-switch
  80. v-model="huiZhenShenQing.emergencyFlag"
  81. :active-value="1"
  82. :inactive-value="0"
  83. active-color="#13ce66"
  84. active-text="是"
  85. inactive-color="#ff4949"
  86. inactive-text="否">
  87. </el-switch>
  88. </el-form-item>
  89. <el-form-item label="病情简介:" prop="reqComment">
  90. <el-input v-model="huiZhenShenQing.reqComment"
  91. :rows="6"
  92. placeholder="请输入内容"
  93. type="textarea"/>
  94. </el-form-item>
  95. <el-form-item label="目前主要诊断:" prop="hzZd">
  96. <el-input v-model="huiZhenShenQing.hzZd"
  97. :rows="6" maxlength="100"
  98. placeholder="请输入内容"
  99. show-word-limit
  100. type="textarea"/>
  101. </el-form-item>
  102. <el-form-item label="会诊目的:" prop="hzMd">
  103. <el-input v-model="huiZhenShenQing.hzMd"
  104. :rows="6"
  105. placeholder="请输入内容"
  106. type="textarea"/>
  107. </el-form-item>
  108. <el-button style="margin-left: 20px" type="success"
  109. v-el-btn="huiZhenShenQingClick">
  110. 申请
  111. </el-button>
  112. <el-tag style="margin-left: 20px">申请人:{{ huiZhenShenQing.name }}</el-tag>
  113. <el-tag style="margin-left: 20px">申请时间:{{ huiZhenShenQing.inputDate }}</el-tag>
  114. </el-form>
  115. </div>
  116. </template>
  117. <script name="TianJiaHuiZhenShenQing" setup>
  118. import {
  119. getConsultingDoctorInfo,
  120. gethuiZhenLeiBie,
  121. huiZhenYiSheng, huoQuHuanZheZhuYaoZhenDuan,
  122. queryDept,
  123. submitHuiZhenShenQing
  124. } from "@/api/case-front-sheet";
  125. import {ElMessageBox} from "element-plus";
  126. import {
  127. huanZheXinXi,
  128. } from "@/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng";
  129. import store from "@/store"
  130. import {getServerDateApi} from "@/api/public-api";
  131. const emit = defineEmits(['close', 'successfulApplication'])
  132. const windowSize = computed(() => {
  133. return store.state.app.windowSize
  134. })
  135. //会诊申请的字段
  136. const huiZhenShenQing = ref({
  137. inpatientNo: '', //住院号
  138. admissTimes: '', //住院次数
  139. reqTimes: '', //请求时间
  140. reqComment: '', //请求简介
  141. inputId: '', //输入人的id
  142. inputDate: '', //输入的时间
  143. reqDate: '', //请求的时间 和 上面那个一样
  144. deptCode: '', //科室 code
  145. wardCode: '', //病房 code 和上面的一样
  146. reqDept1: '', //请求的 科室
  147. reqDeptName: '', //请求科室的名字
  148. statusFlag: '', // 状态标志 1 未读 2 已读
  149. hzType: '', // 会诊的级别
  150. hzLevel: '', // 会诊的类别
  151. hzZd: '', //目前的主要诊断
  152. hzMd: '', //会诊的目的
  153. actOrderNo: '', //新开的医嘱号
  154. hzDoctor1: '', //会诊的医生
  155. name: '', // 申请人
  156. emergencyFlag: 0, // 医嘱紧急
  157. ybSelfFlag: 0, // 自费
  158. huiZhenKeShi: {},
  159. })
  160. // 会诊医生
  161. const huiZhenYiShengList = ref([])
  162. // 科室
  163. const deptList = ref([])
  164. //会诊类别集合
  165. const huiZhenLeiBieList = ref()
  166. // 表格
  167. const huiZhenShenQingForm = ref(null)
  168. // 用户信息
  169. const userInfo = store.state.user.info
  170. // 会诊科室 option 的 值
  171. const deptOptionValue = (item) => {
  172. item.dept = true
  173. return JSON.stringify(item)
  174. }
  175. //会诊医生判断 , 要会诊医生在这个科室的 才可以
  176. const huiZhenYiShengPanDuan = (val) => {
  177. popUpPrompt = false
  178. try {
  179. val = JSON.parse(val)
  180. } catch (e) {
  181. }
  182. if (val.dept) {
  183. huiZhenShenQing.value.reqDeptName = val.name
  184. huiZhenShenQing.value.reqDept1 = val.code
  185. }
  186. huiZhenShenQing.value.hzDoctor1 = null
  187. if (huiZhenShenQing.value.reqDept1 && huiZhenShenQing.value.hzType) {
  188. huiZhenYiSheng(huiZhenShenQing.value.reqDept1, huiZhenShenQing.value.hzType).then((res) => {
  189. huiZhenYiShengList.value = res
  190. })
  191. } else {
  192. huiZhenYiShengList.value = []
  193. }
  194. }
  195. //远程搜索会诊科室
  196. const remoteMethodHuiZhenKeShi = (val) => {
  197. if (val !== '' && val.length > 0) {
  198. queryDept(val)
  199. .then((res) => {
  200. deptList.value = res
  201. })
  202. .catch(() => {
  203. deptList.value = []
  204. })
  205. }
  206. }
  207. // 数据校验
  208. const huiZhenShenQingRules = ref({
  209. reqDept1: [{required: true, message: '会诊科室不能为空', trigger: 'change'}],
  210. hzType: [{required: true, message: '会诊的级别不能为空', trigger: 'change'}],
  211. hzLevel: [{required: true, message: '会诊的类别不能为空', trigger: 'change'}],
  212. reqComment: [{required: true, message: '病情简介不能为空', trigger: 'blur'}],
  213. hzZd: [
  214. {required: true, message: '目前主要诊断不能为空', trigger: 'blur'},
  215. {
  216. min: 3,
  217. max: 120,
  218. message: '长度在 3 到 100 个字符',
  219. trigger: 'blur',
  220. },
  221. ],
  222. hzMd: [{required: true, message: '会诊目的不能为空', trigger: 'blur'}],
  223. })
  224. //点击申请
  225. const huiZhenShenQingClick = async () => {
  226. const form = unref(huiZhenShenQingForm)
  227. if (!form) return
  228. try {
  229. await form.validate()
  230. await ElMessageBox.confirm('请认真审核申请信息', '提示', {
  231. confirmButtonText: '确认',
  232. cancelButtonText: '取消',
  233. type: 'info',
  234. })
  235. huiZhenShenQing.value.inpatientNo = huanZheXinXi.value.inpatientNo
  236. huiZhenShenQing.value.admissTimes = huanZheXinXi.value.admissTimes
  237. huiZhenShenQing.value.deptCode = huiZhenShenQing.value.wardCode = huanZheXinXi.value.zkWard
  238. await submitHuiZhenShenQing(huiZhenShenQing.value)
  239. emit('successfulApplication')
  240. } catch (error) {
  241. }
  242. }
  243. let popUpPrompt = false
  244. const inquireAboutTheConsultingDoctor = (val) => {
  245. getConsultingDoctorInfo(val).then((res) => {
  246. if (res) {
  247. popUpPrompt = true
  248. huiZhenYiShengList.value = res
  249. }
  250. })
  251. }
  252. const autofillData = async (val) => {
  253. if (!popUpPrompt) return
  254. if (!val) return
  255. await nextTick()
  256. ElMessageBox.confirm('是否要自动填充数据。', '提示', {
  257. type: 'info',
  258. distinguishCancelAndClose: true,
  259. }).then(() => {
  260. let res = {}
  261. for (let i = 0, len = huiZhenYiShengList.value.length; i < len; i++) {
  262. let item = huiZhenYiShengList.value[i]
  263. if (item.code === val) {
  264. res = item
  265. break;
  266. }
  267. }
  268. let dept = {code: res.deptCode, name: res.deptName, dept: true}
  269. huiZhenShenQing.value.huiZhenKeShi = JSON.stringify(dept)
  270. deptList.value = [dept]
  271. huiZhenShenQing.value.reqDept1 = res.deptCode
  272. huiZhenShenQing.value.reqDeptName = res.deptName
  273. if (res.empTitCode === '3') {
  274. huiZhenShenQing.value.hzType = '1'
  275. } else if (res.empTitCode === '1') {
  276. huiZhenShenQing.value.hzType = '3'
  277. }
  278. }).catch((action) => {
  279. if (action === 'cancel') {
  280. huiZhenShenQing.value = {}
  281. } else {
  282. huiZhenShenQing.value.hzDoctor1 = ''
  283. huiZhenYiShengPanDuan({code: ''})
  284. }
  285. })
  286. }
  287. onMounted(() => {
  288. // xcHotKey(hotKey)
  289. huiZhenShenQing.value.name = userInfo.name
  290. getServerDateApi().then((res) => {
  291. huiZhenShenQing.value.inputDate = res
  292. })
  293. gethuiZhenLeiBie().then((res) => {
  294. huiZhenLeiBieList.value = res
  295. })
  296. huoQuHuanZheZhuYaoZhenDuan(huanZheXinXi.value.inpatientNo, huanZheXinXi.value.admissTimes).then((res) => {
  297. if (res !== null && res.length > 0) {
  298. for (let i = 0; i < res.length; i++) {
  299. huiZhenShenQing.value.hzZd += res[i].name + ','
  300. }
  301. }
  302. })
  303. })
  304. let huiZhenTypeList = [
  305. {code: '1', name: '主治医师'},
  306. {code: '2', name: '副主任医生'},
  307. {code: '3', name: '主任医生'},
  308. ]
  309. </script>
  310. <style scoped>
  311. </style>