MzRegister.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726
  1. <template>
  2. <el-container>
  3. <el-header style="height: 35px; margin-top: 10px">
  4. <el-input v-model="patientId" style="width: 200px; margin-left: 2px" clearable placeholder="请输入">
  5. <template #prepend>门诊id</template>
  6. </el-input>
  7. <el-select v-model="medType" style="width: 120px">
  8. <el-option v-for="item in medTypes" :key="item.code" :value="item.code" :label="item.name"></el-option>
  9. </el-select>
  10. <el-dropdown trigger="click" @command="receiptsOpts" style="margin-left: 8px">
  11. <el-button type="primary">处方<i class="el-icon-arrow-down el-icon--right"></i> </el-button>
  12. <template #dropdown>
  13. <el-dropdown-menu>
  14. <el-dropdown-item icon="el-icon-document" command="require">获取门诊处方</el-dropdown-item>
  15. <el-dropdown-item icon="el-icon-delete" command="delete">删除所有处方</el-dropdown-item>
  16. </el-dropdown-menu>
  17. </template>
  18. </el-dropdown>
  19. <el-dropdown trigger="click" @command="registor" style="margin-left: 8px">
  20. <el-button type="primary">登记<i class="el-icon-arrow-down el-icon--right"></i> </el-button>
  21. <template #dropdown>
  22. <el-dropdown-menu>
  23. <el-dropdown-item icon="el-icon-bank-card" command="execute">医保登记</el-dropdown-item>
  24. <el-dropdown-item icon="el-icon-refresh-left" command="revoke">取消登记</el-dropdown-item>
  25. </el-dropdown-menu>
  26. </template>
  27. </el-dropdown>
  28. <el-dropdown trigger="click" @command="receiptsOpts" style="margin-left: 8px">
  29. <el-button type="primary">上传<i class="el-icon-arrow-down el-icon--right"></i> </el-button>
  30. <template #dropdown>
  31. <el-dropdown-menu>
  32. <el-dropdown-item icon="el-icon-upload" command="upload">医保处方上传</el-dropdown-item>
  33. <el-dropdown-item icon="el-icon-refresh-left" command="retract">撤销处方上传</el-dropdown-item>
  34. <el-dropdown-item divided icon="el-icon-edit" command="diags">普门诊断补录</el-dropdown-item>
  35. </el-dropdown-menu>
  36. </template>
  37. </el-dropdown>
  38. <el-button type="primary" icon="el-icon-edit-outline" @click="mzPreSetl" style="margin-left: 8px"> 试算 </el-button>
  39. <el-button type="danger" icon="el-icon-refresh" @click="clearinfo" style="margin-left: 8px"> 重置 </el-button>
  40. </el-header>
  41. <el-main>
  42. <el-row :gutter="5">
  43. <el-col :span="2">
  44. <el-table ref="timesTable" :data="data" highlight-current-row :height="tableHeight" @row-click="clickTimes">
  45. <el-table-column label="就诊次数">
  46. <template #default="scope"> 第 {{ scope.row.times }} 次 </template>
  47. </el-table-column>
  48. </el-table>
  49. </el-col>
  50. <el-col :span="5">
  51. <el-table ref="ordersTable" :data="orderNos" highlight-current-row :height="tableHeight" @row-click="clickOrderNo">
  52. <el-table-column label="处方" width="60">
  53. <template #default="scope">
  54. <span v-html="colorStatus(scope.row)"></span>
  55. </template>
  56. </el-table-column>
  57. <el-table-column label="金额" width="60">
  58. <template #default="scope">
  59. {{ scope.row.totalFee.toFixed(2) }}
  60. </template>
  61. </el-table-column>
  62. <el-table-column label="操作">
  63. <template #default="scope">
  64. <el-button type="text" icon="el-icon-check" @click="markMzFees" :disabled="scope.row.status"> 生成 </el-button>
  65. <el-button type="text" icon="el-icon-delete" @click="unmarkMzFees(scope.row)" :disabled="!scope.row.status"> 撤销 </el-button>
  66. </template>
  67. </el-table-column>
  68. </el-table>
  69. </el-col>
  70. <el-col :span="15">
  71. <div style="margin-left: 30px">
  72. <div class="receipt-title">湖南泰和医院处方笺</div>
  73. <el-divider></el-divider>
  74. <div class="receipt-head">
  75. <div>姓名:{{ mzVisit.name }}</div>
  76. <div>性别:{{ mzVisit.sex }}</div>
  77. <div>年龄:{{ mzVisit.age }} 岁</div>
  78. </div>
  79. <div class="receipt-head">
  80. <div>门诊号:{{ mzVisit.patientId }}</div>
  81. <div>科别:{{ mzVisit.visitDeptName }}</div>
  82. <div class="ellipsis-text" :title="mzVisit.icdText">临床诊断:{{ mzVisit.icdText }}</div>
  83. </div>
  84. <div class="receipt-head">
  85. <div>开具日期:{{ mzVisit.opDay }}</div>
  86. <div class="ellipsis-text">
  87. 地址:<span :title="mzVisit.address">{{ mzVisit.address }}</span>
  88. </div>
  89. <div>电话:{{ mzVisit.phoneNo }}</div>
  90. </div>
  91. <el-divider></el-divider>
  92. <div :style="receiptBoxStyle">
  93. <div v-for="(item, index) in currentReceipts" :key="index">
  94. <div class="receipt-item">
  95. <div class="w75">
  96. <el-checkbox v-model="item.checked"></el-checkbox>
  97. {{ index + 1 }}){{ item.drugName }}&nbsp; (
  98. <span v-if="item.specification">{{ item.specification }}</span>
  99. <span v-else>{{ item.drugUnit }}</span>
  100. </div>
  101. <div class="w25">&times;&nbsp;&nbsp;&nbsp;{{ item.quantity }}</div>
  102. </div>
  103. <div class="receipt-tips">
  104. <span v-if="item.drugQuan"> 用法:{{ item.drugQuan }}{{ item.drugUnit }}/次 </span>
  105. <span v-if="item.frequency"> {{ item.frequency }} </span>
  106. <span v-if="item.orderDays"> {{ item.orderDays }}天 </span>
  107. <span v-if="item.supplyCode"> {{ item.supplyCode }} </span>
  108. <span v-if="item.instructionText"> 备注:{{ item.instructionText }} </span>
  109. </div>
  110. <div :style="{ color: item.nationalCode ? 'green' : 'red', fontWeight: 'bold', padding: '0 0 12px 64px' }">医保码:{{ item.nationalCode || '未匹配' }}</div>
  111. </div>
  112. </div>
  113. <el-divider></el-divider>
  114. <div class="receipt-head">
  115. <div style="font-size: 15px">医师:{{ mzVisit.doctorName }} / {{ mzVisit.doctorCode }}</div>
  116. <div style="font-size: 15px">
  117. 总金额:<span style="font-size: 18px; font-weight: bold">¥{{ totalFee }}</span>
  118. </div>
  119. </div>
  120. </div>
  121. </el-col>
  122. </el-row>
  123. </el-main>
  124. <el-dialog title="个人信息" v-model="showInsuinfo" width="65%">
  125. <el-tag>参保信息</el-tag>
  126. <el-table :data="psnBaseinfo.insuinfo" @row-click="handleClickInsuinfo">
  127. <el-table-column property="balc" label="余额"></el-table-column>
  128. <el-table-column label="险种类型" prop="insutypeName"></el-table-column>
  129. <el-table-column label="人员类别" prop="psnTypeName"></el-table-column>
  130. <el-table-column label="参保状态" prop="psnInsuStasName"></el-table-column>
  131. <el-table-column property="psnInsuDate" label="个人参保日期"></el-table-column>
  132. <el-table-column property="pausInsuDate" label="暂停参保日期"></el-table-column>
  133. <el-table-column property="cvlservFlagName" label="公务员标志"></el-table-column>
  134. <el-table-column property="insuplcAdmdvs" label="参保地医保区划"></el-table-column>
  135. <el-table-column property="insuplcAdmdvsName" label="参保地名称"></el-table-column>
  136. <el-table-column property="empName" label="单位名称"></el-table-column>
  137. </el-table>
  138. <div style="height: 16px"></div>
  139. <el-tag>身份信息</el-tag>
  140. <el-table :data="psnBaseinfo.idetinfo" stripe height="180">
  141. <el-table-column label="人员身份类别" prop="psnIdetTypeName"></el-table-column>
  142. <el-table-column label="人员类别等级" prop="psnTypeLv"></el-table-column>
  143. <el-table-column label="备注" prop="memo"></el-table-column>
  144. <el-table-column label="开始时间" prop="begntime"></el-table-column>
  145. <el-table-column label="结束时间" prop="endtime"></el-table-column>
  146. </el-table>
  147. </el-dialog>
  148. <el-dialog title="请选择(慢特病备案信息)" v-model="showSpcChrAccts" width="40%">
  149. <el-table :data="spcChrDiseAccts" @row-click="uploadFees">
  150. <el-table-column property="opspDiseCode" label="病种编码"></el-table-column>
  151. <el-table-column property="opspDiseName" label="病种名称"></el-table-column>
  152. <el-table-column property="begndate" label="生效日期"></el-table-column>
  153. <el-table-column property="enddate" label="失效日期"></el-table-column>
  154. </el-table>
  155. </el-dialog>
  156. <el-dialog title="请选择生育诊断" v-model="showMatnDises" width="60%">
  157. <el-table :data="matnDises" @row-click="uploadFees" stripe height="360">
  158. <el-table-column property="code" label="病种编码"></el-table-column>
  159. <el-table-column property="name" label="病种名称"></el-table-column>
  160. <el-table-column property="insutype" label="险种类型"></el-table-column>
  161. <el-table-column property="limitAmt" label="疾病限额"></el-table-column>
  162. </el-table>
  163. </el-dialog>
  164. <el-dialog title="普门诊断补录" v-model="showInputDiags" width="60%" :close-on-click-modal="false" :close-on-press-escape="false">
  165. <div style="margin-top: -20px; margin-bottom: 16px; background: lightgray; padding: 8px 4px; color: black">临床诊断参考:{{ mzVisit.icdText }}</div>
  166. 检索方法:<el-select v-model="searchMethod" style="width: 80px">
  167. <el-option v-for="item in searchMethods" :key="item.code" :label="item.name" :value="item.code"></el-option> </el-select
  168. >&nbsp;
  169. <el-autocomplete v-model="diagItem.diagName" :fetch-suggestions="searchDiag" placeholder="请输入内容" clearable @select="handleSelectDiag" style="width: 220px">
  170. <template #default="{ item }">
  171. <div style="height: 40px">
  172. <div style="height: 16px; margin-top: 4px; font-size: 12px; color: #8492a6">
  173. {{ item.code }}
  174. </div>
  175. <div style="height: 16px">{{ item.name }}</div>
  176. </div>
  177. </template>
  178. </el-autocomplete>
  179. <el-select v-model="diagItem.diagType" placeholder="诊断类别" style="width: 120px">
  180. <el-option v-for="item in diagTypes" :key="item.code" :label="item.name" :value="item.code"></el-option>
  181. </el-select>
  182. <el-divider direction="vertical"></el-divider>
  183. <el-button type="primary" icon="el-icon-plus" @click="addDiag">添加到诊断列表</el-button>
  184. <el-button type="success" icon="el-icon-check" @click="saveDiag">保存诊断</el-button>
  185. <el-table :data="diags" stripe>
  186. <el-table-column prop="diagSrtNo" label="序号" width="40"></el-table-column>
  187. <el-table-column prop="diagType" label="诊断类别" width="60"></el-table-column>
  188. <el-table-column prop="diagCode" label="诊断编码"></el-table-column>
  189. <el-table-column prop="diagName" label="诊断名称"></el-table-column>
  190. <el-table-column prop="diagDept" label="诊断科室"></el-table-column>
  191. <el-table-column prop="diseDorNo" label="医生编码" width="80"></el-table-column>
  192. <el-table-column prop="diseDorName" label="医生姓名" width="80"></el-table-column>
  193. <el-table-column prop="diagTime" label="诊断时间"></el-table-column>
  194. <el-table-column label="操作">
  195. <template #default="scope">
  196. <el-button icon="el-icon-delete" type="text" @click="deleteDiag(scope.$index)">删除</el-button>
  197. </template>
  198. </el-table-column>
  199. </el-table>
  200. </el-dialog>
  201. </el-container>
  202. </template>
  203. <script>
  204. import { onMounted, reactive, ref } from 'vue'
  205. import {
  206. deleteAllMzReceipts,
  207. deleteMzReceipt,
  208. getMzReceipts,
  209. insertSiMzFees,
  210. outpatientPreSettlement,
  211. outpatientRegistration,
  212. revokeOutpatientFeeDetails,
  213. revokeOutpatientRegistration,
  214. uploadOutpatientFeeDetails,
  215. saveSiMzDiags,
  216. } from '@/api/medical-insurance/si-outpatient'
  217. import { cptInsutype, cptPersType, cptYbState } from '@/utils/computed'
  218. import { ElMessage, ElMessageBox } from 'element-plus'
  219. import store from '@/store'
  220. import { obtainBasicPersonInfo, querySpecialChronicDiseasesAccreditation, queryMzMatnDises } from '@/api/medical-insurance/si-query'
  221. import { getMedTypesByFlag } from '@/api/medical-insurance/si-dict'
  222. import { searchData } from '@/api/yibao/dictionary'
  223. import { clone } from '../../../utils/clone'
  224. export default {
  225. setup() {
  226. const medType = ref(null)
  227. const medTypes = ref([])
  228. const patientId = ref('')
  229. const times = ref(null)
  230. const windowSize = store.state.app.windowSize
  231. const tableHeight = windowSize.h - 45
  232. const receiptBoxStyle = {
  233. height: tableHeight - 200 + 'px',
  234. overflowY: 'auto',
  235. }
  236. const data = ref([])
  237. const showInsuinfo = ref(false)
  238. const psnBaseinfo = ref({})
  239. const mzVisit = ref({})
  240. const receipts = ref({})
  241. const orderNos = ref([])
  242. const currentReceipts = ref([])
  243. const totalFee = ref(null)
  244. const timesTable = ref(null)
  245. const ordersTable = ref(null)
  246. const currentOrder = ref({})
  247. const spcChrDiseAccts = ref([])
  248. const showSpcChrAccts = ref(false)
  249. const matnDises = ref([])
  250. const showMatnDises = ref(false)
  251. const showInputDiags = ref(false)
  252. const searchMethods = [
  253. { code: 'alpha', name: '首拼' },
  254. { code: 'code', name: '编码' },
  255. { code: 'name', name: '名称' },
  256. ]
  257. const searchMethod = ref('alpha')
  258. const diagItem = reactive({})
  259. const searchDiag = (queryString, cb) => {
  260. if (queryString && queryString.length > 1) {
  261. const param = {
  262. method: searchMethod.value,
  263. content: queryString,
  264. target: 'diag',
  265. medType: medType.value,
  266. }
  267. searchData(param).then((res) => {
  268. cb(res)
  269. })
  270. }
  271. }
  272. const handleSelectDiag = (item) => {
  273. diagItem.diagCode = item.code
  274. diagItem.diagName = item.name
  275. }
  276. const diagTypes = [
  277. { code: '1', name: '西医诊断' },
  278. { code: '2', name: '中医主病诊断' },
  279. { code: '3', name: '中医主证诊断' },
  280. ]
  281. const diags = ref([])
  282. const addDiag = () => {
  283. if (!diagItem.diagCode) {
  284. ElMessage({
  285. message: '请选择诊断!',
  286. type: 'warning',
  287. duration: 2500,
  288. showClose: true,
  289. })
  290. return
  291. }
  292. if (!diagItem.diagType) {
  293. ElMessage({
  294. message: '请选择诊断类别!',
  295. type: 'warning',
  296. duration: 2500,
  297. showClose: true,
  298. })
  299. return
  300. }
  301. diagItem.patNo = patientId.value
  302. diagItem.times = times.value
  303. diagItem.diagSrtNo = diags.value.length + 1
  304. diagItem.diagDept = mzVisit.value.visitDeptName
  305. diagItem.diseDorNo = mzVisit.value.doctorCode
  306. diagItem.diseDorName = mzVisit.value.doctorName
  307. diagItem.diagTime = mzVisit.value.opDay
  308. diagItem.valiFlag = '1'
  309. diags.value.push(clone(diagItem))
  310. diagItem.diagCode = ''
  311. diagItem.diagName = ''
  312. diagItem.diagType = ''
  313. }
  314. const deleteDiag = (index) => {
  315. diags.value.splice(index, 1)
  316. for (let i = 0; i < diags.value.length; i++) {
  317. const element = diags.value[i]
  318. element.diagSrtNo = i + 1
  319. }
  320. }
  321. const saveDiag = () => {
  322. if (diags.value.length === 0) {
  323. ElMessage({
  324. message: '没有要保存的诊断!',
  325. type: 'warning',
  326. duration: 2500,
  327. showClose: true,
  328. })
  329. return
  330. }
  331. saveSiMzDiags(diags.value).then((res) => {
  332. ElMessageBox.alert(res, '提示', {
  333. type: 'success',
  334. showCancelButton: false,
  335. }).then(() => {
  336. diags.value = []
  337. showInputDiags.value = false
  338. })
  339. })
  340. }
  341. const nullPatientId = () => {
  342. if (!patientId.value) {
  343. ElMessage({
  344. message: '请输入门诊id号!',
  345. type: 'warning',
  346. duration: 2500,
  347. showClose: true,
  348. })
  349. return true
  350. }
  351. return false
  352. }
  353. const registor = (command) => {
  354. if (nullPatientId()) {
  355. return
  356. }
  357. if (nullTimes()) {
  358. return
  359. }
  360. const param = {
  361. patNo: patientId.value,
  362. medType: medType.value,
  363. times: times.value,
  364. needSaving: 1,
  365. }
  366. if (command === 'execute') {
  367. if (!medType.value) {
  368. ElMessage({
  369. message: '请先选择医疗类别!',
  370. type: 'warning',
  371. duration: 2500,
  372. showClose: true,
  373. })
  374. return
  375. }
  376. obtainBasicPersonInfo(param).then((res) => {
  377. times.value = res.times
  378. psnBaseinfo.value = res
  379. showInsuinfo.value = true
  380. })
  381. } else {
  382. revokeOutpatientRegistration(param).then((res) => {
  383. ElMessage({
  384. message: res,
  385. type: 'success',
  386. duration: 2000,
  387. showClose: true,
  388. })
  389. })
  390. }
  391. }
  392. const nullTimes = () => {
  393. if (!times.value) {
  394. ElMessage({
  395. message: '请先获取门诊处方!',
  396. type: 'warning',
  397. duration: 2500,
  398. showClose: true,
  399. })
  400. return true
  401. }
  402. return false
  403. }
  404. const receiptsOpts = (command) => {
  405. if (nullPatientId()) {
  406. return
  407. }
  408. if (command !== 'require') {
  409. if (nullTimes()) {
  410. return
  411. }
  412. }
  413. const param = {
  414. patNo: patientId.value,
  415. times: times.value,
  416. }
  417. switch (command) {
  418. case 'require':
  419. fetchReceipts(param)
  420. break
  421. case 'delete':
  422. deleteAllMzReceipts(param).then((res) => {
  423. ElMessage({
  424. message: res,
  425. type: 'success',
  426. duration: 2000,
  427. showClose: true,
  428. })
  429. fetchReceipts(param)
  430. })
  431. break
  432. case 'upload':
  433. qrySpcChrDiseAcct(param)
  434. break
  435. case 'retract':
  436. revokeOutpatientFeeDetails(param).then((res) => {
  437. ElMessage({
  438. message: res,
  439. type: 'success',
  440. duration: 2000,
  441. showClose: true,
  442. })
  443. })
  444. break
  445. case 'diags':
  446. showInputDiags.value = true
  447. break
  448. }
  449. }
  450. const fetchReceipts = (param) => {
  451. getMzReceipts(param)
  452. .then((res) => {
  453. console.log(res)
  454. data.value = res
  455. setTimeout(() => {
  456. timesTable.value.setCurrentRow(res[0])
  457. clickTimes(res[0])
  458. }, 100)
  459. })
  460. .catch(() => {
  461. data.value = []
  462. orderNos.value = []
  463. currentReceipts.value = []
  464. })
  465. }
  466. const markMzFees = () => {
  467. if (currentReceipts.value.length === 0) {
  468. ElMessage({
  469. message: '请先选择要保存的处方!',
  470. type: 'warning',
  471. duration: 2500,
  472. showClose: true,
  473. })
  474. return
  475. }
  476. ElMessageBox.confirm('是否将选中处方生成医保处方?', '提示', {
  477. type: 'warning',
  478. confirmButtonText: '生成',
  479. cancelButtonText: '取消',
  480. })
  481. .then(() => {
  482. insertSiMzFees(currentReceipts.value).then(() => {
  483. currentOrder.value.status = true
  484. ElMessage({
  485. message: '已成功生成医保处方。',
  486. type: 'success',
  487. duration: 2500,
  488. showClose: true,
  489. })
  490. })
  491. })
  492. .catch(() => {})
  493. }
  494. const qrySpcChrDiseAcct = (param) => {
  495. if (medType.value === '51') {
  496. queryMzMatnDises().then((res) => {
  497. matnDises.value = res
  498. showMatnDises.value = true
  499. })
  500. } else if (medType.value === '14') {
  501. querySpecialChronicDiseasesAccreditation(param).then((res) => {
  502. spcChrDiseAccts.value = res
  503. showSpcChrAccts.value = true
  504. })
  505. } else {
  506. uploadFees(param)
  507. }
  508. }
  509. const uploadFees = (row) => {
  510. if (medType.value === '51') {
  511. row.patNo = patientId.value
  512. row.times = times.value
  513. row.opspDiseCode = row.code
  514. row.opspDiseName = row.name
  515. }
  516. uploadOutpatientFeeDetails(row).then((res) => {
  517. times.value = res.times
  518. showSpcChrAccts.value = false
  519. showMatnDises.value = false
  520. mzPreSetl()
  521. })
  522. }
  523. const handleClickInsuinfo = (row) => {
  524. const param = {
  525. patNo: patientId.value,
  526. times: times.value,
  527. insutype: row.insutype,
  528. psnType: row.psnType,
  529. insuplcAdmdvs: row.insuplcAdmdvs,
  530. empName: row.empName,
  531. }
  532. outpatientRegistration(param).then((res) => {
  533. showInsuinfo.value = false
  534. ElMessage({
  535. message: res,
  536. type: 'success',
  537. duration: 2000,
  538. showClose: true,
  539. })
  540. })
  541. }
  542. const clickOrderNo = (row) => {
  543. currentOrder.value = row
  544. currentReceipts.value = receipts.value[row.orderNo]
  545. totalFee.value = row.totalFee.toFixed(2)
  546. }
  547. const clickTimes = (row) => {
  548. mzVisit.value = row.mzVisit
  549. receipts.value = row.mzReceipts
  550. orderNos.value = row.orderNos
  551. times.value = row.times
  552. currentReceipts.value = []
  553. setTimeout(() => {
  554. ordersTable.value.setCurrentRow(orderNos.value[0])
  555. clickOrderNo(orderNos.value[0])
  556. }, 100)
  557. }
  558. const colorStatus = (row) => {
  559. return row.status ? `<span style="color: green">第${row.orderNo}张</span>` : `<span style="color: red">第${row.orderNo}张</span>`
  560. }
  561. const unmarkMzFees = (row) => {
  562. ElMessageBox.confirm('是否将选中处方从医保处方中删除?', '提示', {
  563. type: 'warning',
  564. confirmButtonText: '确定',
  565. cancelButtonText: '取消',
  566. })
  567. .then(() => {
  568. deleteMzReceipt(row).then(() => {
  569. currentOrder.value.status = false
  570. ElMessage({
  571. message: '已成功删除医保处方。',
  572. type: 'success',
  573. duration: 2500,
  574. showClose: true,
  575. })
  576. })
  577. })
  578. .catch(() => {})
  579. }
  580. const mzPreSetl = () => {
  581. const param = {
  582. staffId: store.state.user.info.code,
  583. patNo: patientId.value,
  584. times: times.value,
  585. }
  586. outpatientPreSettlement(param).then((res) => {
  587. const message = '医保处方总费用:' + res.totalCost + ',医保报销金额:' + res.fundPay + '。'
  588. ElMessageBox.alert(message, '试算成功', {
  589. type: 'success',
  590. showCancelButton: false,
  591. }).then(() => {})
  592. })
  593. }
  594. const clearinfo = () => {
  595. patientId.value = ''
  596. times.value = null
  597. data.value = []
  598. psnBaseinfo.value = {}
  599. mzVisit.value = {}
  600. receipts.value = {}
  601. orderNos.value = []
  602. currentReceipts.value = []
  603. totalFee.value = null
  604. timesTable.value = null
  605. ordersTable.value = null
  606. currentOrder.value = {}
  607. spcChrDiseAccts.value = []
  608. }
  609. onMounted(() => {
  610. getMedTypesByFlag('clinic').then((res) => {
  611. medTypes.value = res
  612. })
  613. })
  614. return {
  615. medType,
  616. medTypes,
  617. patientId,
  618. cptYbState,
  619. cptInsutype,
  620. cptPersType,
  621. receiptBoxStyle,
  622. tableHeight,
  623. showInsuinfo,
  624. psnBaseinfo,
  625. mzVisit,
  626. receipts,
  627. orderNos,
  628. currentReceipts,
  629. totalFee,
  630. ordersTable,
  631. timesTable,
  632. data,
  633. spcChrDiseAccts,
  634. showSpcChrAccts,
  635. matnDises,
  636. showMatnDises,
  637. showInputDiags,
  638. searchMethod,
  639. searchMethods,
  640. diagTypes,
  641. diagItem,
  642. diags,
  643. addDiag,
  644. deleteDiag,
  645. saveDiag,
  646. searchDiag,
  647. handleSelectDiag,
  648. mzPreSetl,
  649. clickTimes,
  650. colorStatus,
  651. clickOrderNo,
  652. handleClickInsuinfo,
  653. uploadFees,
  654. clearinfo,
  655. markMzFees,
  656. unmarkMzFees,
  657. registor,
  658. receiptsOpts,
  659. }
  660. },
  661. }
  662. </script>
  663. <style scoped>
  664. .receipt-title {
  665. width: 100%;
  666. text-align: center;
  667. font-weight: bold;
  668. font-size: 20px;
  669. height: 32px;
  670. line-height: 32px;
  671. }
  672. .receipt-head {
  673. display: flex;
  674. height: 22px;
  675. line-height: 22px;
  676. }
  677. .receipt-head > div {
  678. width: 33%;
  679. padding-right: 20px;
  680. }
  681. .receipt-item {
  682. display: flex;
  683. }
  684. .receipt-tips {
  685. margin: 0 0 0 64px;
  686. }
  687. .receipt-tips > span {
  688. margin-right: 15px;
  689. }
  690. .w75 {
  691. width: 70%;
  692. font-size: 15px;
  693. }
  694. .w75 * {
  695. font-size: 15px;
  696. }
  697. .w25 {
  698. width: 25%;
  699. font-size: 15px;
  700. color: #0f5e0f;
  701. font-weight: bold;
  702. }
  703. </style>