selectAllData.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. <template>
  2. <div>
  3. <a-button type="primary" class="inline-16" @click="allProduct" v-if="type=='upload'">一 键 全 选</a-button>
  4. <a-button type="primary" class="inline-16" @click="allProduct" v-else>一 键 删 除</a-button>
  5. <a-modal
  6. v-model:visible="progressVisible"
  7. class="custom-class"
  8. placement="right"
  9. width="500px"
  10. >
  11. <a-progress v-if="totalPage" :percent="Math.floor(progress / totalPage * 100)"></a-progress>
  12. </a-modal>
  13. </div>
  14. </template>
  15. <script setup>
  16. import listTemp from '@/components/listTemplate/index.vue'
  17. import normalTable from '@/template/normalTable/index.vue'
  18. import {ref, defineProps, defineEmits} from 'vue'
  19. import {Modal} from 'ant-design-vue'
  20. import Api from '@/api/api'
  21. import utils from '@/utils/utils'
  22. let emit = defineEmits(['handlePullApi','handleUploadApi','onSuccess','emitCallBack'])
  23. let props = defineProps({
  24. dataSize: {
  25. type:[Number,String],
  26. default:() => 200
  27. },
  28. total: {
  29. type:[Number,String],
  30. default:() => 0
  31. },
  32. type: {
  33. type:String,
  34. default:() => 'upload'
  35. },
  36. idName: {
  37. type: [Number,String]
  38. },
  39. dataType:{
  40. type:[String],
  41. default:() => '商品'
  42. },
  43. disabled:{
  44. type:[]
  45. },
  46. isEmit: {
  47. type: Object,
  48. default:() => false
  49. }
  50. })
  51. let totalPage = ref(0)
  52. let progress = ref(0)
  53. let progressVisible = ref(false)
  54. let deleteIds = ref([])
  55. let allProduct = () => {
  56. if (props.total > props.dataSize) {
  57. Modal.confirm({
  58. title:'提示',
  59. content:`总共有${props.total}个${props.dataType},是否确定${props.type == 'upload' ? '提交' : '删除'}`,
  60. async onOk() {
  61. /* 打断 */
  62. if (props.isEmit) {
  63. emit('emitCallBack',() => {
  64. progressVisible.value = true
  65. props.type == 'upload' ? totalPage.value = Math.ceil(props.total / props.dataSize) * 2 : totalPage.value = Math.ceil(props.total / props.dataSize)
  66. let totalPages = Math.ceil(props.total / props.dataSize)
  67. for (let index = 1; index <= totalPages; index++) {
  68. pullData(index)
  69. }
  70. })
  71. } else {
  72. progressVisible.value = true
  73. props.type == 'upload' ? totalPage.value = Math.ceil(total.value / props.dataSize) * 2 : totalPage.value = Math.ceil(props.total / props.dataSize)
  74. let totalPage = Math.ceil(props.total / props.dataSize)
  75. for (let index = 1; index <= totalPage; index++) {
  76. pullData(index)
  77. }
  78. }
  79. },
  80. })
  81. } else {
  82. Modal.confirm({
  83. title:'提示',
  84. content:`总共有${props.total}个${props.dataType},是否确定${props.type == 'upload' ? '提交' : '删除'}`,
  85. async onOk() {
  86. if (!props.total) return
  87. if(props.isEmit) {
  88. return emit('emitCallBack',async () => {
  89. let pullApi = {}
  90. /**
  91. * 暴露出去操作 修改拉取请求
  92. * @param pullApi - 拉取数据的请求接口
  93. */
  94. emit('handlePullApi',pullApi)
  95. pullApi.content.pageNumber = 1
  96. pullApi.content.pageSize = props.dataSize
  97. const res = await Api.requested(pullApi)
  98. if (props.type == 'upload') {
  99. let uploadApi = {}
  100. /**
  101. * 暴露出去操作 修改上传请求
  102. * @param1 uploadApi - 上传接口
  103. * @param2 res.data - 拉取的上传数据
  104. */
  105. emit('handleUploadApi',uploadApi,res.data)
  106. const res2 = await Api.requested(uploadApi)
  107. utils.message(res2,'添加成功',() => {
  108. emit('onSuccess',res2.data)
  109. })
  110. } else {
  111. deleteIds.value.push(...res.data.map(item => item[props.idName]))
  112. deleteOrderProduct(deleteIds.value)
  113. }
  114. })
  115. }
  116. let pullApi = {}
  117. /**
  118. * 暴露出去操作 修改拉取请求
  119. * @param pullApi - 拉取数据的请求接口
  120. */
  121. emit('handlePullApi',pullApi)
  122. pullApi.content.pageNumber = 1
  123. pullApi.content.pageSize = props.dataSize
  124. const res = await Api.requested(pullApi)
  125. if (props.type == 'upload') {
  126. let uploadApi = {}
  127. /**
  128. * 暴露出去操作 修改上传请求
  129. * @param1 uploadApi - 上传接口
  130. * @param2 res.data - 拉取的上传数据
  131. */
  132. emit('handleUploadApi',uploadApi,res.data)
  133. const res2 = await Api.requested(uploadApi)
  134. utils.message(res2,() => {
  135. emit('onSuccess',res2.data)
  136. })
  137. } else {
  138. deleteIds.value.push(...res.data.map(item => item[props.idName]))
  139. deleteOrderProduct(deleteIds.value)
  140. }
  141. },
  142. })
  143. }
  144. }
  145. /* 拉取数据 */
  146. let pullData = async (page) => {
  147. let pullApi = {}
  148. /**
  149. * 暴露出去操作 修改拉取请求
  150. * @param pullApi - 拉取数据的请求接口
  151. */
  152. emit('handlePullApi',pullApi)
  153. pullApi.content.pageNumber = page
  154. pullApi.content.pageSize = props.dataSize
  155. const res = await Api.requested(pullApi)
  156. progress.value++
  157. if (props.type == 'upload') {
  158. uploadData(res.data)
  159. if (progress.value >= totalPage.value) {
  160. emit('onSuccess')
  161. progressVisible.value = false
  162. progress.value = 0
  163. }
  164. } else {
  165. deleteIds.value.push(...res.data.map(item => item[props.idName]))
  166. if (progress.value >= totalPage.value) {
  167. deleteOrderProduct(deleteIds.value)
  168. progressVisible.value = false
  169. }
  170. }
  171. }
  172. /* 添加数据 */
  173. let uploadData = async (data) => {
  174. let uploadApi = {}
  175. /**
  176. * 暴露出去操作 修改上传请求
  177. * @param1 uploadApi - 上传接口
  178. * @param2 res.data - 拉取的上传数据
  179. */
  180. emit('handleUploadApi',uploadApi,data)
  181. const res = await Api.requested(uploadApi)
  182. progress.value++
  183. if (progress.value >= totalPage.value) {
  184. emit('onSuccess')
  185. progressVisible.value = false
  186. progress.value = 0
  187. }
  188. }
  189. </script>
  190. <style scoped>
  191. </style>