Parcourir la source

Merge branch 'dev' of https://git.citupro.com/zhengnaiwen_citu/menduner into dev

lifanagju_citu il y a 4 mois
Parent
commit
3e8e835b16
1 fichiers modifiés avec 82 ajouts et 3 suppressions
  1. 82 3
      src/views/mall/components/prizeDraw.vue

+ 82 - 3
src/views/mall/components/prizeDraw.vue

@@ -16,7 +16,32 @@
             <v-radio-group v-model="addressSelect" color="primary">
               <v-radio v-for="val in address" :key="val.id" :label="val.id === 9999 ? val.label : (val.name + ',' + val.mobile + ',' + val.areaName + val.detailAddress)" :value="val.id"></v-radio>
             </v-radio-group>
-            <v-text-field v-if="addressSelect === 9999" v-model="newAddress" label="新地址" placeholder="示例:张三,13800138000,北京市朝阳区望京街道望京街道" color="primary"></v-text-field>
+            <v-form v-if="addressSelect === 9999" ref="addressFormRef">
+              <v-row>
+                <v-col :cols="6">
+                  <v-text-field v-model="newAddress.name" label="收货人名称 *" color="primary" density="compact" variant="outlined"></v-text-field>
+                </v-col>
+                <v-col :cols="6">
+                  <v-text-field v-model="newAddress.mobile" :rules="phoneRules" label="收货人手机号码 *" color="primary" density="compact" variant="outlined"></v-text-field>
+                </v-col>
+              </v-row>
+              <div class="d-flex" style="width: 100%;">
+                <div class="mt-2" style="color: #777; width: 100px;">省市区 *</div>
+                <el-cascader
+                  ref="cascaderAddr"
+                  v-model="newAddress.areaId"
+                  size="large"
+                  clearable
+                  class="mb-5"
+                  placeholder="省市区 *"
+                  style="flex: 1;"
+                  :props="{ value: 'id', label: 'name', emitPath: false }"
+                  :options="areaTreeData"
+                  @change="handleChangeArea(item)"
+                ></el-cascader>
+              </div>
+              <v-text-field v-model="newAddress.detailAddress" label="详情地址 *" color="primary" density="compact" variant="outlined"></v-text-field>
+            </v-form>
             <div class="text-center mt-3">
               <v-btn color="primary" class="elevation-5" width="180" @click.stop="handleSubmit">确 认</v-btn>
             </div>
@@ -35,6 +60,9 @@ import { ref } from 'vue'
 import { getLuckLotteryRecordByOrderId } from '@/api/mall/prize'
 import { getMallUserAddressList } from '@/api/mall/address'
 import Snackbar from '@/plugins/snackbar'
+import { luckyLotteryRecordReceive } from '@/api/mall/prize'
+import { useRouter } from 'vue-router'
+import { getDict } from '@/hooks/web/useDictionaries'
 
 const emit = defineEmits(['success'])
 const props = defineProps({
@@ -46,10 +74,42 @@ const props = defineProps({
   }
 })
 
-const newAddress = ref('')
+const router = useRouter()
+const newAddress = ref({
+  name: '',
+  areaId: '',
+  areaName: '',
+  mobile: '',
+  detailAddress: ''
+})
 const addressSelect = ref()
 const disabled = ref(false)
 
+const addressFormRef = ref()
+const cascaderAddr = ref()
+const areaTreeData = ref([])
+getDict('areaTreeData', null, 'areaTreeData').then(({ data }) => {
+  data = data?.length && data || []
+  areaTreeData.value = data
+})
+const phoneRules = ref([
+  value => {
+    if (value) return true
+    return t('login.mobileNumberPlaceholder')
+  },
+  value => {
+    if (value?.length <= 11 && /^1[3456789]\d{9}$/.test(value)) return true
+    return t('login.correctPhoneNumber')
+  }
+])
+
+// 地区选择
+const handleChangeArea = () => {
+  const node = cascaderAddr.value.getCheckedNodes() ? cascaderAddr.value.getCheckedNodes()[0] : null
+  if (!node) return
+  newAddress.value.areaName = node.pathLabels.join(' ')
+}
+
 // 获取中奖记录、收货地址
 const address = ref([])
 const prizeData = ref({})
@@ -71,7 +131,26 @@ const endCallback = () => {
   disabled.value = true
 }
 
-const handleSubmit = async () => {}
+function checkValue(obj) {
+  for (let key in obj) {
+    if (obj.hasOwnProperty(key) && !obj[key]) {
+      return false
+    }
+  }
+  return true
+}
+
+// 领取
+const handleSubmit = async () => {
+  let query = {}
+  if (addressSelect.value === 9999) {
+    if (!checkValue(newAddress.value)) return Snackbar.warning('请完善收货信息')
+    query = newAddress.value
+  } else query = address.value.find(item => item.id === addressSelect.value)
+  await luckyLotteryRecordReceive({ id: prizeData.value[0].record.id, receiveInfo: JSON.stringify(query) })
+  Snackbar.success('领取成功,待商家发货')
+  router.push('/recruit/personal/personalCenter/tradeOrder?key=1')
+}
 </script>
 
 <style scoped lang="scss">