| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 | <template>  <view class="container">    <view class="address-box">      <u--form labelPosition="left" :model="formData" :rules="rules" ref="form">        <u-form-item label="收件人名称" prop="name" labelWidth="90" borderBottom ref="item-name">          <u-input type="text" maxlength="11" v-model="formData.name" clearable placeholder="请填写收件人名称" border="none"></u-input>        </u-form-item>        <u-form-item label="手机号" prop="mobile" labelWidth="90" borderBottom ref="item-mobile">          <u-input type="number" maxlength="11" v-model="formData.mobile" clearable placeholder="请填写手机号" border="none"></u-input>        </u-form-item>        <u-form-item label="省市地区" prop="areaText" labelWidth="90" borderBottom @click=" regionVisible = true; hideKeyboard()" ref="item-areaText">          <u--input v-model="formData.areaText" disabled disabledColor="#ffffff" placeholder="请选择省市地区" border="none"></u--input>          <u-icon slot="right" name="arrow-right"></u-icon>          <w-picker :visible.sync="regionVisible" mode="region" :value="defaultRegion" default-type="value" :hide-area="false" @confirm="onConfirm($event, 'region')" @cancel="onCancel" ref="region"></w-picker>        </u-form-item>        <u-form-item label="详细地址" prop="detail" labelWidth="90" borderBottom ref="item-detail">          <u--textarea placeholder="请输入街道门牌号不低于6个字" v-model="formData.detail" count></u--textarea>        </u-form-item>        <u-form-item label="默认地址" prop="type" labelWidth="90" borderBottom ref="item-type">          <u-radio-group v-model="formData.type">            <u-radio :customStyle="{ marginRight: '16px' }" v-for="(item, index) in typeList" :key="index" :label="item.name" :name="item.value"></u-radio>          </u-radio-group>        </u-form-item>        <view class="btn-group">          <u-button type="primary" text="更新地址" customStyle="margin-top: 50px" @click="handleSubmit"></u-button>        </view>      </u--form>    </view>  </view></template><script>import { getAddressById, updateAddress } from '../../api/address'export default {  data() {    return {      id: '',      regionVisible: false,      defaultRegion: ['110000', '110100', '110101'],      typeList: [        {          name: '是',          value: 1        },        {          name: '否',          value: 2        }      ],      formData: {        id: '',        name: '',        mobile: '',        areaText: '',        areaCode: '',        detail: '',        detailAddress: '',        type: 1      },      rules: {        name: [          {            type: 'string',            min: 2,            max: 12,            required: true,            message: '请填写收件人名称',            trigger: ['blur', 'change']          },          {            message: '收件人名称不能为空',            // 触发器可以同时用blur和change            trigger: ['change', 'blur']          }        ],        mobile: [          {            type: 'integer',            required: true,            message: '请填写手机号',            trigger: ['blur', 'change']          },          {            // 自定义验证函数,见上说明            validator: (rule, value, callback) => {              // 上面有说,返回true表示校验通过,返回false表示不通过              // uni.$u.test.mobile()就是返回true或者false的              return uni.$u.test.mobile(value)            },            message: '手机号码不正确',            // 触发器可以同时用blur和change            trigger: ['change', 'blur']          }        ],        areaText: {          type: 'string',          required: true,          message: '请选择省市地区',          trigger: ['blur', 'change']        },        detailAddress: {          type: 'string',          min: 6,          max: 30,          required: true,          message: '请填写详细地址',          trigger: ['blur', 'change']        }      }    }  },  onLoad(e) {    if (!e.addressId) {      uni.$u.toast('请求参数错误')    } else {      this.id = e.addressId      this.loadAddressData()    }  },  methods: {    loadAddressData() {      getAddressById({ id: this.id }).then(res => {        this.formData = res.data        this.initRegionData()      })    },    initRegionData(){      //回显 【省市地区】 和 【详细地址】 信息      if (this.formData.areaCode) {        const areaCode = this.formData.areaCode + ''        //通过地区code反解析出【省-市-地区】code        this.defaultRegion.splice(0, 3, areaCode.substring(0,2).padEnd(6, '0'), areaCode.substring(0,4).padEnd(6, '0'), areaCode)        this.$nextTick(res => {          let areaText = this.$refs.region._data.result.result          this.formData.areaText = areaText          //通过从完整详细地址除去【省-市-地区】得到后半段地址信息          this.formData.detail = this.formData.detailAddress.replace(areaText, '')          this.$forceUpdate();        })      }    },    onConfirm(res) {      this.formData.areaText = res.result      this.formData.areaCode = res.value[2]    },    onCancel() {},    hideKeyboard() {      uni.hideKeyboard()    },    handleSubmit() {      this.$refs.form.validate().then(res => {        this.formData.detailAddress = this.formData.areaText + this.formData.detail        console.log(this.formData)        updateAddress(this.formData).then(res => {          uni.$u.toast('地址已更新')          setTimeout(() => {            uni.navigateBack()          }, 300)        })      })    }  }}</script><style lang="scss" scoped>.address-box {  width: 690rpx;  margin: 0 auto;  padding-top: 30rpx;}</style>
 |