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.1 KiB

2 months ago
2 months ago
2 months ago
  1. <template>
  2. <view class="personal-address">
  3. <view v-if="addressList.length>0" class="personal-address-list">
  4. <view v-for="(item,index) in addressList" :key="index">
  5. <view class="personal-address-list-item">
  6. <view class="personal-address-info">
  7. <view class="personal-address-text">
  8. {{ item.province == item.city ? item.province : '' }}
  9. {{item.city}}
  10. {{item.district}}
  11. {{item.detailAddress}}
  12. </view>
  13. <view class="personal-address-info-use-btn">
  14. <view class="personal-address-people">
  15. <view>
  16. {{item.name}}
  17. </view>
  18. <view style="border: solid #7D8196 1px; margin: 0 10px; height: 12px;"> </view>
  19. <view>
  20. {{item.phoneHidden}}
  21. </view>
  22. </view>
  23. <view class="use-btn">
  24. <u-button size="mini" color="#FFBF60" text="使用" shape="circle" @click="useAddress(item)">
  25. </u-button>
  26. </view>
  27. </view>
  28. </view>
  29. <view class="personal-address-info-btns">
  30. <u-radio-group v-if="item.isDefault" v-model="value" >
  31. <u-radio activeColor="#ffbf60" name="默认地址" labelColor="#ffbf60" label="默认地址"></u-radio>
  32. </u-radio-group>
  33. <view class="" v-else></view>
  34. <view class="personal-address-info-btns-2">
  35. <view class="personal-address-info-btn" @click="editAddress(item)">
  36. <u-icon name="edit-pen" color="#7d8196" size="16" style="margin-right: 5px;"></u-icon>
  37. <view style="margin-left: 5px;">
  38. 编辑
  39. </view>
  40. </view>
  41. <view class="personal-address-info-btn" @click="deleteAddress(item)">
  42. <u-icon name="trash" color="#7d8196" size="16"></u-icon>
  43. <view style="margin-left: 5px;">
  44. 删除
  45. </view>
  46. </view>
  47. </view>
  48. </view>
  49. </view>
  50. </view>
  51. </view>
  52. <view v-else class="personal-address-none">
  53. <img src="https://catmdogf.oss-cn-shanghai.aliyuncs.com/CMDF/front/personal/address.png" alt="pet"
  54. style="width: 243px;height: 147px;" mode="widthFix"/>
  55. <view class="personal-address-none-text">这里还没有您的地址,请点击添加吧~</view>
  56. </view>
  57. <view class="personal-address-add">
  58. <button class="personal-address-add-btn" @click="addAddress">添加地址</button>
  59. </view>
  60. <u-modal :show="showDel" @confirm="confirmDel" @cancel="cancelDel" ref="uModal" showCancelButton :asyncClose="true" :content='delContent'></u-modal>
  61. </view>
  62. </template>
  63. <script>
  64. import { getAddressList,delAddress } from "@/api/system/address"
  65. export default{
  66. data(){
  67. return{
  68. addressList:[],
  69. value:"默认地址",
  70. show:false,
  71. showDel:false,
  72. delContent:'',
  73. deleteId:''
  74. }
  75. },
  76. onShow() {
  77. this.getAddressList();
  78. },
  79. onPullDownRefresh() {
  80. this.getAddressList();
  81. },
  82. mounted() {
  83. this.getAddressList();
  84. },
  85. methods:{
  86. getAddressList(){
  87. getAddressList({}).then(res=>{
  88. if(res&&res.content){
  89. this.addressList=res.content
  90. this.showDel = false;
  91. }
  92. })
  93. },
  94. addAddress(){
  95. uni.navigateTo({
  96. url: `/pages/newOrder/address?optionType=add`
  97. });
  98. },
  99. editAddress(item){
  100. uni.navigateTo({
  101. url: `/pages/newOrder/address?optionType=edit&addressId=${item.id}`
  102. });
  103. },
  104. deleteAddress(item){
  105. this.delContent = "确定要删除该地址吗?";
  106. this.showDel = true;
  107. this.deleteId=item.id;
  108. },
  109. confirmDel(){
  110. delAddress(this.deleteId).then(res=>{
  111. console.log(res);
  112. this.$modal.showToast('删除成功');
  113. this.getAddressList()
  114. })
  115. },
  116. cancelDel(){
  117. this.showDel = false;
  118. this.deleteId='';
  119. },
  120. useAddress(params){
  121. // 检查地址是否有经纬度信息
  122. if(!params.latitude || !params.longitude) {
  123. uni.showModal({
  124. title: '提示',
  125. content: '该地址缺少位置信息,请先编辑地址完善位置信息',
  126. showCancel: true,
  127. cancelText: '取消',
  128. confirmText: '去编辑',
  129. success: (res) => {
  130. if (res.confirm) {
  131. // 用户点击确定,跳转到编辑地址页面
  132. this.editAddress(params);
  133. }
  134. }
  135. });
  136. return;
  137. }
  138. this.$globalData.newOrderData.currentAddress={
  139. id:params.id,
  140. name:params.name,
  141. phone:params.phoneHidden,
  142. province:params.province,
  143. city:params.city,
  144. detailAddress:params.detailAddress,
  145. latitude:params.latitude,
  146. longitude:params.longitude,
  147. }
  148. let len = getCurrentPages().length;
  149. this.loading=false
  150. if(len >= 2) {
  151. uni.navigateBack();
  152. }else {
  153. uni.redirectTo({url:'/pages/newOrder/serviceNew'});
  154. }
  155. }
  156. }
  157. }
  158. </script>
  159. <style>
  160. ::v-deep .wx-radio-input.wx-radio-input-checked {
  161. background-color: #ffbf60 !important;
  162. border-color: #ffbf60 !important;
  163. }
  164. </style>
  165. <style lang="scss">
  166. //选中之后的样式
  167. .personal-address{
  168. position: relative;
  169. height: 100%;
  170. padding-bottom: 90px;
  171. .personal-address-add{
  172. background-color: #FFFFFF;
  173. padding: 10px 20px 40px;
  174. width: 100%;
  175. height: 90px;
  176. position: fixed;
  177. bottom: 0;
  178. z-index: 100;
  179. display: flex;
  180. .personal-address-add-btn{
  181. width: 100%;
  182. border-radius: 6px;
  183. background: #FFB13F;
  184. font-size: 16px;
  185. color: #FFFFFF;
  186. }
  187. }
  188. .personal-address-list{
  189. .personal-address-list-add{
  190. width: 100%;
  191. height: 44px;
  192. background-color: #FFFFFF;
  193. display: flex;
  194. justify-content: space-between;
  195. align-items: center;
  196. padding: 0 15px;
  197. .personal-address-list-add-btn{
  198. font-size: 14px;
  199. color:#AAA;
  200. display: flex;
  201. align-items: center;
  202. }
  203. }
  204. .personal-address-list-item{
  205. margin: 10px 10px 0 10px;
  206. border-radius: 5px;
  207. padding: 20px 10px 10px;
  208. background-color: #FFF;
  209. .personal-address-info{
  210. display: flex;
  211. align-items: center;
  212. justify-content: flex-start;
  213. flex-wrap: wrap;
  214. .personal-address-text{
  215. color: #333;
  216. font-size: 14px;
  217. font-weight: bold;
  218. width: 100%;
  219. }
  220. .personal-address-people{
  221. color: #7D8196;
  222. font-size: 14px;
  223. font-weight: 400;
  224. display: flex;
  225. justify-content: flex-start;
  226. align-items: center;
  227. margin: 10px 0 10px;
  228. }
  229. }
  230. .personal-address-info-btns{
  231. display: flex;
  232. justify-content: space-between;
  233. align-items: flex-end;
  234. font-size: 14px;
  235. padding-top: 10px;
  236. border-top:solid 1px #efefef;
  237. .personal-address-info-btns-2{
  238. display: flex;
  239. justify-content: flex-end;
  240. align-items: flex-end;
  241. .personal-address-info-btn{
  242. display: flex;
  243. color: #7D8196;
  244. margin-left: 20px;
  245. align-items: flex-end;
  246. }
  247. }
  248. }
  249. }
  250. }
  251. .personal-address-none{
  252. display:flex;
  253. justify-content: center;
  254. align-items: center;
  255. flex-wrap: wrap;
  256. margin-top: 40%;
  257. .personal-address-none-text{
  258. color: #666;
  259. text-align: center;
  260. font-size: 14px;
  261. width: 100%;
  262. margin-top: 10px;
  263. }
  264. }
  265. .personal-address-info-use-btn{
  266. width: 100%;
  267. display: flex;
  268. justify-content: space-between;
  269. align-items: center;
  270. .use-btn{
  271. width: 112rpx;
  272. }
  273. }
  274. }
  275. </style>