edit.vue 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. <template>
  2. <view class="address-form">
  3. <form @submit="formSubmit" @reset="formReset">
  4. <view class="bg-white p-0-30 f30">
  5. <view class="d-s-c border-b-d9">
  6. <text class="key-name">收货人</text>
  7. <input class="ml20 f32 flex-1 p-30-0" name="name" type="text" v-model="address.name" placeholder-class="grary9"
  8. placeholder="请输入收货人姓名" />
  9. </view>
  10. <view class="d-s-c border-b-d9">
  11. <text class="key-name">联系方式</text>
  12. <input class="ml20 f32 flex-1 p-30-0" name="phone" type="text" v-model="address.phone" placeholder-class="grary9"
  13. placeholder="请输入收货人手机号" />
  14. </view>
  15. <view class="d-s-c border-b-d9">
  16. <text class="key-name">所在地区</text>
  17. <view class="input-box flex-1">
  18. <input class="ml20 f32 flex-1 p-30-0" type="text" value="" placeholder-class="grary9" placeholder="" v-model="selectCity"
  19. disabled="true" @click="showMulLinkageThreePicker" />
  20. </view>
  21. </view>
  22. <view class="d-s-c border-b-d9">
  23. <text class="key-name">详细地址</text>
  24. <textarea class="ml20 flex-1 f32 p-30-0 lh150" name="detail" placeholder-class="grary9" :auto-height="true"
  25. v-model="address.detail" placeholder="请输入街道小区楼牌号等"></textarea>
  26. </view>
  27. </view>
  28. <view class="p30"><button type="primary" form-type="submit" class="btn-gcred f32 mt60 addBtn">保存</button></view>
  29. </form>
  30. <mpvue-city-picker v-if="is_load" ref="mpvueCityPicker" :province="province" :city="city" :area="area" :pickerValueDefault="cityPickerValueDefault" @onConfirm="onConfirm"></mpvue-city-picker>
  31. </view>
  32. </template>
  33. <script>
  34. import mpvueCityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue';
  35. export default {
  36. components: {
  37. mpvueCityPicker
  38. },
  39. data() {
  40. return {
  41. cityPickerValueDefault: [0, 0, 0],
  42. selectCity: '选择省,市,区',
  43. province_id: 0,
  44. city_id: 0,
  45. region_id: 0,
  46. /*地址id*/
  47. address_id: 0,
  48. /*地址数据*/
  49. address: {},
  50. /*地区*/
  51. region: {},
  52. is_load: false,
  53. province: [],
  54. city: [],
  55. area: [],
  56. };
  57. },
  58. onLoad(e) {
  59. this.address_id = e.address_id;
  60. },
  61. mounted() {
  62. /*获取地址数据*/
  63. this.getData();
  64. },
  65. methods: {
  66. /*获取数据*/
  67. getData() {
  68. let self = this;
  69. let address_id = self.address_id;
  70. self._get(
  71. 'user.address/detail', {
  72. address_id: address_id
  73. },
  74. function(res) {
  75. self.address = res.data.detail;
  76. self.address_id = res.data.detail.address_id;
  77. self.province_id = res.data.detail.province_id;
  78. self.city_id = res.data.detail.city_id;
  79. self.region_id = res.data.detail.region_id;
  80. self.region = res.data.region;
  81. let add = '';
  82. var b = self.region.forEach(item => {
  83. add += item;
  84. });
  85. self.selectCity = add;
  86. self.province = res.data.regionData[0];
  87. self.city = res.data.regionData[1];
  88. self.area = res.data.regionData[2];
  89. self.is_load = true;
  90. }
  91. );
  92. },
  93. /*提交地址*/
  94. formSubmit: function(e) {
  95. let self = this;
  96. var formdata = e.detail.value;
  97. formdata.province_id = self.province_id;
  98. formdata.city_id = self.city_id;
  99. formdata.region_id = self.region_id;
  100. formdata.address_id = self.address_id;
  101. formdata.region = self.region;
  102. if (formdata.name == '') {
  103. uni.showToast({
  104. title: '请输入收货人姓名',
  105. duration: 1000,
  106. icon: 'none'
  107. });
  108. return false;
  109. }
  110. if (formdata.phone == '') {
  111. uni.showToast({
  112. title: '请输入手机号码',
  113. duration: 1000,
  114. icon: 'none'
  115. });
  116. return false;
  117. }
  118. /*let reg = /^((0\d{2,3}-\d{7,8})|(1[3456789]\d{9}))$/;
  119. if (!reg.test(formdata.phone)) {
  120. uni.showToast({
  121. title: '手机号码格式不正确',
  122. duration: 1000,
  123. icon: 'none'
  124. });
  125. return false;
  126. }*/
  127. if (formdata.province_id == 0 || formdata.city_id == 0 || formdata.region_id) {
  128. if (formdata.detail == '') {
  129. uni.showToast({
  130. title: '请选择完整省市区',
  131. duration: 1000,
  132. icon: 'none'
  133. });
  134. return false;
  135. }
  136. }
  137. self._post('user.address/edit', formdata, function(res) {
  138. self.showSuccess(res.msg, function() {
  139. // #ifdef H5
  140. uni.navigateBack({
  141. delta: 2
  142. });
  143. //#endif
  144. // #ifndef H5
  145. uni.navigateBack({
  146. delta: 1
  147. });
  148. //#endif
  149. });
  150. });
  151. },
  152. /*清空数据*/
  153. formReset: function(e) {
  154. console.log('清空数据');
  155. },
  156. /*三级联动选择*/
  157. showMulLinkageThreePicker() {
  158. this.$refs.mpvueCityPicker.show();
  159. },
  160. /*选择之后绑定*/
  161. onConfirm(e) {
  162. this.region = e.label.split(',');
  163. this.selectCity = e.label;
  164. this.province_id = e.cityCode[0];
  165. this.city_id = e.cityCode[1];
  166. this.region_id = e.cityCode[2];
  167. }
  168. }
  169. };
  170. </script>
  171. <style>
  172. page {
  173. background-color: #FFFFFF;
  174. }
  175. .address-form {
  176. border-top: 16rpx solid #f2f2f2;
  177. }
  178. .address-form .key-name {
  179. width: 140rpx;
  180. font-size: 32rpx;
  181. }
  182. .address-form .btn-red {
  183. height: 88rpx;
  184. line-height: 88rpx;
  185. border-radius: 44rpx;
  186. box-shadow: 0 8rpx 16rpx 0 rgba(226, 35, 26, .6);
  187. }
  188. .addBtn {
  189. height: 80rpx;
  190. line-height: 80rpx;
  191. border-radius: 40rpx;
  192. }
  193. </style>