add-address.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <template>
  2. <v-header :title="item.title" backgroundColor="#f8f9fb">
  3. <view class="add-address-container flex">
  4. <view class="add-address-group">
  5. <view
  6. v-for="(item,index) in inputData"
  7. :key="index"
  8. class="row aCenter address-item"
  9. >
  10. <view class="address-label">{{item.label}}</view>
  11. <view class="flex-all-1 overflow">
  12. <view class="screen_all aEnd" v-if="item.component==='switch'">
  13. <switch @change="switchChangeValue($event,item)" :checked="item.value" color="#41AE3C"></switch>
  14. </view>
  15. <address-picker @change="changeAddress($event,item)" :value="item.labelValue" v-else-if="item.component==='address'">
  16. <view class="row aCenter">
  17. <view class="flex-all-1 overflow">
  18. <view class="line-1 address-input"
  19. :class="{
  20. 'address-placeholder': !item.value
  21. }"
  22. >{{item.valueFormat || item.placeholder}}</view>
  23. </view>
  24. <text class="iconfont iconfont-more address-more"></text>
  25. </view>
  26. </address-picker>
  27. <input v-else v-model="item.value" :type="item.type || 'text'" :maxlength="item.maxLength" :placeholder="item.placeholder" class="address-input" placeholder-class="address-placeholder" />
  28. </view>
  29. </view>
  30. </view>
  31. <view class="flex-all-1"></view>
  32. <view class="button-container center">
  33. <view v-if="item.delete" @click="deleteAddress" class="add-address-button add-address-button-delete center">删除地址</view>
  34. <view @click="submit" class="add-address-button center">{{item.button}}</view>
  35. </view>
  36. </view>
  37. </v-header>
  38. </template>
  39. <script>
  40. import vHeader from '../../components/v-header/main';
  41. import inputData from "./data/input";
  42. import addressPicker from '../../components/address-picker/main';
  43. import params from '@/mixins/params';
  44. import typeData from './data/type';
  45. import test from '@/utils/test/index';
  46. import notice from '@/utils/notice/index';
  47. import modal from '@/utils/tool/modal';
  48. import globalMixins from '@/mixins/global';
  49. export default {
  50. data(){
  51. return {
  52. inputData: inputData(),
  53. item:{}
  54. }
  55. },
  56. methods:{
  57. changeAddress(item,cItem){
  58. cItem.value = item.code;
  59. cItem.labelValue = item.value;
  60. this.$set(cItem,'valueFormat',cItem.labelValue.join(''))
  61. },
  62. switchChangeValue(item,cItem){
  63. cItem.value = item.detail.value;
  64. },
  65. submit(){
  66. if (this.submitLoading) return;
  67. test.verificationPromise(this.inputData,true).then((data)=>{
  68. /* 设置地址 */
  69. let useAddressValue = this.inputData[2].labelValue;
  70. data.province_name = useAddressValue[0];
  71. data.city_name = useAddressValue[1];
  72. data.area_name = useAddressValue[2];
  73. data.city_id = data.province_id[1];
  74. data.area_id = data.province_id[2];
  75. data.province_id = data.province_id[0];
  76. // 设置是否默认
  77. data.is_default = data.is_default ? 1 :0;
  78. if (this.$params.type === 'save') {
  79. data.address_id = this.$params.id;
  80. }
  81. let requestData = data;
  82. return this.$request({
  83. url:this.$params.type ==='save' ? 'address/editAddress' :'address/addAddress',
  84. token:true,
  85. data,
  86. loading:'处理中',
  87. message:2,
  88. failMessage:true,
  89. next:({status}) => this.submitLoading = status
  90. }).then((data)=>{
  91. if (data.isSuccess) {
  92. if (this.$params.type !=='save') {
  93. requestData.id = data.data.id;
  94. } else {
  95. requestData.id = requestData.address_id;
  96. delete requestData.address_id;
  97. }
  98. notice.trigger('address',{
  99. [this.$params.type !=='save'?'add':'update']:true,
  100. item:requestData,
  101. toast:true,
  102. msg: data.msg
  103. });
  104. // 返回上一页
  105. return this.$router.navigateBack();
  106. }
  107. });
  108. });
  109. },
  110. deleteAddress(){
  111. if (this.submitLoading && !this.$params.id) return;
  112. modal.confirm({
  113. title:'是否删除此收货地址?',
  114. confirmText:'删除',
  115. confirmColor:'#FC3538',
  116. confirm:()=>{
  117. return this.$request({
  118. url:'address/delAddress',
  119. token:true,
  120. data:{
  121. address_id: this.$params.id
  122. },
  123. loading:'删除中',
  124. message:2,
  125. failMessage:true,
  126. next:({status}) => this.submitLoading = status
  127. }).then((data)=>{
  128. if (data.isSuccess) {
  129. notice.trigger('address',{
  130. delete:true,
  131. id:this.$params.id,
  132. toast:true,
  133. msg: data.msg
  134. });
  135. // 返回上一页
  136. return this.$router.navigateBack();
  137. }
  138. })
  139. }
  140. });
  141. }
  142. },
  143. mixins:[params,globalMixins],
  144. components:{
  145. vHeader,
  146. addressPicker
  147. },
  148. onLoad(){
  149. this.item = typeData[this.$params.type] || typeData.add;
  150. if (this.$params.type === 'save') {
  151. this.inputData = inputData(this.$memoryParams.item);
  152. }
  153. }
  154. }
  155. </script>
  156. <style src="./style.scss" scoped lang="scss"></style>