ReceivablePlanRemindList.vue 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  1. <!-- 待回款提醒 -->
  2. <template>
  3. <ContentWrap>
  4. <div class="pb-5 text-xl">待回款提醒</div>
  5. <!-- 搜索工作栏 -->
  6. <el-form
  7. ref="queryFormRef"
  8. :inline="true"
  9. :model="queryParams"
  10. class="-mb-15px"
  11. label-width="68px"
  12. >
  13. <el-form-item label="合同状态" prop="remindType">
  14. <el-select
  15. v-model="queryParams.remindType"
  16. class="!w-240px"
  17. placeholder="状态"
  18. @change="handleQuery"
  19. >
  20. <el-option
  21. v-for="(option, index) in RECEIVABLE_REMIND_TYPE"
  22. :label="option.label"
  23. :value="option.value"
  24. :key="index"
  25. />
  26. </el-select>
  27. </el-form-item>
  28. </el-form>
  29. </ContentWrap>
  30. <ContentWrap>
  31. <el-table v-loading="loading" :data="list" :stripe="true" :show-overflow-tooltip="true">
  32. <el-table-column align="center" fixed="left" label="客户名称" prop="customerName" width="150">
  33. <template #default="scope">
  34. <el-link
  35. :underline="false"
  36. type="primary"
  37. @click="openCustomerDetail(scope.row.customerId)"
  38. >
  39. {{ scope.row.customerName }}
  40. </el-link>
  41. </template>
  42. </el-table-column>
  43. <el-table-column align="center" label="合同编号" prop="contractNo" width="200px" />
  44. <el-table-column align="center" label="期数" prop="period">
  45. <template #default="scope">
  46. <el-link :underline="false" type="primary" @click="openDetail(scope.row.id)">
  47. {{ scope.row.period }}
  48. </el-link>
  49. </template>
  50. </el-table-column>
  51. <el-table-column
  52. align="center"
  53. label="计划回款金额(元)"
  54. prop="price"
  55. width="160"
  56. :formatter="erpPriceTableColumnFormatter"
  57. />
  58. <el-table-column
  59. :formatter="dateFormatter2"
  60. align="center"
  61. label="计划回款日期"
  62. prop="returnTime"
  63. width="180px"
  64. />
  65. <el-table-column align="center" label="提前几天提醒" prop="remindDays" width="150" />
  66. <el-table-column
  67. align="center"
  68. label="提醒日期"
  69. prop="remindTime"
  70. width="180px"
  71. :formatter="dateFormatter2"
  72. />
  73. <el-table-column align="center" label="回款方式" prop="returnType" width="130px">
  74. <template #default="scope">
  75. <dict-tag :type="DICT_TYPE.CRM_RECEIVABLE_RETURN_TYPE" :value="scope.row.returnType" />
  76. </template>
  77. </el-table-column>
  78. <el-table-column align="center" label="备注" prop="remark" />
  79. <el-table-column label="负责人" prop="ownerUserName" width="120" />
  80. <el-table-column
  81. align="center"
  82. label="实际回款金额(元)"
  83. prop="receivable.price"
  84. width="160"
  85. >
  86. <template #default="scope">
  87. <el-text v-if="scope.row.receivable">
  88. {{ erpPriceInputFormatter(scope.row.receivable.price) }}
  89. </el-text>
  90. <el-text v-else>{{ erpPriceInputFormatter(0) }}</el-text>
  91. </template>
  92. </el-table-column>
  93. <el-table-column
  94. align="center"
  95. label="实际回款日期"
  96. prop="receivable.returnTime"
  97. width="180px"
  98. :formatter="dateFormatter2"
  99. />
  100. <el-table-column
  101. align="center"
  102. label="实际回款金额(元)"
  103. prop="receivable.price"
  104. width="160"
  105. >
  106. <template #default="scope">
  107. <el-text v-if="scope.row.receivable">
  108. {{ erpPriceInputFormatter(scope.row.price - scope.row.receivable.price) }}
  109. </el-text>
  110. <el-text v-else>{{ erpPriceInputFormatter(scope.row.price) }}</el-text>
  111. </template>
  112. </el-table-column>
  113. <el-table-column
  114. :formatter="dateFormatter"
  115. align="center"
  116. label="更新时间"
  117. prop="updateTime"
  118. width="180px"
  119. />
  120. <el-table-column
  121. :formatter="dateFormatter"
  122. align="center"
  123. label="创建时间"
  124. prop="createTime"
  125. width="180px"
  126. />
  127. <el-table-column align="center" label="创建人" prop="creatorName" width="100px" />
  128. <el-table-column align="center" fixed="right" label="操作" width="180px">
  129. <template #default="scope">
  130. <el-button
  131. v-hasPermi="['crm:receivable:create']"
  132. link
  133. type="success"
  134. @click="openReceivableForm(scope.row)"
  135. :disabled="scope.row.receivableId"
  136. >
  137. 创建回款
  138. </el-button>
  139. </template>
  140. </el-table-column>
  141. </el-table>
  142. <!-- 分页 -->
  143. <Pagination
  144. :total="total"
  145. v-model:page="queryParams.pageNo"
  146. v-model:limit="queryParams.pageSize"
  147. @pagination="getList"
  148. />
  149. </ContentWrap>
  150. <!-- 表单弹窗:添加/修改 -->
  151. <ReceivableForm ref="receivableFormRef" @success="getList" />
  152. </template>
  153. <script setup lang="ts">
  154. import { DICT_TYPE } from '@/utils/dict'
  155. import { dateFormatter, dateFormatter2 } from '@/utils/formatTime'
  156. import * as ReceivablePlanApi from '@/api/crm/receivable/plan'
  157. import { RECEIVABLE_REMIND_TYPE } from './common'
  158. import { erpPriceInputFormatter, erpPriceTableColumnFormatter } from '@/utils'
  159. import ReceivableForm from '@/views/crm/receivable/ReceivableForm.vue'
  160. defineOptions({ name: 'ReceivablePlanRemindList' })
  161. const loading = ref(true) // 列表的加载中
  162. const total = ref(0) // 列表的总页数
  163. const list = ref([]) // 列表的数据
  164. const queryParams = reactive({
  165. pageNo: 1,
  166. pageSize: 10,
  167. remindType: 1
  168. })
  169. const queryFormRef = ref() // 搜索的表单
  170. /** 查询列表 */
  171. const getList = async () => {
  172. loading.value = true
  173. try {
  174. const data = await ReceivablePlanApi.getReceivablePlanPage(queryParams)
  175. list.value = data.list
  176. total.value = data.total
  177. } finally {
  178. loading.value = false
  179. }
  180. }
  181. /** 搜索按钮操作 */
  182. const handleQuery = () => {
  183. queryParams.pageNo = 1
  184. getList()
  185. }
  186. /** 创建回款操作 */
  187. const receivableFormRef = ref()
  188. const openReceivableForm = (row: ReceivablePlanApi.ReceivablePlanVO) => {
  189. receivableFormRef.value.open('create', undefined, row)
  190. }
  191. /** 打开详情 */
  192. const { push } = useRouter()
  193. const openDetail = (id: number) => {
  194. push({ name: 'CrmReceivablePlanDetail', params: { id } })
  195. }
  196. /** 打开客户详情 */
  197. const openCustomerDetail = (id: number) => {
  198. push({ name: 'CrmCustomerDetail', params: { id } })
  199. }
  200. /** 激活时 */
  201. onActivated(async () => {
  202. await getList()
  203. })
  204. /** 初始化 **/
  205. onMounted(async () => {
  206. await getList()
  207. })
  208. </script>