index.vue 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. <template>
  2. <ContentWrap>
  3. <!-- 搜索工作栏 -->
  4. <el-form
  5. class="-mb-15px"
  6. :model="queryParams"
  7. ref="queryFormRef"
  8. :inline="true"
  9. label-width="100px"
  10. >
  11. <TenantSelect v-model="queryParams.tenantIds" placeholder="请选择机构名称" prop="tenantIds" />
  12. <el-form-item label="长者姓名" prop="elderName">
  13. <el-input
  14. @keyup.enter="handleQuery"
  15. v-model="queryParams.elderName"
  16. placeholder="请输入长者姓名"
  17. class="!w-240px"
  18. />
  19. </el-form-item>
  20. <el-form-item label="床位号" prop="bedId">
  21. <SelectRoom v-model="queryParams.bedId" class="!w-240px" />
  22. </el-form-item>
  23. <el-form-item label="缴费状态" prop="status">
  24. <el-select v-model="queryParams.status" placeholder="请选择" class="!w-240px">
  25. <el-option
  26. v-for="(dict, index) in getStrDictOptions(DICT_TYPE.SETTLEMENT_STATUS)"
  27. :key="index"
  28. :label="dict.label"
  29. :value="dict.value"
  30. />
  31. </el-select>
  32. </el-form-item>
  33. <!-- <el-form-item label="退住日期" prop="retreatDate">-->
  34. <!-- <el-date-picker-->
  35. <!-- v-model="queryParams.retreatDate"-->
  36. <!-- class="!w-240px"-->
  37. <!-- placeholder="请选择"-->
  38. <!-- end-placeholder="结束日期"-->
  39. <!-- start-placeholder="开始日期"-->
  40. <!-- type="date"-->
  41. <!-- value-format="YYYY-MM-DD"-->
  42. <!-- />-->
  43. <!-- </el-form-item>-->
  44. <!-- <el-form-item label="费用截止日期" prop="costDeadlineDate">-->
  45. <!-- <el-date-picker-->
  46. <!-- v-model="queryParams.costDeadlineDate"-->
  47. <!-- class="!w-240px"-->
  48. <!-- placeholder="请选择"-->
  49. <!-- end-placeholder="结束日期"-->
  50. <!-- start-placeholder="开始日期"-->
  51. <!-- type="date"-->
  52. <!-- value-format="YYYY-MM-DD"-->
  53. <!-- />-->
  54. <!-- </el-form-item>-->
  55. <el-form-item>
  56. <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
  57. <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
  58. </el-form-item>
  59. </el-form>
  60. </ContentWrap>
  61. <!-- 列表 -->
  62. <ContentWrap>
  63. <el-button plain type="success" :loading="loading" @click="handleExport">
  64. <Icon class="mr-5px" icon="ep:download" />
  65. 导出
  66. </el-button>
  67. <TabBarBtn />
  68. <Table2
  69. v-loading="loading"
  70. :data="list"
  71. :columns="levelSettleColumn"
  72. :queryParams="queryParams"
  73. :op-width="240"
  74. @print="handlePrint"
  75. @detail="(arg) => openForm(arg, true)"
  76. :showDetailCondition="showDetailCondition"
  77. >
  78. <template #pre="{ scope }">
  79. <!-- <el-button-->
  80. <!-- link-->
  81. <!-- type="success"-->
  82. <!-- @click="openRefundForm(scope)"-->
  83. <!-- v-hasPermi="['leave-settle:refund-settle']"-->
  84. <!-- v-show="scope.status == 1"-->
  85. <!-- >-->
  86. <!-- 补充结算-->
  87. <!-- </el-button>-->
  88. <el-button
  89. link
  90. type="primary"
  91. @click="openForm(scope)"
  92. v-hasPermi="['leave-settle:settle']"
  93. v-show="scope.status == 0"
  94. >
  95. 结算
  96. </el-button>
  97. </template>
  98. </Table2>
  99. <!-- 分页 -->
  100. <Pagination
  101. :total="total"
  102. v-model:page="queryParams.pageNo"
  103. v-model:limit="queryParams.pageSize"
  104. @pagination="getList"
  105. />
  106. </ContentWrap>
  107. <RefundSettlement ref="refundFormRef" @success="getList" />
  108. <Print ref="printRef" />
  109. </template>
  110. <script lang="ts" setup>
  111. import { DICT_TYPE, getStrDictOptions } from '@/utils/dict'
  112. import { getRefundSettlementOrderPage } from '@/api/elderly/fee/leave-settle'
  113. import { levelSettleColumn } from '../column'
  114. import RefundSettlement from './refund-settlement.vue'
  115. import Print from './Print.vue'
  116. import { useUserStore } from '@/store/modules/user'
  117. import { exportWithCustomHeaders } from '@/utils/excel-export'
  118. import { formatToDateTime } from '@/utils/dateUtil'
  119. import { Message as message } from '@/layout/components/Message'
  120. defineOptions({ name: 'LevelSettle' })
  121. const userStore = useUserStore()
  122. const loading = ref(true) // 列表的加载中
  123. const total = ref(0) // 列表的总页数
  124. const list = ref([]) // 列表的数据
  125. const queryParams = reactive({
  126. pageNo: 1,
  127. pageSize: 10,
  128. elderName: undefined,
  129. bedId: undefined,
  130. status: undefined,
  131. costDeadlineDate: undefined,
  132. retreatDate: undefined,
  133. refundAmount: undefined,
  134. tenantIds: userStore.orgTenantId
  135. })
  136. const queryFormRef = ref() // 搜索的表单
  137. const router = useRouter()
  138. /** 查询列表 */
  139. const getList = async () => {
  140. loading.value = true
  141. try {
  142. const data = await getRefundSettlementOrderPage(queryParams)
  143. list.value = data.list
  144. total.value = data.total
  145. return list.value
  146. } finally {
  147. loading.value = false
  148. }
  149. }
  150. /** 搜索按钮操作 */
  151. const handleQuery = async () => {
  152. if (!queryFormRef.value) return
  153. const valid = await queryFormRef.value.validate()
  154. if (!valid) return
  155. queryParams.pageNo = 1
  156. getList()
  157. }
  158. /** 重置按钮操作 */
  159. const resetQuery = () => {
  160. queryFormRef.value.resetFields()
  161. handleQuery()
  162. }
  163. /** 导出按钮操作 */
  164. const handleExport = async () => {
  165. if (loading.value) return
  166. try {
  167. loading.value = true
  168. queryParams.pageNo = 1
  169. queryParams.pageSize = 99999
  170. const exportList = await getList()
  171. if (!exportList || exportList.length === 0) {
  172. message.error('暂无数据可以导出!')
  173. return
  174. }
  175. const statusOptions = getStrDictOptions(DICT_TYPE.SETTLEMENT_STATUS)
  176. const data = exportList.map((item) => ({
  177. ...item,
  178. statusLabel:
  179. statusOptions.find((dict) => String(dict.value) === String(item.status))?.label ||
  180. item.status,
  181. settlementTimeStr: item.settlementTime ? formatToDateTime(item.settlementTime) : '',
  182. createdTimeStr: item.createdTime ? formatToDateTime(item.createdTime) : ''
  183. }))
  184. const headers = [
  185. { key: 'tenantName', title: '所属机构', width: 40 },
  186. { key: 'elderName', title: '长者姓名', width: 40 },
  187. { key: 'bedName', title: '床位号', width: 40 },
  188. { key: 'statusLabel', title: '结算状态', width: 40 },
  189. { key: 'retreatDate', title: '退住日期', width: 40 },
  190. { key: 'costDeadlineDate', title: '费用截止日期', width: 40 },
  191. { key: 'refundableAmount', title: '应退金额', width: 40 },
  192. { key: 'receivableAmount', title: '应收金额', width: 40 },
  193. { key: 'refundAmount', title: '实缴金额', width: 40 },
  194. { key: 'settlementTimeStr', title: '结算时间', width: 40 },
  195. { key: 'settlementPersonName', title: '结算人', width: 40 },
  196. { key: 'orderNumber', title: '结算单号', width: 40 },
  197. { key: 'createdBy', title: '创建人', width: 40 },
  198. { key: 'createdTimeStr', title: '创建时间', width: 40 }
  199. ]
  200. await exportWithCustomHeaders(data, headers, `退住结算-${formatToDateTime()}.xlsx`, '退住结算')
  201. } catch (e) {
  202. message.error('导出失败!')
  203. console.log(e)
  204. } finally {
  205. queryParams.pageSize = 10
  206. loading.value = false
  207. }
  208. }
  209. /** 添加/修改操作 */
  210. // const formRef = ref()
  211. const openForm = (row: any = {}, isDetail: boolean = false) => {
  212. // formRef.value.open(row.id, row.elderId, isDetail)
  213. router.push({
  214. name: isDetail ? 'LevelSettleDetail' : 'LevelSettleForm', //详情和结算是同一个 form
  215. params: {
  216. id: row.id,
  217. elderId: row.elderId,
  218. tId: row.tenantId,
  219. isDetail: isDetail
  220. }
  221. })
  222. }
  223. // 补充结算
  224. const refundFormRef = ref()
  225. const openRefundForm = (row) => {
  226. refundFormRef.value.open(row.id)
  227. }
  228. const showDetailCondition = (row) => {
  229. return row.status == 1
  230. }
  231. const printRef = ref()
  232. const handlePrint = (row) => {
  233. printRef.value.open(row.id, row.status == 1)
  234. }
  235. /** 初始化 **/
  236. onMounted(() => {
  237. getList()
  238. })
  239. </script>