add-or-update.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <template>
  2. <view class="page">
  3. <view class="form">
  4. <u-form :model="form" ref="form" label-width="180rpx">
  5. <u-form-item label="收货人">
  6. <u-input v-model="form.realname" placeholder="请输入收货人姓名" />
  7. </u-form-item>
  8. <u-form-item label="联系方式">
  9. <u-input v-model="form.mobile" placeholder="请输入联系方式" />
  10. </u-form-item>
  11. <u-form-item label="所在地区">
  12. <u-input v-model="cityPickerLabel" type="select" placeholder="请选择所在地区"
  13. @click="showCityPicker = true" />
  14. </u-form-item>
  15. <u-form-item label="详细地址">
  16. <u-input v-model="form.street" placeholder="请输入详细地址" />
  17. </u-form-item>
  18. <u-form-item :border-bottom="false" label="设为默认地址">
  19. <u-switch slot="right" v-model="form.is_default" :active-value="1" :inactive-value="0" :active-color="appThemeColor"></u-switch>
  20. </u-form-item>
  21. </u-form>
  22. </view>
  23. <view class="btn">
  24. <u-button type="primary" shape="circle" @click="submit">
  25. <u-icon name="plus"></u-icon>
  26. <text>保存地址</text>
  27. </u-button>
  28. </view>
  29. <!-- 省市区选择器 -->
  30. <CityPicker v-model="showCityPicker" :area-code="selAddressCodes" @city-change="cityChange"></CityPicker>
  31. </view>
  32. </template>
  33. <script>
  34. import CityPicker from '@/pages-mine/components/city-picker.vue';
  35. export default {
  36. components: {
  37. CityPicker
  38. },
  39. data() {
  40. return {
  41. // 标题
  42. title: '收货地址',
  43. appThemeColor: this.$appTheme.appThemeColor,
  44. // 表单
  45. form: {
  46. id: null,
  47. type: 'add',
  48. realname: '',
  49. mobile: '',
  50. province: '',
  51. city: '',
  52. area: '',
  53. street: '',
  54. addressCode: '',
  55. is_default: 0
  56. },
  57. // 省市区
  58. showCityPicker: false,
  59. cityPickerLabel: '',
  60. selAddressCodes:[],
  61. };
  62. },
  63. onLoad(ops) {
  64. console.log(ops);
  65. if (ops.id) {
  66. this.form.id = ops.id;
  67. this.form.type = 'edit';
  68. this.title = '修改地址';
  69. this.getAddressDetail(ops.id);
  70. } else {
  71. this.form.id = null;
  72. this.form.type = 'add';
  73. this.title = '新建地址';
  74. }
  75. uni.setNavigationBarTitle({
  76. title:this.title
  77. })
  78. },
  79. methods: {
  80. // 省市区选择回调
  81. cityChange(e) {
  82. console.log(e);
  83. this.cityPickerLabel = e.province.name + '-' + e.city.name;
  84. if(e.area){
  85. this.cityPickerLabel += ('-' +e.area.name);
  86. }
  87. this.form.province = e.province.name;
  88. this.form.city = e.city.name;
  89. this.selAddressCodes = [e.province.code , e.city.code];
  90. if(e.area){
  91. this.form.area = e.area.name;
  92. this.selAddressCodes.push(e.area.code);
  93. }
  94. this.form.addressCode = this.selAddressCodes.toString();
  95. },
  96. // 提交表单
  97. submit() {
  98. this.$u.api.updateAddressAjax(this.form).then(({
  99. code,
  100. data
  101. }) => {
  102. if (code == 1) {
  103. uni.showToast('保存成功');
  104. uni.navigateBack();
  105. }
  106. }).catch((data)=>{
  107. console.log(data);
  108. })
  109. },
  110. // 编辑
  111. getAddressDetail(id) {
  112. uni.showLoading();
  113. this.$u.api.getAddressDetailAjax(id).then(({code,data})=>{
  114. uni.hideLoading();
  115. if(code==1){
  116. this.form = {
  117. ...this.form,
  118. id:data.id,
  119. realname:data.realname,
  120. mobile:data.mobile,
  121. province:data.province,
  122. city:data.city,
  123. area:data.area,
  124. street:data.street,
  125. addressCode:data.addressCode,
  126. is_default:data.is_default,
  127. };
  128. this.cityPickerLabel = data.province + '-' + data.city;
  129. if(data.area){
  130. this.cityPickerLabel += ('-' + data.area);
  131. }
  132. this.selAddressCodes = data.addressCode.split(',');
  133. }
  134. }).catch(()=>{uni.hideLoading();})
  135. },
  136. }
  137. };
  138. </script>
  139. <style lang="scss" scoped>
  140. .form {
  141. background-color: $app-theme-bg-color;
  142. padding: 30rpx;
  143. }
  144. .btn {
  145. padding: 60rpx 30rpx;
  146. }
  147. </style>