list.vue 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <template>
  2. <div class="sld_address_list">
  3. <MemberTitle :memberTitle="L['收货地址']"></MemberTitle>
  4. <div class="add_default_con">
  5. <p class="title">{{ L["地址管理"] }}</p>
  6. <div class="flex_row_start_center">
  7. <div
  8. class="address_item"
  9. v-if="default_address.data.length > 0"
  10. :style="{ backgroundImage: 'url(' + addressbg2 + ')' }"
  11. >
  12. <div class="defalut_edit flex_row_between_center">
  13. <span class="red">{{ L["默认地址"] }}</span>
  14. <div class="oprate">
  15. <i
  16. class="iconfont icon-bianji pointer"
  17. @click="editAddress(default_address.data[0])"
  18. ></i>
  19. </div>
  20. </div>
  21. <div class="name_phone">
  22. <span class="name">{{ default_address.data[0].memberName }}</span>
  23. <span class="phone">{{ default_address.data[0].telMobile }}</span>
  24. </div>
  25. <div class="add_info">{{ default_address.data[0].addressAll }}</div>
  26. <div class="add_detail overflow_ellipsis_two">
  27. {{ default_address.data[0].detailAddress }}
  28. </div>
  29. </div>
  30. <div
  31. class="add_address flex_column_center_center pointer"
  32. @click="addAddress"
  33. >
  34. <i class="iconfont icon-xinzengdizhi"></i>
  35. <p>{{ L["新增地址"] }}</p>
  36. </div>
  37. </div>
  38. </div>
  39. <div class="address_list_con">
  40. <p class="title mange">{{ L["全部地址"] }}</p>
  41. <div class="container flex_row_start_center">
  42. <div
  43. v-for="(addressItem, index) in address_list.data"
  44. :key="index"
  45. class="address_item"
  46. :style="{ backgroundImage: 'url(' + addressbg + ')' }"
  47. >
  48. <div class="defalut_edit flex_row_between_center">
  49. <span class="red">{{
  50. addressItem.isDefault == 1 ? "默认地址" : " "
  51. }}</span>
  52. <div class="oprate">
  53. <i
  54. class="iconfont icon-duihao1 pointer"
  55. @click="setDefault(addressItem.addressId)"
  56. v-if="addressItem.isDefault != 1"
  57. :title="L['设置为默认']"
  58. ></i>
  59. <i
  60. class="iconfont icon-bianji pointer"
  61. @click="editAddress(addressItem)"
  62. :title="L['编辑地址']"
  63. ></i>
  64. <i
  65. class="iconfont icon-lajitong pointer"
  66. @click="delAddress(addressItem.addressId)"
  67. :title="L['删除地址']"
  68. ></i>
  69. </div>
  70. </div>
  71. <div class="name_phone">
  72. <span class="name">{{ addressItem.memberName }}</span>
  73. <span class="phone">{{ addressItem.telMobile }}</span>
  74. </div>
  75. <div class="add_info">{{ addressItem.addressAll }}</div>
  76. <div
  77. class="add_detail overflow_ellipsis_two"
  78. :title="addressItem.detailAddress"
  79. >
  80. {{ addressItem.detailAddress }}
  81. </div>
  82. </div>
  83. </div>
  84. <SldCommonEmpty
  85. v-if="address_list.data.length == 0"
  86. :tip="L['暂无收货地址~']"
  87. totalHeight="300"
  88. totalWidth="934"
  89. />
  90. </div>
  91. <AddressOperation
  92. v-if="addressVisibleFlag"
  93. @close="close"
  94. @refreshAddress="refreshAddress"
  95. :visibleFlag="true"
  96. :type="type"
  97. :addressInfo="addressInfo"
  98. />
  99. </div>
  100. </template>
  101. <script setup>
  102. import { ElMessage, ElMessageBox } from "element-plus";
  103. import { ref, getCurrentInstance, reactive, onMounted } from "vue";
  104. // import { lang_zn } from "@/assets/language/zh";
  105. import { getCurLanguage } from '@/composables/common.js';
  106. import { useFiltersStore } from "@/store/filter.js";
  107. const filtersStore = useFiltersStore();
  108. // const L = lang_zn;
  109. const L = getCurLanguage();
  110. definePageMeta({
  111. layout: "member",
  112. middleware: ["auth"],
  113. });
  114. const addressVisibleFlag = ref(false);
  115. const { proxy } = getCurrentInstance();
  116. const addressbg = ref("/addressbg.png");
  117. const addressbg2 = ref("/addressbg2.png");
  118. const address_list = reactive({ data: [] });
  119. const default_address = reactive({ data: [] });
  120. const addressInfo = reactive({ data: {} });
  121. const type = ref("add");
  122. //点击添加地址事件
  123. const addAddress = () => {
  124. type.value = "add";
  125. addressVisibleFlag.value = true;
  126. };
  127. //编辑地址事件
  128. const editAddress = (address) => {
  129. addressInfo.data = address;
  130. type.value = "edit";
  131. addressVisibleFlag.value = true;
  132. };
  133. //关闭弹窗
  134. const close = () => {
  135. addressVisibleFlag.value = false;
  136. };
  137. //获取地址列表
  138. const getAddressList = () => {
  139. get("v3/member/front/memberAddress/list", {
  140. pageSize: 1000,
  141. })
  142. .then((res) => {
  143. if (res.state == 200) {
  144. address_list.data = res.data.list;
  145. default_address.data = res.data.list.filter(function (item) {
  146. return item.isDefault == 1;
  147. });
  148. } else {
  149. ElMessage(res.msg);
  150. }
  151. })
  152. .catch(() => {
  153. //异常处理
  154. });
  155. };
  156. //删除地址
  157. const delAddress = (addressId) => {
  158. ElMessageBox.confirm("确定删除该地址?", "提示", {
  159. confirmButtonText: "确定",
  160. cancelButtonText: "取消",
  161. type: "warning",
  162. }).then(() => {
  163. post("v3/member/front/memberAddress/del", {
  164. addressIds: addressId,
  165. })
  166. .then((res) => {
  167. if (res.state == 200) {
  168. ElMessage.success(res.msg);
  169. getAddressList();
  170. } else {
  171. ElMessage(res.msg);
  172. }
  173. });
  174. });
  175. };
  176. //设为默认
  177. const setDefault = (addressId) => {
  178. post("v3/member/front/memberAddress/changeDefaultAddress", {
  179. addressId: addressId,
  180. isDefault: 1,
  181. })
  182. .then((res) => {
  183. if (res.state == 200) {
  184. ElMessage.success(res.msg);
  185. getAddressList();
  186. } else {
  187. ElMessage(res.msg);
  188. }
  189. })
  190. .catch(() => {
  191. //异常处理
  192. });
  193. };
  194. const refreshAddress = () => {
  195. getAddressList();
  196. };
  197. onMounted(() => {
  198. getAddressList();
  199. });
  200. </script>
  201. <style lang="scss">
  202. @import "@/assets/style/addressList.scss";
  203. .el-button--primary {
  204. color: #fff;
  205. background-color: $colorMain;
  206. border-color: $colorMain;
  207. }
  208. </style>