add-or-update.vue 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. <template>
  2. <view class="page">
  3. <view class="form">
  4. <u-form :model="form" ref="uForm" label-width="180rpx" :error-type="['toast']" :rules="rules">
  5. <u-form-item label="您的姓名" prop="name">
  6. <u-input v-model="form.name" placeholder="请输入您的姓名" />
  7. </u-form-item>
  8. <u-form-item label="联系方式" prop="mobile">
  9. <u-input type="number" v-model="form.mobile" placeholder="请输入联系方式" />
  10. </u-form-item>
  11. <u-form-item label="所在地区">
  12. <uni-data-picker v-model="selAddressCodes" :localdata="dataList" placeholder="请选择所在地区"
  13. popup-title="请选择所在地区" @change="cityChange"></uni-data-picker>
  14. </u-form-item>
  15. <u-form-item label="详细地址" prop="detailAddress">
  16. <u-input v-model="form.detailAddress" placeholder="请输入详细地址" />
  17. </u-form-item>
  18. <u-form-item :border-bottom="false" label="设为默认地址">
  19. <u-switch slot="right" v-model="form.defaultFlag" :active-value="1" :inactive-value="0"
  20. :active-color="appThemeColor" @change="changeDefaultFlag"></u-switch>
  21. </u-form-item>
  22. </u-form>
  23. </view>
  24. <view class="btn">
  25. <u-button type="primary" shape="circle" @click="submit">
  26. <u-icon name="plus"></u-icon>
  27. <text>保存地址</text>
  28. </u-button>
  29. </view>
  30. </view>
  31. </template>
  32. <script>
  33. import CityPicker from '@/pages-mine/components/city-picker.vue';
  34. export default {
  35. components: {
  36. CityPicker
  37. },
  38. data() {
  39. return {
  40. // 标题
  41. title: '收货地址',
  42. appThemeColor: this.$appTheme.appThemeColor,
  43. // 表单
  44. form: {
  45. id: '',
  46. "provinceId": '',
  47. "cityId": '',
  48. "districtId": '',
  49. "detailAddress": "",
  50. "name": "",
  51. "mobile": "",
  52. "defaultFlag": 0
  53. },
  54. // 表单校验规则
  55. rules: {
  56. name: [{
  57. required: true,
  58. message: '请输入收货人姓名',
  59. trigger: ['change', 'blur'],
  60. }],
  61. mobile: [{
  62. required: true,
  63. message: '请输入手机号',
  64. trigger: ['change', 'blur'],
  65. }, {
  66. pattern: /^1[3-9]\d{9}$/,
  67. message: '请输入正确的手机号',
  68. trigger: ['change', 'blur'],
  69. }],
  70. detailAddress: [{
  71. required: true,
  72. message: '请输入详细地址',
  73. trigger: ['change', 'blur'],
  74. }],
  75. },
  76. // 省市区
  77. selAddressCodes: [],
  78. dataList: [],
  79. };
  80. },
  81. // 必须要在onReady生命周期,因为onLoad生命周期组件可能尚未创建完毕
  82. onReady() {
  83. this.$refs.uForm.setRules(this.rules);
  84. },
  85. onLoad(ops) {
  86. if (ops.id) {
  87. this.form.id = ops.id;
  88. this.form.type = 'edit';
  89. this.title = '修改地址';
  90. this.getAddressDetail(ops.id);
  91. } else {
  92. this.form.id = '';
  93. this.form.type = 'add';
  94. this.title = '新建地址';
  95. }
  96. uni.setNavigationBarTitle({
  97. title: this.title
  98. })
  99. uni.$u.http.get('/token/getAllDistrict').then(res => {
  100. if (res.code == 200) {
  101. this.dataList = res.data
  102. }
  103. })
  104. },
  105. methods: {
  106. // 设置默认地址
  107. changeDefaultFlag(value) {
  108. this.form.defaultFlag = value
  109. },
  110. // 省市区选择回调
  111. cityChange(e) {
  112. let {
  113. value
  114. } = e.detail
  115. if (!value.length) return
  116. this.form.provinceId = value[0].value;
  117. this.form.cityId = value[1].value
  118. this.form.districtId = value[2].value || ''
  119. },
  120. // 提交表单
  121. submit() {
  122. if (!this.form.provinceId) {
  123. uni.showToast({
  124. title: '请选择所在地区',
  125. icon: 'none'
  126. })
  127. return
  128. }
  129. this.$refs.uForm.validate(valid => {
  130. console.log(valid, 'valid')
  131. if (valid) {
  132. let path = this.form.id ? '/token/user/address/update' : '/token/user/address/add'
  133. uni.$u.http.post(path, this.form).then(res => {
  134. if (res.code == 200) {
  135. uni.showToast({
  136. title: '操作成功',
  137. icon: 'success'
  138. });
  139. uni.navigateBack();
  140. } else {
  141. uni.showToast({
  142. title: res.msg,
  143. icon: 'none'
  144. })
  145. }
  146. })
  147. }
  148. });
  149. },
  150. // 编辑
  151. getAddressDetail(id) {
  152. uni.showLoading();
  153. uni.$u.http.get(`/token/user/address/getDetail/${id}`).then((res) => {
  154. if (res.code == 200) {
  155. this.form = res.data
  156. this.selAddressCodes = [res.data.provinceId, res.data.cityId, res.data.districtId]
  157. }
  158. }).finally(() => {
  159. uni.hideLoading();
  160. })
  161. },
  162. }
  163. };
  164. </script>
  165. <style lang="scss" scoped>
  166. .form {
  167. background-color: $app-theme-bg-color;
  168. padding: 30rpx;
  169. }
  170. .btn {
  171. padding: 60rpx 30rpx;
  172. }
  173. </style>