UserForm.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <template>
  2. <Dialog v-model="dialogVisible" title="借款申请-核销">
  3. <el-form
  4. ref="formRef"
  5. v-loading="formLoading"
  6. :model="formData"
  7. :rules="formRules"
  8. label-width="120px"
  9. >
  10. <el-row>
  11. <el-col :span="12">
  12. <el-form-item label="借款人" prop="worker">
  13. <el-input v-model="formData.worker" disabled />
  14. </el-form-item>
  15. </el-col>
  16. <el-col :span="12">
  17. <el-form-item label="所在部门" prop="workerDept">
  18. <el-input v-model="formData.workerDept" disabled />
  19. </el-form-item>
  20. </el-col>
  21. </el-row>
  22. <el-row>
  23. <el-col :span="12">
  24. <el-form-item label="已核销金额" prop="verifyAmount">
  25. <el-input v-model="formData.verifyAmount" @change="changeVerify" type="number" />
  26. </el-form-item>
  27. </el-col>
  28. <el-col :span="12">
  29. <el-form-item label="未核销金额" prop="loanAmount">
  30. <el-input v-model="formData.loanBalance" type="text" disabled />
  31. </el-form-item>
  32. </el-col>
  33. </el-row>
  34. <el-row>
  35. <!-- <el-col :span="12">
  36. <el-form-item label="本次拟核销金额" prop="nowAmount">
  37. <el-input
  38. v-model="formData.nowAmount"
  39. placeholder="本次拟核销金额"
  40. @change="changeVerify"
  41. type="number"
  42. />
  43. </el-form-item>
  44. </el-col> -->
  45. <el-col :span="12">
  46. <el-form-item label="核销时间" prop="verifyDate">
  47. <el-date-picker
  48. v-model="formData.verifyDate"
  49. type="date"
  50. value-format="YYYY-MM-DD"
  51. placeholder="选择核销时间"
  52. clearable
  53. :default-time="new Date()"
  54. class="!w-240px"
  55. />
  56. </el-form-item>
  57. </el-col>
  58. </el-row>
  59. <el-row>
  60. <el-col :span="24">
  61. <el-form-item label="备注">
  62. <el-input v-model="formData.verifyBz" placeholder="请输入内容" type="textarea" />
  63. </el-form-item>
  64. </el-col>
  65. </el-row>
  66. </el-form>
  67. <template #footer>
  68. <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
  69. <el-button @click="dialogVisible = false">取 消</el-button>
  70. </template>
  71. </Dialog>
  72. </template>
  73. <script lang="ts" setup>
  74. import { CommonStatusEnum } from '@/utils/constants'
  75. import * as PostApi from '@/api/system/post'
  76. import * as DeptApi from '@/api/system/dept'
  77. import * as UserApi from '@/api/system/user'
  78. import moment from 'moment'
  79. import request from '@/config/axios'
  80. defineOptions({ name: 'SystemUserForm' })
  81. const { t } = useI18n() // 国际化
  82. const message = useMessage() // 消息弹窗
  83. const dialogVisible = ref(false) // 弹窗的是否展示
  84. const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
  85. const formType = ref('') // 表单的类型:create - 新增;update - 修改
  86. const formData = ref({
  87. verifyAmount: '',
  88. verifyDate: '',
  89. verifyBz: '',
  90. id: undefined
  91. })
  92. const checkAge = (rule: any, value: any, callback: any) => {
  93. if (!value) {
  94. return callback(new Error('请输入核销金额'))
  95. }
  96. setTimeout(() => {
  97. if (value < 0) {
  98. callback(new Error('已核销金额必须大于0'))
  99. } else if (value > formData.value.loanAmount) {
  100. callback(new Error('已核销金额不能大于总金额'))
  101. } else {
  102. callback()
  103. }
  104. }, 1000)
  105. }
  106. const formRules = reactive({
  107. verifyAmount: [{ validator: checkAge, trigger: 'blur' }]
  108. })
  109. const formRef = ref() // 表单 Ref
  110. /** 打开弹窗 */
  111. const open = async (row: object) => {
  112. row.loanBalance = row.loanAmount - row.verifyAmount
  113. if (!row.verifyDate) {
  114. row.verifyDate = moment().format('YYYY-MM-DD')
  115. }
  116. dialogVisible.value = true
  117. resetForm()
  118. // 修改时,设置数据
  119. if (row) {
  120. formLoading.value = true
  121. try {
  122. formData.value = row
  123. } finally {
  124. formLoading.value = false
  125. }
  126. }
  127. }
  128. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  129. /** 提交表单 */
  130. const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
  131. const submitForm = async () => {
  132. // 校验表单
  133. if (!formRef) return
  134. const valid = await formRef.value.validate()
  135. if (!valid) return
  136. // 提交请求
  137. formLoading.value = true
  138. try {
  139. const urlApi = `/Loan/update`
  140. const sendData = {
  141. verifyAmount: parseInt(formData.value.verifyAmount),
  142. verifyDate: formData.value.verifyDate,
  143. verifyBz: formData.value.verifyBz,
  144. id: formData.value.id
  145. }
  146. if (formData.value.loanBalance == 0) {
  147. sendData.isVerify = 1
  148. }
  149. const result = await request.post({ url: urlApi, data: sendData }, '/business')
  150. message.success(t('核销成功'))
  151. dialogVisible.value = false
  152. // 发送操作成功的事件
  153. emit('success')
  154. } finally {
  155. formLoading.value = false
  156. }
  157. }
  158. const changeVerify = () => {
  159. formData.value.loanBalance = formData.value.loanAmount - formData.value.verifyAmount
  160. if (formData.value.loanBalance < 0) {
  161. formData.value.loanBalance = 0
  162. }
  163. }
  164. /** 重置表单 */
  165. const resetForm = () => {
  166. formData.value = {
  167. verifyAmount: '',
  168. verifyDate: '',
  169. bz1: '',
  170. id: undefined
  171. }
  172. formRef.value?.resetFields()
  173. }
  174. </script>