TianJiaHuiZhenShenQing.vue 11 KB

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