InsurIncomeAnalysis.vue 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324
  1. <template>
  2. <page-layer>
  3. <template #header>
  4. <el-date-picker v-model="dateRange" type="monthrange" range-separator="至" start-placeholder="开始月份"
  5. end-placeholder="结束月份" style="width: 220px"></el-date-picker>
  6. <el-cascader v-model="setlCondition.dataInfo" :options="setlCondition.options" :props="{ expandTrigger: 'hover' }"
  7. @change="handleChange" :clearable="true" :filterable="true" placeholder="请选择险种">
  8. </el-cascader>
  9. <el-divider direction="vertical"></el-divider>
  10. <el-button icon="Search" type="primary" @click="fetchSetlinfos">查询</el-button>
  11. <el-button icon="Download" type="primary" @click="exportSetlinfoExcel">导出Excel</el-button>
  12. <el-button icon="TrendCharts" type="primary" @click="selectChart">分析图</el-button>
  13. <el-button icon="Histogram" type="primary" @click="showBarChart">费用趋势图</el-button>
  14. <el-button icon="TrendCharts" type="primary" @click="showTreeChart">人数树状图</el-button>
  15. </template>
  16. <template #main>
  17. <el-tabs type="border-card" v-model="setlCondition.selectType" @tab-click="handleClick">
  18. <el-tab-pane label="数据" name="first">
  19. <el-table :data="setlinfos" :height="tableHeight" border highlight-current-row row-key="childKey" show-summary
  20. :summary-method="getSummaries1" stripe @row-dblclick="fetchSetldetails">
  21. <el-table-column label="险种类型" prop="insurName" fixed header-align="center" width="130"></el-table-column>
  22. <el-table-column label="住院人次" prop="psnCount" align="center" header-align="center"></el-table-column>
  23. <el-table-column label="住院天数" prop="inDays" align="center" header-align="center"></el-table-column>
  24. <el-table-column label="平均住院日" prop="avgInDays" align="right" header-align="center"></el-table-column>
  25. <el-table-column label="总费用" prop="totalFee" align="right" header-align="center"></el-table-column>
  26. <el-table-column label="药品费用" prop="drugFee" align="right" header-align="center"></el-table-column>
  27. <el-table-column label="药品占比(%)" prop="drugFeeRatio" align="right" header-align="center"></el-table-column>
  28. <el-table-column label="耗材费用" prop="matFee" align="right" header-align="center"></el-table-column>
  29. <el-table-column label="耗材占比(%)" prop="matFeeRatio" align="right" header-align="center"></el-table-column>
  30. <el-table-column label="基本医疗统筹金额" prop="fundPooling" align="right" header-align="center"></el-table-column>
  31. <el-table-column label="大病基金" prop="bigIllFundPooling" align="right" header-align="center">
  32. </el-table-column>
  33. <el-table-column label="公务员基金支付" prop="civilServiceFund" align="right" header-align="center">
  34. </el-table-column>
  35. <el-table-column label="其他基金" prop="otherFunds" align="right" header-align="center"></el-table-column>
  36. <el-table-column label="全部基金" prop="allFunds" align="right" header-align="center"></el-table-column>
  37. <el-table-column label="个人账户支出" prop="acctPay" align="right" header-align="center"></el-table-column>
  38. </el-table>
  39. <el-dialog v-model="showSetldetails" :close-on-click-modal="false" :close-on-press-escape="false"
  40. :title="filterDialogTitle" width="80%">
  41. <div style="width: 130px; height: 36px; position: absolute; top: 16px; right: 60px">
  42. <el-button icon="Download" type="primary" @click="exportYbDetailExcel">导出Excel</el-button>
  43. </div>
  44. <el-table :data="setldetails.slice(pageSize * (currentPage - 1), pageSize * currentPage)" height="560"
  45. highlight-current-row stripe @row-dblclick="openSetlinfoComponent">
  46. <el-table-column fixed label="序号" type="index" width="40"></el-table-column>
  47. <el-table-column fixed label="姓名" prop="psnName" width="60"></el-table-column>
  48. <el-table-column fixed label="住院号" prop="patNo" width="70"></el-table-column>
  49. <el-table-column label="次数" prop="times" width="40"></el-table-column>
  50. <el-table-column label="科室" prop="psnCertType" width="100"></el-table-column>
  51. <el-table-column label="性别" prop="gendName" width="50"></el-table-column>
  52. <el-table-column label="出生日期" prop="brdy"></el-table-column>
  53. <el-table-column label="身份证" prop="certno"></el-table-column>
  54. <el-table-column label="主要诊断" prop="mainDiagnosis" width="120" show-overflow-tooltip></el-table-column>
  55. <el-table-column label="主要手术" prop="mainOperation" width="120" show-overflow-tooltip></el-table-column>
  56. <el-table-column label="参保地区" prop="insuplcAdmdvsName"></el-table-column>
  57. <el-table-column label="险种类型" prop="insutypeName"></el-table-column>
  58. <el-table-column label="人员类别" prop="psnTypeName"></el-table-column>
  59. <el-table-column label="就诊ID" prop="mdtrtId"></el-table-column>
  60. <el-table-column label="结算ID" prop="setlId"></el-table-column>
  61. <el-table-column label="入院时间" prop="begntime"></el-table-column>
  62. <el-table-column label="出院时间" prop="endtime"></el-table-column>
  63. <el-table-column label="结算时间" prop="setlTime"></el-table-column>
  64. <el-table-column label="医疗类别" prop="medTypeName"></el-table-column>
  65. <el-table-column label="总医疗费用" prop="medfeeSumamt"></el-table-column>
  66. <el-table-column label="总报销金额" prop="fundPaySumamt"></el-table-column>
  67. <el-table-column label="医疗救助" prop="mafPay"></el-table-column>
  68. <el-table-column label="个人账户支出" prop="acctPay"></el-table-column>
  69. <el-table-column label="个人现金支出" prop="psnCashPay"></el-table-column>
  70. <el-table-column label="大病支出" prop="hifmiPay"></el-table-column>
  71. <el-table-column label="西药费" prop="chargeWesternMedicine"></el-table-column>
  72. <el-table-column label="中成药费" prop="chargePatentMedicine"></el-table-column>
  73. <el-table-column label="中药饮片费" prop="chargeHerbal"></el-table-column>
  74. <el-table-column label="耗材费" prop="chargeSanitaryMaterial"></el-table-column>
  75. </el-table>
  76. <el-pagination :current-page="currentPage" :page-size="pageSize" :page-sizes="[15, 30, 45, 60]"
  77. :total="setldetails.length" layout="total, sizes, prev, pager, next, jumper" style="margin-top: 5px"
  78. @size-change="handleSizeChange" @current-change="handleCurrentChange"></el-pagination>
  79. </el-dialog>
  80. <el-dialog v-model="showSetlinfoComponent" :close-on-click-modal="false" title="结算信息" width="70%">
  81. <Setlinfo :setlinfo="currentSetldetail" />
  82. </el-dialog>
  83. <el-dialog v-model="showChart" :close-on-click-modal="false" title="费用趋势图" width="70%" top="40px" draggable>
  84. <BarChart :ybkf="barChangeData" />
  85. </el-dialog>
  86. <el-dialog v-model="treeChart" :close-on-click-modal="false" title="人数树状图" width="70%" top="40px" draggable>
  87. <div style="height: 35px">
  88. <el-autocomplete v-model="deptNo" value-key="name" :fetch-suggestions="querySearchDept"
  89. :trigger-on-focus="false" clearable class="inline-input w-50 m-2" style="width: 240px"
  90. placeholder="请输入关键字" @select="handleSelect">
  91. <template #prepend>科室</template>
  92. </el-autocomplete>
  93. <el-autocomplete v-model="doctorId" value-key="name" :fetch-suggestions="querySearchDoctor"
  94. :trigger-on-focus="false" clearable class="inline-input w-50 m-2" style="width: 240px"
  95. placeholder="请输入关键字" @select="handleSelect">
  96. <template #prepend>管床医生</template>
  97. </el-autocomplete>
  98. <el-input v-model="insurCode" clearable style="width: 240px" class="w-50 m-2">
  99. <template #prepend>医保类别</template>
  100. </el-input>
  101. <el-divider direction="vertical"></el-divider>
  102. <el-button icon="Search" type="primary" @click="selectTreeChart">查询</el-button>
  103. <el-button icon="Download" type="primary" @click="exportTreeRs">导出</el-button>
  104. </div>
  105. <div style="width: 100%; height: 700px" id="treedsf"></div>
  106. </el-dialog>
  107. </el-tab-pane>
  108. <el-tab-pane label="同比" name="second">
  109. <el-table :data="setlinfos" :height="tableHeight" border highlight-current-row row-key="childKey" show-summary
  110. :summary-method="getSummaries1">
  111. <el-table-column label="月份" prop="month" fixed align="center" header-align="center"></el-table-column>
  112. <el-table-column label="总费用" prop="zfy" header-align="center">
  113. <el-table-column label="今年" prop="zfy_jn" align="right" header-align="center"></el-table-column>
  114. <el-table-column label="去年" prop="zfy_qn" align="right" header-align="center"></el-table-column>
  115. <el-table-column label="同比" prop="zfy_tb" align="right" header-align="center"></el-table-column>
  116. </el-table-column>
  117. <el-table-column label="全部基金" prop="zjj" header-align="center">
  118. <el-table-column label="今年" prop="zjj_jn" align="right" header-align="center"></el-table-column>
  119. <el-table-column label="去年" prop="zjj_qn" align="right" header-align="center"></el-table-column>
  120. <el-table-column label="同比" prop="zjj_tb" align="right" header-align="center"></el-table-column>
  121. </el-table-column>
  122. <el-table-column label="药品费用" prop="ypf" header-align="center">
  123. <el-table-column label="今年" prop="ypf_jn" align="right" header-align="center"></el-table-column>
  124. <el-table-column label="去年" prop="ypf_qn" align="right" header-align="center"></el-table-column>
  125. <el-table-column label="同比" prop="ypf_tb" align="right" header-align="center"></el-table-column>
  126. </el-table-column>
  127. <el-table-column label="耗材费用" prop="clf" header-align="center">
  128. <el-table-column label="今年" prop="clf_jn" align="right" header-align="center"></el-table-column>
  129. <el-table-column label="去年" prop="clf_qn" align="right" header-align="center"></el-table-column>
  130. <el-table-column label="同比" prop="clf_tb" align="right" header-align="center"></el-table-column>
  131. </el-table-column>
  132. </el-table>
  133. </el-tab-pane>
  134. <el-tab-pane label="环比" name="third">
  135. <el-table :data="setlinfos" :height="tableHeight" border highlight-current-row row-key="childKey" show-summary
  136. :summary-method="getSummaries1">
  137. <el-table-column label="月份" prop="month" align="center" fixed header-align="center"></el-table-column>
  138. <el-table-column label="总费用" prop="zfys" header-align="center">
  139. <el-table-column label="费用" prop="zfy" align="right" header-align="center"></el-table-column>
  140. <el-table-column label="环比" prop="zfy_hb" align="right" header-align="center"></el-table-column>
  141. </el-table-column>
  142. <el-table-column label="全部基金" prop="zjjs" header-align="center">
  143. <el-table-column label="费用" prop="zjj" align="right" header-align="center"></el-table-column>
  144. <el-table-column label="环比" prop="zjj_hb" align="right" header-align="center"></el-table-column>
  145. </el-table-column>
  146. <el-table-column label="药品费用" prop="ypfs" header-align="center">
  147. <el-table-column label="费用" prop="ypf" align="right" header-align="center"></el-table-column>
  148. <el-table-column label="环比" prop="ypf_hb" align="right" header-align="center"></el-table-column>
  149. </el-table-column>
  150. <el-table-column label="耗材费用" prop="clfs" header-align="center">
  151. <el-table-column label="费用" prop="clf" align="right" header-align="center"></el-table-column>
  152. <el-table-column label="环比" prop="clf_hb" align="right" header-align="center"></el-table-column>
  153. </el-table-column>
  154. </el-table>
  155. </el-tab-pane>
  156. </el-tabs>
  157. <el-drawer :title="titleChart" v-model="qxtDrawer" size="80%">
  158. <el-row :gutter="10">
  159. <el-col :span="6">
  160. <div style="width: 100%; height: 400px" id="zfyDst"></div>
  161. </el-col>
  162. <el-col :span="6">
  163. <div style="width: 100%; height: 400px" id="zjjDst"></div>
  164. </el-col>
  165. <el-col :span="6">
  166. <div style="width: 100%; height: 400px" id="ypfDst"></div>
  167. </el-col>
  168. <el-col :span="6">
  169. <div style="width: 100%; height: 400px" id="clfDst"></div>
  170. </el-col>
  171. </el-row>
  172. <el-row :gutter="10">
  173. <el-col :span="8">
  174. <div style="width: 100%; height: 400px" id="rcpie"></div>
  175. </el-col>
  176. <el-col :span="8">
  177. <div style="width: 100%; height: 400px" id="zytsPie"></div>
  178. </el-col>
  179. <el-col :span="8">
  180. <div style="width: 100%; height: 400px" id="zfyPie"></div>
  181. </el-col>
  182. </el-row>
  183. </el-drawer>
  184. </template>
  185. </page-layer>
  186. </template>
  187. <script>
  188. import { computed, onMounted, reactive, ref, watch } from 'vue'
  189. import { useStore } from 'vuex'
  190. import store from '@/store'
  191. import { getDateRangeFormatDate, formatDatetime } from '@/utils/date'
  192. import {
  193. selectYbStatInfo,
  194. selectYbStatRatio,
  195. selectYbChart,
  196. selectYbStatDetail,
  197. querySettlementInfo,
  198. selectBarChangeData,
  199. selectTreeData
  200. } from '@/api/medical-insurance/si-ybkf'
  201. import { clone } from '@/utils/clone'
  202. import { Export } from '@/utils/ExportExcel'
  203. import { ElMessage, ElMessageBox } from 'element-plus'
  204. import { downloadExcel } from '@/utils/excel'
  205. import { pieUtilsOne, barUtilsTwo, barUtilsThree, treeChartRoot } from '@/utils/echarts-utils'
  206. import Setlinfo from '../../../components/medical-insurance/setlinfo/Index.vue'
  207. import BarChart from '../../../components/medical-insurance/ybkf/BarChart.vue'
  208. import { selectSmallDept, selectDoctor } from '@/api/medical-insurance/si-yb-util'
  209. import PageLayer from "@/layout/PageLayer";
  210. export default {
  211. components: {
  212. PageLayer,
  213. Setlinfo,
  214. BarChart,
  215. },
  216. setup() {
  217. const storeU = useStore()
  218. const windowSize = storeU.state.app.windowSize
  219. const tableHeight = windowSize.h - 120
  220. const dateRange = ref([])
  221. const dateS = getDateRangeFormatDate(dateRange.value)
  222. const setlinfos = ref([])
  223. const qxtDrawer = ref(false)
  224. const titleChart = ref('图形')
  225. const chartData = ref([])
  226. const pieChartData = reactive({
  227. selectPie: '1',
  228. })
  229. const deptNo = ref('')
  230. const doctorId = ref('')
  231. const insurCode = ref('')
  232. const showChart = ref(false)
  233. const barChangeData = ref([])
  234. const showBarChart = (val) => {
  235. if (setlCondition.setlType === '11') {
  236. ElMessage({
  237. message: '门诊不参与排名!',
  238. type: 'warning',
  239. duration: 2500,
  240. showClose: true,
  241. })
  242. return
  243. }
  244. let selectInfo = clone(setlCondition)
  245. selectBarChangeData(selectInfo)
  246. .then((res) => {
  247. barChangeData.value = res
  248. showChart.value = true
  249. //月份
  250. let months = []
  251. //数据
  252. let dataBar = []
  253. //显示排名前几名
  254. let num = 15
  255. //单位
  256. let unit = '元'
  257. barChangeData.value.forEach((item) => {
  258. let d = []
  259. if (months.length === 0 || months[months.length - 1] !== item.yf) {
  260. months.push(item.yf)
  261. }
  262. d.push(item.totalFee)
  263. d.push(item.medins_type)
  264. d.push(item.yf)
  265. dataBar.push(d)
  266. })
  267. nextTick(() => {
  268. barUtilsThree(hightChart, '总费用(TOP' + num + ')', months, dataBar, num - 1, unit)
  269. })
  270. })
  271. .catch(() => {
  272. barChangeData.value = []
  273. })
  274. }
  275. const querySearchDept = async (str, cb) => {
  276. let results = await selectSmallDept({ str })
  277. if (results) {
  278. // 调用 callback 返回建议列表的数据
  279. cb(results)
  280. }
  281. }
  282. const querySearchDoctor = async (str, cb) => {
  283. let results = await selectDoctor({ str })
  284. if (results) {
  285. // 调用 callback 返回建议列表的数据
  286. cb(results)
  287. }
  288. }
  289. const handleSelect = (item) => {
  290. }
  291. const treeChart = ref(false)
  292. const treeData = ref([])
  293. const showTreeChart = (val) => {
  294. if (setlCondition.setlType === '11') {
  295. ElMessage({
  296. message: '门诊不参与统计!',
  297. type: 'warning',
  298. duration: 2500,
  299. showClose: true,
  300. })
  301. treeChart.value = false
  302. return
  303. }
  304. let selectData = clone(setlCondition)
  305. if (!selectData.startTime) {
  306. ElMessage({
  307. message: '请选择时间范围!',
  308. type: 'warning',
  309. duration: 2500,
  310. showClose: true,
  311. })
  312. treeChart.value = false
  313. return
  314. }
  315. treeChart.value = true
  316. selectTreeData(selectData).then((res) => {
  317. treeData.value = res
  318. deptNo.value = ''
  319. doctorId.value = ''
  320. insurCode.value = ''
  321. nextTick(() => {
  322. treeChartRoot(treedsf, '树', treeData.value, [])
  323. })
  324. })
  325. }
  326. const selectTreeChart = (val) => {
  327. treeChart.value = true
  328. let selectData = clone(setlCondition)
  329. selectData.dept = deptNo.value
  330. selectData.doctor = doctorId.value
  331. selectData.insurType = insurCode.value
  332. selectTreeData(selectData).then((res) => {
  333. treeData.value = res
  334. let searchData = [deptNo.value, doctorId.value, insurCode.value]
  335. nextTick(() => {
  336. treeChartRoot(treedsf, '树', treeData.value, searchData)
  337. })
  338. })
  339. }
  340. const setldetails = ref([])
  341. const showSetldetails = ref(false)
  342. const setlCondition = reactive({
  343. startTime: dateS.startTime,
  344. endTime: dateS.endTime,
  345. setlType: '21',
  346. selectType: 'first',
  347. insurType: null,
  348. dataInfo: null,
  349. options: initInsurOptions(),
  350. })
  351. const fetchSetldetails = (row) => {
  352. let selectInfo = clone(setlCondition)
  353. selectInfo.insurType = row.insurType
  354. selectYbStatDetail(selectInfo)
  355. .then((res) => {
  356. setldetails.value = res
  357. showSetldetails.value = true
  358. })
  359. .catch(() => {
  360. setldetails.value = []
  361. })
  362. }
  363. const filterDialogTitle = computed(() => {
  364. let yearL = setlCondition.startTime.substr(0, 4)
  365. const setlTypeName = filterSetlTypeName()
  366. return yearL + setlTypeName + '结算明细'
  367. })
  368. const showSetlinfoComponent = ref(false)
  369. const currentSetldetail = ref({})
  370. const openSetlinfoComponent = (row) => {
  371. const param = {
  372. psnNo: row.psnNo,
  373. mdtrtId: row.mdtrtId,
  374. }
  375. querySettlementInfo(param).then((res) => {
  376. currentSetldetail.value = res
  377. showSetlinfoComponent.value = true
  378. })
  379. }
  380. const fetchSetlinfos = () => {
  381. if (!dateRange.value) {
  382. ElMessage({
  383. message: '请选择时间范围!',
  384. type: 'warning',
  385. duration: 2500,
  386. showClose: true,
  387. })
  388. return
  389. }
  390. if (!setlCondition.dataInfo) {
  391. ElMessage({
  392. message: '请选择险种!',
  393. type: 'warning',
  394. duration: 2500,
  395. showClose: true,
  396. })
  397. return
  398. }
  399. setlCondition.setlType = setlCondition.dataInfo[0]
  400. setlCondition.insurType = setlCondition.dataInfo[1]
  401. setlCondition.startTime = formatDatetime(dateRange.value[0])
  402. setlCondition.endTime = formatDatetime(dateRange.value[1])
  403. let yearL = setlCondition.startTime.substr(0, 4)
  404. let yearR = setlCondition.endTime.substr(0, 4)
  405. if (yearL != yearR) {
  406. ElMessage({
  407. message: '请选择同一年份!',
  408. type: 'warning',
  409. duration: 2500,
  410. showClose: true,
  411. })
  412. return
  413. }
  414. if (setlCondition.selectType === 'first') {
  415. selectYbStatInfo(setlCondition)
  416. .then((res) => {
  417. setlinfos.value = res
  418. })
  419. .catch(() => {
  420. setlinfos.value = []
  421. })
  422. } else {
  423. selectYbStatRatio(setlCondition)
  424. .then((res) => {
  425. setlinfos.value = res
  426. })
  427. .catch(() => {
  428. setlinfos.value = []
  429. })
  430. }
  431. }
  432. const exportYbDetailExcel = () => {
  433. if (setldetails.value.length === 0) {
  434. ElMessage({
  435. message: '没有可以导出的数据!',
  436. type: 'warning',
  437. duration: 2500,
  438. showClose: true,
  439. })
  440. } else {
  441. const title = {
  442. patNo: '住院号',
  443. times: '住院次数',
  444. psnCertType: '科室',
  445. psnName: '姓名',
  446. gendName: '性别',
  447. brdy: '出生日期',
  448. certno: '身份证',
  449. mainDiagnosis: '主要诊断',
  450. mainOperation: '主要手术',
  451. insuplcAdmdvsName: '参保地名称',
  452. insutypeName: '险种类型',
  453. medTypeName: '医疗类别',
  454. psnTypeName: '人员类别',
  455. mdtrtId: '就诊ID',
  456. setlId: '结算ID',
  457. begntime: '入院时间',
  458. endtime: '出院时间',
  459. setlTime: '结算时间',
  460. medfeeSumamt: '总医疗费用',
  461. fundPaySumamt: '总报销金额',
  462. mafPay: '医疗救助',
  463. acctPay: '个人账户支出',
  464. psnCashPay: '个人现金支出',
  465. hifmiPay: '大病支出',
  466. chargeWesternMedicine: '西药费',
  467. chargePatentMedicine: '中成药费',
  468. chargeHerbal: '中药饮片费',
  469. chargeSanitaryMaterial: '耗材费',
  470. }
  471. Export(setldetails.value, title, filterDialogTitle.value)
  472. }
  473. }
  474. const handleChange = (value) => {
  475. }
  476. const pageSize = ref(30)
  477. const currentPage = ref(1)
  478. const handleSizeChange = (val) => {
  479. pageSize.value = val
  480. }
  481. const handleCurrentChange = (val) => {
  482. currentPage.value = val
  483. }
  484. const selectChart = async () => {
  485. if (!dateRange.value) {
  486. ElMessage({
  487. message: '请选择时间范围!',
  488. type: 'warning',
  489. duration: 2500,
  490. showClose: true,
  491. })
  492. return
  493. }
  494. if (!setlCondition.dataInfo) {
  495. ElMessage({
  496. message: '请选择险种!',
  497. type: 'warning',
  498. duration: 2500,
  499. showClose: true,
  500. })
  501. return
  502. }
  503. setlCondition.setlType = setlCondition.dataInfo[0]
  504. setlCondition.insurType = setlCondition.dataInfo[1]
  505. setlCondition.startTime = formatDatetime(dateRange.value[0])
  506. setlCondition.endTime = formatDatetime(dateRange.value[1])
  507. let yearL = setlCondition.startTime.substr(0, 4)
  508. let yearR = setlCondition.endTime.substr(0, 4)
  509. if (yearL != yearR) {
  510. ElMessage({
  511. message: '请选择同一年份!',
  512. type: 'warning',
  513. duration: 2500,
  514. showClose: true,
  515. })
  516. return
  517. }
  518. qxtDrawer.value = true
  519. titleChart.value = yearL + '年医保收入分析图'
  520. let data = []
  521. data = await selectYbChart(setlCondition)
  522. let setlCondition1 = clone(setlCondition)
  523. setlCondition1.selectType = 'first'
  524. data = data.concat(await selectYbStatInfo(setlCondition1))
  525. chartData.value = data
  526. }
  527. watch(
  528. () => chartData.value,
  529. () => {
  530. let nameText
  531. let barTitles = ['总费用', '全部基金', '药品费', '耗材费']
  532. if (setlCondition.setlType === '21') {
  533. nameText = '住院'
  534. } else {
  535. nameText = '门诊'
  536. }
  537. nameText = titleChart.value + '(' + nameText + ')-'
  538. let yAxisName = '单位:百万元'
  539. let tipUnit = '元'
  540. let echartsXdata = []
  541. let zfy = []
  542. let zjj = []
  543. let ypf = []
  544. let clf = []
  545. let pieRc = []
  546. let pieZyts = []
  547. let pieZfy = []
  548. chartData.value.forEach((item) => {
  549. if (item.month) {
  550. zfy.push(item.zfy_jn)
  551. zjj.push(item.zjj_jn)
  552. if (item.ypf_jn > 0.0) {
  553. ypf.push(item.ypf_jn)
  554. }
  555. if (item.clf_jn > 0.0) {
  556. clf.push(item.clf_jn)
  557. }
  558. echartsXdata.push(item.month)
  559. } else {
  560. let dataRc = {}
  561. let dataZyts = {}
  562. let dataZfy = {}
  563. dataRc.value = item.psnCount
  564. dataRc.name = item.insurName
  565. dataRc.unit = '人'
  566. pieRc.push(dataRc)
  567. dataZyts.value = item.inDays
  568. dataZyts.name = item.insurName
  569. dataZyts.unit = '天'
  570. pieZyts.push(dataZyts)
  571. dataZfy.value = item.totalFee
  572. dataZfy.name = item.insurName
  573. dataZfy.unit = '元'
  574. pieZfy.push(dataZfy)
  575. }
  576. })
  577. barUtilsTwo(zfyDst, nameText + barTitles[0], echartsXdata, zfy, barTitles[0], yAxisName, tipUnit)
  578. barUtilsTwo(zjjDst, nameText + barTitles[1], echartsXdata, zjj, barTitles[1], yAxisName, tipUnit)
  579. barUtilsTwo(ypfDst, nameText + barTitles[2], echartsXdata, ypf, barTitles[2], yAxisName, tipUnit)
  580. barUtilsTwo(clfDst, nameText + barTitles[3], echartsXdata, clf, barTitles[3], yAxisName, tipUnit)
  581. pieUtilsOne(rcpie, '住院人次', pieRc)
  582. pieUtilsOne(zytsPie, '住院天数', pieZyts)
  583. pieUtilsOne(zfyPie, '总费用', pieZfy)
  584. }
  585. )
  586. const handleClick = (tab, event) => {
  587. if (!dateRange.value) {
  588. ElMessage({
  589. message: '请选择时间范围!',
  590. type: 'warning',
  591. duration: 2500,
  592. showClose: true,
  593. })
  594. return
  595. }
  596. if (!setlCondition.dataInfo) {
  597. ElMessage({
  598. message: '请选择险种!',
  599. type: 'warning',
  600. duration: 2500,
  601. showClose: true,
  602. })
  603. return
  604. }
  605. setlCondition.setlType = setlCondition.dataInfo[0]
  606. setlCondition.insurType = setlCondition.dataInfo[1]
  607. setlCondition.startTime = formatDatetime(dateRange.value[0])
  608. setlCondition.endTime = formatDatetime(dateRange.value[1])
  609. // 查询哪个tab页面
  610. setlCondition.selectType = tab.props.name
  611. if (setlCondition.selectType === 'first') {
  612. selectYbStatInfo(setlCondition)
  613. .then((res) => {
  614. setlinfos.value = res
  615. })
  616. .catch(() => {
  617. setlinfos.value = []
  618. })
  619. } else {
  620. selectYbStatRatio(setlCondition)
  621. .then((res) => {
  622. setlinfos.value = res
  623. })
  624. .catch(() => {
  625. setlinfos.value = []
  626. })
  627. }
  628. }
  629. const getSummaries = () => {
  630. if (setlCondition.selectType === 'first') {
  631. let sums1 = {
  632. insurName: '',
  633. psnCount: 0,
  634. inDays: 0,
  635. avgInDays: 0,
  636. totalFee: 0,
  637. drugFee: 0,
  638. drugFeeRatio: 0,
  639. matFee: 0,
  640. matFeeRatio: 0,
  641. fundPooling: 0,
  642. bigIllFundPooling: 0,
  643. civilServiceFund: 0,
  644. otherFunds: 0,
  645. allFunds: 0,
  646. acctPay: 0,
  647. }
  648. setlinfos.value.forEach((itm) => {
  649. for (let k in sums1) {
  650. sums1[k] = Number(sums1[k]) + Number(itm[k])
  651. }
  652. })
  653. sums1.insurName = '合计'
  654. sums1.avgInDays = (sums1.inDays / sums1.psnCount).toFixed(2)
  655. sums1.drugFeeRatio = ((sums1.drugFee / sums1.totalFee) * 100).toFixed(2)
  656. sums1.matFeeRatio = ((sums1.matFee / sums1.totalFee) * 100).toFixed(2)
  657. return sums1
  658. } else if (setlCondition.selectType === 'second') {
  659. let sums2 = {
  660. month: '',
  661. zfy_jn: 0,
  662. zfy_qn: 0,
  663. zfy_tb: 0,
  664. zjj_jn: 0,
  665. zjj_qn: 0,
  666. zjj_tb: 0,
  667. ypf_jn: 0,
  668. ypf_qn: 0,
  669. ypf_tb: 0,
  670. clf_jn: 0,
  671. clf_qn: 0,
  672. clf_tb: 0,
  673. }
  674. setlinfos.value.forEach((itm) => {
  675. for (let k in sums2) {
  676. sums2[k] = Number(sums2[k]) + Number(itm[k])
  677. }
  678. })
  679. sums2.month = '合计'
  680. sums2.zfy_tb = (((sums2.zfy_jn - sums2.zfy_qn) / sums2.zfy_qn) * 100).toFixed(2) + '%'
  681. sums2.zjj_tb = (((sums2.zjj_jn - sums2.zjj_qn) / sums2.zjj_qn) * 100).toFixed(2) + '%'
  682. sums2.ypf_tb = (((sums2.ypf_jn - sums2.ypf_qn) / sums2.ypf_qn) * 100).toFixed(2) + '%'
  683. sums2.clf_tb = (((sums2.clf_jn - sums2.clf_qn) / sums2.clf_qn) * 100).toFixed(2) + '%'
  684. return sums2
  685. } else {
  686. let sums3 = {
  687. month: '',
  688. zfy: 0,
  689. zfy_hb: 0,
  690. zjj: 0,
  691. zjj_hb: 0,
  692. ypf: 0,
  693. ypf_hb: 0,
  694. clf: 0,
  695. clf_hb: 0,
  696. }
  697. setlinfos.value.forEach((itm) => {
  698. for (let k in sums3) {
  699. sums3[k] = Number(sums3[k]) + Number(itm[k])
  700. }
  701. })
  702. sums3.month = '合计'
  703. sums3.zfy_hb = ''
  704. sums3.zjj_hb = ''
  705. sums3.ypf_hb = ''
  706. sums3.clf_hb = ''
  707. return sums3
  708. }
  709. }
  710. const getSummaries1 = (param) => {
  711. const { columns, data } = param
  712. const sums = []
  713. // 住院人次下标
  714. let psnCountIndex = 0
  715. // 住院天数下标
  716. let inDaysIndex = 0
  717. // 总费用下标
  718. let zfyIndex = 0
  719. // 药品费下标
  720. let ypfIndex = 0
  721. // 材料费下标
  722. let clfIndex = 0
  723. // 今年总费用下标
  724. let jn_zfy = 0
  725. // 去年总费用下标
  726. let qn_zfy = 0
  727. // 今年总基金下标
  728. let jn_zjj = 0
  729. // 去年总基金下标
  730. let qn_zjj = 0
  731. // 今年药品费下标
  732. let jn_ypf = 0
  733. // 去年药品费下标
  734. let qn_ypf = 0
  735. // 今年耗材费下标
  736. let jn_clf = 0
  737. // 去年耗材费下标
  738. let qn_clf = 0
  739. columns.forEach((column, index) => {
  740. if (index === 0) {
  741. sums[index] = '合计'
  742. return
  743. }
  744. if (column.property === 'psnCount') {
  745. psnCountIndex = index
  746. }
  747. if (column.property === 'inDays') {
  748. inDaysIndex = index
  749. }
  750. if (column.property === 'totalFee') {
  751. zfyIndex = index
  752. }
  753. if (column.property === 'drugFee') {
  754. ypfIndex = index
  755. }
  756. if (column.property === 'matFee') {
  757. clfIndex = index
  758. }
  759. if (column.property === 'jn_zfy') {
  760. jn_zfy = index
  761. }
  762. if (column.property === 'qn_zfy') {
  763. qn_zfy = index
  764. }
  765. if (column.property === 'jn_zjj') {
  766. jn_zjj = index
  767. }
  768. if (column.property === 'qn_zjj') {
  769. qn_zjj = index
  770. }
  771. if (column.property === 'jn_ypf') {
  772. jn_ypf = index
  773. }
  774. if (column.property === 'qn_ypf') {
  775. qn_ypf = index
  776. }
  777. if (column.property === 'jn_clf') {
  778. jn_clf = index
  779. }
  780. if (column.property === 'qn_clf') {
  781. qn_clf = index
  782. }
  783. const values = data.map((item) => Number(item[column.property]))
  784. if (column.property === 'avgInDays') {
  785. sums[index] = (sums[inDaysIndex] / sums[psnCountIndex]).toFixed(2)
  786. } else if (column.property === 'drugFeeRatio') {
  787. if (sums[zfyIndex] > 0) {
  788. sums[index] = ((sums[ypfIndex] / sums[zfyIndex]) * 100).toFixed(2)
  789. } else {
  790. sums[index] = 0.0
  791. }
  792. } else if (column.property === 'matFeeRatio') {
  793. if (sums[zfyIndex] > 0) {
  794. sums[index] = ((sums[clfIndex] / sums[zfyIndex]) * 100).toFixed(2)
  795. } else {
  796. sums[index] = 0.0
  797. }
  798. } else if (column.property === 'zfy_tb') {
  799. if (sums[qn_zfy] > 0) {
  800. sums[index] = (((sums[jn_zfy] - sums[qn_zfy]) / sums[qn_zfy]) * 100).toFixed(2) + '%'
  801. } else {
  802. sums[index] = 0.0 + '%'
  803. }
  804. } else if (column.property === 'zjj_tb') {
  805. if (sums[qn_zjj] > 0) {
  806. sums[index] = (((sums[jn_zjj] - sums[qn_zjj]) / sums[qn_zjj]) * 100).toFixed(2) + '%'
  807. } else {
  808. sums[index] = 0.0 + '%'
  809. }
  810. } else if (column.property === 'ypf_tb') {
  811. if (sums[qn_ypf] > 0) {
  812. sums[index] = (((sums[jn_ypf] - sums[qn_ypf]) / sums[qn_ypf]) * 100).toFixed(2) + '%'
  813. } else {
  814. sums[index] = 0.0 + '%'
  815. }
  816. } else if (column.property === 'clf_tb') {
  817. if (sums[qn_clf] > 0) {
  818. sums[index] = (((sums[jn_clf] - sums[qn_clf]) / sums[qn_clf]) * 100).toFixed(2) + '%'
  819. } else {
  820. sums[index] = 0.0 + '%'
  821. }
  822. } else if (column.property === 'zfy_hb') {
  823. sums[index] = ''
  824. } else if (column.property === 'zjj_hb') {
  825. sums[index] = ''
  826. } else if (column.property === 'ypf_hb') {
  827. sums[index] = ''
  828. } else if (column.property === 'clf_hb') {
  829. sums[index] = ''
  830. } else if (!values.every((value) => isNaN(value))) {
  831. sums[index] = values.reduce((prev, curr) => {
  832. const value = Number(curr)
  833. if (!isNaN(value)) {
  834. return prev + curr
  835. } else {
  836. return prev
  837. }
  838. }, 0)
  839. //合计特殊处理
  840. if (column.property === 'psnCount' || column.property === 'inDays') {
  841. sums[index] = sums[index].toFixed(0)
  842. } else {
  843. sums[index] = sums[index].toFixed(2)
  844. }
  845. } else {
  846. sums[index] = 0
  847. }
  848. })
  849. sums.avgInDays = (sums.inDays / sums.psnCount).toFixed(2)
  850. sums.drugFeeRatio = ((sums.drugFee / sums.totalFee) * 100).toFixed(2)
  851. sums.matFeeRatio = ((sums.matFee / sums.totalFee) * 100).toFixed(2)
  852. return sums
  853. }
  854. const filterSetlTypeName = () => {
  855. if ('21' === setlCondition.setlType) {
  856. return setlCondition.options[0].label
  857. } else {
  858. return setlCondition.options[1].label
  859. }
  860. return ''
  861. }
  862. const filterInsurTypeName = () => {
  863. if ('21' === setlCondition.setlType) {
  864. for (let i = 0; i < setlCondition.options[0].children.length; i++) {
  865. if (setlCondition.options[0].children[i].value === setlCondition.insurType) {
  866. return setlCondition.options[0].children[i].label
  867. }
  868. }
  869. } else {
  870. for (let i = 0; i < setlCondition.options[1].children.length; i++) {
  871. if (setlCondition.options[1].children[i].value === setlCondition.insurType) {
  872. return setlCondition.options[1].children[i].label
  873. }
  874. }
  875. }
  876. return ''
  877. }
  878. const exportSetlinfoExcel = () => {
  879. let year = setlCondition.startTime.substr(0, 4) + '年'
  880. if (setlinfos.value.length === 0) {
  881. ElMessage({
  882. message: '没有可以导出的数据!',
  883. type: 'warning',
  884. duration: 2500,
  885. showClose: true,
  886. })
  887. } else {
  888. const data = clone(setlinfos.value)
  889. data.push(getSummaries())
  890. // 增加导出正在进行中状态
  891. store.commit('app/setLoading', true)
  892. if (setlCondition.selectType === 'first') {
  893. const title = {
  894. insurName: '险种类型',
  895. psnCount: '住院人次',
  896. inDays: '住院天数',
  897. avgInDays: '平均住院日',
  898. totalFee: '总费用',
  899. drugFee: '药品费用',
  900. drugFeeRatio: '药品占比(%)',
  901. matFee: '耗材费用',
  902. matFeeRatio: '耗材占比(%)',
  903. fundPooling: '基本医疗统筹金额',
  904. bigIllFundPooling: '大病基金',
  905. civilServiceFund: '公务员基金支付',
  906. otherFunds: '其他基金',
  907. allFunds: '全部基金',
  908. acctPay: '个人账户支出',
  909. }
  910. const setlTypeName = filterSetlTypeName()
  911. const insurTypeName = filterInsurTypeName()
  912. Export(data, title, `【${year}】【${setlTypeName}】【${insurTypeName}】`)
  913. } else if (setlCondition.selectType === 'second') {
  914. const setlTypeName = filterSetlTypeName()
  915. const exportName = year + setlTypeName + '同比'
  916. if (setlinfos.value.length <= 0) {
  917. ElMessage({
  918. message: '没有可以导出的数据!',
  919. type: 'warning',
  920. duration: 2500,
  921. showClose: true,
  922. })
  923. }
  924. ElMessageBox.prompt('导出文件名字', '提示', {
  925. confirmButtonText: '确定',
  926. cancelButtonText: '取消',
  927. inputPattern: /\S/,
  928. inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',
  929. })
  930. .then(({ value }) => {
  931. const data = {
  932. param: {
  933. startTime: setlCondition.startTime,
  934. endTime: setlCondition.endTime,
  935. setlType: setlCondition.setlType,
  936. insurType: setlCondition.insurType,
  937. selectType: setlCondition.selectType,
  938. exportName: exportName,
  939. },
  940. url: '/ybQuery/exportYbStatRatioExcel',
  941. fileName: value + '.xlsx',
  942. }
  943. setTimeout(() => {
  944. downloadExcel(data)
  945. }, 500)
  946. })
  947. .catch(() => {
  948. })
  949. } else {
  950. const setlTypeName = filterSetlTypeName()
  951. const exportName = year + setlTypeName + '环比'
  952. if (setlinfos.value.length <= 0) {
  953. ElMessage({
  954. message: '没有可以导出的数据!',
  955. type: 'warning',
  956. duration: 2500,
  957. showClose: true,
  958. })
  959. }
  960. ElMessageBox.prompt('导出文件名字', '提示', {
  961. confirmButtonText: '确定',
  962. cancelButtonText: '取消',
  963. inputPattern: /\S/,
  964. inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',
  965. })
  966. .then(({ value }) => {
  967. const data = {
  968. param: {
  969. startTime: setlCondition.startTime,
  970. endTime: setlCondition.endTime,
  971. setlType: setlCondition.setlType,
  972. insurType: setlCondition.insurType,
  973. selectType: setlCondition.selectType,
  974. exportName: exportName,
  975. },
  976. url: '/ybQuery/exportYbStatRatioExcel',
  977. fileName: value + '.xlsx',
  978. }
  979. setTimeout(() => {
  980. downloadExcel(data)
  981. }, 500)
  982. })
  983. .catch(() => {
  984. })
  985. }
  986. }
  987. }
  988. const handleClose = (done) => {
  989. if (this.loading) {
  990. return
  991. }
  992. this.$confirm('确定要提交表单吗?')
  993. .then((_) => {
  994. this.loading = true
  995. this.timer = setTimeout(() => {
  996. done()
  997. // 动画关闭需要一定的时间
  998. setTimeout(() => {
  999. this.loading = false
  1000. }, 400)
  1001. }, 2000)
  1002. })
  1003. .catch((_) => {
  1004. })
  1005. }
  1006. const cancelForm = () => {
  1007. this.loading = false
  1008. this.dialog = false
  1009. clearTimeout(this.timer)
  1010. }
  1011. onMounted(() => {
  1012. // 初始化数据
  1013. setlCondition.selectType = 'first'
  1014. deptNo.value = ''
  1015. })
  1016. const exportTreeRs = () => {
  1017. let year = setlCondition.startTime.substr(0, 4) + '年'
  1018. const setlTypeName = filterSetlTypeName()
  1019. const exportName = year + setlTypeName + '人数'
  1020. if (treeData.value.length <= 0) {
  1021. ElMessage({
  1022. message: '没有可以导出的数据!',
  1023. type: 'warning',
  1024. duration: 2500,
  1025. showClose: true,
  1026. })
  1027. }
  1028. ElMessageBox.prompt('导出文件名字', '提示', {
  1029. confirmButtonText: '确定',
  1030. cancelButtonText: '取消',
  1031. inputPattern: /\S/,
  1032. inputErrorMessage: '文件名不能为空 (∩•̀ω•́)⊃-*⋆',
  1033. })
  1034. .then(({ value }) => {
  1035. const data = {
  1036. param: {
  1037. startTime: setlCondition.startTime,
  1038. endTime: setlCondition.endTime,
  1039. setlType: setlCondition.setlType,
  1040. selectType: setlCondition.selectType,
  1041. dept: deptNo.value,
  1042. doctor: doctorId.value,
  1043. insurType: insurCode.value,
  1044. exportName: exportName,
  1045. },
  1046. url: '/ybQuery/selectTreeAllData',
  1047. fileName: value + '.xlsx',
  1048. }
  1049. setTimeout(() => {
  1050. downloadExcel(data)
  1051. }, 500)
  1052. })
  1053. .catch(() => {
  1054. })
  1055. }
  1056. return {
  1057. tableHeight,
  1058. deptNo,
  1059. doctorId,
  1060. insurCode,
  1061. dateRange,
  1062. setlCondition,
  1063. setlinfos,
  1064. qxtDrawer,
  1065. titleChart,
  1066. chartData,
  1067. pieChartData,
  1068. showChart,
  1069. treeChart,
  1070. barChangeData,
  1071. treeData,
  1072. pageSize,
  1073. currentPage,
  1074. filterDialogTitle,
  1075. setldetails,
  1076. showSetldetails,
  1077. showSetlinfoComponent,
  1078. currentSetldetail,
  1079. handleCurrentChange,
  1080. handleSizeChange,
  1081. fetchSetldetails,
  1082. showBarChart,
  1083. showTreeChart,
  1084. selectTreeChart,
  1085. exportTreeRs,
  1086. selectChart,
  1087. handleSelect,
  1088. querySearchDept,
  1089. querySearchDoctor,
  1090. handleClose,
  1091. cancelForm,
  1092. getSummaries1,
  1093. exportSetlinfoExcel,
  1094. exportYbDetailExcel,
  1095. handleChange,
  1096. handleClick,
  1097. openSetlinfoComponent,
  1098. fetchSetlinfos,
  1099. }
  1100. },
  1101. }
  1102. function initInsurOptions() {
  1103. return [
  1104. {
  1105. value: '21',
  1106. label: '住院',
  1107. children: [
  1108. {
  1109. value: 99,
  1110. label: '全部',
  1111. },
  1112. {
  1113. value: 43010031001,
  1114. label: '长沙市城职',
  1115. },
  1116. {
  1117. value: 43010039001,
  1118. label: '长沙市城居',
  1119. },
  1120. {
  1121. value: 43010034001,
  1122. label: '长沙市离休',
  1123. },
  1124. {
  1125. value: 43010051052,
  1126. label: '长沙市生育',
  1127. },
  1128. {
  1129. value: 43012131001,
  1130. label: '长沙县城职',
  1131. },
  1132. {
  1133. value: 43012139001,
  1134. label: '长沙县城居',
  1135. },
  1136. {
  1137. value: 43012134001,
  1138. label: '长沙县离休',
  1139. },
  1140. {
  1141. value: 43012151052,
  1142. label: '长沙县生育',
  1143. },
  1144. {
  1145. value: 43018131001,
  1146. label: '浏阳市城职',
  1147. },
  1148. {
  1149. value: 43018139001,
  1150. label: '浏阳市城居',
  1151. },
  1152. {
  1153. value: 43018134001,
  1154. label: '浏阳市离休',
  1155. },
  1156. {
  1157. value: 43018151052,
  1158. label: '浏阳市生育',
  1159. },
  1160. {
  1161. value: 43018231001,
  1162. label: '宁乡市城职',
  1163. },
  1164. {
  1165. value: 43018239001,
  1166. label: '宁乡市城居',
  1167. },
  1168. {
  1169. value: 43990031001,
  1170. label: '湖南省城职',
  1171. },
  1172. {
  1173. value: 43990034001,
  1174. label: '湖南省离休',
  1175. },
  1176. {
  1177. value: 43990051052,
  1178. label: '湖南省生育',
  1179. },
  1180. {
  1181. value: 43990001,
  1182. label: '省内异地',
  1183. },
  1184. {
  1185. value: 43990002,
  1186. label: '省外异地',
  1187. },
  1188. {
  1189. value: 4301002102,
  1190. label: '市单病种',
  1191. },
  1192. {
  1193. value: 4399002102,
  1194. label: '省单病种',
  1195. },
  1196. {
  1197. value: 4399012102,
  1198. label: '省内单病种',
  1199. },
  1200. ],
  1201. },
  1202. {
  1203. value: '11',
  1204. label: '门诊',
  1205. children: [
  1206. {
  1207. value: 99,
  1208. label: '全部',
  1209. },
  1210. {
  1211. value: 11,
  1212. label: '普通门诊',
  1213. },
  1214. {
  1215. value: 14,
  1216. label: '特殊门诊',
  1217. },
  1218. {
  1219. value: 51,
  1220. label: '生育门诊',
  1221. },
  1222. ],
  1223. },
  1224. ]
  1225. }
  1226. </script>
  1227. <style scoped>
  1228. :deep(.el-table .children-row) {
  1229. background: rgba(145, 247, 145, 0.5);
  1230. }
  1231. :deep(.el-table--border td:first-child .cell, .el-table--border th:first-child .cell) {
  1232. padding-left: 4px;
  1233. }
  1234. :deep(.el-table) {
  1235. --el-table-row-hover-background-color: #85dbfd7a;
  1236. }
  1237. :deep(.el-table__footer-wrapper tbody td) {
  1238. background: #df4a25;
  1239. color: white;
  1240. font-weight: bold;
  1241. }
  1242. :deep(.el-main) {
  1243. padding: 0 5px;
  1244. }
  1245. :deep(.el-dialog__header) {
  1246. margin-right: 2px;
  1247. }
  1248. </style>