ReceivableList.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <template>
  2. <!-- 操作栏 -->
  3. <el-row justify="end">
  4. <el-button @click="openForm">
  5. <Icon class="mr-5px" icon="icon-park:income-one" />
  6. 创建回款
  7. </el-button>
  8. </el-row>
  9. <!-- 列表 -->
  10. <ContentWrap class="mt-10px">
  11. <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
  12. <el-table-column label="回款编号" fixed="left" align="center" prop="no">
  13. <template #default="scope">
  14. <el-link type="primary" :underline="false" @click="openDetail(scope.row.id)">
  15. {{ scope.row.no }}
  16. </el-link>
  17. </template>
  18. </el-table-column>
  19. <el-table-column label="合同编号" align="center" prop="contractNo" />
  20. <el-table-column
  21. label="回款金额(元)"
  22. align="center"
  23. prop="price"
  24. :formatter="fenToYuanFormat"
  25. />
  26. <el-table-column label="负责人" align="center" prop="ownerUserName" />
  27. <el-table-column align="center" label="状态" prop="auditStatus">
  28. <template #default="scope">
  29. <dict-tag :type="DICT_TYPE.CRM_AUDIT_STATUS" :value="scope.row.auditStatus" />
  30. </template>
  31. </el-table-column>
  32. <el-table-column
  33. label="回款日期"
  34. align="center"
  35. prop="returnTime"
  36. :formatter="dateFormatter"
  37. width="180px"
  38. />
  39. </el-table>
  40. <!-- 分页 -->
  41. <Pagination
  42. :total="total"
  43. v-model:page="queryParams.pageNo"
  44. v-model:limit="queryParams.pageSize"
  45. @pagination="getList"
  46. />
  47. </ContentWrap>
  48. <!-- 表单弹窗:添加 -->
  49. <ReceivableForm ref="formRef" @success="getList" />
  50. </template>
  51. <script setup lang="ts">
  52. import * as ReceivableApi from '@/api/crm/receivable'
  53. import ReceivableForm from './../ReceivableForm.vue'
  54. import { BizTypeEnum } from '@/api/crm/permission'
  55. import { dateFormatter } from '@/utils/formatTime'
  56. import { fenToYuanFormat } from '@/utils/formatter'
  57. import { DICT_TYPE } from '@/utils/dict'
  58. defineOptions({ name: 'CrmReceivableList' })
  59. const props = defineProps<{
  60. bizType: number // 业务类型
  61. bizId: number // 业务编号
  62. }>()
  63. const loading = ref(true) // 列表的加载中
  64. const total = ref(0) // 列表的总页数
  65. const list = ref([]) // 列表的数据
  66. const queryParams = reactive({
  67. pageNo: 1,
  68. pageSize: 10,
  69. customerId: undefined as unknown // 允许 undefined + number
  70. })
  71. /** 查询列表 */
  72. const getList = async () => {
  73. loading.value = true
  74. try {
  75. // 置空参数
  76. queryParams.customerId = undefined
  77. // 执行查询
  78. let data = { list: [], total: 0 }
  79. switch (props.bizType) {
  80. case BizTypeEnum.CRM_CUSTOMER:
  81. queryParams.customerId = props.bizId
  82. data = await ReceivableApi.getReceivablePageByCustomer(queryParams)
  83. break
  84. default:
  85. return
  86. }
  87. list.value = data.list
  88. total.value = data.total
  89. } finally {
  90. loading.value = false
  91. }
  92. }
  93. /** 搜索按钮操作 */
  94. const handleQuery = () => {
  95. queryParams.pageNo = 1
  96. getList()
  97. }
  98. /** 添加 */
  99. const formRef = ref()
  100. const openForm = () => {
  101. formRef.value.open('create')
  102. }
  103. /** 打开合同详情 */
  104. const { push } = useRouter()
  105. const openDetail = (id: number) => {
  106. push({ name: 'CrmReceivableDetail', params: { id } })
  107. }
  108. /** 监听打开的 bizId + bizType,从而加载最新的列表 */
  109. watch(
  110. () => [props.bizId, props.bizType],
  111. () => {
  112. handleQuery()
  113. },
  114. { immediate: true, deep: true }
  115. )
  116. </script>