addrList.vue 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <template>
  2. <div class="addrList" >
  3. <div
  4. class="addressList"
  5. v-for="(n, i) in cardData.length"
  6. :key="i"
  7. @click="handleSelect(cardData[i])"
  8. >
  9. <div class="addressDetai">
  10. <div class="addrTitle">
  11. <span>{{ cardData[i].name }}</span>
  12. <span>{{ cardData[i].mobile }}</span>
  13. <p>
  14. {{
  15. `${cardData[i].city_name} ${cardData[i].area_name} ${cardData[i].address}`
  16. }}
  17. </p>
  18. </div>
  19. <div class="handle">
  20. <div class="del" @click.stop="del(cardData[i].id)">
  21. <img
  22. src="@/assets/images/delete/del.png"
  23. v-show="!cardData[i].isShow"
  24. />
  25. <img
  26. src="@/assets/images/delete/del-active.png"
  27. v-show="cardData[i].isShow"
  28. />
  29. <span>删除</span>
  30. </div>
  31. <div class="edit" @click="selected">
  32. <img src="@/assets/images/delete/select.png" />
  33. <span>编辑</span>
  34. </div>
  35. </div>
  36. </div>
  37. </div>
  38. </div>
  39. </template>
  40. <script>
  41. import asyncRequest from "@/apis/address/index";
  42. import { Dialog, Toast } from "vant";
  43. export default {
  44. name: "addrList",
  45. props: ["list", "disabledList", "newTime"],
  46. // @add="onAdd"
  47. // @select="onSelect"
  48. // @edit="onEdit"
  49. data() {
  50. return {
  51. id: "",
  52. sum: 0,
  53. isShow: false,
  54. // newTime: "",
  55. cardData: [],
  56. parmValue: {
  57. page: 1, // 页码
  58. size: 10, // 每页显示条数
  59. },
  60. };
  61. },
  62. watch: {
  63. newTime: function (val) {
  64. if (val) {
  65. this.searchList();
  66. }
  67. },
  68. },
  69. created() {
  70. // this.cardData = this.list;
  71. this.list.forEach((element) => {
  72. let obj = {
  73. name: element.name,
  74. mobile: element.mobile,
  75. city_name: element.city_name,
  76. area_name: element.area_name,
  77. address: element.address,
  78. id: element.id,
  79. isShow: false,
  80. };
  81. this.cardData.push(obj);
  82. });
  83. },
  84. methods: {
  85. handleSelect(e) {
  86. this.$emit("select", e);
  87. },
  88. // getNewTime() {
  89. // this.newTime = new Date().valueOf();
  90. // },
  91. selected() {},
  92. async delAddr(id) {
  93. this.loading = true;
  94. let res = await asyncRequest.del({ id: id });
  95. this.loading = false;
  96. if (res && res.code == 0) {
  97. Toast.success("地址删除成功!");
  98. this.$emit("refresh");
  99. // await this.searchList();
  100. } else if (res && res.code >= 100 && res.code <= 104) {
  101. await this.logout();
  102. } else {
  103. Toast.fail(res.msg);
  104. }
  105. },
  106. del(e) {
  107. let aDom = document.getElementsByClassName("del")[0];
  108. aDom.cancelBubble = true;
  109. this.cardData.map((ele) => {
  110. if (ele.id === e) {
  111. ele.isShow = true;
  112. } else {
  113. ele.isShow = false;
  114. }
  115. });
  116. Dialog.confirm({
  117. title: "温馨提示?",
  118. message: "确认删除该地址?",
  119. })
  120. .then(async () => {
  121. await this.delAddr(e);
  122. })
  123. .catch(() => {
  124. // on cancel
  125. });
  126. },
  127. async searchList() {
  128. if (this.parmValue.page === 1) {
  129. this.list = []; //如果没有在加载中且当前页数是1,清空list列表,防止造成上次的地址残留
  130. }
  131. let res = await asyncRequest.list(this.parmValue); //请求接口
  132. if (res && res.code == 0 && res.data) {
  133. this.cardData = [];
  134. let arr = res.data.list == [] ? [] : res.data.list;
  135. arr.forEach((element) => {
  136. let obj = {
  137. name: element.contector,
  138. mobile: element.mobile,
  139. city_name: element.city_name,
  140. area_name: element.area_name,
  141. address: element.addr,
  142. id: element.id,
  143. isShow: false,
  144. };
  145. this.cardData.push(obj);
  146. });
  147. } else if (res && res.code >= 100 && res.code <= 104) {
  148. await this.logout();
  149. } else {
  150. this.show_title(res.msg);
  151. if (this.parmValue.page !== 1) {
  152. this.parmValue.page--;
  153. }
  154. }
  155. },
  156. },
  157. };
  158. </script>
  159. <style lang="scss" scoped>
  160. .addrList {
  161. width: 100vw;
  162. height: 50vh;
  163. // border: 1px solid red;
  164. .addressList {
  165. width: 90vw;
  166. margin: 16.5px auto;
  167. background-color: #fcfcf0;
  168. background: #fcfcf0;
  169. border-radius: 8px;
  170. .addressDetai {
  171. padding: 25px 0 0 0;
  172. .addrTitle {
  173. width: 80vw;
  174. margin: 0 auto;
  175. span:first-child {
  176. padding-right: 15px;
  177. }
  178. span {
  179. height: 13px;
  180. font-size: 14px;
  181. font-family: Source Han Sans CN;
  182. font-weight: 500;
  183. color: #4d4d4d;
  184. line-height: 13px;
  185. }
  186. p {
  187. height: 12px;
  188. font-size: 12px;
  189. font-family: Source Han Sans CN;
  190. font-weight: 400;
  191. color: #999999;
  192. line-height: 12px;
  193. margin-top: 6px;
  194. }
  195. }
  196. .handle {
  197. z-index: 99999;
  198. width: 80vw;
  199. margin: 0 auto;
  200. height: 20px;
  201. padding: 0 0 10px 0;
  202. .edit,
  203. .del {
  204. margin: 2px 5px;
  205. float: right;
  206. display: inline-block;
  207. img {
  208. width: 12px;
  209. height: 14px;
  210. vertical-align: -2px;
  211. }
  212. span {
  213. display: inline-block;
  214. padding: 0 0 0 2px;
  215. }
  216. }
  217. }
  218. }
  219. }
  220. }
  221. </style>