importRejectedNumber.blade.php 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. @extends('layouts.app')
  2. @section('title')退回件-导入@endsection
  3. @section('content')
  4. <div id="nav2">
  5. @component('rejected.menu')@endcomponent
  6. @component('rejected.search.menu')@endcomponent
  7. </div>
  8. <div class="container-fluid" id="issue_import_div">
  9. <div class="card col-md-8 offset-md-2">
  10. <div class="card-body">
  11. @can('退货管理-编辑')
  12. <div class="form-group row text-center">
  13. <div class="col-12 text-danger">
  14. 退回单号修改<br/>
  15. 【退回单号,订单号】 必填项;【到付金额】 非必填项<br/>
  16. <span class="text-muted" style="opacity:0.7">
  17. 不支持空格分隔,只支持中英文逗号分隔<br/>
  18. 如果在导入后出现部分数据导入失败,修改对应错误的数据继续导入即可.
  19. </span>
  20. </div>
  21. </div>
  22. <div class="form-group row">
  23. <div class="col-8 offset-2">
  24. <button type="button" class="btn form-control btn-primary" @click="showPasteDataModal">文本导入</button>
  25. </div>
  26. </div>
  27. <hr/>
  28. @endcan
  29. </form>
  30. </div>
  31. </div>
  32. <div class="modal fade" id="pasteData" role="dialog" tabindex="-1" aria-labelledby="pasteDataTetlie" aria-hidden="true">
  33. <div class="modal-dialog modal-dialog-centered modal-lg" role="document">
  34. <div class="modal-content">
  35. <div class="modal-header">
  36. <div class="row modal-title font-weight-bold w-100 text-nowrap ml-1 noselect" id="pasteDataTitle">
  37. <span v-for="(row,i) in rows" draggable="true"
  38. @drop="drop($event,i)" @dragover="dragover($event)" @dragstart="dragstart($event,i)"
  39. class="col-4 border text-center" style="cursor: move"
  40. :class="requiredRows.includes(row)?'text-danger':''">@{{ row }}</span>
  41. </div>
  42. </div>
  43. <div class="modal-body text-center">
  44. <button type="button" id="popover" class="btn btn-danger" v-if="popoverContent"
  45. data-container="body" data-toggle="popover" data-placement="bottom"
  46. :data-content="popoverContent" data-html="true">
  47. 部分数据导入失败
  48. </button>
  49. <textarea id="pasteDataText" class="w-100" style="height: 400px" v-model="pasteDataText"
  50. @keydown.tab="forbidTab($event)" @keyup.tab="replaceSpacing()"
  51. placeholder="内容可为EXCEL复制,也可手动输入使用“TAB”缩进符区分列,以表头顺序为准" @click="hidePopover"></textarea>
  52. </div>
  53. <div class="modal-footer">
  54. <button class="btn btn-primary" @click="importPasteData">开始导入</button>
  55. </div>
  56. </div>
  57. </div>
  58. </div>
  59. </div>
  60. @endsection
  61. @section('lastScript')
  62. <script>
  63. let listVue = new Vue({
  64. el:'#issue_import_div',
  65. data:{
  66. rows:['退回单号','订单号','到付金额'],
  67. requiredRows:['退回单号','订单号','到付金额'],
  68. popoverContent:'',
  69. pasteDataText: '',
  70. },
  71. mounted:function(){
  72. $('[data-toggle="popover"]').popover();
  73. },
  74. methods:{
  75. showPasteDataModal(){
  76. $('#popover').attr('hidden','hidden')
  77. $('#pasteData').modal('show')
  78. },
  79. drop(e,index){
  80. e.preventDefault();
  81. if (this.dom !== e.target.innerHTML){
  82. this.dom.innerHTML = e.target.innerHTML;
  83. let temp=JSON.parse(JSON.stringify(this.rows[index]));
  84. this.$set(this.rows,index,this.rows[e.dataTransfer.getData('text/html')]);
  85. this.$set(this.rows,Number(e.dataTransfer.getData('text/html')),temp);
  86. }
  87. },
  88. dragover(e){
  89. e.preventDefault();
  90. },
  91. dragstart(e,index){
  92. this.dom = e.target.innerHTML;
  93. e.dataTransfer.setData("text/html",index);
  94. },
  95. importPasteData(){
  96. if(!this.pasteDataText){
  97. tempTip.setDuration(2000)
  98. tempTip.show('导入文本不能为空')
  99. }
  100. let _this = this
  101. let data = {dataText:this.pasteDataText}
  102. tempTip.setDuration(99999)
  103. tempTip.setIndex(1051)
  104. tempTip.waitingTip('正在执行中,请稍后')
  105. axios.post('{{url('apiLocal/rejectedBill/importRejectedNumber')}}',data).then(function (response) {
  106. tempTip.cancelWaitingTip()
  107. if(response.data.success){
  108. $('#pasteData').modal('hide')
  109. tempTip.setDuration(2000)
  110. tempTip.showSuccess('导入完毕')
  111. }else{
  112. let content = '';
  113. for (const key in response.data.error) {
  114. content+=key+':'+response.data.error[key] + "</br>"
  115. }
  116. _this.popoverContent = content
  117. setTimeout(function () {
  118. $("#popover").removeAttr('hidden').popover('show')
  119. },1);
  120. }
  121. }).catch(function(error){
  122. tempTip.cancelWaitingTip()
  123. tempTip.setDuration(2000)
  124. tempTip.show('导入失败'+error)
  125. })
  126. },
  127. forbidTab(e){
  128. e.preventDefault();
  129. },
  130. replaceSpacing(){
  131. this.pasteDataText += "\t";
  132. },
  133. hidePopover(){
  134. let _this = this;
  135. setTimeout(function () {
  136. _this.popoverContent = ''
  137. $("#popover").removeAttr('hidden').popover('hide')
  138. },1)
  139. }
  140. }
  141. });
  142. </script>
  143. @endsection