金诚优选前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

290 lines
7.0 KiB

  1. <template>
  2. <view id="address-list">
  3. <lf-nav title="地址管理" :showIcon="true" bgColor="#fff"></lf-nav>
  4. <view class="list-box">
  5. <view class="list-item"
  6. :data-info="JSON.stringify(item)"
  7. :data-id="item.id"
  8. v-for="(item, index) in list"
  9. :key="index"
  10. @click="selectAddress(item.id)">
  11. <!-- <view class="user">
  12. <view class="name">
  13. <text>{{item.accept_name}}</text>
  14. <text class="phone">{{item.mobile}}</text>
  15. </view>
  16. <view class="default" v-if="item.is_default">
  17. 默认
  18. </view>
  19. </view>
  20. <view class="address">{{item.address_name}} {{item.address}}</view> -->
  21. <view class="lf-font-28 user-item">
  22. <text class="lf-color-black lf-font-bold">{{item.accept_name}}</text>
  23. <text class="lf-color-777 lf-m-l-20">{{item.mobile}}</text>
  24. </view>
  25. <view class="address-item lf-line-2">
  26. <text>{{item.address_name}}</text>
  27. <text>{{item.address}}</text>
  28. </view>
  29. <view class="menu-item lf-row-between lf-m-t-30">
  30. <view class="lf-row-center">
  31. <radio-group @change="radioChange">
  32. <radio :checked="item.is_default" :value="index"></radio>
  33. </radio-group>
  34. <text class="lf-m-l-15 lf-font-24 lf-color-777">默认地址</text>
  35. </view>
  36. <view class="lf-row-between">
  37. <view @tap="setInfo(item)">
  38. <text class="lf-iconfont icon-bianji"></text>
  39. <text class="lf-m-l-10">编辑</text>
  40. </view>
  41. <view class="lf-m-l-50 lf-color-red" @click="deleteAddress(item, index)">
  42. <text class="lf-iconfont icon-shanchu"></text>
  43. <text class="lf-m-l-10">删除</text>
  44. </view>
  45. </view>
  46. </view>
  47. </view>
  48. <lf-nocontent src="/static/images/empty.png" text="您还未添加地址" v-if="list.length <= 0 && !is_load"></lf-nocontent>
  49. </view>
  50. <view style="height: 230rpx;"></view>
  51. <view class="add-address" @tap="add">
  52. <view class="small-btn">
  53. <text class="lf-iconfont icon-jia"></text>
  54. <text class="lf-m-l-10">新增收货地址</text>
  55. </view>
  56. </view>
  57. </view>
  58. </template>
  59. <script>
  60. import {pageLogin, getUrl,config,is} from '@/common/js/utils.js';
  61. export default {
  62. data() {
  63. return {
  64. list: [],
  65. order_no: '',
  66. url: '',
  67. id:'',
  68. is_load: true,
  69. is_select: false
  70. };
  71. },
  72. onShow() {
  73. this.queryAddressList(); // let app =getApp(); 暂时注释
  74. // app.isBirthday().then(()=>{
  75. // if(this.$cookieStorage.get("birthday_gift")){
  76. // var giftData=this.$cookieStorage.get("birthday_gift").data;
  77. // new app.ToastPannel().__page.showText(giftData);
  78. // }
  79. // });
  80. },
  81. onLoad(e) {
  82. pageLogin(getUrl());
  83. this.is_select = Boolean(Number(e.is_select));
  84. this.setData({
  85. order_no: e.order_no,
  86. url: e.url
  87. });
  88. },
  89. components: {},
  90. props: {},
  91. methods: {
  92. // 删除收货地址
  93. deleteAddress(item, index){
  94. console.log("item", item)
  95. uni.showModal({
  96. title: '温馨提示',
  97. content: '您确定删除该收货地址吗?',
  98. success: result => {
  99. if(result.confirm){
  100. var token = this.$cookieStorage.get('user_token');
  101. this.$http.ajax({
  102. api: '/api/address/'+ item.id,
  103. method: 'DELETE',
  104. header: {
  105. Authorization: token
  106. }
  107. }).then(res => {
  108. console.log("删除地址", res);
  109. this.$msg('删除成功', {icon: 'success'});
  110. this.list.splice(index, 1);
  111. }).catch(err => {
  112. this.$msg('删除失败', {icon: 'error'});
  113. })
  114. }
  115. }
  116. })
  117. },
  118. // 切换默认地址
  119. radioChange(e){
  120. uni.showLoading({
  121. title: '切换默认地址中'
  122. })
  123. let current = e.target.value;
  124. let id = null;
  125. this.list.forEach((item, index) => {
  126. if(current == index){
  127. item.is_default = 1;
  128. id = item.id;
  129. }else{
  130. item.is_default = 0;
  131. }
  132. })
  133. this.switchDefaultAddress(id);
  134. },
  135. // 选择地址
  136. selectAddress(id){
  137. if(this.is_select){
  138. let pages = getCurrentPages();
  139. let prePage = pages[pages.length - 2];
  140. prePage.$vm.address_id = id;
  141. this.$toBack();
  142. }
  143. },
  144. switchDefaultAddress(id){
  145. var token = this.$cookieStorage.get('user_token');
  146. this.$http.ajax({
  147. api: 'api/address/'+ id,
  148. method: 'PUT',
  149. header: {
  150. Authorization: token
  151. },
  152. data: {
  153. is_default: 1
  154. }
  155. }).then(res => {
  156. uni.hideLoading();
  157. this.$msg('操作成功', {icon: 'success'});
  158. }).catch(err => {
  159. uni.hideLoading();
  160. this.$msg('切换默认地址失败');
  161. })
  162. },
  163. setInfo(e) {
  164. // var from = e.currentTarget.dataset.info;
  165. var from = e;
  166. var data = this.$cookieStorage.get('order_form');
  167. // var from=JSON.parse(from);
  168. if (!data) {
  169. return this.view(from.id);
  170. }
  171. var order_no = this.order_no;
  172. if (order_no && data.order_no === order_no) {
  173. data.address = from;
  174. this.$cookieStorage.set('order_form', data);
  175. wx.navigateBack({
  176. url: '/' + this.url
  177. });
  178. } else {
  179. return this.view(from.id);
  180. }
  181. },
  182. view(id) {
  183. wx.navigateTo({
  184. url: '/pages/address/add/add?id=' + id
  185. });
  186. },
  187. add() {
  188. wx.navigateTo({
  189. url: '/pages/address/add/add'
  190. });
  191. },
  192. // 查询收货地址列表
  193. queryAddressList() {
  194. this.is_load = true;
  195. var token = this.$cookieStorage.get('user_token');
  196. this.$http.get({
  197. api: 'api/address',
  198. header: {
  199. Authorization: token
  200. }
  201. }).then(res => {
  202. if (res.statusCode == 200) {
  203. res = res.data;
  204. if (res.status) {
  205. this.setData({
  206. list: res.data
  207. });
  208. } else {
  209. wx.showToast({
  210. title: res.message,
  211. image: '../../../static/error.png'
  212. });
  213. }
  214. } else {
  215. wx.showToast({
  216. title: '获取信息失败',
  217. image: '../../../static/error.png'
  218. });
  219. }
  220. this.is_load = false;
  221. }).catch(err => {
  222. this.is_load = false;
  223. })
  224. },
  225. setData: function (obj) {
  226. let that = this;
  227. let keys = [];
  228. let val, data;
  229. Object.keys(obj).forEach(function (key) {
  230. keys = key.split('.');
  231. val = obj[key];
  232. data = that.$data;
  233. keys.forEach(function (key2, index) {
  234. if (index + 1 == keys.length) {
  235. that.$set(data, key2, val);
  236. } else {
  237. if (!data[key2]) {
  238. that.$set(data, key2, {});
  239. }
  240. }
  241. data = data[key2];
  242. });
  243. });
  244. }
  245. },
  246. computed: {},
  247. watch: {}
  248. };
  249. </script>
  250. <style>
  251. page{
  252. background-color: #F8F8F8;
  253. }
  254. </style>
  255. <style rel="stylesheet/less" lang="less">
  256. @import "list";
  257. .lf-color-red{
  258. color: red;
  259. }
  260. .user-item, .menu-item{
  261. height: 50rpx;
  262. width: 100%;
  263. }
  264. .address-item{
  265. width: 100%;
  266. margin-top: 10rpx;
  267. font-size: 28rpx;
  268. color: #333333;
  269. }
  270. </style>