|
@@ -16,7 +16,32 @@
|
|
<v-radio-group v-model="addressSelect" color="primary">
|
|
<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 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-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">
|
|
<div class="text-center mt-3">
|
|
<v-btn color="primary" class="elevation-5" width="180" @click.stop="handleSubmit">确 认</v-btn>
|
|
<v-btn color="primary" class="elevation-5" width="180" @click.stop="handleSubmit">确 认</v-btn>
|
|
</div>
|
|
</div>
|
|
@@ -35,6 +60,9 @@ import { ref } from 'vue'
|
|
import { getLuckLotteryRecordByOrderId } from '@/api/mall/prize'
|
|
import { getLuckLotteryRecordByOrderId } from '@/api/mall/prize'
|
|
import { getMallUserAddressList } from '@/api/mall/address'
|
|
import { getMallUserAddressList } from '@/api/mall/address'
|
|
import Snackbar from '@/plugins/snackbar'
|
|
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 emit = defineEmits(['success'])
|
|
const props = defineProps({
|
|
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 addressSelect = ref()
|
|
const disabled = ref(false)
|
|
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 address = ref([])
|
|
const prizeData = ref({})
|
|
const prizeData = ref({})
|
|
@@ -71,7 +131,26 @@ const endCallback = () => {
|
|
disabled.value = true
|
|
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>
|
|
</script>
|
|
|
|
|
|
<style scoped lang="scss">
|
|
<style scoped lang="scss">
|