SetSheetUpload.vue 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994
  1. <template>
  2. <page-layer>
  3. <template #header>
  4. <el-button icon="Search" type="primary" @click="queryTermDialog = true">检索条件</el-button>
  5. <el-divider direction="vertical"></el-divider>
  6. <el-button v-if="auditQuanXian()" :disabled="queryTerm.list.length === 0" icon="Upload" type="success"
  7. @click="upldAllList"> 选中上传
  8. </el-button>
  9. <el-button v-if="auditQuanXian()" :disabled="queryTerm.list.length === 0" icon="Upload" type="warning"
  10. @click="upldSelections"> 全部上传
  11. </el-button>
  12. <el-button v-if="auditQuanXian()" :disabled="queryTerm.list.length === 0" icon="Download" type="success"
  13. @click="exportExcel">导出 Execl
  14. </el-button>
  15. <el-button icon="RefreshLeft" type="primary" @click="queryCurrentPage">刷新数据</el-button>
  16. <el-button v-if="auditQuanXian()" type="success" @click="xianZhiShiJianClick">设置限制时间</el-button>
  17. <el-button type="success" @click="toUploadInfo">上传日志</el-button>
  18. <el-button type="success" @click="toUploadDrgGroupInfo">分组信息</el-button>
  19. <el-button type="success" v-if="bmyQuaXian()" @click="openSetlDeptConfGialog">科室配置</el-button>
  20. <el-button type="success" v-if="shenHeQuanXian()" @click="auditLogDel">删除审核记录</el-button>
  21. <xian-zhi-shi-jian ref="xianZhiShiJian"></xian-zhi-shi-jian>
  22. </template>
  23. <template #main>
  24. <el-table ref="tableRef" :data="queryTerm.list" :height="store.state.app.windowSize.h - 55" border
  25. highlight-current-row stripe @selection-change="handleSelectionChange">
  26. <el-table-column fixed type="selection" width="35"></el-table-column>
  27. <el-table-column fixed label="姓名" prop="psnName">
  28. <template #default="scope">
  29. <el-button text @click="jieSuanDanXinXi(scope.row)" type="primary">
  30. <span v-html="auditName(scope.row)"></span>
  31. </el-button>
  32. </template>
  33. </el-table-column>
  34. <el-table-column fixed label="审核状态" prop="auditFlagName">
  35. </el-table-column>
  36. <el-table-column fixed label="质控提醒" prop="qualityReminder" width="100">
  37. <template #default="scope">
  38. <span style="color: red">{{scope.row.qualityReminder}}</span>
  39. </template>
  40. </el-table-column>
  41. <el-table-column fixed label="已上传能修改提醒" prop="uploadUpdateReminder" width="110">
  42. <template #default="scope">
  43. <span style="color: red">{{scope.row.uploadUpdateReminder}}</span>
  44. </template>
  45. </el-table-column>
  46. <el-table-column fixed label="上传截止日期" prop="uploadCutoffDate" width="100">
  47. <template #default="scope">
  48. <span style="color: red">{{scope.row.uploadCutoffDate}}</span>
  49. </template>
  50. </el-table-column>
  51. <el-table-column fixed label="上传状态" prop="uploadStatus"></el-table-column>
  52. <el-table-column label="出院科室" prop="outDeptName">
  53. <template #default="scope">
  54. <el-button
  55. type="primary"
  56. v-if="scope.row.outDept === dept || auditQuanXian"
  57. text
  58. @click="huoQuXiuGaiYiShen(scope.row.referPhysician, scope.row.referPhysicianName, scope.row.patNo, scope.row.times)"
  59. >
  60. {{ scope.row.outDeptName }}
  61. </el-button>
  62. <span v-else>{{ scope.row.outDeptName }}</span>
  63. </template>
  64. </el-table-column>
  65. <el-table-column label="住院号/门诊号" prop="patNo" width="100"></el-table-column>
  66. <el-table-column label="结算时间" prop="setlTime"></el-table-column>
  67. <el-table-column label="出院时间" prop="disDate"></el-table-column>
  68. <el-table-column label="管床医生" prop="referPhysicianName"></el-table-column>
  69. <el-table-column v-if="bmyQuaXian()" label="编码员备注" prop="bmyBz" width="150">
  70. <template #default="scope">
  71. <el-button
  72. type="primary"
  73. text
  74. @click="bianJiBmyBz(scope.row)"
  75. >
  76. {{ scope.row.bmyBz?scope.row.bmyBz: '无'}}
  77. </el-button>
  78. </template>
  79. </el-table-column>
  80. <el-table-column label="医疗类别" prop="iptMedType">
  81. <template #default="scope">
  82. <el-button text type="primary" @click="clickToModifyMedicalCategory(scope.row)">
  83. {{ getIptMedName(scope.row.iptMedType) }}
  84. </el-button>
  85. </template>
  86. </el-table-column>
  87. <el-table-column label="治疗方式" prop="operationName"></el-table-column>
  88. <el-table-column label="总费用" prop="medfeeSumamt"></el-table-column>
  89. <el-table-column label="报销金额" prop="fundPaySumamt"></el-table-column>
  90. <el-table-column label="险种类型" prop="insutypeName"></el-table-column>
  91. <el-table-column label="人员类别" prop="psnTypeName"></el-table-column>
  92. <el-table-column label="性别" prop="gendName" width="40"></el-table-column>
  93. <el-table-column label="住院天数" prop="actIptDays"></el-table-column>
  94. <el-table-column label="医疗类别" prop="medTypeName"></el-table-column>
  95. <el-table-column label="清算机构" prop="clrOptinsName"></el-table-column>
  96. <el-table-column label="参保地" prop="insuplcAdmdvsName"></el-table-column>
  97. <el-table-column label="转科室" prop="zhuanKeName"></el-table-column>
  98. <el-table-column label="申请备注" prop="reqRemark"></el-table-column>
  99. <el-table-column v-if="auditQuanXian()" label="结算单" fixed="right" align="center" width="140">
  100. <template #default="scope">
  101. <el-button plain size="small" @click="jieSuanDanClick(scope.row)">查看结算单</el-button>
  102. <el-button plain size="small" @click="getUploadInfo(scope.row)">查看上传信息</el-button>
  103. <el-button plain size="small" @click="getdrgGroupResultInfo(scope.row)">查看分组信息</el-button>
  104. </template>
  105. </el-table-column>
  106. </el-table>
  107. <jie-suan-dan-da-ying v-if="daYingJieSuanDanRef.dialog" :data="daYingJieSuanDanRef"
  108. @close="daYingJieSuanDanRef.dialog = false"></jie-suan-dan-da-ying>
  109. <el-pagination
  110. :current-page="queryTerm.currentPage"
  111. :page-size="queryTerm.pageSize"
  112. :page-sizes="[10, 20, 30, 40, 50, 100]"
  113. :total="queryTerm.total"
  114. layout="total, sizes, prev, pager, next, jumper"
  115. @size-change="handleSizeChange"
  116. @current-change="handleCurrentChange"
  117. >
  118. </el-pagination>
  119. <el-dialog v-model="queryTermDialog" title="数据筛选" width="60%">
  120. <el-form ref="queryTermRef" :model="queryTerm" label-width="120px" size="small">
  121. <el-row>
  122. <el-col :span="spanWidth">
  123. <el-form-item label="日期范围" prop="dateRange">
  124. <el-date-picker
  125. v-model="queryTerm.dateRange"
  126. :shortcuts="clockinShortcuts"
  127. end-placeholder="结束日期"
  128. placeholder="选择日期"
  129. range-separator="至"
  130. size="small"
  131. start-placeholder="开始日期"
  132. type="daterange"
  133. ></el-date-picker>
  134. </el-form-item>
  135. </el-col>
  136. <el-col :span="spanWidth">
  137. <el-form-item label="结算类型" prop="clrType">
  138. <el-select v-model="queryTerm.clrType" placeholder="结算类别" style="width: 100px">
  139. <el-option v-for="item in clrTypes" :key="item.code" :label="item.name" :value="item.code">
  140. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  141. <el-divider direction="vertical"></el-divider>
  142. <span>{{ item.name }}</span>
  143. </el-option>
  144. </el-select>
  145. </el-form-item>
  146. </el-col>
  147. <el-col :span="spanWidth">
  148. <el-form-item label="住院号" prop="patNo">
  149. <el-input v-model="queryTerm.patNo" clearable placeholder="住院号" style="width: 120px"
  150. @blur="patNo = $event.target.value.trim()" @keyup.enter="query"></el-input>
  151. </el-form-item>
  152. </el-col>
  153. <el-col :span="spanWidth">
  154. <el-form-item label="住院次数" prop="times">
  155. <el-input v-model="queryTerm.times" clearable placeholder="住院次数" style="width: 120px"
  156. @blur="times = $event.target.value.trim()" @keyup.enter="query"></el-input>
  157. </el-form-item>
  158. </el-col>
  159. <el-col :span="spanWidth">
  160. <el-form-item label="出院科室" prop="disDept">
  161. <el-select v-model="queryTerm.outDept" :collapse-tags="true" clearable filterable multiple
  162. placeholder="出院科室">
  163. <el-option v-for="item in disDepts" :key="item.code" :label="item.name" :value="item.code">
  164. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  165. <el-divider direction="vertical"></el-divider>
  166. <span>{{ item.name }}</span>
  167. </el-option>
  168. </el-select>
  169. </el-form-item>
  170. </el-col>
  171. <el-col :span="spanWidth">
  172. <el-form-item label="医疗类别" prop="medType">
  173. <el-select v-model="queryTerm.medType" :collapse-tags="true" clearable filterable multiple
  174. placeholder="医疗类别">
  175. <el-option v-for="item in medTypes" :key="item.code" :label="item.name" :value="item.code">
  176. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  177. <el-divider direction="vertical"></el-divider>
  178. <span>{{ item.name }}</span>
  179. </el-option>
  180. </el-select>
  181. </el-form-item>
  182. </el-col>
  183. <el-col :span="spanWidth">
  184. <el-form-item label="上传类型" prop="psnType">
  185. <el-select v-model="queryTerm.flag">
  186. <el-option v-for="item in flags" :key="item.code" :label="item.name" :value="item.code">
  187. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  188. <el-divider direction="vertical"></el-divider>
  189. <span>{{ item.name }}</span>
  190. </el-option>
  191. </el-select>
  192. </el-form-item>
  193. </el-col>
  194. <el-col :span="spanWidth">
  195. <el-form-item label="管床医生" prop="referPhysician">
  196. <el-select v-model="queryTerm.referPhysician" :remote-method="remoteMethod" clearable filterable
  197. placeholder="管床医生" remote reserve-keyword>
  198. <el-option v-for="item in referPhysicians" :key="item.code" :label="item.name" :value="item.code">
  199. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  200. <el-divider direction="vertical"></el-divider>
  201. <span>{{ item.name }}</span>
  202. </el-option>
  203. </el-select>
  204. </el-form-item>
  205. </el-col>
  206. <el-col :span="spanWidth">
  207. <el-form-item label="险种类型" prop="insutype">
  208. <el-select v-model="queryTerm.insutype" :collapse-tags="true" clearable filterable multiple
  209. placeholder="险种类型">
  210. <el-option v-for="item in insutypes" :key="item.code" :label="item.name" :value="item.code">
  211. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  212. <el-divider direction="vertical"></el-divider>
  213. <span>{{ item.name }}</span>
  214. </el-option>
  215. </el-select>
  216. </el-form-item>
  217. </el-col>
  218. <el-col :span="spanWidth">
  219. <el-form-item label="人员类别" prop="psnType">
  220. <el-select v-model="queryTerm.psnType" :collapse-tags="true" clearable filterable multiple
  221. placeholder="人员类别">
  222. <el-option v-for="item in getPsnType" :key="item.code" :label="item.name" :value="item.code">
  223. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  224. <el-divider direction="vertical"></el-divider>
  225. <span>{{ item.name }}</span>
  226. </el-option>
  227. </el-select>
  228. </el-form-item>
  229. </el-col>
  230. <el-col :span="spanWidth">
  231. <el-form-item label="结算机构" prop="clrOptins">
  232. <el-select v-model="queryTerm.clrOptins" :collapse-tags="true" clearable filterable multiple
  233. placeholder="结算机构">
  234. <el-option v-for="item in clrOptins" :key="item.code" :label="item.name" :value="item.code">
  235. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  236. <el-divider direction="vertical"></el-divider>
  237. <span>{{ item.name }}</span>
  238. </el-option>
  239. </el-select>
  240. </el-form-item>
  241. </el-col>
  242. <el-col :span="spanWidth">
  243. <el-form-item label="参保机构" prop="insuplcAdmdvs">
  244. <el-select v-model="queryTerm.insuplcAdmdvs" :collapse-tags="true" clearable filterable multiple
  245. placeholder="参保机构">
  246. <el-option v-for="item in clrOptins" :key="item.code" :label="item.name" :value="item.code">
  247. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  248. <el-divider direction="vertical"></el-divider>
  249. <span>{{ item.name }}</span>
  250. </el-option>
  251. </el-select>
  252. </el-form-item>
  253. </el-col>
  254. <el-col :span="spanWidth">
  255. <el-form-item label="审核类型" prop="auditFlag">
  256. <el-select v-model="queryTerm.auditFlag" :collapse-tags="true" clearable filterable multiple>
  257. <el-option v-for="item in auditFlags" :key="item.code" :label="item.name" :value="item.code">
  258. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  259. <el-divider direction="vertical"></el-divider>
  260. <span>{{ item.name }}</span>
  261. </el-option>
  262. </el-select>
  263. </el-form-item>
  264. </el-col>
  265. <el-col :span="spanWidth">
  266. <el-form-item label="申报类型" prop="decTypes">
  267. <el-select v-model="queryTerm.decTypes" :collapse-tags="true" clearable filterable multiple>
  268. <el-option v-for="item in decTypes" :key="item.code" :label="item.name" :value="item.code">
  269. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  270. <el-divider direction="vertical"></el-divider>
  271. <span>{{ item.name }}</span>
  272. </el-option>
  273. </el-select>
  274. </el-form-item>
  275. </el-col>
  276. <el-col :span="spanWidth">
  277. <el-form-item label="支付类型" prop="hiPaymtd">
  278. <el-select v-model="queryTerm.hiPaymtd" :collapse-tags="true" clearable>
  279. <el-option v-for="item in hiPaymtdData" :key="item.code" :label="item.name" :value="item.code">
  280. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  281. <el-divider direction="vertical"></el-divider>
  282. <span>{{ item.name }}</span>
  283. </el-option>
  284. </el-select>
  285. </el-form-item>
  286. </el-col>
  287. <el-col :span="spanWidth">
  288. <el-form-item label="上传截止倒数天数" prop="uploadJieZhiDay">
  289. <el-select v-model="queryTerm.uploadJieZhiDay" :collapse-tags="true" clearable filterable multiple>
  290. <el-option v-for="item in uploadJieZhiData" :key="item.code" :label="item.name" :value="item.code">
  291. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  292. <el-divider direction="vertical"></el-divider>
  293. <span>{{ item.name }}</span>
  294. </el-option>
  295. </el-select>
  296. </el-form-item>
  297. </el-col>
  298. <el-col :span="spanWidth">
  299. <el-form-item label="病人医保身份" prop="ybSf">
  300. <el-select v-model="queryTerm.ybSf" :collapse-tags="true" clearable >
  301. <el-option v-for="item in ybSfData" :key="item.code" :label="item.name" :value="item.code">
  302. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  303. <el-divider direction="vertical"></el-divider>
  304. <span>{{ item.name }}</span>
  305. </el-option>
  306. </el-select>
  307. </el-form-item>
  308. </el-col>
  309. <el-col :span="spanWidth">
  310. <el-form-item label="姓名" prop="name">
  311. <el-input v-model="queryTerm.name" clearable placeholder="姓名" style="width: 120px"
  312. @blur="patNo = $event.target.value.trim()" @keyup.enter="query"></el-input>
  313. </el-form-item>
  314. </el-col>
  315. </el-row>
  316. </el-form>
  317. <el-button icon="Search" size="small" type="primary" @click="query">查询</el-button>
  318. <el-button icon="Search" size="small" type="primary" @click="zhongKongTiaoJian">总控数据条件</el-button>
  319. <el-button icon="RefreshRight" size="small" type="warning" @click="chongZhi">重置</el-button>
  320. <el-divider direction="vertical"></el-divider>
  321. </el-dialog>
  322. <el-dialog v-model="xiuGaiYiShen" title="修改管床医生">
  323. <el-select v-model="guanChuangYiShen.yiShenCode" :remote-method="remoteMethod" clearable filterable remote
  324. reserve-keyword>
  325. <el-option v-for="item in referPhysicians" :key="item.code" :label="item.name" :value="item.code">
  326. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  327. <el-divider direction="vertical"></el-divider>
  328. <span>{{ item.name }}</span>
  329. </el-option>
  330. </el-select>
  331. <el-divider direction="vertical"></el-divider>
  332. <el-button @click="xiuGaiGuanChuangYiShenClick">修改</el-button>
  333. </el-dialog>
  334. <el-dialog v-model="xiuGaibmyBzdata.dialog" title="修改编码员备注" center>
  335. <el-input v-model="xiuGaibmyBzdata.bmyBz" clearable placeholder="编码员备注" type="textarea"
  336. ></el-input>
  337. <template #footer>
  338. <span >
  339. <el-button type="primary" @click="xiuGaibmyBzClick">保存</el-button>
  340. </span>
  341. </template>
  342. </el-dialog>
  343. <jie-suan-dan-xiang-qing v-if="jieSuanDanDataDialog" :data="jieSuanDanData" @close="jieSuanDanDataDialog = false"
  344. @queryCurrentPage="queryCurrentPage"></jie-suan-dan-xiang-qing>
  345. <Progress/>
  346. <el-dialog v-model="medType.dialog" title="修改住院医疗类别">
  347. <el-radio-group v-model="medType.iptMedType">
  348. <el-radio :label="1">住院</el-radio>
  349. <el-radio :label="2">日间手术</el-radio>
  350. </el-radio-group>
  351. <el-divider direction="vertical"></el-divider>
  352. <el-button @click="clickToSaveMedicalCategory">保存</el-button>
  353. </el-dialog>
  354. <el-dialog v-model="setlDeptConf.dialog" title="修改科室配置信息">
  355. <el-select v-model="setlDeptConf.outDept" :collapse-tags="true" clearable filterable multiple
  356. placeholder="出院科室">
  357. <el-option v-for="item in disDepts" :key="item.code" :label="item.name" :value="item.code">
  358. <span style="color: #8492a6; font-size: 12px">{{ item.code }}</span>
  359. <el-divider direction="vertical"></el-divider>
  360. <span>{{ item.name }}</span>
  361. </el-option>
  362. </el-select>
  363. <el-divider direction="vertical"></el-divider>
  364. <el-button @click="clicksaveSetlDeptConfInfo">保存</el-button>
  365. </el-dialog>
  366. </template>
  367. </page-layer>
  368. </template>
  369. <script>
  370. import {clockinShortcuts} from '@/data/shortcuts'
  371. import {onMounted, onActivated,ref, unref, watch} from 'vue'
  372. import store from '../../../store'
  373. import {getClrTypes, getInsutypes} from '@/api/medical-insurance/si-dict'
  374. import {getDateRangeFormatDate} from '@/utils/date'
  375. import {
  376. getMedType,
  377. huoQuJieSuanRenYuan,
  378. jieSuanDanKeXiuGaiXinXi,
  379. modifyMedicalCategory,
  380. upldSetlList,
  381. upldSetlListTimes,
  382. xiuGaiGuanChuangYiShen,
  383. querySetlDeptConfInfo,
  384. saveSetlDeptConfInfo,
  385. getUploadMaxDay,
  386. updateBmyBz,
  387. delAuditLog
  388. } from '@/api/medical-insurance/si-setl-upload'
  389. import {clrOptinsData, decTypes, getPsnType} from '@/data'
  390. import {getDept} from '@/api/inpatient/xiang-mu-lu-ru'
  391. import JieSuanDanXiangQing from '../../../components/si-sheet-upload/jie-suan-dan-xiu-gai/JieSuanDanXiangQing.vue'
  392. import {ElMessage, ElMessageBox} from 'element-plus'
  393. import Progress from '../../../components/progress/Index.vue'
  394. import {downloadExcel} from '@/utils/excel'
  395. import {getRenYuan,getZhuYuanDept} from '@/api/public-api'
  396. import {
  397. auditFlags,
  398. auditName,
  399. huoQuZhongKongChaXunTiaoJian,
  400. shenHeQuanXian,
  401. auditQuanXian,
  402. bmyQuaXian
  403. } from '@/components/si-sheet-upload/jieSuanDanXiuGai'
  404. import XianZhiShiJian from '../../../components/si-sheet-upload/XianZhiShiJian.vue'
  405. import {stringIsBlank, stringNotBlank} from '@/utils/blank-utils'
  406. import JieSuanDanDaYing from '../../../components/si-sheet-upload/jieSuanDanDaYing.vue'
  407. import ExportAutoUploadInfo from "@/components/si-sheet-upload/ExportAutoUploadInfo.vue";
  408. import PageLayer from "@/layout/PageLayer";
  409. import router from "@/router";
  410. import sleep from "@/utils/sleep";
  411. export default {
  412. name: 'SetSheetUpload',
  413. components: {PageLayer, ExportAutoUploadInfo, JieSuanDanDaYing, XianZhiShiJian, JieSuanDanXiangQing, Progress},
  414. setup: function () {
  415. const queryTerm = ref({
  416. startTime: '',
  417. endTime: '',
  418. patNo: '', // 0406567
  419. referPhysician: '',
  420. insutype: [],
  421. dateRange: [clockinShortcuts[0].value[0], clockinShortcuts[0].value[1]],
  422. outDept: [],
  423. insuplcAdmdvs: [],
  424. clrType: '21',
  425. medType: [],
  426. clrOptins: [],
  427. decTypes: [],
  428. flag: 0,
  429. hiPaymtd: 0,
  430. auditFlag: [],
  431. psnType: [],
  432. currentPage: 1,
  433. pageSize: 40,
  434. total: 0,
  435. list: [],
  436. times:null,
  437. uploadJieZhiDay:[],
  438. ybSf:null,
  439. name:''
  440. })
  441. const dept = store.state.user.info.deptCode
  442. // 表单
  443. const queryTermRef = ref(null)
  444. // 表格的宽度
  445. const spanWidth = ref(8)
  446. // 查询的 对话框
  447. const queryTermDialog = ref(true)
  448. // 结算单信息
  449. const jieSuanDanData = ref({})
  450. // 险种类型
  451. const insutypes = ref([])
  452. // 出院科室
  453. const disDepts = ref([])
  454. // 结算类别
  455. const clrTypes = ref([])
  456. // 医疗类别
  457. const medTypes = ref([])
  458. // 结算机构
  459. const clrOptins = ref([])
  460. // 管床医生
  461. const referPhysicians = ref([])
  462. const selections = ref([])
  463. // 表格 ref
  464. const tableRef = ref(null)
  465. const jieSuanDanDataDialog = ref(false)
  466. //跳转上传日志
  467. const toUploadInfo =() =>{
  468. router.push({
  469. name: 'ExportAutoUploadInfo'
  470. })
  471. }
  472. //跳转分组信息
  473. const toUploadDrgGroupInfo =()=>{
  474. router.push({
  475. name: 'DrgGroupResult'
  476. })
  477. }
  478. //单个查询上传信息
  479. const getUploadInfo = (row)=>{
  480. router.push({
  481. name: 'ExportAutoUploadInfo',
  482. query:{
  483. patNo:row.patNo,
  484. times:row.times,
  485. ledgerSn:row.ledgerSn
  486. }
  487. })
  488. }
  489. //查询分组信息
  490. const getdrgGroupResultInfo = (row)=>{
  491. router.push({
  492. name: 'DrgGroupResult',
  493. query:{
  494. patNo:row.patNo,
  495. times:row.times,
  496. ledgerSn:row.ledgerSn
  497. }
  498. })
  499. }
  500. const handleSelectionChange = (val) => {
  501. selections.value = val
  502. }
  503. const query = async () => {
  504. let form = unref(queryTermRef)
  505. if (!form) return
  506. try {
  507. await form.validate()
  508. let dates = getDateRangeFormatDate(queryTerm.value.dateRange)
  509. queryTerm.value.startTime = dates.startTime
  510. queryTerm.value.endTime = dates.endTime
  511. queryTerm.value.total = 0
  512. queryTerm.value.currentPage = 1
  513. huoQuJieSuanRenYuan(queryTerm.value).then((res) => {
  514. queryTerm.value.list = res === null ? [] : res.records
  515. queryTerm.value.total = res.total
  516. queryTermDialog.value = false
  517. })
  518. } catch (error) {
  519. }
  520. }
  521. onActivated(async () => {
  522. const params = router.currentRoute.value.query
  523. if (params && params.patNo && params.times) {
  524. queryTerm.value.times = params.times
  525. queryTerm.value.patNo = params.patNo
  526. queryTerm.value.dateRange = []
  527. queryTerm.value.referPhysician=''
  528. queryTermDialog.value=false
  529. await sleep(300);
  530. await queryCurrentPage()
  531. }
  532. })
  533. const queryCurrentPage = async () => {
  534. let form = unref(queryTermRef)
  535. if (!form) return
  536. try {
  537. await form.validate()
  538. let dates = getDateRangeFormatDate(queryTerm.value.dateRange)
  539. queryTerm.value.startTime = dates.startTime
  540. queryTerm.value.endTime = dates.endTime
  541. huoQuJieSuanRenYuan(queryTerm.value).then((res) => {
  542. queryTerm.value.list = res.records
  543. queryTerm.value.total = res.total
  544. })
  545. } catch (error) {
  546. }
  547. }
  548. watch(
  549. () => store.state.app.windowSize.w,
  550. () => {
  551. const w = store.state.app.windowSize.w
  552. if (w >= 1500) {
  553. spanWidth.value = 8
  554. } else if (w >= 1300) {
  555. spanWidth.value = 12
  556. } else {
  557. spanWidth.value = 24
  558. }
  559. }
  560. )
  561. const upldAllList = () => {
  562. upldSetlList(selections.value).catch(() => {
  563. store.commit('app/setJdt', {title: '', isOpen: false, closeButton: true})
  564. })
  565. }
  566. const upldSelections = () => {
  567. if (queryTerm.value.list.length === 0) {
  568. ElMessage({
  569. message: '请先查询出数据',
  570. type: 'warning',
  571. showClose: true,
  572. })
  573. return
  574. }
  575. upldSetlListTimes(queryTerm.value)
  576. }
  577. const handleSizeChange = (val) => {
  578. queryTerm.value.pageSize = val
  579. query()
  580. }
  581. const handleCurrentChange = (val) => {
  582. queryTerm.value.currentPage = val
  583. queryCurrentPage()
  584. tableRef.value.$refs.bodyWrapper.scrollTop = 0
  585. }
  586. const chongZhi = () => {
  587. unref(queryTermRef).resetFields()
  588. }
  589. //科室配置
  590. const setlDeptConf = ref({
  591. dialog:false,
  592. outDept:[],
  593. })
  594. const openSetlDeptConfGialog = () =>{
  595. let query = { code:store.state.user.info.code,
  596. typeFlag:1
  597. }
  598. querySetlDeptConfInfo(query).then((res)=>{
  599. setlDeptConf.value.outDept=res
  600. setlDeptConf.value.dialog = true
  601. })
  602. }
  603. //删除审核记录
  604. const auditLogDel = () => {
  605. if(selections.value.length ==1){
  606. if(selections.value[0].auditFlagName =='未申请审核'){
  607. ElMessage.error('没有审核记录,不能删除')
  608. return
  609. }
  610. ElMessageBox.confirm('删除审核记录将会删除修改的诊断和手术,审核状态还原为未审核状态,请确认是否删除', '提示', {
  611. type: 'warning',
  612. }).then(() => {
  613. let deldate ={patNo:selections.value[0].patNo,times:selections.value[0].times}
  614. delAuditLog(deldate).then((res)=>{
  615. queryCurrentPage()
  616. })
  617. })
  618. }else {
  619. ElMessage.error('请选择一条数据')
  620. }
  621. }
  622. const clicksaveSetlDeptConfInfo = () =>{
  623. if(setlDeptConf.value.outDept.length <=0){
  624. ElMessage({
  625. message: '请先选择要配置的科室数据',
  626. type: 'warning',
  627. showClose: true,
  628. })
  629. return
  630. }
  631. let list = [];
  632. for(let item of setlDeptConf.value.outDept){
  633. let deptConf = {}
  634. deptConf['code'] = store.state.user.info.code
  635. deptConf['name'] = store.state.user.info.name
  636. deptConf['typeFlag'] = 1
  637. deptConf['deptCode'] = item
  638. list.push(deptConf)
  639. }
  640. saveSetlDeptConfInfo(list).then((res)=>{
  641. setlDeptConf.value.dialog = false
  642. })
  643. }
  644. const jieSuanDanXinXi = (val) => {
  645. if (queryTerm.value.clrType !== '21') {
  646. ElMessage({
  647. message: '结算类别请选择为【住院】!',
  648. type: 'warning',
  649. showClose: true,
  650. })
  651. return
  652. }
  653. jieSuanDanKeXiuGaiXinXi(val.patNo, val.times, val.ledgerSn).then((res) => {
  654. jieSuanDanData.value = res
  655. jieSuanDanData.value.medType = val.medType
  656. jieSuanDanData.value.actIptDays = val.actIptDays
  657. jieSuanDanData.value.outDeptName = val.outDeptName
  658. jieSuanDanData.value.medTypeName = val.medTypeName
  659. jieSuanDanData.value.insutypeName = val.insutypeName
  660. jieSuanDanData.value.disDiag = val.disDiag
  661. jieSuanDanData.value.disDiagComment = val.disDiagComment
  662. jieSuanDanData.value.medfeeSumamt = val.medfeeSumamt
  663. jieSuanDanData.value.fundPaySumamt = val.fundPaySumamt
  664. jieSuanDanData.value.decType = val.decType
  665. jieSuanDanData.value.upload = val
  666. jieSuanDanData.value.deptList = disDepts.value
  667. jieSuanDanData.value.ledgerSn= val.ledgerSn
  668. jieSuanDanData.value.disDept= val.outDept
  669. jieSuanDanData.value.shenHeXinXi = {
  670. id: val.id,
  671. reqOpId: val.reqOpId,
  672. reqOpName: val.reqOpName,
  673. reqOpDate: val.reqOpDate,
  674. reqRemark: val.reqRemark,
  675. auditStaff: val.auditStaff,
  676. auditName: val.auditName,
  677. auditDate: val.auditDate,
  678. auditRemark: val.auditRemark,
  679. auditFlag: val.auditFlag,
  680. }
  681. jieSuanDanDataDialog.value = true
  682. })
  683. }
  684. const exportExcel = () => {
  685. if(selections.value.length>0){
  686. ElMessageBox.prompt('导出文件名字', '提示', {
  687. confirmButtonText: '确定',
  688. cancelButtonText: '取消',
  689. inputPattern: /\S/,
  690. inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',
  691. })
  692. .then(({value}) => {
  693. const data = {
  694. param: {siSetlinfoTemps:selections.value},
  695. url: '/setlListUpld/exportExcel',
  696. fileName: `${value}.xlsx`,
  697. jdt: true,
  698. }
  699. setTimeout(() => {
  700. downloadExcel(data)
  701. }, 500)
  702. })
  703. .catch((e) => {
  704. })
  705. }else {
  706. if (queryTerm.value.total > 0) {
  707. ElMessageBox.prompt('导出文件名字', '提示', {
  708. confirmButtonText: '确定',
  709. cancelButtonText: '取消',
  710. inputPattern: /\S/,
  711. inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',
  712. })
  713. .then(({value}) => {
  714. const data = {
  715. param: queryTerm.value,
  716. url: '/setlListUpld/exportExcel',
  717. fileName: `${value}.xlsx`,
  718. jdt: true,
  719. }
  720. setTimeout(() => {
  721. downloadExcel(data)
  722. }, 500)
  723. })
  724. .catch((e) => {
  725. })
  726. } else {
  727. ElMessage.error('请先查询出数据')
  728. }
  729. }
  730. }
  731. const remoteMethod = (val) => {
  732. if (val.length > 1) {
  733. getRenYuan(val).then((res) => {
  734. referPhysicians.value = res
  735. })
  736. }
  737. }
  738. /* 限制时间 */
  739. const xianZhiShiJian = ref(null)
  740. const xianZhiShiJianClick = () => {
  741. xianZhiShiJian.value.xianZhiShiJianDialog = true
  742. }
  743. /* 修改管床医生 */
  744. const guanChuangYiShen = ref({
  745. yiShenCode: '',
  746. patNo: '',
  747. times: 0,
  748. })
  749. const xiuGaiYiShen = ref(false)
  750. const huoQuXiuGaiYiShen = (code, name, patNo, times) => {
  751. if (stringNotBlank(code)) {
  752. referPhysicians.value = [{code: code, name: name}]
  753. guanChuangYiShen.value.yiShenCode = code
  754. }
  755. xiuGaiYiShen.value = true
  756. guanChuangYiShen.value.patNo = patNo
  757. guanChuangYiShen.value.times = times
  758. }
  759. const xiuGaibmyBzdata = ref({
  760. dialog:false,
  761. bmyBz:'',
  762. patNo:'',
  763. times:null,
  764. ledgerSn:null,
  765. })
  766. //编辑编码员备注
  767. const bianJiBmyBz = (row) =>{
  768. xiuGaibmyBzdata.value.dialog = true
  769. xiuGaibmyBzdata.value.bmyBz = row.bmyBz
  770. xiuGaibmyBzdata.value.patNo = row.patNo
  771. xiuGaibmyBzdata.value.times = row.times
  772. xiuGaibmyBzdata.value.ledgerSn = row.ledgerSn
  773. }
  774. //保存编码员备注
  775. const xiuGaibmyBzClick = () =>{
  776. let updateBmyBzdata = {
  777. bmyBz:xiuGaibmyBzdata.value.bmyBz,
  778. patNo:xiuGaibmyBzdata.value.patNo,
  779. times:xiuGaibmyBzdata.value.times,
  780. ledgerSn:xiuGaibmyBzdata.value.ledgerSn
  781. }
  782. updateBmyBz(updateBmyBzdata).then((res)=>{
  783. xiuGaibmyBzdata.value.dialog = false
  784. queryCurrentPage()
  785. })
  786. }
  787. const xiuGaiGuanChuangYiShenClick = () => {
  788. xiuGaiGuanChuangYiShen(guanChuangYiShen.value.patNo, guanChuangYiShen.value.times, guanChuangYiShen.value.yiShenCode).then((res) => {
  789. xiuGaiYiShen.value = false
  790. queryCurrentPage()
  791. })
  792. }
  793. const zhongKongTiaoJian = () => {
  794. if (!auditQuanXian()) {
  795. queryTerm.value.outDept = [store.state.user.info.deptCode]
  796. referPhysicians.value = [{code: store.state.user.info.code, name: store.state.user.info.name}]
  797. }
  798. queryTerm.value.medType = ['22', '2101']
  799. queryTerm.value.insutype = huoQuZhongKongChaXunTiaoJian(insutypes.value, ['340', '350', '360', '510', '410'])
  800. queryTerm.value.psnType = huoQuZhongKongChaXunTiaoJian(getPsnType, ['13'])
  801. queryTerm.value.clrOptins = huoQuZhongKongChaXunTiaoJian(clrOptins.value, ['439900', '430121'])
  802. }
  803. const daYingJieSuanDanRef = ref({
  804. dialog: false,
  805. patNo: '',
  806. times: 0,
  807. ledgerSn: 0,
  808. })
  809. const jieSuanDanClick = (val) => {
  810. daYingJieSuanDanRef.value.dialog = true
  811. daYingJieSuanDanRef.value.patNo = val.patNo
  812. daYingJieSuanDanRef.value.times = val.times
  813. daYingJieSuanDanRef.value.ledgerSn = val.ledgerSn
  814. }
  815. let medType = $ref({
  816. dialog: false,
  817. setlId: '',
  818. iptMedType: 1,
  819. })
  820. const clickToModifyMedicalCategory = ({setlId, iptMedType}) => {
  821. if (stringIsBlank(setlId)) {
  822. return ElMessage.error('该患者没有结算ID')
  823. }
  824. medType.dialog = true
  825. medType.setlId = setlId
  826. medType.iptMedType = iptMedType
  827. }
  828. const clickToSaveMedicalCategory = () => {
  829. modifyMedicalCategory(medType.iptMedType, medType.setlId)
  830. query()
  831. }
  832. function getIptMedName(val) {
  833. switch (val) {
  834. case 1:
  835. return '住院'
  836. case 2:
  837. return '日间手术'
  838. default:
  839. return ''
  840. }
  841. }
  842. // 查询自动上传
  843. const autoUploadDialog = ref(false)
  844. const uploadJieZhiData = ref([])
  845. onMounted(() => {
  846. getInsutypes().then((res) => {
  847. insutypes.value = res
  848. getClrTypes().then((res2) => {
  849. clrTypes.value = res2
  850. })
  851. })
  852. getMedType().then((res) => {
  853. medTypes.value = res
  854. })
  855. getZhuYuanDept().then((res) => {
  856. disDepts.value = res
  857. })
  858. getUploadMaxDay().then((res=>{
  859. for (let i = 1; i <= res; i++) {
  860. let temp = {
  861. code : i,
  862. name : i+'天'
  863. }
  864. uploadJieZhiData.value.push(temp)
  865. }
  866. }))
  867. clrOptins.value = clrOptinsData
  868. })
  869. return {
  870. queryTerm,
  871. clockinShortcuts,
  872. handleSizeChange,
  873. handleCurrentChange,
  874. insutypes,
  875. query,
  876. upldAllList,
  877. upldSelections,
  878. disDepts,
  879. clrTypes,
  880. medTypes,
  881. getPsnType,
  882. queryTermDialog,
  883. chongZhi,
  884. queryTermRef,
  885. store,
  886. spanWidth,
  887. jieSuanDanXinXi,
  888. jieSuanDanData,
  889. handleSelectionChange,
  890. exportExcel,
  891. referPhysicians,
  892. clrOptins,
  893. jieSuanDanDataDialog,
  894. remoteMethod,
  895. auditFlags,
  896. queryCurrentPage,
  897. clicksaveSetlDeptConfInfo,
  898. openSetlDeptConfGialog,
  899. auditLogDel,
  900. setlDeptConf,
  901. xianZhiShiJian,
  902. xianZhiShiJianClick,
  903. shenHeQuanXian,
  904. auditQuanXian,
  905. bmyQuaXian,
  906. guanChuangYiShen,
  907. huoQuXiuGaiYiShen,
  908. bianJiBmyBz,
  909. xiuGaibmyBzClick,
  910. xiuGaibmyBzdata,
  911. xiuGaiGuanChuangYiShenClick,
  912. xiuGaiYiShen,
  913. auditName,
  914. dept,
  915. decTypes,
  916. zhongKongTiaoJian,
  917. daYingJieSuanDanRef,
  918. toUploadInfo,
  919. toUploadDrgGroupInfo,
  920. getUploadInfo,
  921. getdrgGroupResultInfo,
  922. jieSuanDanClick,
  923. uploadJieZhiData,
  924. ybSfData :[
  925. {code: 1, name: '省本级'},
  926. {code: 2, name: '长沙市'},
  927. {code: 3, name: '省内异地'}
  928. ],
  929. flags: ref([
  930. {code: 0, name: '全部'},
  931. {code: 1, name: '未传'},
  932. {code: 2, name: '已传'},
  933. ]),
  934. hiPaymtdData: [
  935. {code: 1, name: '按项目'},
  936. {code: 2, name: '单病种'},
  937. {code: 3, name: '按病种分值'},
  938. {code: 4, name: '基本诊断相关分组(DRG)'},
  939. {code: 5, name: '按床日'},
  940. {code: 6, name: '按人次'},
  941. {code: 9, name: '其他'},
  942. {code: 0, name: '全部'},
  943. ],
  944. tableRef,
  945. getIptMedName,
  946. medType,
  947. clickToModifyMedicalCategory,
  948. clickToSaveMedicalCategory,
  949. medTypeData: [
  950. {code: 1, name: '住院'},
  951. {code: 1, name: '日间手术'},
  952. ],
  953. autoUploadDialog
  954. }
  955. },
  956. }
  957. </script>