add: 邀请函
Showing
11 changed files
with
211 additions
and
3 deletions
| ... | @@ -635,3 +635,10 @@ export function signgetSignInfoConflict(query) { | ... | @@ -635,3 +635,10 @@ export function signgetSignInfoConflict(query) { |
| 635 | params:query | 635 | params:query |
| 636 | }) | 636 | }) |
| 637 | } | 637 | } |
| 638 | export function addInvitation(data) { | ||
| 639 | return request({ | ||
| 640 | url: `/league/person`, | ||
| 641 | method: 'post', | ||
| 642 | data: data | ||
| 643 | }) | ||
| 644 | } | ... | ... |
src/assets/logo/Invitation_c.png
0 → 100644
57.3 KB
src/assets/logo/Invitation_e.png
0 → 100644
53.9 KB
src/assets/logo/logo1.png
deleted
100644 → 0
5.53 KB
src/assets/logo/logo@2x.png
deleted
100644 → 0
10.1 KB
src/assets/logo/logoAdmin.png
deleted
100644 → 0
10.1 KB
src/assets/logo/logofoot.png
deleted
100644 → 0
58.6 KB
| ... | @@ -1029,6 +1029,20 @@ img{display: block;} | ... | @@ -1029,6 +1029,20 @@ img{display: block;} |
| 1029 | .bg-lineg{position: relative;border-radius: 15px;} | 1029 | .bg-lineg{position: relative;border-radius: 15px;} |
| 1030 | .cover{position: absolute;width: 100%;z-index: 1;height: 100%;background: red;opacity: 0;top:0;} | 1030 | .cover{position: absolute;width: 100%;z-index: 1;height: 100%;background: red;opacity: 0;top:0;} |
| 1031 | } | 1031 | } |
| 1032 | .fixed_gg_l{ | ||
| 1033 | position: fixed;left:5px; | ||
| 1034 | top: 25%; | ||
| 1035 | z-index: 10; | ||
| 1036 | animation: pop 4s ease infinite; | ||
| 1037 | img{height: 150px;cursor: pointer;} | ||
| 1038 | } | ||
| 1039 | @keyframes pop { | ||
| 1040 | 80%{transform: translateY(0px);} | ||
| 1041 | 85%{transform: translateY(-3px);} | ||
| 1042 | 90%{transform: translateY(0px);} | ||
| 1043 | 95%{transform: translateY(-3px);} | ||
| 1044 | 100%{transform: translateY(0px);} | ||
| 1045 | } | ||
| 1032 | .smallToday{display: flex;align-items: center; | 1046 | .smallToday{display: flex;align-items: center; |
| 1033 | .type{margin-right: 20px;} | 1047 | .type{margin-right: 20px;} |
| 1034 | h3{margin: 0 0 10px;} | 1048 | h3{margin: 0 0 10px;} | ... | ... |
| 1 | <template> | ||
| 2 | <el-dialog | ||
| 3 | v-model="show" :title="title" width="600px" append-to-body close-icon="CircleClose" center | ||
| 4 | :close-on-click-modal="false" class="pcloginpop" | ||
| 5 | destroy-on-close | ||
| 6 | > | ||
| 7 | <div class="boxInvitation pd20"> | ||
| 8 | |||
| 9 | <div class="text-center pd20" v-if="showR"> | ||
| 10 | <img class="mauto" src="@/assets/dance/ok.png"/> | ||
| 11 | <h2 class="text-center">{{ language == 0 ? '申请已提交' : 'Submitted successfully' }}</h2> | ||
| 12 | |||
| 13 | <el-button size="large" type="primary" @click="conti" round class="btn-lineG"> | ||
| 14 | {{ language == 0 ? '继续提交' : 'Continue To Submit' }} | ||
| 15 | </el-button> | ||
| 16 | </div> | ||
| 17 | |||
| 18 | <el-form :model="form" :rules="rules" ref="iformRef" label-position="right" label-width="150px" v-else> | ||
| 19 | <el-form-item :label="language==0?'姓名':'Name'" required prop="name"> | ||
| 20 | <el-input v-model="form.name"/> | ||
| 21 | </el-form-item> | ||
| 22 | <el-form-item :label="language==0?'性别':'Gender'" required prop="gender"> | ||
| 23 | <el-radio-group v-model="form.gender"> | ||
| 24 | <el-radio value="0">{{ language == 0 ? '女' : 'female' }}</el-radio> | ||
| 25 | <el-radio value="1">{{ language == 0 ? '男' : 'male' }}</el-radio> | ||
| 26 | </el-radio-group> | ||
| 27 | </el-form-item> | ||
| 28 | <el-form-item :label="language==0?'国籍':'Nationality'" required prop="nationality"> | ||
| 29 | <el-select filterable v-model="form.nationality" style="width: 100%;"> | ||
| 30 | <el-option v-for="item in countrys" :key="item.id" :label="language==0?item.name:item.enName" | ||
| 31 | :value="item.id"/> | ||
| 32 | </el-select> | ||
| 33 | </el-form-item> | ||
| 34 | <el-form-item :label="language==0?'出生日期':'Date of Birth'" required prop="birth"> | ||
| 35 | <el-date-picker | ||
| 36 | v-model="form.birth" | ||
| 37 | style="width: 100%;" placeholder="YYYY-MM-DD" | ||
| 38 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" | ||
| 39 | /> | ||
| 40 | </el-form-item> | ||
| 41 | <el-form-item :label="language==0?'邮箱':'Email'" required prop="email"> | ||
| 42 | <el-input v-model="form.email" type="email"/> | ||
| 43 | </el-form-item> | ||
| 44 | <el-form-item :label="language==0?'护照号':'Passport No.'" required prop="passportNo"> | ||
| 45 | <el-input v-model="form.passportNo"/> | ||
| 46 | </el-form-item> | ||
| 47 | <el-form-item :label="language==0?'有效证件':'Passport Copy'" required prop="passportCopy"> | ||
| 48 | <file-upload v-model="form.passportCopy" :limit="1" :is-show-tip="false" | ||
| 49 | :button-text="language==0?'上传':'Upload'"/> | ||
| 50 | </el-form-item> | ||
| 51 | <el-form-item :label="language==0?'抵达日期':'Date of Arrival'" required prop="arrival"> | ||
| 52 | <el-date-picker | ||
| 53 | v-model="form.arrival" placeholder="YYYY-MM-DD" | ||
| 54 | style="width: 100%;" | ||
| 55 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" | ||
| 56 | /> | ||
| 57 | </el-form-item> | ||
| 58 | <el-form-item :label="language==0?'出发日期':'Date of Departure'" required prop="departure"> | ||
| 59 | <el-date-picker | ||
| 60 | v-model="form.departure" | ||
| 61 | style="width: 100%;" placeholder="YYYY-MM-DD" | ||
| 62 | type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD" | ||
| 63 | /> | ||
| 64 | </el-form-item> | ||
| 65 | <el-form-item :label="language==0?'备注':'Remark '"> | ||
| 66 | <el-input type="textarea" v-model="form.remark" rows="3"/> | ||
| 67 | </el-form-item> | ||
| 68 | |||
| 69 | <div class="text-center"> | ||
| 70 | <el-button type="primary" size="large" @click="submit" round class="btn-lineG"> | ||
| 71 | {{ language == 0 ? '提交' : 'SUBMIT' }} | ||
| 72 | </el-button> | ||
| 73 | </div> | ||
| 74 | </el-form> | ||
| 75 | </div> | ||
| 76 | </el-dialog> | ||
| 77 | |||
| 78 | </template> | ||
| 79 | |||
| 80 | <script setup> | ||
| 81 | import {useStorage} from "@vueuse/core/index"; | ||
| 82 | import {getCurrentInstance, watch} from "vue"; | ||
| 83 | import {nextTick} from "@vue/runtime-core"; | ||
| 84 | import {ElMessage, ElMessageBox} from "element-plus"; | ||
| 85 | import {addInvitation, countryList} from "@/apiPc/match"; | ||
| 86 | |||
| 87 | const {proxy} = getCurrentInstance() | ||
| 88 | const language = useStorage('language', 0) | ||
| 89 | const form = ref({ | ||
| 90 | gender:'0' | ||
| 91 | }) | ||
| 92 | const show = ref(false) | ||
| 93 | const showR = ref(false) | ||
| 94 | const title = ref('') | ||
| 95 | const countrys = ref([]) | ||
| 96 | const cptId = ref('') | ||
| 97 | const rules = ref( | ||
| 98 | { | ||
| 99 | nationality: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | ||
| 100 | name: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], | ||
| 101 | email: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], | ||
| 102 | birth: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | ||
| 103 | passportNo: [{required: true, trigger: 'blur', message: language.value == 0 ? '请输入' : 'Please enter'},], | ||
| 104 | passportCopy: [{required: true, trigger: 'blur', message: language.value == 0 ? '请上传' : 'Please Upload'},], | ||
| 105 | arrival: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | ||
| 106 | departure: [{required: true, trigger: 'change', message: language.value == 0 ? '请选择' : 'Please choose'},], | ||
| 107 | }) | ||
| 108 | const open = (params) => { | ||
| 109 | console.log(params) | ||
| 110 | show.value = true | ||
| 111 | title.value = params.title | ||
| 112 | cptId.value = params.cptId | ||
| 113 | } | ||
| 114 | defineExpose({open}) | ||
| 115 | watch(show, (value) => { | ||
| 116 | if (!value) { | ||
| 117 | form.value = { | ||
| 118 | sex: '0' | ||
| 119 | } | ||
| 120 | if (language.value == 0) { | ||
| 121 | form.value.countryId = 240 | ||
| 122 | } | ||
| 123 | } | ||
| 124 | nextTick(() => { | ||
| 125 | // proxy.$refs['dialogRef'].clearValidate() | ||
| 126 | }) | ||
| 127 | }) | ||
| 128 | getCountryList() | ||
| 129 | |||
| 130 | function getCountryList() { | ||
| 131 | countryList().then(res => { | ||
| 132 | countrys.value = res.data | ||
| 133 | }) | ||
| 134 | } | ||
| 135 | |||
| 136 | const submit = () => { | ||
| 137 | proxy.$refs.iformRef.validate(valid => { | ||
| 138 | if (valid) { | ||
| 139 | ElMessageBox.confirm( | ||
| 140 | language.value == 0 ? '请确认信息正确并提交吗?' : 'Please confirm that the information is correct and submit it', | ||
| 141 | language.value == 0 ? '提示' : 'Tips', { | ||
| 142 | confirmButtonText: language.value == 0 ? '确定' : 'Confirm', | ||
| 143 | cancelButtonText: language.value == 0 ? '取消' : 'Cancel', | ||
| 144 | type: 'warning' | ||
| 145 | }).then(() => { | ||
| 146 | form.value.cptId = cptId.value | ||
| 147 | if (Array.isArray(form.value.passportCopy)) { | ||
| 148 | form.value.passportCopy = form.value.passportCopy[0].url | ||
| 149 | } | ||
| 150 | addInvitation(form.value).then((res) => { | ||
| 151 | ElMessage.success('提交成功') | ||
| 152 | showR.value = true | ||
| 153 | }) | ||
| 154 | }) | ||
| 155 | } | ||
| 156 | }) | ||
| 157 | } | ||
| 158 | const conti = () => { | ||
| 159 | showR.value = false | ||
| 160 | form.value = { | ||
| 161 | gender: '0' | ||
| 162 | } | ||
| 163 | } | ||
| 164 | </script> | ||
| 165 | |||
| 166 | <style scoped> | ||
| 167 | .boxInvitation { | ||
| 168 | width: 90%; | ||
| 169 | margin: auto | ||
| 170 | } | ||
| 171 | </style> |
| ... | @@ -261,6 +261,12 @@ | ... | @@ -261,6 +261,12 @@ |
| 261 | </el-row> | 261 | </el-row> |
| 262 | </div> | 262 | </div> |
| 263 | 263 | ||
| 264 | <div class="fixed_gg_l" @click="applyInvitation" v-if="matchData.leagueId==0"> | ||
| 265 | <img src="@/assets/logo/Invitation_c.png" v-if="language==0"/> | ||
| 266 | <img src="@/assets/logo/Invitation_e.png" v-else/> | ||
| 267 | </div> | ||
| 268 | |||
| 269 | <affix-invitation ref="dialogInvitationRef"/> | ||
| 264 | <div style="height: 50px"></div> | 270 | <div style="height: 50px"></div> |
| 265 | 271 | ||
| 266 | <el-dialog v-model="signTypePop" class="pcloginpop" close-icon="CircleClose" | 272 | <el-dialog v-model="signTypePop" class="pcloginpop" close-icon="CircleClose" |
| ... | @@ -274,6 +280,8 @@ | ... | @@ -274,6 +280,8 @@ |
| 274 | </div> | 280 | </div> |
| 275 | </div> | 281 | </div> |
| 276 | </el-dialog> | 282 | </el-dialog> |
| 283 | |||
| 284 | |||
| 277 | </div> | 285 | </div> |
| 278 | </template> | 286 | </template> |
| 279 | 287 | ||
| ... | @@ -288,7 +296,7 @@ import QuickRow from "@/viewsPc/match/components/quick-row"; | ... | @@ -288,7 +296,7 @@ import QuickRow from "@/viewsPc/match/components/quick-row"; |
| 288 | import {getCurrentInstance, ref} from 'vue' | 296 | import {getCurrentInstance, ref} from 'vue' |
| 289 | import {reactive, onMounted} from '@vue/runtime-core' | 297 | import {reactive, onMounted} from '@vue/runtime-core' |
| 290 | import {useRoute, useRouter} from 'vue-router' | 298 | import {useRoute, useRouter} from 'vue-router' |
| 291 | 299 | import AffixInvitation from '@/viewsPc/match/components/affix-invitation' | |
| 292 | const language = useStorage('language', 0) | 300 | const language = useStorage('language', 0) |
| 293 | const route = useRoute() | 301 | const route = useRoute() |
| 294 | const router = useRouter() | 302 | const router = useRouter() |
| ... | @@ -627,6 +635,14 @@ function reSign(){ | ... | @@ -627,6 +635,14 @@ function reSign(){ |
| 627 | } | 635 | } |
| 628 | }) | 636 | }) |
| 629 | } | 637 | } |
| 638 | function applyInvitation() { | ||
| 639 | var obj = { | ||
| 640 | title: language.value==0?'邀请函申请':'Invitation letter application', | ||
| 641 | cptId: matchId.value, | ||
| 642 | } | ||
| 643 | proxy.$refs['dialogInvitationRef'].open(obj) | ||
| 644 | } | ||
| 645 | |||
| 630 | </script> | 646 | </script> |
| 631 | 647 | ||
| 632 | <style scoped lang="scss"> | 648 | <style scoped lang="scss"> | ... | ... |
| ... | @@ -82,8 +82,8 @@ export default defineConfig(({ mode, command }) => { | ... | @@ -82,8 +82,8 @@ export default defineConfig(({ mode, command }) => { |
| 82 | rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '') | 82 | rewrite: (p) => p.replace(/^\/dev-api\/ztx-webSite/, '') |
| 83 | }, | 83 | }, |
| 84 | '/dev-api': { | 84 | '/dev-api': { |
| 85 | // target: 'http://192.168.1.118:8081/', | 85 | target: 'http://192.168.1.27:8081/', |
| 86 | target: 'https://dance.itechtop.cn/stage-api', | 86 | // target: 'https://dance.itechtop.cn/stage-api', |
| 87 | // target: 'https://wdsfwuxicenter.com/stage-api', | 87 | // target: 'https://wdsfwuxicenter.com/stage-api', |
| 88 | changeOrigin: true, | 88 | changeOrigin: true, |
| 89 | rewrite: (p) => p.replace(/^\/dev-api/, '') | 89 | rewrite: (p) => p.replace(/^\/dev-api/, '') | ... | ... |
-
Please register or sign in to post a comment