猫妈狗爸伴宠师小程序前端代码
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.

191 lines
4.5 KiB

2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
2 months ago
  1. <template>
  2. <view class="page">
  3. <up-form ref="formRef" :model="form" :rules="rules" labelPosition="left" labelWidth="150rpx">
  4. <view class="info">
  5. <view class="info-header">地址信息</view>
  6. <view class="info-content">
  7. <up-form-item label="接单地址" prop="area">
  8. <view plain class="flex-rowr" @click="selectAddr">
  9. <text v-if="form.area">{{ form.area }}</text>
  10. <text v-else class="placeholder">请定位选择小区或商城等</text>
  11. <up-icon style="margin-left: 22rpx;" name="arrow-down" color="#7F7F7F"
  12. size="21rpx"></up-icon>
  13. </view>
  14. </up-form-item>
  15. <up-form-item label="接单地址" prop="address" labelPosition="top">
  16. <view class="textarea">
  17. <textarea v-model="form.address" placeholder="如街道、门牌号、小区、乡镇、村等" :row="3"></textarea>
  18. </view>
  19. </up-form-item>
  20. </view>
  21. </view>
  22. <view class="info">
  23. <view class="info-header">接单信息</view>
  24. <view class="info-content">
  25. <up-form-item label="接单状态" prop="status">
  26. <view class="flex-rowr">
  27. <switch :checked="!!form.status" @change="onSwitch" color="#FFBF60"
  28. style="transform: scale(0.6);" />
  29. <text>{{ !!form.status ? '开启' : '关闭' }}</text>
  30. </view>
  31. </up-form-item>
  32. <up-form-item label="接单范围" prop="distance">
  33. <up-input v-model="form.distance" placeholder="请输入内容" inputAlign="right" border="none">
  34. <template #suffix>
  35. <text>Km</text>
  36. </template>
  37. </up-input>
  38. </up-form-item>
  39. <up-form-item @click="toNoOrderDate" label="不接单日期(选填)" prop="disabledDate" labelWidth="300rpx">
  40. </up-form-item>
  41. </view>
  42. </view>
  43. </up-form>
  44. <view>
  45. <up-parse class="size-28" :content="configList.adress_statement.paramValueArea" containerStyle="{
  46. color: '#707070',
  47. fontSize: '22rpx',
  48. lineHeight: '35rpx',
  49. }"></up-parse>
  50. </view>
  51. <view class="footer-btn">
  52. <view class="btn" @click="onSave">
  53. {{ eidtItem ? '修改地址' : '新增地址'}}
  54. </view>
  55. </view>
  56. </view>
  57. </template>
  58. <script setup>
  59. import {
  60. ref,
  61. getCurrentInstance
  62. } from 'vue'
  63. import {
  64. store
  65. } from '@/store'
  66. import {
  67. insertAddress,
  68. udpateAddress
  69. } from "@/api/address/address.js"
  70. import {
  71. onLoad
  72. } from '@dcloudio/uni-app'
  73. const instance = getCurrentInstance();
  74. const configList = store.state.system.configList
  75. const formRef = ref()
  76. const form = ref({
  77. area: null,
  78. latitude: null,
  79. longitude: null,
  80. address: null,
  81. status: true,
  82. distance: null,
  83. disabledDate: [],
  84. })
  85. const rules = ref({})
  86. const eidtItem = ref(null);
  87. onLoad((options) => {
  88. eidtItem.value = options?.item ? JSON.parse(options.item) : null;
  89. form.value = {
  90. id: eidtItem?.value?.id || null,
  91. area: eidtItem?.value?.area || null,
  92. address: eidtItem?.value?.address || null,
  93. status: eidtItem?.value?.status || null,
  94. latitude: eidtItem?.value?.latitude || null,
  95. longitude: eidtItem?.value?.longitude || null
  96. }
  97. });
  98. const setAddress = (res) => {
  99. form.value.latitude = res.latitude
  100. form.value.longitude = res.longitude
  101. if (!res.address && res.name) { //用户直接选择城市的逻辑
  102. return form.value.area = res.name
  103. }
  104. if (res.address || res.name) {
  105. return form.value.area = res.address + res.name
  106. }
  107. form.value.area = '' //用户啥都没选就点击勾选
  108. }
  109. const selectAddr = () => {
  110. uni.chooseLocation({
  111. success: function(res) {
  112. setAddress(res)
  113. },
  114. fail(e) {
  115. console.log("获取位置信息失败!",e)
  116. }
  117. })
  118. }
  119. const onSwitch = (e) => {
  120. form.value.status = e.detail.value
  121. }
  122. const onSave = async () => {
  123. let code = null;
  124. if (eidtItem?.value?.id) {
  125. let result = await udpateAddress({
  126. ...form.value
  127. })
  128. code = result.code
  129. } else {
  130. // 新增地址
  131. let result = await insertAddress({
  132. ...form.value
  133. })
  134. code = result.code
  135. }
  136. if (code == 200) {
  137. uni.navigateBack()
  138. }
  139. }
  140. const toNoOrderDate = () => {
  141. if (eidtItem?.value?.id) {
  142. uni.navigateTo({
  143. url: `/otherPages/myOrdersManage/date/detail?addressId=${eidtItem.value.id}`
  144. });
  145. }
  146. }
  147. </script>
  148. <style lang="scss" scoped>
  149. .page {
  150. padding: 35rpx 37rpx 144rpx 37rpx;
  151. }
  152. .info {
  153. color: #707070;
  154. font-size: 30rpx;
  155. line-height: 40rpx;
  156. &-header {
  157. color: #000000;
  158. }
  159. .placeholder {
  160. color: #707070;
  161. }
  162. .textarea {
  163. margin-top: 16rpx;
  164. background-color: #F3F3F3;
  165. padding: 26rpx 8rpx;
  166. border-radius: 15rpx;
  167. }
  168. :deep(.u-form-item__body__left__content__label) {
  169. color: #707070;
  170. }
  171. }
  172. </style>