TianJiaHuiZhenShenQing.vue 11 KB

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