AddressItem.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. <template>
  2. <div class="address">
  3. <div class="radio" v-if="type == 'submit'" @click="chooseAddress">
  4. <img class="radio-img" :src="isChoose ? activeIcon : inactiveIcon" />
  5. </div>
  6. <div class="content">
  7. <div class="address-item">
  8. <div class="address-name">收货人</div>
  9. <div class="address-val">{{ info.name }} {{ info.phone }}</div>
  10. </div>
  11. <div class="address-item">
  12. <div class="address-name">收货地址</div>
  13. <div class="address-val">{{ info.fullAddress }}</div>
  14. </div>
  15. <div class="btn-list">
  16. <van-button plain color="#000" size="small" round disabled v-if="info.isDefault">默认</van-button>
  17. <van-button plain color="#FF8F00" size="small" round @click="goNext('editAddress', { id: info.id })">
  18. 编辑
  19. </van-button>
  20. <van-button v-if="type == 'list'" plain type="danger" size="small" round>删除</van-button>
  21. </div>
  22. </div>
  23. </div>
  24. </template>
  25. <script>
  26. import { useUserStore } from '@/stores/user'
  27. import { mapState } from 'pinia'
  28. import activeIcon from '@/assets/icon_xuanzhong_pre.png'
  29. import inactiveIcon from '@/assets/icon_xuanzhong.png'
  30. export default {
  31. name: 'addressItem',
  32. props: {
  33. info: {
  34. type: Object,
  35. default: () => {
  36. return {}
  37. }
  38. },
  39. type: {
  40. type: String,
  41. default: 'list'
  42. },
  43. isChoose: {
  44. type: Boolean,
  45. default: false
  46. }
  47. },
  48. data() {
  49. return {
  50. activeIcon,
  51. inactiveIcon
  52. }
  53. },
  54. computed: {
  55. ...mapState(useUserStore, ['user'])
  56. },
  57. methods: {
  58. chooseAddress() {
  59. this.$emit('chooseAddress', this.info.id)
  60. }
  61. }
  62. }
  63. </script>
  64. <style lang="less" scoped>
  65. .address {
  66. background: rgba(var(--ion-text-color-rgb), 1);
  67. border-radius: 2px;
  68. padding: 15px;
  69. display: flex;
  70. align-items: center;
  71. }
  72. .radio {
  73. padding: 10px 10px 10px 0;
  74. }
  75. .radio-img {
  76. width: 16px;
  77. height: 16px;
  78. margin-right: 10px;
  79. }
  80. .content {
  81. flex-grow: 1;
  82. }
  83. .address-item {
  84. display: flex;
  85. padding: 0 0 10px;
  86. .address-name {
  87. font-size: 13px;
  88. color: rgba(170, 172, 173, 1);
  89. line-height: 20px;
  90. min-width: 72px;
  91. }
  92. .address-val {
  93. font-size: 14px;
  94. color: rgba(var(--ion-color-light-contrast-rgb), 1);
  95. line-height: 20px;
  96. }
  97. }
  98. .btn-list {
  99. display: flex;
  100. justify-content: flex-end;
  101. .van-button:not(:last-child) {
  102. margin-right: 10px;
  103. }
  104. }
  105. </style>