TianJiaJianChaJianYan.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. <template>
  2. <el-container>
  3. <el-aside>
  4. <el-radio-group v-model="chaZhaoLeiXing" @change="dianJiLeiXingChaXun">
  5. <el-radio-button :label="1">新申请</el-radio-button>
  6. <el-radio-button :label="2">个人模板</el-radio-button>
  7. <el-radio-button :label="3">科室模板</el-radio-button>
  8. </el-radio-group>
  9. <el-table :data="jianChaFenLeiShuJu.data"
  10. :height="windowSize.h / 1.4"
  11. highlight-current-row stripe>
  12. <el-table-column label="名称" prop="name">
  13. <template #default="{row}">
  14. <el-popover trigger="click" :width="0" placement="right">
  15. <template #reference>
  16. <el-button @click="clickToViewData(row)">{{ row.name }}</el-button>
  17. </template>
  18. <template #default>
  19. <el-button @click="dianJiQueRenXuanZhong">确定</el-button>
  20. <el-button @click="okAndEdit">确定并编辑</el-button>
  21. <xc-table :local-data="detailsOfNewInspectionItems"
  22. :height="400"
  23. @selection-change="xuanZhong"
  24. :open-paging="false">
  25. <el-table-column type="index"></el-table-column>
  26. <el-table-column type="selection"></el-table-column>
  27. <el-table-column label="项目名称" prop="orderName" width="220"></el-table-column>
  28. <el-table-column label="说明" prop="ybComment"></el-table-column>
  29. </xc-table>
  30. </template>
  31. </el-popover>
  32. </template>
  33. </el-table-column>
  34. <el-table-column label="操作">
  35. <template #default="scope">
  36. <el-button v-if="chaZhaoLeiXing !== 1" type="danger"
  37. @click.stop="clickDeleteTemplate( scope.row,scope.$index)">删除
  38. </el-button>
  39. </template>
  40. </el-table-column>
  41. </el-table>
  42. <el-pagination
  43. :current-page="jianChaFenLeiShuJu.currentPage"
  44. :page-size="20"
  45. :pager-count="5"
  46. :total="jianChaFenLeiShuJu.total"
  47. layout="prev,pager,next,total"
  48. small
  49. @current-change="jianChaFenLeiFenYe"/>
  50. </el-aside>
  51. <el-main>
  52. <el-button @click="dianJiBaoCunShenQing">保存</el-button>
  53. <el-button @click="clickSaveTemplate">存为模板</el-button>
  54. <cuo-wu-xin-xi/>
  55. <!-- 这里是检查的数据信息 -->
  56. <el-table :data="xuanZhongJianCha.data"
  57. :header-cell-class-name="starAdd"
  58. :height="windowSize.h / 1.4">
  59. <el-table-column label="编辑" width="120" fixed="left">
  60. <template #default="scope">
  61. <el-button icon="Edit" round type="primary" @click="dianJiBianJi(scope.row, scope.$index)"></el-button>
  62. <el-button icon="Delete" round type="danger" @click="deleteInspectionCheck(scope.$index)"></el-button>
  63. </template>
  64. </el-table-column>
  65. <el-table-column label="项目编码" prop="orderCode"></el-table-column>
  66. <el-table-column label="项目名称" prop="orderName" show-overflow-tooltip></el-table-column>
  67. <el-table-column label="检查时间" prop="startTime" show-overflow-tooltip></el-table-column>
  68. <el-table-column label="执行科室" prop="execDeptName"></el-table-column>
  69. <el-table-column label="急诊标识">
  70. <template #default="scope">
  71. <span v-if="scope.row.jzFlag === 1">√</span>
  72. </template>
  73. </el-table-column>
  74. <el-table-column label="自费">
  75. <template #default="scope">
  76. <span v-if="scope.row.ybSelfFlag === 1">√</span>
  77. </template>
  78. </el-table-column>
  79. <el-table-column v-if="!jianCha" label="标本" prop="inspectStuffName" show-overflow-tooltip></el-table-column>
  80. <el-table-column :label="jianCha ? '病室摘要' : '申请说明'" prop="reqComment"
  81. show-overflow-tooltip></el-table-column>
  82. <el-table-column v-if="jianCha" label="体征信息" prop="reqTzComment" show-overflow-tooltip></el-table-column>
  83. <el-table-column v-if="jianCha" label="辅检结果" prop="reqOtherResult" show-overflow-tooltip></el-table-column>
  84. <el-table-column v-if="jianCha" label="临床诊断" prop="diagText" show-overflow-tooltip></el-table-column>
  85. </el-table>
  86. </el-main>
  87. </el-container>
  88. <el-dialog v-model="baoCunMuBan.dialog" center title="保存检查模板" width="30%">
  89. <el-form ref="baoCunMuBanRef" :model="baoCunMuBan" :rules="baoCunMuBanJiaoYan" label-width="80px">
  90. <el-row>
  91. <el-col :span="24">
  92. <el-form-item label="模板类型" prop="orderType">
  93. <el-radio-group v-model="baoCunMuBan.orderType">
  94. <el-radio-button :label="1">个人</el-radio-button>
  95. <el-radio-button :label="2">科室</el-radio-button>
  96. </el-radio-group>
  97. </el-form-item>
  98. </el-col>
  99. <el-col :span="24">
  100. <el-form-item label="名称" prop="tcName">
  101. <el-input v-model="baoCunMuBan.tcName" ref="tcNameRef" clearable></el-input>
  102. </el-form-item>
  103. </el-col>
  104. <el-col :span="24">
  105. <el-form-item label="排序码" prop="sortNo">
  106. <el-input-number v-model="baoCunMuBan.sortNo" :max="9999" :min="0"></el-input-number>
  107. </el-form-item>
  108. </el-col>
  109. <el-col :span="24">
  110. <el-form-item label="录入方式" prop="tcFlag">
  111. <el-radio-group v-model="baoCunMuBan.tcFlag">
  112. <el-radio-button :label="0">自动选择</el-radio-button>
  113. <el-radio-button :label="1">手工录入</el-radio-button>
  114. </el-radio-group>
  115. </el-form-item>
  116. </el-col>
  117. <el-col :span="24">
  118. <el-button @click="dianJiBaoCunMuBan(baoCunMuBanRef)">提交</el-button>
  119. <el-button>关闭</el-button>
  120. </el-col>
  121. </el-row>
  122. </el-form>
  123. </el-dialog>
  124. <bian-ji-jian-cha-shen-qing ref="bianJiRef"
  125. :jian-cha="jianCha"
  126. @fanYe="bianJiFanYe"/>
  127. </template>
  128. <script setup name="TianJiaJianChaJianYan">
  129. import {computed, onMounted, ref} from 'vue'
  130. import {
  131. baoCunJianChaJianYanMuBan,
  132. baoCunJianYanJianCha,
  133. chaKanFenLeiXiangQing,
  134. jianChaJianYanFenLei,
  135. jianChaJianYanMuBanMing,
  136. shanShuJianChaMuBan,
  137. } from '@/api/zhu-yuan-yi-sheng/jian-yan-jian-cha-shen-qing'
  138. import store from '@/store'
  139. import {clone} from '@/utils/clone'
  140. import {ElMessage, ElMessageBox} from 'element-plus'
  141. import {listNotBlank, stringNotBlank} from '@/utils/blank-utils'
  142. import BianJiJianChaShenQing
  143. from '@/views/hospitalization/zhu-yuan-yi-sheng/jian-cha-jian-yan-shen-qing/BianJiJianChaJianYanShenQing.vue'
  144. import {
  145. cuoWuXinXi,
  146. huanZheXinXi,
  147. youWuXuanZheHuanZhe,
  148. xuanZhongJianCha
  149. } from '@/views/hospitalization/zhu-yuan-yi-sheng/public-js/zhu-yuan-yi-sheng'
  150. import {yaoPinXiangMuPiPeiYiBao} from '@/api/public-api'
  151. import CuoWuXinXi from '@/components/zhu-yuan-yi-sheng/CuoWuXinXi.vue'
  152. import Sleep from '@/utils/sleep'
  153. import XcTable from "@/components/xiao-chan/xc-table/XcTable.vue";
  154. import {BizException, ExceptionEnum} from "@/utils/BizException";
  155. const props = defineProps({
  156. jianCha: {
  157. type: Boolean,
  158. default: true,
  159. },
  160. })
  161. const chaZhaoLeiXing = ref(1)
  162. const windowSize = computed(() => {
  163. return store.state.app.windowSize
  164. })
  165. const detailsOfNewInspectionItems = ref([])
  166. const jianChaFenLeiShuJu = ref({
  167. currentPage: 1,
  168. total: 0,
  169. data: [],
  170. })
  171. const bianJiRef = ref(null)
  172. const baoCunMuBanRef = ref()
  173. const tcNameRef = $ref(null)
  174. const baoCunMuBan = ref({
  175. dialog: false,
  176. tcName: '',
  177. orderType: 1,
  178. sortNo: 0,
  179. tcFlag: 1,
  180. fuGaiYuanShuJu: false,
  181. chongFuMing: false,
  182. })
  183. const dianJiLeiXingChaXun = () => {
  184. jianChaFenLeiShuJu.value.total = 0
  185. jianChaFenLeiShuJu.value.currentPage = 1
  186. jianChaJianYanFenLei(0, 1, chaZhaoLeiXing.value, props.jianCha).then((res) => {
  187. jianChaFenLeiShuJu.value.data = res.records
  188. jianChaFenLeiShuJu.value.total = res.total
  189. })
  190. }
  191. const jianChaFenLeiFenYe = (val) => {
  192. jianChaFenLeiShuJu.value.currentPage = val
  193. jianChaJianYanFenLei(jianChaFenLeiShuJu.value.total, val, chaZhaoLeiXing.value, props.jianCha).then((res) => {
  194. jianChaFenLeiShuJu.value.data = res.records
  195. })
  196. }
  197. const xuanZhong = (val) => {
  198. xuanZhongJianCha.value.daiXuanZhong = val
  199. }
  200. const okAndEdit = () => {
  201. dianJiQueRenXuanZhong()
  202. dianJiBianJi(xuanZhongJianCha.value.data[0], 0)
  203. }
  204. const dianJiQueRenXuanZhong = () => {
  205. if (xuanZhongJianCha.value.daiXuanZhong.length === 0) {
  206. BizException(ExceptionEnum.MESSAGE_ERROR, "请先选中数据")
  207. }
  208. let tiShi = false;
  209. xuanZhongJianCha.value.daiXuanZhong.forEach((item) => {
  210. if (xuanZhongJianCha.value.weiBianMa.indexOf(item.orderCode) > -1) {
  211. tiShi = true
  212. } else {
  213. xuanZhongJianCha.value.data.push(clone(item))
  214. xuanZhongJianCha.value.weiBianMa.push(clone(item.orderCode))
  215. console.log(xuanZhongJianCha.value.data)
  216. }
  217. })
  218. if (tiShi) {
  219. ElMessage.error('请勿重复添加。')
  220. }
  221. }
  222. const dianJiBianJi = (row, index) => {
  223. bianJiRef.value.daKaiBenDuiHua(row, index, xuanZhongJianCha.value.data.length)
  224. }
  225. const dianJiBaoCunShenQing = () => {
  226. if (xuanZhongJianCha.value.data.length < 0) {
  227. ElMessage.error('请选择数据')
  228. return
  229. }
  230. if (youWuXuanZheHuanZhe()) {
  231. clickSaveTemplate()
  232. return
  233. }
  234. let listCode = []
  235. xuanZhongJianCha.value.data.forEach((item) => {
  236. listCode.push(item.orderCode + '-00')
  237. })
  238. yaoPinXiangMuPiPeiYiBao(listCode).then((res) => {
  239. if (stringNotBlank(res)) {
  240. cuoWuXinXi.value = res
  241. ElMessageBox.confirm(res, '提示', {
  242. type: 'warning',
  243. dangerouslyUseHTMLString: true,
  244. }).then(() => {
  245. baoCunShuJu()
  246. }).catch(() => {
  247. })
  248. } else {
  249. baoCunShuJu()
  250. }
  251. })
  252. }
  253. function baoCunShuJu() {
  254. ElMessageBox.confirm('确定要保存这些数据吗?', '提示', {
  255. type: 'warning',
  256. }).then(() => {
  257. let data = huanZheXinXi.value
  258. data.list = xuanZhongJianCha.value.data
  259. data.reqType = props.jianCha ? 3 : 2
  260. baoCunJianYanJianCha(data)
  261. .then((res) => {
  262. xuanZhongJianCha.value.weiBianMa = []
  263. xuanZhongJianCha.value.data = []
  264. })
  265. .catch((e) => {
  266. cuoWuXinXi.value = e
  267. })
  268. }).catch(() => {
  269. })
  270. }
  271. const clickToViewData = ({code, bwCode}) => {
  272. if (!props.jianCha) {
  273. bwCode = ''
  274. }
  275. chaKanFenLeiXiangQing(code, chaZhaoLeiXing.value === 1 ? bwCode : 'mb', props.jianCha).then((res) => {
  276. if (listNotBlank(res)) {
  277. detailsOfNewInspectionItems.value = res
  278. } else {
  279. ElMessage.error('没有找到对应的数据')
  280. }
  281. })
  282. }
  283. const clickDeleteTemplate = ({code}, index) => {
  284. ElMessageBox.confirm('是否要删除该检查模板', '提示', {
  285. type: 'warning',
  286. })
  287. .then(() => {
  288. shanShuJianChaMuBan(code, store.state.user.info.deptCode).then(() => {
  289. jianChaFenLeiShuJu.value.data.splice(index, 1)
  290. })
  291. })
  292. .catch(() => {
  293. })
  294. }
  295. const baoCunMuBanJiaoYan = ref({
  296. tcName: [
  297. {required: true, message: '名称不能为空', trigger: 'blur'},
  298. {min: 1, max: 30, message: '长度在 1 到 30 个字', trigger: 'blur'},
  299. ],
  300. orderType: [{required: true, message: '名称不能为空', trigger: 'blur'}],
  301. sortNo: [{required: true, message: '名称不能为空', trigger: 'blur'}],
  302. tcFlag: [{required: true, message: '名称不能为空', trigger: 'blur'}],
  303. })
  304. const dianJiBaoCunMuBan = async (form) => {
  305. if (!form) return
  306. try {
  307. await form.validate()
  308. jianChaJianYanMuBanMing(baoCunMuBan.value.tcName, props.jianCha ? '3' : '2').then((res) => {
  309. if (res) {
  310. ElMessageBox.confirm('已经存在相同的模板名称,是否覆盖数据', '温馨提示', {
  311. type: 'warning',
  312. distinguishCancelAndClose: true,
  313. confirmButtonText: '覆盖',
  314. cancelButtonText: '取消',
  315. })
  316. .then(() => {
  317. faSongBaoCunMuBan()
  318. })
  319. .catch((e) => {
  320. })
  321. } else {
  322. faSongBaoCunMuBan()
  323. }
  324. })
  325. } catch (e) {
  326. console.log(e)
  327. }
  328. }
  329. const faSongBaoCunMuBan = () => {
  330. baoCunMuBan.value.reqType = props.jianCha ? 3 : 2
  331. baoCunMuBan.value.list = xuanZhongJianCha.value.data
  332. baoCunMuBan.value.tcExec = store.state.user.info.deptCode
  333. baoCunJianChaJianYanMuBan(baoCunMuBan.value).then((res) => {
  334. dianJiLeiXingChaXun()
  335. baoCunMuBan.value.dialog = false
  336. })
  337. }
  338. const bianJiFanYe = (val) => {
  339. let index = val.val - 1
  340. bianJiRef.value.daKaiBenDuiHua(xuanZhongJianCha.value.data[index], index, xuanZhongJianCha.value.data.length)
  341. }
  342. const clickSaveTemplate = async () => {
  343. if (xuanZhongJianCha.value.data.length > 0) {
  344. baoCunMuBan.value.dialog = true
  345. await Sleep(200)
  346. tcNameRef.focus()
  347. } else {
  348. ElMessage.error('请选择数据')
  349. }
  350. }
  351. const starAdd = (obj) => {
  352. let index = [0, 1, 2, 3, 6, 7, 8, 9]
  353. if (index.indexOf(obj.columnIndex) > -1) {
  354. return 'star'
  355. }
  356. }
  357. const deleteInspectionCheck = (index) => {
  358. xuanZhongJianCha.value.data.splice(index, 1)
  359. xuanZhongJianCha.value.weiBianMa.splice(index, 1)
  360. }
  361. onMounted(() => {
  362. dianJiLeiXingChaXun()
  363. })
  364. </script>
  365. <style scoped>
  366. :deep(.el-table .children-row) {
  367. background: rgba(145, 247, 145, 0.5);
  368. }
  369. :deep(.el-table) {
  370. --el-table-row-hover-background-color: #85dbfd7a;
  371. }
  372. </style>