addEditor.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. <script lang="ts" setup>
  2. import { ref, reactive, onMounted, inject, watch } from "vue";
  3. import { UploadRequestOptions } from 'element-plus';
  4. import { Delete } from '@element-plus/icons-vue'
  5. import { tableShowOverflowTooltip } from '@/utils/globalVariables'
  6. import { formatDate } from '@/utils/times'
  7. import { downloadFile } from '@/utils/tools'
  8. import { post, get, uploadFile } from "@/utils/request";
  9. const props = defineProps<{
  10. paymentPlan: any[],
  11. enclosure: any[],
  12. enclosureDetele: any[]
  13. }>()
  14. const globalPopup = inject<GlobalPopup>('globalPopup')
  15. const paymentPlan = ref(props.paymentPlan)
  16. const enclosure = ref(props.enclosure)
  17. const enclosureDetele = ref<any[]>([])
  18. const uploadRef = ref<any>()
  19. watch(() => props.paymentPlan, (newVal, _oldVal) => {
  20. paymentPlan.value = newVal || []
  21. })
  22. watch(() => props.enclosure, (newVal, _oldVal) => {
  23. enclosure.value = newVal || []
  24. })
  25. watch(() => props.enclosureDetele, (newVal, _oldVal) => {
  26. enclosureDetele.value = newVal || []
  27. })
  28. // 上传附件
  29. async function httpUploadFile(param: UploadRequestOptions) {
  30. const { file } = param
  31. enclosure.value.push({ name: file.name, file, needUpload: true })
  32. return
  33. }
  34. function addPlan() {
  35. paymentPlan.value.push({
  36. isPayed: false,
  37. payDate: formatDate(new Date()),
  38. amount: '0'
  39. })
  40. }
  41. function deteleTables(row: any, index: number, type: 'paymentPlan' | 'enclosure') {
  42. if (type === 'paymentPlan') {
  43. paymentPlan.value.splice(index, 1)
  44. } else {
  45. if(row.id) {
  46. enclosureDetele.value.push(row.id)
  47. }
  48. enclosure.value.splice(index, 1)
  49. }
  50. }
  51. function getAddEditorData() {
  52. return {
  53. paymentPlan: paymentPlan.value,
  54. enclosure: enclosure.value,
  55. enclosureDetele: enclosureDetele.value
  56. }
  57. }
  58. defineExpose({
  59. getAddEditorData
  60. })
  61. </script>
  62. <template>
  63. <div>
  64. <div>回款计划</div>
  65. <el-table :show-overflow-tooltip="tableShowOverflowTooltip" :data="paymentPlan" height="260">
  66. <el-table-column label="是否已回款">
  67. <template #default="scope">
  68. <el-checkbox v-model="scope.row.isPayed" label="已回款" />
  69. </template>
  70. </el-table-column>
  71. <el-table-column label="回款日期">
  72. <template #default="scope">
  73. <el-date-picker v-model="scope.row.payDate" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"
  74. placeholder="回款日期" />
  75. </template>
  76. </el-table-column>
  77. <el-table-column label="回款金额">
  78. <template #default="scope">
  79. <el-input v-model="scope.row.amount" v-enter-number placeholder="回款金额">
  80. <template #prefix>
  81. <el-text class="mx-1" type="info">¥</el-text>
  82. </template>
  83. </el-input>
  84. </template>
  85. </el-table-column>
  86. <el-table-column prop="operation" width="80">
  87. <template #header>
  88. <el-link type="primary" :underline="false" @click="addPlan()">添加</el-link>
  89. </template>
  90. <template #default="scope">
  91. <el-button type="danger" :icon="Delete" size="small"
  92. @click="deteleTables(scope.row, scope.$index, 'paymentPlan')"></el-button>
  93. </template>
  94. </el-table-column>
  95. </el-table>
  96. <div>附件</div>
  97. <el-table :show-overflow-tooltip="tableShowOverflowTooltip" :data="enclosure" height="260">
  98. <el-table-column label="序号" width="100">
  99. <template #default="scope">
  100. {{ scope.$index + 1 }}
  101. </template>
  102. </el-table-column>
  103. <el-table-column label="文件名称" prop="name"></el-table-column>
  104. <el-table-column label="操作" width="80">
  105. <template #default="scope">
  106. <el-link type="primary" :underline="false" v-if="scope.row.id" @click="downloadFile(scope.row.url, scope.row.name)">下载</el-link>
  107. </template>
  108. </el-table-column>
  109. <el-table-column label="操作" width="80">
  110. <template #header>
  111. <el-upload ref="uploadRef" :http-request="httpUploadFile" :show-file-list="false" element-loading-text="正在上传"
  112. multiple>
  113. <template #trigger>
  114. <el-link type="primary" :underline="false">添加</el-link>
  115. </template>
  116. </el-upload>
  117. </template>
  118. <template #default="scope">
  119. <el-button type="danger" :icon="Delete" size="small"
  120. @click="deteleTables(scope.row, scope.$index, 'enclosure')"></el-button>
  121. </template>
  122. </el-table-column>
  123. </el-table>
  124. </div>
  125. </template>
  126. <style lang="scss" scoped></style>