|
|
- <template>
- <scroll-view scroll-y="true" :style="{height: height}" @scrolltolower="moreAddress">
- <uv-radio-group v-model="selectAddress" @change="editDefault" v-if="addressList.length > 0">
- <view v-for="item in addressList" :key="item.id" class="address-item">
-
- <view class="address-item-top" @click="select(item)">
- <view class="img-box">
- <image src="../../static/address/icon.png" mode="aspectFill"></image>
- </view>
-
- <view class="address-info">
- <view class="user-info">
- <text class="user-name">{{ item.name }}</text>
- <text class="user-phone">{{ item.phone }}</text>
- <text v-if="item.defaultFlag == 1" class="is-default">默认</text>
- </view>
-
- <view class="address-detail">
- {{ item.address + " " + item.addressDetails }}
- </view>
- </view>
- </view>
-
- <view class="controls" v-if="controls">
-
- <view class="default-checkbox">
- <uv-radio :name="item.id" label-disabled size="30rpx" icon-size="30rpx" activeColor="#E3441A">
- 默认地址
- </uv-radio>
- </view>
-
- <view class="edit-btn">
- <uv-icon name="edit-pen"></uv-icon>
- <text @click="editAddress(item)" class="control-title">编辑</text>
- </view>
-
- <view class="del-btn">
- <uv-icon name="trash"></uv-icon>
- <text class="control-title" @click="deleteAddress(item.id)">删除</text>
- </view>
-
- </view>
- </view>
- </uv-radio-group>
- <view style="padding: 100rpx 0;" v-else>
- <uv-empty mode="history" textSize="28rpx" iconSize="100rpx" />
- </view>
- </scroll-view>
- </template>
-
- <script>
- export default {
- props: {
- controls: {
- default: false,
- type: Boolean,
- },
- height: {
- default: 'calc(90vh - 180rpx)'
- }
- },
- data() {
- return {
- selectAddress: 0,
- queryParams: {
- pageNo: 1,
- pageSize: 10,
- },
- addressList: [],
- total: 0,
- }
- },
- methods: {
- //获取地址列表
- getAddressList() {
- return new Promise((success, fail) => {
- this.$api('getAddressPageList', this.queryParams, res => {
- if (res.code == 200) {
- this.addressList = res.result.records || [];
- this.total = res.result.total || 0;
- res.result.records.forEach(n => { //筛选默认地址
- if (n.defaultFlag == 1) {
- this.selectAddress = n.id
- }
- })
- success(res.result)
- }
- })
- })
- },
- // 加载更多
- moreAddress() {
- if (this.queryParams.pageSize > this.total) {
- return
- }
- this.queryParams.pageSize += 10
- this.getAddressList()
- },
- // 删除地址
- deleteAddress(e) {
- this.$emit('deleteAddress', e)
- },
- // 修改地址
- editAddress(e) {
- this.$emit('editAddress', e)
- },
- // 切换默认地址
- editDefault(e) {
- this.$emit('editDefault', e)
- },
- // 选择了地址
- select(e) {
- this.$emit('select', e)
- },
- }
- }
- </script>
-
- <style scoped lang="scss">
- .address-item {
- background: white;
- border-radius: 20rpx;
- overflow: hidden;
- margin-bottom: 20rpx;
- padding: 15rpx 15rpx 0rpx 15rpx;
- width: 100%;
- box-sizing: border-box;
-
- .address-item-top {
- border-bottom: 1px dashed #D3D1D1;
- display: flex;
- align-items: center;
- padding: 0rpx 0rpx 15rpx 0rpx;
-
- .img-box {
- width: 100rpx;
- height: 100rpx;
-
- image {
- width: 100%;
- height: 100%;
- display: block;
- }
- }
-
- .address-info {
- width: calc(100% - 100rpx);
- height: 100%;
- display: flex;
- flex-direction: column;
- justify-content: space-between;
- box-sizing: border-box;
- padding-left: 10rpx;
-
- .user-info {
- display: flex;
- align-items: center;
-
- text {
- display: block;
- line-height: 40rpx;
- margin-right: 20rpx;
- }
-
- .user-name,
- .user-phone {
- font-size: 30rpx;
- }
-
- .is-default {
- display: flex;
- align-items: center;
- justify-content: center;
- background: #FEB773;
- color: white;
- width: 80rpx;
- height: 35rpx;
- border-radius: 20rpx;
- font-size: 22rpx;
- }
- }
-
- .address-detail {
- color: #4a4a4a;
- font-size: 26rpx;
- overflow: hidden;
- display: -webkit-box;
- -webkit-box-orient: vertical;
- -webkit-line-clamp: 2;
- text-overflow: ellipsis;
- }
- }
- }
-
- .controls {
- display: flex;
- align-items: center;
- justify-content: space-between;
- align-items: center;
- font-size: 26rpx;
- padding: 15rpx 15rpx 25rpx 15rpx;
-
- .default-checkbox {
- display: flex;
-
- text {
- margin-left: 8rpx;
- }
- }
-
- .control-title {
- height: 30rpx;
- line-height: 30rpx;
- color: #666666;
- }
-
- view {
- display: flex;
- align-items: center;
- }
-
- image {
- width: 23rpx;
- height: 23rpx;
- vertical-align: middle;
- margin-right: 8rpx;
- }
- }
- }
- </style>
|