TianJiaYiZhu.vue 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868
  1. <template>
  2. <!-- 这里是获取模板的 -->
  3. <huo-qu-mu-ban v-if="muBanDuiHuaKuang" @close="muBanDuiHuaKuang = false" @muBanShuJu="muBanShuJu"></huo-qu-mu-ban>
  4. <bao-cun-mu-ban ref="baoCunMuBanRef"></bao-cun-mu-ban>
  5. <template v-for="(item, index) in tiShiBiaoTi" :key="index">
  6. <el-alert :title="item.title" :type="item.type" effect="dark"></el-alert>
  7. </template>
  8. <el-button icon="el-icon-arrow-left" style="font-size: 14px" type="text" @click="router.go(-1)">返回</el-button>
  9. <el-button type="primary" @click="muBanDuiHuaKuang = true">获取模板</el-button>
  10. <el-button :disabled="yiZhuList.length === 0" type="primary" @click="baoCunMuBanClick">保存模板</el-button>
  11. <el-button icon="el-icon-check" type="success" @click="baoCunYiZhuClick">保存</el-button>
  12. {{ count }}
  13. <cuo-wu-xin-xi/>
  14. <el-divider direction="vertical"></el-divider>
  15. <el-button :disabled="yiZhuData.serial === '00' || stringIsBlank(yiZhuData.serial)" icon="el-icon-view" type="success"
  16. @click="HeLiYongYao.dialog = true"> 药品用法
  17. </el-button>
  18. <el-divider direction="vertical"></el-divider>
  19. <el-button @click="tiaoZhuanZhiHeLiYongYao">合理用药</el-button>
  20. <el-button @click="allergenDialog = true ">患者过敏信息</el-button>
  21. <yao-ping-xiang-qing v-if="HeLiYongYao.dialog" :code="HeLiYongYao.code"
  22. @close="HeLiYongYao.dialog = false"></yao-ping-xiang-qing>
  23. <el-form ref="yiZhuRef" v-model="yiZhuData" label-width="90px" size="mini">
  24. <el-row>
  25. <el-col :span="span" @click="yiZhuMingDialog = true">
  26. <el-form-item class="bi_tian" label="医嘱名称:" prop="orderName">
  27. <div style="border-bottom: 1px solid #000; height: 29px">
  28. {{ yiZhuData.orderName }}
  29. </div>
  30. </el-form-item>
  31. </el-col>
  32. <el-col :span="span">
  33. <el-form-item label="规格:" prop="orderName">
  34. <div style="border-bottom: 1px solid #000; height: 29px">
  35. {{ yiZhuData.drugSpecification }}
  36. </div>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="span">
  40. <el-form-item class="bi_tian" label="频率:" prop="frequCode">
  41. <XcSelect v-model="yiZhuData" :data="yaoPinPingLvData"
  42. :name="['frequCode','frequCodeName']" clearable remote
  43. @method="pinLvRemoteMethod">
  44. </XcSelect>
  45. </el-form-item>
  46. </el-col>
  47. <el-col :span="span">
  48. <el-form-item class="bi_tian" label="一次剂量:" prop="dose">
  49. <el-input-number v-model="yiZhuData.dose" :min="0" :precision="2" style="width: 110px"
  50. @change="jiSuanLingLiang"></el-input-number>
  51. <XcSelect v-model="yiZhuData" :data="yaoPinJiLiangData"
  52. :name="['doseUnit','doseUnitName']" :width="80"
  53. @change="xuanZheJiLiang">
  54. <XcOption label="value"></XcOption>
  55. <XcOption label="name"></XcOption>
  56. </XcSelect>
  57. </el-form-item>
  58. </el-col>
  59. <el-col :span="span">
  60. <el-form-item label="领量:"> {{ yiZhuData.drugQuan }} {{ yiZhuData.miniUnitName }}</el-form-item>
  61. </el-col>
  62. <el-col :span="span">
  63. <el-form-item class="bi_tian" label="给药方式:" prop="supplyCode">
  64. <XcSelect v-model="yiZhuData" :data="geiYaoFangShiData"
  65. :name="['supplyCode','supplyCodeName']" clearable
  66. remote
  67. @method="geiYaoFangShiRemoteMethod">
  68. </XcSelect>
  69. </el-form-item>
  70. </el-col>
  71. <el-col :span="span">
  72. <el-form-item label="医嘱时间:" prop="orderName">
  73. {{ yiZhuData.orderTime }}
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="span">
  77. <el-form-item class="bi_tian" label="开始时间:" prop="startTime">
  78. <el-date-picker
  79. v-model="yiZhuData.startTime"
  80. :disabled-date="disabledDate"
  81. format="YYYY-MM-DD HH:mm:ss"
  82. type="datetime"
  83. value-format="YYYY-MM-DD HH:mm:ss"
  84. ></el-date-picker>
  85. </el-form-item>
  86. </el-col>
  87. <el-col :span="span">
  88. <el-form-item class="bi_tian" label="停止时间:" prop="endTime">
  89. <el-date-picker
  90. v-model="yiZhuData.endTime"
  91. :disabled="yiZhuData.frequCode === 'ONCE'"
  92. :disabled-date="disabledDate"
  93. format="YYYY-MM-DD HH:mm:ss"
  94. type="datetime"
  95. value-format="YYYY-MM-DD HH:mm:ss"
  96. ></el-date-picker>
  97. </el-form-item>
  98. </el-col>
  99. <el-col :span="span">
  100. <el-form-item label="医生:" prop="orderName">
  101. {{ store.state.user.info.name }}
  102. </el-form-item>
  103. </el-col>
  104. <el-col :span="span">
  105. <el-form-item class="bi_tian" label="执行科室:" prop="execUnit">
  106. <XcSelect v-model="yiZhuData" :data="zhiXingKeShiData"
  107. :name="['execUnit','execUnitName']"
  108. remote @method="metZhiXingKeShi">
  109. </XcSelect>
  110. </el-form-item>
  111. </el-col>
  112. <el-col :span="span">
  113. <el-form-item label="父医嘱:" prop="orderName">
  114. <el-select v-model="yiZhuData.parentNo" :disabled="yiZhuData.serial === '00'" clearable
  115. @clear="yiZhuData.parentNo = null" @click="fuYiZhuClick">
  116. <el-option v-for="item in fuYiZhuData" :key="item.code" :label="item.name" :value="item.code">
  117. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  118. <el-divider direction="vertical"></el-divider>
  119. <span>{{ item.name }}</span>
  120. </el-option>
  121. </el-select>
  122. </el-form-item>
  123. </el-col>
  124. <el-col :span="span" :title="yiZhuData.discription">
  125. <el-form-item label="医嘱描述:" prop="orderName">
  126. <el-input v-model="yiZhuData.discription" disabled type="textarea"></el-input>
  127. </el-form-item>
  128. </el-col>
  129. <el-col :span="span">
  130. <el-form-item label="医生嘱托:">
  131. <el-input v-model="yiZhuData.instruction" clearable maxlength="50" show-word-limit style="width: 130px"
  132. type="textarea"></el-input>
  133. </el-form-item>
  134. </el-col>
  135. <el-col :span="span">
  136. <el-form-item label="服用时间">
  137. <el-select v-model="yiZhuData.kfFlag" clearable style="width: 80px" @clear="yiZhuData.kfFlag = null">
  138. <el-option key="1" label="饭前" value="1"></el-option>
  139. <el-option key="2" label="饭后" value="2"></el-option>
  140. </el-select>
  141. </el-form-item>
  142. </el-col>
  143. <el-col :span="span">
  144. <el-form-item label="费用标志:">
  145. <el-select v-model="yiZhuData.selfBuy" clearable style="width: 120px" @clear="yiZhuData.selfBuy = null">
  146. <el-option key="1" label="自备" value="1"></el-option>
  147. <el-option key="2" label="嘱托" value="2"></el-option>
  148. <el-option key="3" label="基数药" value="3"></el-option>
  149. </el-select>
  150. </el-form-item>
  151. </el-col>
  152. <el-col :span="span">
  153. <el-form-item label="医保自费:">
  154. <el-switch v-model="yiZhuData.ybSelfFlag" active-color="#13ce66" active-text="自费" active-value="1"
  155. inactive-color="#ff4949" inactive-text="记账" inactive-value="0">
  156. </el-switch>
  157. </el-form-item>
  158. </el-col>
  159. <el-col :span="span">
  160. <el-form-item label="是否紧急:">
  161. <el-switch v-model="yiZhuData.emergencyFlag" active-color="#13ce66" active-text="是" active-value="1"
  162. inactive-color="#ff4949" inactive-text="否" inactive-value="0">
  163. </el-switch>
  164. </el-form-item>
  165. </el-col>
  166. <el-col v-if="yiZhuData.kjywFlag !== 0" :span="span">
  167. <el-form-item label="用药方式:">
  168. <el-select v-model="yiZhuData.yyfs" style="width: 120px" @change="kangJunYaoYongYaoFangShiGaiBian">
  169. <el-option v-for="item in kangJunYaoWuYongYaoFangShi" :key="item.code" :label="item.name"
  170. :value="item.code">
  171. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  172. <el-divider direction="vertical"></el-divider>
  173. <span>{{ item.name }}</span>
  174. </el-option>
  175. </el-select>
  176. </el-form-item>
  177. </el-col>
  178. <el-col :span="span">
  179. <el-form-item v-if="yiZhuData.kjywFlag !== 0" label="切口等级:">
  180. <el-select
  181. v-model="yiZhuData.ssqk"
  182. :disabled="yiZhuData.yyfs !== 1 && yiZhuData.yyfs !== 2 && yiZhuData.yyfs !== null"
  183. clearable
  184. style="width: 120px"
  185. @clear="yiZhuData.ssqk = null"
  186. >
  187. <el-option v-for="item in kangJunYaoWuQieKou" :key="item.code" :label="item.name" :value="item.code">
  188. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  189. <el-divider direction="vertical"></el-divider>
  190. <span>{{ item.name }}</span></el-option
  191. >
  192. </el-select>
  193. </el-form-item>
  194. </el-col>
  195. <el-col :span="span">
  196. <el-form-item v-if="yiZhuData.kjywFlag !== 0" label="用药时间:">
  197. <el-select
  198. v-model="yiZhuData.yysj"
  199. :disabled="yiZhuData.yyfs !== 1 && yiZhuData.yyfs !== 2 && yiZhuData.yyfs !== null"
  200. clearable
  201. style="width: 120px"
  202. @clear="yiZhuData.yysj = null"
  203. >
  204. <el-option v-for="item in kangJunYaoWuYongYaoShiJian" :key="item.code" :label="item.name"
  205. :value="item.code">
  206. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  207. <el-divider direction="vertical"></el-divider>
  208. <span>{{ item.name }}</span></el-option
  209. >
  210. </el-select>
  211. </el-form-item>
  212. </el-col>
  213. </el-row>
  214. </el-form>
  215. <el-button icon="el-icon-plus" type="primary" @click="tianJiaYiZhu">添加</el-button>
  216. <xc-code code="Alt+Enter" description="键盘添加"></xc-code>
  217. <el-button @click="dianJiXiuGaiZhiXingKeShi">修改执行科室</el-button>
  218. <el-table :data="yiZhuList" :height="windowSize.h / 2.4" @selection-change="dianJiXuanZhongShuJu">
  219. <el-table-column type="selection"></el-table-column>
  220. <el-table-column label="排序" type="index"></el-table-column>
  221. <el-table-column label="uuid" prop="id"></el-table-column>
  222. <el-table-column label="医嘱编码" prop="orderCode"></el-table-column>
  223. <el-table-column label="医嘱名称" prop="orderName" show-overflow-tooltip></el-table-column>
  224. <el-table-column label="医嘱时间" prop="orderTime" width="70"></el-table-column>
  225. <el-table-column label="开始时间" prop="startTime" width="70"></el-table-column>
  226. <el-table-column label="结束时间" prop="endTime" width="70"></el-table-column>
  227. <el-table-column label="规格" prop="drugSpecification"></el-table-column>
  228. <el-table-column label="频率" prop="frequCodeName"></el-table-column>
  229. <el-table-column label="一次剂量" prop="dose">
  230. <template #default="scope"> {{ scope.row.dose }} {{ scope.row.doseUnitName }}</template>
  231. </el-table-column>
  232. <el-table-column label="领量" prop="drugQuan">
  233. <template #default="scope"> {{ scope.row.drugQuan }} {{ scope.row.miniUnitName }}</template>
  234. </el-table-column>
  235. <el-table-column label="给药方式" prop="supplyCodeName"></el-table-column>
  236. <el-table-column label="执行科室" prop="execUnitName"></el-table-column>
  237. <el-table-column label="父医嘱" prop="parentNo"></el-table-column>
  238. <el-table-column label="类型" prop="drugFlag"></el-table-column>
  239. <el-table-column label="费用标志" prop="selfBuy">
  240. <template #default="scope">
  241. {{ getSelfBuy(scope.row.selfBuy) }}
  242. </template>
  243. </el-table-column>
  244. <el-table-column label="医保自费">
  245. <template #default="scope">
  246. <el-tag v-if="scope.row.ybSelfFlag === '1'">是</el-tag>
  247. </template>
  248. </el-table-column>
  249. <el-table-column label="是否紧急">
  250. <template #default="scope">
  251. <el-tag v-if="scope.row.emergencyFlag === '1'">是</el-tag>
  252. </template>
  253. </el-table-column>
  254. <el-table-column fixed="right" label="操作" width="120">
  255. <template #default="scope">
  256. <el-button circle icon="el-icon-edit" type="warning" @click="xiuGaiYiZhu(scope.row)"></el-button>
  257. <el-button circle icon="el-icon-delete" type="danger" @click="shanChuBiaoGeYiZhu(scope.$index)"></el-button>
  258. <el-button circle class="iconfont icon-fuzhi" type="info" @click="dianJiFuZhiYiZhu(scope.row)"></el-button>
  259. </template>
  260. </el-table-column>
  261. </el-table>
  262. <!-- 这里是搜索医嘱的 -->
  263. <sou-suo-yi-zhu v-if="yiZhuMingDialog" @close="yiZhuMingDialog = false"
  264. @xuanZhongFeiYong="xuanZhongFeiYong"></sou-suo-yi-zhu>
  265. <AllergenEntry v-if="allergenDialog" :pat-no="huanZheXinXi.inpatientNo"
  266. @close="allergenDialog = false"></AllergenEntry>
  267. </template>
  268. <script name="TianJiaYiZhu" setup>
  269. import {
  270. huoQuFeiYongXinXi,
  271. huoQuGeiYaoFangShi,
  272. huoQuZhiXinKeShi,
  273. huoQuZhuYuanPinLv,
  274. jiaoYan,
  275. shangChuanYiZhu
  276. } from '@/api/zhu-yuan-yi-sheng/yi-zhu-lu-ru'
  277. import {
  278. cuoWuXinXi,
  279. fuZhiYiZhu,
  280. getSelfBuy,
  281. huanZheXinXi,
  282. youWuXuanZheHuanZhe
  283. } from '@/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng'
  284. import store from '../../../../store'
  285. import {listIsBlank, listNotBlank, stringIsBlank, stringNotBlank} from '@/utils/blank-utils'
  286. import {kangJunYaoWuQieKou, kangJunYaoWuYongYaoFangShi, kangJunYaoWuYongYaoShiJian} from '@/data'
  287. import {ElMessage, ElMessageBox} from 'element-plus'
  288. import {clone} from '@/utils/clone'
  289. import HuoQuMuBan from '../../../../components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/HuoQuMuBan.vue'
  290. import {uuid} from '@/utils/getUuid'
  291. import BaoCunMuBan from '../../../../components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/BaoCunMuBan.vue'
  292. import {getServerDateApi, whetherThePatientHasAllergens, yaoPinShiFouPiPeiYiBao} from '@/api/public-api'
  293. import router from '@/router'
  294. import SouSuoYiZhu from '@/components/zhu-yuan-yi-sheng/yi-zhu-lu-ru/SouSuoYiZhu.vue'
  295. import CuoWuXinXi from '@/components/zhu-yuan-yi-sheng/CuoWuXinXi.vue'
  296. import YaoPingXiangQing from '@/components/zhu-yuan-yi-sheng/he-li-yong-yao/YaoPingXiangQing.vue'
  297. import AllergenEntry from "@/components/zhu-yuan-yi-sheng/AllergenEntry.vue";
  298. import Sleep from "element-plus/packages/test-utils/sleep";
  299. const windowSize = computed(() => {
  300. return store.state.app.windowSize
  301. })
  302. // 设置倒计时
  303. const seconds = ref(600)
  304. // 倒计时提示
  305. const count = ref('')
  306. const yiZhuData = ref({
  307. id: '',
  308. actOrderNo: null,
  309. orderName: '',
  310. orderCode: '',
  311. // 频率
  312. frequCode: '',
  313. frequCodeName: '',
  314. drugSpecification: '',
  315. dose: 0,
  316. // 领量
  317. doseUnit: '',
  318. doseUnitName: '',
  319. supplyCode: '',
  320. supplyCodeName: '',
  321. startTime: '',
  322. endTime: '',
  323. orderTime: '',
  324. doctorName: '',
  325. drugFlag: '',
  326. execUnit: '',
  327. execUnitName: '',
  328. parentNo: '',
  329. parentNoName: '',
  330. physicianName: '',
  331. discription: '',
  332. instruction: null,
  333. kfFlag: null,
  334. selfBuy: null,
  335. ybSelfFlag: '0',
  336. emergencyFlag: '0',
  337. drugQuan: 0,
  338. miniUnitName: '',
  339. serial: '',
  340. miniUnit: '',
  341. psFlag: false,
  342. kjywFlag: 0,
  343. yyfs: null,
  344. ssqk: null,
  345. yysj: null,
  346. })
  347. /*提示信息*/
  348. const tiShiBiaoTi = ref([])
  349. const span = ref(6)
  350. const spanSize = (val) => {
  351. if (val > 1200) {
  352. span.value = 6
  353. } else if (930 < val || val > 1200) {
  354. span.value = 8
  355. } else if (val < 930) {
  356. span.value = 12
  357. }
  358. }
  359. spanSize(windowSize.value.w)
  360. watch(() => windowSize.value, () => {
  361. spanSize(windowSize.value.w)
  362. }
  363. )
  364. // 搜索医嘱
  365. let yiZhuMingDialog = $ref(false)
  366. const xuanZhongFeiYong = async (row) => {
  367. qingKong()
  368. await Sleep(600)
  369. yiZhuMingDialog = false
  370. yiZhuData.value = row
  371. if (row.serial !== '00') {
  372. huoQuFeiYongXinXi(row.orderCode, row.serial)
  373. .then((res) => {
  374. yiZhuData.value.drugFlag = row.orderType
  375. // 判断是否 是皮试的药 如果是就只能有这些 给药方式
  376. if (res.data.psFlag === 1) {
  377. geiYaoFangShiData.value = res.piShi
  378. tiShiBiaoTi.value.push({title: '该药品为皮试药品给药方式只能是皮试类型', type: 'warning'})
  379. yiZhuData.value.psFlag = true
  380. } else {
  381. yiZhuData.value.psFlag = false
  382. }
  383. yiZhuData.value.kjywFlag = res.data.kjywFlag
  384. if (yiZhuData.value.kjywFlag === 1) {
  385. tiShiBiaoTi.value.push({title: '该药品为抗菌药物,请填写抗菌药物医嘱附注信息录入。', type: 'error'})
  386. }
  387. if (res.data.selfFlagYb === 1) {
  388. tiShiBiaoTi.value.push({title: '该药品医保自费药品,如符合条件请填写记账,不是请填写自费。'})
  389. }
  390. yiZhuData.value.miniUnitName = res.data.miniUnitName
  391. yaoPinJiLiangData.value = res.yaoPingJiLiang
  392. // 加载 剂量单位
  393. if (stringNotBlank(yiZhuData.value.doseUnit)) {
  394. yaoPinJiLiangData.value.forEach((item) => {
  395. if (item.code === yiZhuData.value.doseUnit) {
  396. jiLiangValue.value = item.value
  397. }
  398. })
  399. } else if (listNotBlank(yaoPinJiLiangData.value)) {
  400. // 没有剂量单位的时候默认加载第一个计量单位 并且计算
  401. yiZhuData.value.doseUnit = yaoPinJiLiangData.value[0].code
  402. yiZhuData.value.dose = yaoPinJiLiangData.value[0].value
  403. jiLiangValue.value = yaoPinJiLiangData.value[0].value
  404. jiSuanLingLiang(yaoPinJiLiangData.value[0].value)
  405. }
  406. // 加载默认频率 如果已经填写了 就用有的
  407. if (stringIsBlank(row.frequCode)) {
  408. if (stringNotBlank(res.data.frequCode)) {
  409. yiZhuData.value.frequCode = res.data.frequCode
  410. } else {
  411. yiZhuData.value.frequCode = 'ONCE'
  412. }
  413. }
  414. // 加载给药方式
  415. if (stringIsBlank(yiZhuData.value.supplyCode)) {
  416. if (stringNotBlank(res.data.supplyCode)) {
  417. yiZhuData.value.supplyCode = res.data.supplyCode
  418. }
  419. }
  420. })
  421. .catch(async (e) => {
  422. await Sleep(500)
  423. qingKong()
  424. })
  425. } else {
  426. yiZhuData.value.kjywFlag = 0
  427. huoQuFeiYongXinXi(row.orderCode, '00')
  428. .then((res) => {
  429. yiZhuData.value.drugFlag = row.orderType
  430. yiZhuData.value.frequCode = 'ONCE'
  431. if (stringNotBlank(res.paiChiYiZhu)) {
  432. tiShiBiaoTi.value.push({title: res.paiChiYiZhu, type: 'error'})
  433. }
  434. })
  435. .catch((e) => {
  436. setTimeout(() => {
  437. qingKong()
  438. }, 500)
  439. })
  440. }
  441. // 判断这个是不是 新添加的数据 如果是空的就是 新数据
  442. if (stringIsBlank(row.newData)) {
  443. getServerDateApi().then((res) => {
  444. yiZhuData.value.orderTime = res
  445. yiZhuData.value.startTime = res
  446. })
  447. }
  448. // 用来加载默认的执行科室
  449. if (stringIsBlank(row.execUnit)) {
  450. if (stringNotBlank(huanZheXinXi.value.smallDept)) {
  451. yiZhuData.value.execUnit = huanZheXinXi.value.smallDept
  452. }
  453. }
  454. if (stringIsBlank(row.id)) {
  455. yiZhuData.value.id = uuid(8, 10)
  456. }
  457. }
  458. /* 频率 */
  459. const yaoPinPingLvData = ref([])
  460. const pinLvRemoteMethod = (val) => {
  461. huoQuZhuYuanPinLv(val).then((res) => {
  462. yaoPinPingLvData.value = res
  463. })
  464. }
  465. /* 选择剂量 */
  466. const yaoPinJiLiangData = ref([])
  467. const jiLiangValue = ref(0)
  468. const xuanZheJiLiang = (val) => {
  469. jiLiangValue.value = val.value
  470. yiZhuData.value.dose = val.value
  471. yiZhuData.value.drugQuan = 1
  472. }
  473. /*计算领量*/
  474. const jiSuanLingLiang = (val) => {
  475. if (jiLiangValue.value > 0) {
  476. yiZhuData.value.drugQuan = Math.ceil(val / jiLiangValue.value)
  477. }
  478. }
  479. /* 给药方式 */
  480. const geiYaoFangShiData = ref([])
  481. const geiYaoFangShiRemoteMethod = (val) => {
  482. /*如果是皮试的那么就不可以用别的给药方式*/
  483. if (yiZhuData.value.psFlag) return
  484. huoQuGeiYaoFangShi(val).then((res) => {
  485. geiYaoFangShiData.value = res
  486. })
  487. }
  488. /* 父医嘱 */
  489. const fuYiZhuData = ref([])
  490. const fuYiZhuClick = () => {
  491. fuYiZhuData.value = []
  492. yiZhuList.value.forEach((item, index) => {
  493. if (stringNotBlank(item.drugFlag) && item.drugFlag === 'i' && item.id !== yiZhuData.value.id && stringIsBlank(item.parentNo)) {
  494. fuYiZhuData.value.push({code: item.id, name: item.orderName})
  495. }
  496. })
  497. }
  498. /* 获取执行科室 */
  499. const zhiXingKeShiData = ref([])
  500. const metZhiXingKeShi = (val) => {
  501. huoQuZhiXinKeShi(val).then((res) => {
  502. zhiXingKeShiData.value = res
  503. })
  504. }
  505. /* 这里是添加信息 */
  506. const yiZhuList = ref([])
  507. const tianJiaYiZhuWeiYiBiaoShi = ref([])
  508. const tianJiaYiZhu = () => {
  509. if (stringIsBlank(yiZhuData.value.orderCode)) {
  510. return ElMessage.error('请先选择数据')
  511. }
  512. if (stringNotBlank(yiZhuData.value.parentNo)) {
  513. yiZhuData.value.supplyCode = '044'
  514. yiZhuData.value.supplyCodeName = '副药'
  515. }
  516. const list = []
  517. list.push(yiZhuData.value)
  518. let data = {
  519. inpatientNo: huanZheXinXi.value.inpatientNo,
  520. admissTimes: huanZheXinXi.value.admissTimes,
  521. list: list,
  522. }
  523. shangChuanYiZhu(data)
  524. .then((res) => {
  525. let index = tianJiaYiZhuWeiYiBiaoShi.value.indexOf(yiZhuData.value.id)
  526. if (index > -1) {
  527. yiZhuList.value.splice(index, 1)
  528. tianJiaYiZhuWeiYiBiaoShi.value.splice(index, 1)
  529. ElMessage.error('重复添加,老记录已删除。')
  530. }
  531. tianJiaYiZhuWeiYiBiaoShi.value.push(yiZhuData.value.id)
  532. yiZhuList.value.push(clone(yiZhuData.value))
  533. qingKong()
  534. })
  535. .catch((e) => {
  536. cuoWuXinXi.value = e
  537. })
  538. }
  539. /* 这个是点击单个修改的 */
  540. const xiuGaiYiZhu = (val) => {
  541. val.newData = true
  542. xuanZhongFeiYong(val)
  543. ElMessage.success('你点击了修改')
  544. yiZhuList.value.splice(val, 1)
  545. tianJiaYiZhuWeiYiBiaoShi.value.splice(val, 1)
  546. }
  547. /* 删除表格医嘱 */
  548. const shanChuBiaoGeYiZhu = (val) => {
  549. yiZhuList.value.splice(val, 1)
  550. tianJiaYiZhuWeiYiBiaoShi.value.splice(val, 1)
  551. ElMessage.success('删除成功')
  552. }
  553. /* 复制医嘱 */
  554. const dianJiFuZhiYiZhu = (val) => {
  555. yiZhuData.value = clone(val)
  556. yiZhuData.value.id = uuid(8, 10)
  557. ElMessage.success('复制成功')
  558. }
  559. /* 保存信息 */
  560. const baoCunYiZhuClick = () => {
  561. if (listIsBlank(yiZhuList.value)) {
  562. return ElMessage.error('请先选择数据')
  563. }
  564. if (youWuXuanZheHuanZhe()) return
  565. let yiBaoBianMaTiShi = []
  566. yiZhuList.value.forEach((item) => {
  567. yiBaoBianMaTiShi.push(item.orderCode + '-' + item.serial)
  568. })
  569. yaoPinShiFouPiPeiYiBao(yiBaoBianMaTiShi).then((res) => {
  570. if (stringNotBlank(res)) {
  571. cuoWuXinXi.value = res
  572. ElMessageBox.confirm(res, '提示', {
  573. type: 'warning',
  574. dangerouslyUseHTMLString: true,
  575. confirmButtonText: '继续录入',
  576. })
  577. .then((res) => {
  578. baoCunYiZhu()
  579. })
  580. .catch(() => {
  581. })
  582. } else {
  583. baoCunYiZhu()
  584. }
  585. })
  586. }
  587. function baoCunYiZhu() {
  588. let data = {
  589. inpatientNo: huanZheXinXi.value.inpatientNo,
  590. admissTimes: huanZheXinXi.value.admissTimes,
  591. chaRuYiZhu: true,
  592. cfType: '1',
  593. list: yiZhuList.value,
  594. }
  595. // 合理用药校验
  596. jiaoYan(data).then((res) => {
  597. console.log(res)
  598. })
  599. return
  600. ElMessageBox.confirm('您确定要保存这些数据吗?请仔细检查数据。', '提示', {
  601. type: 'warning',
  602. closeOnClickModal: false,
  603. })
  604. .then(() => {
  605. shangChuanYiZhu(data)
  606. .then((res) => {
  607. fuZhiYiZhu.value = []
  608. router.go(-1)
  609. })
  610. .catch((e) => {
  611. cuoWuXinXi.value = e
  612. })
  613. })
  614. .catch(() => {
  615. })
  616. }
  617. /* 这里是抗菌药物,选择了除了 1和 2 的其他都可以不用填写 */
  618. const kangJunYaoYongYaoFangShiGaiBian = (val) => {
  619. if (val !== 1 || val !== 2) {
  620. yiZhuData.value.ssqk = null
  621. yiZhuData.value.yysj = null
  622. }
  623. }
  624. // 模板数据
  625. let muBanDuiHuaKuang = $ref(false)
  626. // 这里是返回的模板数据
  627. const muBanShuJu = (val) => {
  628. let tongZhiCiShu = 0
  629. val.forEach((item) => {
  630. let index = tianJiaYiZhuWeiYiBiaoShi.value.indexOf(item.id)
  631. if (index > -1) {
  632. yiZhuList.value.splice(index, 1)
  633. tianJiaYiZhuWeiYiBiaoShi.value.splice(index, 1)
  634. tongZhi(tongZhiCiShu)
  635. tongZhiCiShu++
  636. }
  637. tianJiaYiZhuWeiYiBiaoShi.value.push(item.id)
  638. yiZhuList.value.push(item)
  639. })
  640. function tongZhi(val) {
  641. if (val === 0) {
  642. setTimeout(() => {
  643. ElMessage.error('重复添加,老记录已删除。')
  644. }, 200)
  645. }
  646. }
  647. ElMessage.success('添加成功。')
  648. }
  649. // 保存模板
  650. const baoCunMuBanRef = ref(null)
  651. const baoCunMuBanClick = () => {
  652. if (listIsBlank(yiZhuList.value)) {
  653. return ElMessage.error('请先选择数据')
  654. }
  655. let data = {
  656. inpatientNo: huanZheXinXi.value.inpatientNo,
  657. admissTimes: huanZheXinXi.value.admissTimes,
  658. list: yiZhuList.value,
  659. }
  660. shangChuanYiZhu(data)
  661. .then((res) => {
  662. baoCunMuBanRef.value.daKaiBaoCunMuBan(yiZhuList.value)
  663. cuoWuXinXi.value = ''
  664. })
  665. .catch((e) => {
  666. cuoWuXinXi.value = e
  667. })
  668. }
  669. // 医嘱限制时间不能在之前
  670. const disabledDate = (time) => {
  671. return time.getTime() < Date.now() - 8.64e7
  672. }
  673. const xuanZhongShuJu = ref([])
  674. const dianJiXuanZhongShuJu = (selection) => {
  675. xuanZhongShuJu.value = selection
  676. }
  677. const dianJiXiuGaiZhiXingKeShi = () => {
  678. if (listIsBlank(xuanZhongShuJu.value)) {
  679. return ElMessage.error('请先选择数据。')
  680. } else {
  681. zhiXingKeShiData.value.forEach((item) => {
  682. if (item.code === yiZhuData.value.execUnit) {
  683. yiZhuData.value.execUnitName = item.name
  684. }
  685. })
  686. xuanZhongShuJu.value.forEach((item) => {
  687. item.execUnit = yiZhuData.value.execUnit
  688. item.execUnitName = yiZhuData.value.execUnitName
  689. })
  690. }
  691. }
  692. const qingKong = () => {
  693. cuoWuXinXi.value = ''
  694. yaoPinJiLiangData.value = []
  695. jiLiangValue.value = 0
  696. tiShiBiaoTi.value = []
  697. yiZhuData.value = {
  698. index: '',
  699. actOrderNo: null,
  700. orderName: '',
  701. orderCode: '',
  702. // 频率
  703. frequCode: '',
  704. frequCodeName: '',
  705. drugSpecification: '',
  706. dose: 0,
  707. // 领量
  708. doseUnit: '',
  709. doseUnitName: '',
  710. supplyCode: '',
  711. supplyCodeName: '',
  712. startTime: '',
  713. endTime: '',
  714. orderTime: '',
  715. doctorName: '',
  716. execUnit: '',
  717. execUnitName: '',
  718. parentNo: '',
  719. parentNoName: '',
  720. physicianName: '',
  721. discription: '',
  722. instruction: null,
  723. kfFlag: null,
  724. selfBuy: null,
  725. ybSelfFlag: '0',
  726. emergencyFlag: '0',
  727. drugQuan: 0,
  728. miniUnitName: '',
  729. serial: '',
  730. miniUnit: '',
  731. psFlag: false,
  732. kjywFlag: 0,
  733. yyfs: null,
  734. ssqk: null,
  735. yysj: null,
  736. }
  737. }
  738. let daoJiShi = null
  739. onMounted(() => {
  740. enableKeyboardMonitoring()
  741. yiZhuList.value = clone(fuZhiYiZhu.value)
  742. for (let i = 0; i < yiZhuList.value.length; i++) {
  743. yiZhuList.value[i].id = yiZhuList.value[i].actOrderNo
  744. }
  745. if (stringIsBlank(huanZheXinXi.value.inpatientNo)) {
  746. ElMessage.warning('您现在进入的是医嘱模板编辑')
  747. } else {
  748. ElMessage.warning('您现在进入的是医嘱编辑模块,' + '您的编辑时间有 10 分钟,你准备好了吗?Are ya ready kids?')
  749. kaiQiDaoJiShi()
  750. whetherThePatientHasAllergens(huanZheXinXi.value.inpatientNo).then((res) => {
  751. allergenDialog = res
  752. })
  753. }
  754. if (stringNotBlank(huanZheXinXi.value.inpatientNo)) {
  755. zhiXingKeShiData.value = [
  756. {
  757. code: huanZheXinXi.value.smallDept,
  758. name: huanZheXinXi.value.smallDeptName,
  759. },
  760. ]
  761. }
  762. fuZhiYiZhu.value = []
  763. })
  764. onUnmounted(() => {
  765. ElMessageBox.close()
  766. clearInterval(daoJiShi)
  767. document.onkeydown = null
  768. })
  769. const enableKeyboardMonitoring = () => {
  770. document.onkeydown = function (e) {
  771. if (event.altKey && event.keyCode === 13) {
  772. event.returnValue = false
  773. tianJiaYiZhu()
  774. }
  775. }
  776. }
  777. // 倒计时功能
  778. const kaiQiDaoJiShi = () => {
  779. seconds.value = 600
  780. clearInterval(daoJiShi)
  781. daoJiShi = setInterval(() => {
  782. seconds.value--
  783. countDown()
  784. }, 1000)
  785. }
  786. const countDown = () => {
  787. let m = parseInt(((seconds.value / 60) % 60).toString())
  788. m = m < 10 ? '0' + m : m
  789. let s = parseInt((seconds.value % 60).toString())
  790. s = s < 10 ? '0' + s : s
  791. count.value = '剩余操作时间 ' + m + '分' + s + '秒'
  792. if (seconds.value === 300) {
  793. ElMessageBox.alert('您的操作时间过半', '提示', {
  794. type: 'warning',
  795. }).then((res) => {
  796. })
  797. } else if (seconds.value === 60 || seconds.value === 30 || seconds.value === 20) {
  798. ElMessage({
  799. message: '剩余操作时间' + seconds.value + '秒',
  800. showClose: true,
  801. type: 'error',
  802. title: '成功',
  803. duration: 4500,
  804. })
  805. } else if (seconds.value === 0) {
  806. clearInterval(daoJiShi)
  807. router.go(-1)
  808. }
  809. }
  810. let HeLiYongYao = $ref({
  811. dialog: false,
  812. code: '',
  813. })
  814. const tiaoZhuanZhiHeLiYongYao = () => {
  815. window.open('http://172.16.32.121:9097/index.html')
  816. }
  817. //// 下面都是过敏源信息
  818. let allergenDialog = $ref(false)
  819. ///// 过敏源结束
  820. </script>
  821. <style scoped>
  822. .el-popover {
  823. height: 240px;
  824. overflow: auto;
  825. }
  826. :deep(.el-textarea.is-disabled .el-textarea__inner) {
  827. color: #0a84fd;
  828. }
  829. </style>