TianJiaJianChaJianYan.vue 13 KB

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