_express.blade.php 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <div class="row">
  2. <label class="col-3"><b class="text-danger">* </b>价格名称</label>
  3. <label class="col-7"><input type="text" class="form-control"
  4. v-model="model.express.name" :class="errors.name ? 'is-invalid' : ''"></label>
  5. </div>
  6. <div class="row mt-3">
  7. <label class="col-3"> 承运商</label>
  8. <label class="col-5"><select class="selectpicker express" multiple data-live-search="true" title="承运商(多选)"
  9. v-model="model.express.logistics" :class="errors.logistic_id ? 'is-invalid' : ''">
  10. <option v-for="logistic in pool.logistics" :value="logistic.id" v-if="logistic.type != '物流'">@{{ logistic.name }}</option>
  11. </select></label>
  12. </div>
  13. <div class="row mt-3">
  14. <label class="col-3"><b class="text-danger">* </b>首重值(KG)</label>
  15. <label class="col-7"><input type="number" min="0" step="0.01" class="form-control"
  16. v-model="model.express.initial_weight" :class="errors.initial_weight ? 'is-invalid' : ''"></label>
  17. </div>
  18. <div class="row mt-3">
  19. <label class="col-3"><b class="text-danger">* </b>续重值(KG)</label>
  20. <label class="col-7"><input type="number" min="0" step="0.01" class="form-control"
  21. v-model="model.express.additional_weight" :class="errors.additional_weight ? 'is-invalid' : ''"></label>
  22. </div>
  23. <div class="row mt-3">
  24. <label for="tax_rate_id" class="col-3 text-muted">税率</label>
  25. <select id="tax_rate_id" class="col-3 form-control ml-3" v-model="model.express.tax_rate_id" :class="errors.tax_rate_id ? 'is-invalid' : ''">
  26. <option> </option>
  27. <option v-for="tax in pool.taxRates" :value="tax.id">@{{ tax.value }}%</option>
  28. </select>
  29. </div>
  30. <div class="row mt-3">
  31. <label for="isInterval" class="col-3">设定区间</label>
  32. <label class="col-7"><input id="isInterval" type="checkbox" class="switch" v-model="model.express.isInterval"></label>
  33. </div>
  34. <div class="row mt-3" v-if="model.express.isInterval">
  35. <label class="col-3">区间值</label>
  36. <div class="col-8">
  37. <div class="scrollbar overflow-scrollbar-200">
  38. <div class="w-100 text-nowrap">
  39. <div class="w-25 d-inline-block border border-1 border-secondary rounded rounded-5 font-weight-bold">
  40. <span class="pull-right">重量</span><br><span class="pull-left">数量</span>
  41. </div>
  42. <label class="w-25 d-inline-block m-0 text-center" v-for="index of model.express.maxDom">
  43. 第@{{ index }}阶梯
  44. </label>
  45. </div>
  46. <div class="w-100 text-nowrap" v-for="(amount,i) in model.express.amount_interval">
  47. <label class="w-25 d-inline-block m-0">
  48. <input type="number" step="1" min="0" v-model="model.express.amount_interval[i]" class="form-control border-dark"
  49. :min="(model.express.amount_interval[i-1]) ? (Number(model.express.amount_interval[i-1])+1) : '0'"
  50. :class="errors['amount_interval.'+i] ? 'is-invalid' : ''"
  51. :placeholder="'数量:最小'+((model.express.amount_interval[i-1]) ? (Number(model.express.amount_interval[i-1])+1) : '0')">
  52. </label>
  53. <label class="w-25 d-inline-block m-0" v-for="(weight,j) in model.express.weight_interval[i]">
  54. <input type="number" v-model="model.express.weight_interval[i][j]" step="1" class="form-control"
  55. :class="errors['weight_interval.'+i+'.'+j] ? 'is-invalid' : ''"
  56. :min="(model.express.weight_interval[i][j-1]) ? (Number(model.express.weight_interval[i][j-1])+1) : 0"
  57. :placeholder="'重量:最小'+((model.express.weight_interval[i][j-1]) ? (Number(model.express.weight_interval[i][j-1])+1) : '0')">
  58. </label>
  59. <span class="fa fa-plus cursor-pointer" @click="addExpressWeight(i)"></span>
  60. <span class="fa fa-times cursor-pointer text-danger" @click="delExpressWeight(i)" v-if="model.express.weight_interval[i].length>0"></span>
  61. </div>
  62. <div class="w-100 text-nowrap mt-0 mb-3">
  63. <label style="width: 12.5%" class="d-inline-block mb-0 p-0 text-center border border-1 cursor-pointer border-info rounded rounded-5" @click="addExpressAmount()">
  64. <span class="fa fa-plus" style="font-size: 1rem"></span>
  65. </label>
  66. <label style="width: 12.5%" class="d-inline-block mb-0 p-0 text-center border border-1 cursor-pointer text-danger border-danger rounded rounded-5"
  67. @click="delExpressAmount()" v-if="model.express.amount_interval.length>1">
  68. <span class="fa fa-times" style="font-size: 1rem"></span>
  69. </label>
  70. </div>
  71. </div>
  72. </div>
  73. </div>
  74. <div class="row mt-3">
  75. <label class="col-3 cursor-pointer"><span>详情&nbsp;
  76. <span @click="show('express-item')" class="fa" :class="upList['express-item'] ? 'fa-angle-double-right' : 'fa-angle-double-down'"></span></span></label>
  77. <div class="col-9">
  78. <div class="w-100 form-inline">
  79. <input id="expressFile" type="file" class="d-none" accept=".csv, .xlsx, .xls" @change="importExpress($event)"/>
  80. <button type="button" class="btn btn-sm btn-outline-info w-25" @click="addExpressItem()">新增</button>
  81. <button type="button" class="btn btn-sm btn-outline-primary w-25 ml-2" id="expressImport" data-toggle="tooltip" @click="selectFile('expressFile')"
  82. title="表头可不填写,会按照下方排列顺序读取数据" @mouseenter="hoverEffect('express',true)" @mouseleave="hoverEffect('express',false)">导入</button>
  83. <h5><span class="ml-0 fa fa-question-circle-o cursor-pointer" data-toggle="tooltip" data-placement="top" title="导入与保存时自动过滤重复数据"></span></h5>
  84. </div>
  85. <div class="w-100 mt-1 ml-1" v-if="model.express.items.length>searchBase">
  86. <label>
  87. <input placeholder="定位" class="form-control form-control-sm rounded-pill" @input="searchExpress($event)"/>
  88. </label>
  89. </div>
  90. <div class="w-100 text-center mb-1 mt-1" v-if="importError.length > 0">
  91. <button type="button" class="btn btn-sm btn-danger mb-1" @click="isShowError = true" v-if="!isShowError">@{{ importError.length }}条错误,点击展开</button>
  92. <button type="button" class="btn btn-sm btn-dark mb-1" @click="isShowError = false" v-else>收起错误展示</button>
  93. <div v-if="isShowError" class="container-fluid text-danger font-weight-bolder">
  94. <div class="row text-left">
  95. <div class="col-6" v-for="error in importError">@{{ error }}</div>
  96. </div>
  97. </div>
  98. </div>
  99. <div class="font-weight-bold overflow-scrollbar-200" v-if="model.express.items.length>0 || hover.express"
  100. :class="hover.express ? 'text-danger font-weight-bold text-shadow-stress' : ''">
  101. <div class="w-100 text-nowrap">
  102. <label class="w-25 d-inline-block m-0 text-center">省</label>
  103. <label v-if="model.express.isInterval" class="d-inline-block m-0 text-center" v-for="(amount,i) in model.express.amount_interval" :style="{width:(model.express.weight_interval[i].length<1 ? 1 : model.express.weight_interval[i].length)*33+'%'}">
  104. 首重价(@{{ (model.express.amount_interval[i+1]) ? (model.express.amount_interval[i]+'-'+model.express.amount_interval[i+1]) : (model.express.amount_interval[i]+' +') }}单)
  105. </label>
  106. <label v-if="model.express.isInterval" class="d-inline-block m-0 text-center" v-for="(amount,i) in model.express.amount_interval" :style="{width:(model.express.weight_interval[i].length<1 ? 1 : model.express.weight_interval[i].length)*33+'%'}">
  107. 续重价(@{{ (model.express.amount_interval[i+1]) ? (model.express.amount_interval[i]+'-'+model.express.amount_interval[i+1]) : (model.express.amount_interval[i]+' +') }}单)
  108. </label>
  109. <label v-if="!model.express.isInterval" class="w-25 d-inline-block m-0 text-center">首重价</label>
  110. <label v-if="!model.express.isInterval" class="w-25 d-inline-block m-0 text-center">续重价</label>
  111. </div>
  112. <div class="w-100 text-nowrap" v-if="model.express.isInterval">
  113. <label class="w-25 d-inline-block m-0 text-center"></label>
  114. <label class="d-inline-block m-0 text-center" v-for="(amount,i) in model.express.amount_interval" :style="{width:(model.express.weight_interval[i].length<1 ? 1 : model.express.weight_interval[i].length)*33+'%'}">
  115. <label v-if="model.express.weight_interval[i].length>0" v-for="(weight,j) in model.express.weight_interval[i]" :style="{width:100/model.express.weight_interval[i].length+'%'}">重(@{{ model.express.weight_interval[i][j+1] ? (model.express.weight_interval[i][j]+'-'+model.express.weight_interval[i][j+1]) : (model.express.weight_interval[i][j]+' +') }}kg)</label>
  116. <label v-if="model.express.weight_interval[i].length<=0" class="w-100">重(0 +kg)</label>
  117. </label>
  118. <label class="d-inline-block m-0 text-center" v-for="(amount,i) in model.express.amount_interval" :style="{width:(model.express.weight_interval[i].length<1 ? 1 : model.express.weight_interval[i].length)*33+'%'}">
  119. <label v-if="model.express.weight_interval[i].length>0" v-for="(weight,j) in model.express.weight_interval[i]" :style="{width:100/model.express.weight_interval[i].length+'%'}">重(@{{ model.express.weight_interval[i][j+1] ? (model.express.weight_interval[i][j]+'-'+model.express.weight_interval[i][j+1]) : (model.express.weight_interval[i][j]+' +') }}kg)</label>
  120. <label v-if="model.express.weight_interval[i].length<=0" class="w-100">重(0 +kg)</label>
  121. </label>
  122. </div>
  123. <div class="w-100 text-nowrap" id="express-item">
  124. <div class="w-100" v-for="(item,i) in model.express.items" v-if="!searchItem.express || (searchItem.express && searchItem.express.includes(i))">
  125. <label class="w-25 d-inline-block m-0 text-center">
  126. <select class="form-control form-control-sm" v-model="item.province_id" :class="errors['items.'+i+'.province_id'] ? 'is-invalid' : ''">
  127. <option v-for="province in pool.provinces" :value="province.id">@{{ province.name }}</option>
  128. </select>
  129. </label>
  130. <label v-if="model.express.isInterval" class="d-inline-block m-0 text-center" v-for="(amount,j) in model.express.amount_interval" :style="{width:(model.express.weight_interval[j].length<1 ? 1 : model.express.weight_interval[j].length)*33+'%'}">
  131. <label v-for="(weight,k) in model.express.weight_interval[j]" :style="{width:100/model.express.weight_interval[j].length+'%'}">
  132. <input type="number" step="0.01" min="0" :class="errors['items.'+i+'.initial_weight_price.'+j+'.'+k] ? 'is-invalid' : ''" class="form-control form-control-sm" v-model="item.initial_weight_price[j][k]">
  133. </label>
  134. <label v-if="model.express.weight_interval[j].length<1">
  135. <input type="number" step="0.01" min="0" :class="errors['items.'+i+'.initial_weight_price.'+j+'.0'] ? 'is-invalid' : ''" class="form-control form-control-sm" v-model="model.express.items[i]['initial_weight_price'][j][0]">
  136. </label>
  137. </label>
  138. <label v-if="model.express.isInterval" class="d-inline-block m-0 text-center" v-for="(amount,j) in model.express.amount_interval" :style="{width:(model.express.weight_interval[j].length<1 ? 1 : model.express.weight_interval[j].length)*33+'%'}">
  139. <label v-for="(weight,k) in model.express.weight_interval[j]" :style="{width:100/model.express.weight_interval[j].length+'%'}">
  140. <input type="number" :class="errors['items.'+i+'.additional_weight_price.'+j+'.'+k] ? 'is-invalid' : ''" step="0.01" min="0" class="form-control form-control-sm" v-model="item.additional_weight_price[j][k]">
  141. </label>
  142. <label v-if="model.express.weight_interval[j].length<1">
  143. <input type="number" :class="errors['items.'+i+'.additional_weight_price.'+j+'.0'] ? 'is-invalid' : ''" step="0.01" min="0" class="form-control form-control-sm" v-model="model.express.items[i]['additional_weight_price'][j][0]">
  144. </label>
  145. </label>
  146. <label v-if="!model.express.isInterval" class="w-25 d-inline-block m-0 text-center">
  147. <input type="number" step="0.01" min="0" :class="errors['items.'+i+'.initial_weight_price.0.0'] ? 'is-invalid' : ''" class="form-control form-control-sm" v-model="model.express.items[i]['initial_weight_price'][0][0]">
  148. </label>
  149. <label v-if="!model.express.isInterval" class="w-25 d-inline-block m-0 text-center">
  150. <input type="number" step="0.01" min="0" :class="errors['items.'+i+'.additional_weight_price.0.0'] ? 'is-invalid' : ''" class="form-control form-control-sm" v-model="model.express.items[i]['additional_weight_price'][0][0]">
  151. </label>
  152. <label class="w-25 d-inline-block m-0 text-center cursor-pointer h3 font-weight-bold text-danger">
  153. <span @click="delExpressItem(i)">&times;</span>
  154. </label>
  155. </div>
  156. </div>
  157. </div>
  158. </div>
  159. </div>