保险
Showing
4 changed files
with
309 additions
and
198 deletions
| 1 | <template> | 1 | <template> |
| 2 | <el-card class="mb20"> | 2 | <el-card class="mb20"> |
| 3 | <div class=""> | 3 | <div class=""> |
| 4 | <div class="matchItem" v-for="n in billList" :key="n.id"> | 4 | <div v-for="n in billList" :key="n.id" class="matchItem"> |
| 5 | <div class="status-po"> | 5 | <div class="status-po"> |
| 6 | <span class="bg-pink" v-if="n.auditStatus=='0'">{{ language==0?'未提交':'Uncommitted' }}</span> | 6 | <span v-if="n.auditStatus=='0'" class="bg-pink">{{ language == 0 ? '未提交' : 'Uncommitted' }}</span> |
| 7 | <span class="bg-primary" v-if="n.auditStatus=='1'">{{ language==0?'待审核':'Auditing' }}</span> | 7 | <span v-if="n.auditStatus=='1'" class="bg-primary">{{ language == 0 ? '待审核' : 'Auditing' }}</span> |
| 8 | <span class="bg-blue" v-if="n.auditStatus=='2'">{{ language==0?'审核通过':'Approved' }}</span> | 8 | <span v-if="n.auditStatus=='2'" class="bg-blue">{{ language == 0 ? '审核通过' : 'Approved' }}</span> |
| 9 | <span class="bg-danger" v-if="n.auditStatus=='3'">{{ language==0?'审核驳回':'Reject' }}</span> | 9 | <span v-if="n.auditStatus=='3'" class="bg-danger">{{ language == 0 ? '审核驳回' : 'Reject' }}</span> |
| 10 | <span class="bg-warning" v-if="n.auditStatus=='4'">{{ language==0?'已取消':'Canceled' }}</span> | 10 | <span v-if="n.auditStatus=='4'" class="bg-warning">{{ language == 0 ? '已取消' : 'Canceled' }}</span> |
| 11 | </div> | ||
| 12 | <el-row :gutter="15"> | ||
| 13 | <el-col :lg="6" :md="8" :xl="10"> | ||
| 14 | <img class="mauto w100" :src="fillImgUrl(n.coverUrl)"> | ||
| 15 | </el-col> | ||
| 16 | <el-col :lg="18" :md="16" :xl="14"> | ||
| 17 | <el-row> | ||
| 18 | <el-col :span="24"> | ||
| 19 | <h3>{{ n.name }}</h3> | ||
| 20 | </el-col> | ||
| 21 | <el-col :lg="8"> | ||
| 22 | <p class="ppl"><label>{{ language==0?'赛事级别':'Event Level' }}:</label>{{ n.level }}</p> | ||
| 23 | <p class="ppl" v-if="n.languageSource=='100'"><label v-if="n.groupName">{{ language==0?'参赛队':'Name of participating team' }}:</label>{{n.groupName}}</p> | ||
| 24 | </el-col> | ||
| 25 | <el-col :lg="8"> | ||
| 26 | <p class="ppl"><label>{{ language==0?'比赛时间':'Event Date' }}:</label>{{ n.signBeginTime?.substring(0,10) }}~{{n.signEndTime.substring(0,10)}} | ||
| 27 | </p> | ||
| 28 | <p class="ppl"><label>{{ language==0?'参赛运动员':'PARTICIPATING ATHLETES' }}:</label>{{ n.signSize }} 人</p> | ||
| 29 | </el-col> | ||
| 30 | <el-col :lg="8"> | ||
| 31 | <p class="ppl"><label>{{ language==0?'报名时间':'Registration Period' }}:</label>{{ n.signBeginTime.substring(0,10) }}~{{n.signEndTime.substring(0,10)}}</p> | ||
| 32 | <div class="btnbox" style="display: flex"> | ||
| 33 | <el-button class="mb10" plain round type="primary" @click="goDetail(n)" v-if="n.auditStatus!='0'"> | ||
| 34 | {{ language==0?'详情':'Detail' }}</el-button> | ||
| 35 | <el-button plain round type="primary" @click="continueSign(n)" v-if="n.auditStatus=='0'"> | ||
| 36 | {{ language==0?'继续报名':'Continue to register' }}</el-button> | ||
| 37 | <el-button plain round type="primary" @click="withDraw(n)" v-if="n.auditStatus=='1'"> | ||
| 38 | {{ language==0?'取消报名':'Cancel registration' }}</el-button> | ||
| 39 | <el-button plain round type="primary" @click="reSign(n)" v-if="n.auditStatus=='3'"> | ||
| 40 | {{ language==0?'重新报名':'Re register' }}</el-button> | ||
| 41 | <el-button plain round type="primary" @click="goDetail(n)" v-if="n.auditStatus=='2'&&n.payStatus=='0'"> | ||
| 42 | {{ language==0?'缴费':'Pay' }}</el-button> | ||
| 43 | <!-- <el-button plain round type="primary" @click="goRefund(n)" v-if="n.orderId">--> | ||
| 44 | <!-- {{ language==0?'退款':'Refund' }}--> | ||
| 45 | <!-- </el-button>--> | ||
| 46 | </div> | ||
| 47 | </el-col> | ||
| 48 | </el-row> | ||
| 49 | </el-col> | ||
| 50 | </el-row> | ||
| 51 | <el-alert v-if="n.reason" :title="language==0?'驳回理由:'+n.reason :'Reason:'+n.reason" type="error" show-icon :closable="false"/> | ||
| 52 | </div> | 11 | </div> |
| 53 | 12 | <el-row :gutter="15"> | |
| 54 | <el-empty :image="`/img/order_no.png`" :image-size="228" v-if="billList?.length == 0"/> | 13 | <el-col :lg="6" :md="8" :xl="10"> |
| 55 | 14 | <img :src="fillImgUrl(n.coverUrl)" class="mauto w100"> | |
| 15 | </el-col> | ||
| 16 | <el-col :lg="18" :md="16" :xl="14"> | ||
| 17 | <el-row> | ||
| 18 | <el-col :span="24"> | ||
| 19 | <h3>{{ n.name }}</h3> | ||
| 20 | </el-col> | ||
| 21 | <el-col :lg="8"> | ||
| 22 | <p class="ppl"><label>{{ language == 0 ? '赛事级别' : 'Event Level' }}:</label>{{ n.level }}</p> | ||
| 23 | <p v-if="n.languageSource=='100'" class="ppl"><label v-if="n.groupName">{{ | ||
| 24 | language == 0 ? '参赛队' : 'Name of participating team' | ||
| 25 | }}:</label>{{ n.groupName }}</p> | ||
| 26 | </el-col> | ||
| 27 | <el-col :lg="8"> | ||
| 28 | <p class="ppl"><label>{{ | ||
| 29 | language == 0 ? '比赛时间' : 'Event Date' | ||
| 30 | }}:</label>{{ n.signBeginTime?.substring(0, 10) }}~{{ n.signEndTime.substring(0, 10) }} | ||
| 31 | </p> | ||
| 32 | <p class="ppl"><label>{{ | ||
| 33 | language == 0 ? '参赛运动员' : 'PARTICIPATING ATHLETES' | ||
| 34 | }}:</label>{{ n.signSize }} 人</p> | ||
| 35 | </el-col> | ||
| 36 | <el-col :lg="8"> | ||
| 37 | <p class="ppl"><label>{{ | ||
| 38 | language == 0 ? '报名时间' : 'Registration Period' | ||
| 39 | }}:</label>{{ n.signBeginTime.substring(0, 10) }}~{{ n.signEndTime.substring(0, 10) }}</p> | ||
| 40 | <div class="btnbox" style="display: flex"> | ||
| 41 | <el-button | ||
| 42 | v-if="n.auditStatus!='0'" class="mb10" plain round type="primary" | ||
| 43 | @click="goDetail(n)" | ||
| 44 | > | ||
| 45 | {{ language == 0 ? '详情' : 'Detail' }} | ||
| 46 | </el-button> | ||
| 47 | <el-button v-if="n.auditStatus=='0'" plain round type="primary" @click="continueSign(n)"> | ||
| 48 | {{ language == 0 ? '继续报名' : 'Continue to register' }} | ||
| 49 | </el-button> | ||
| 50 | <el-button v-if="n.auditStatus=='1'" plain round type="primary" @click="withDraw(n)"> | ||
| 51 | {{ language == 0 ? '取消报名' : 'Cancel registration' }} | ||
| 52 | </el-button> | ||
| 53 | <el-button v-if="n.auditStatus=='3'" plain round type="primary" @click="reSign(n)"> | ||
| 54 | {{ language == 0 ? '重新报名' : 'Re register' }} | ||
| 55 | </el-button> | ||
| 56 | <el-button | ||
| 57 | v-if="n.auditStatus=='2'&&n.payStatus=='0'" plain round type="primary" | ||
| 58 | @click="goDetail(n)" | ||
| 59 | > | ||
| 60 | {{ language == 0 ? '缴费' : 'Pay' }} | ||
| 61 | </el-button> | ||
| 62 | <!-- <el-button plain round type="primary" @click="goRefund(n)" v-if="n.orderId">--> | ||
| 63 | <!-- {{ language==0?'退款':'Refund' }}--> | ||
| 64 | <!-- </el-button>--> | ||
| 65 | </div> | ||
| 66 | </el-col> | ||
| 67 | </el-row> | ||
| 68 | </el-col> | ||
| 69 | </el-row> | ||
| 70 | <el-alert | ||
| 71 | v-if="n.reason" :closable="false" :title="language==0?'驳回理由:'+n.reason :'Reason:'+n.reason" show-icon | ||
| 72 | type="error" | ||
| 73 | /> | ||
| 56 | </div> | 74 | </div> |
| 57 | <paginationPc | 75 | |
| 58 | v-show="total > 0" | 76 | <el-empty v-if="billList?.length == 0" :image="`/img/order_no.png`" :image-size="228" /> |
| 59 | v-model:page="query.pageNum" | 77 | |
| 60 | v-model:limit="query.pageSize" | 78 | </div> |
| 61 | :total="total" | 79 | <paginationPc |
| 62 | @pagination="getList" | 80 | v-show="total > 0" |
| 63 | /> | 81 | v-model:limit="query.pageSize" |
| 82 | v-model:page="query.pageNum" | ||
| 83 | :total="total" | ||
| 84 | @pagination="getList" | ||
| 85 | /> | ||
| 64 | </el-card> | 86 | </el-card> |
| 65 | 87 | ||
| 66 | </template> | 88 | </template> |
| 67 | 89 | ||
| 68 | <script setup> | 90 | <script setup> |
| 69 | import {ref} from 'vue' | 91 | import { ref } from 'vue' |
| 70 | import {useRouter} from 'vue-router' | 92 | import { useRouter } from 'vue-router' |
| 71 | import {getCurrentInstance, onMounted} from '@vue/runtime-core' | 93 | import { getCurrentInstance, onMounted } from '@vue/runtime-core' |
| 72 | import * as match from '@/apiPc/match' | 94 | import * as match from '@/apiPc/match' |
| 73 | import {ElMessage, ElMessageBox} from 'element-plus' | 95 | import { ElMessage, ElMessageBox } from 'element-plus' |
| 74 | import _ from 'lodash' | 96 | import _ from 'lodash' |
| 75 | import useUserStore from "@/store/modules/user"; | 97 | import useUserStore from '@/store/modules/user' |
| 76 | import cache from "@/plugins/cache"; | 98 | import cache from '@/plugins/cache' |
| 77 | import {useStorage} from "@vueuse/core/index"; | 99 | import { useStorage } from '@vueuse/core/index' |
| 78 | import {refundApply} from "@/apiPc/match"; | 100 | import { refundApply } from '@/apiPc/match' |
| 79 | import dayjs from "dayjs"; | 101 | import dayjs from 'dayjs' |
| 80 | const language= useStorage('language',0) | 102 | |
| 103 | const language = useStorage('language', 0) | ||
| 81 | const router = useRouter() | 104 | const router = useRouter() |
| 82 | const {proxy} = getCurrentInstance() | 105 | const { proxy } = getCurrentInstance() |
| 83 | const total = ref(0) | 106 | const total = ref(0) |
| 84 | const total2 = ref(0) | 107 | const total2 = ref(0) |
| 85 | const dialogPropsBase = { | 108 | const dialogPropsBase = { |
| ... | @@ -99,7 +122,7 @@ const cptPeriodArr = ref([]) | ... | @@ -99,7 +122,7 @@ const cptPeriodArr = ref([]) |
| 99 | const payTimeArr = ref([]) | 122 | const payTimeArr = ref([]) |
| 100 | const commitTimeArr = ref([]) | 123 | const commitTimeArr = ref([]) |
| 101 | const countryList = ref([]) | 124 | const countryList = ref([]) |
| 102 | const tableData = ref([{name: '111'}]) | 125 | const tableData = ref([{ name: '111' }]) |
| 103 | const billList = ref([]) | 126 | const billList = ref([]) |
| 104 | const query = ref({ | 127 | const query = ref({ |
| 105 | pageNum: 1, | 128 | pageNum: 1, |
| ... | @@ -129,27 +152,30 @@ const reset = (form) => { | ... | @@ -129,27 +152,30 @@ const reset = (form) => { |
| 129 | commitTimeArr.value = [] | 152 | commitTimeArr.value = [] |
| 130 | getList() | 153 | getList() |
| 131 | } | 154 | } |
| 132 | function withDraw(n){ | 155 | |
| 133 | match.withDrawByOrderId(n.orderId).then(res=>{ | 156 | function withDraw(n) { |
| 157 | match.withDrawByOrderId(n.orderId).then(res => { | ||
| 134 | getList() | 158 | getList() |
| 135 | }) | 159 | }) |
| 136 | } | 160 | } |
| 137 | function reSign(n){ | 161 | |
| 138 | match.recoverMySignFromCancel(n.id).then((res)=>{ | 162 | function reSign(n) { |
| 163 | match.recoverMySignFromCancel(n.id).then((res) => { | ||
| 139 | continueSign(n) | 164 | continueSign(n) |
| 140 | }) | 165 | }) |
| 141 | } | 166 | } |
| 142 | function continueSign(n){ | 167 | |
| 143 | if(n.status=='0'){ | 168 | function continueSign(n) { |
| 169 | if (n.status == '0') { | ||
| 144 | ElMessage({ | 170 | ElMessage({ |
| 145 | message: language.value==0?'赛事已下线无法继续报名':'The current event is offline.', | 171 | message: language.value == 0 ? '赛事已下线无法继续报名' : 'The current event is offline.', |
| 146 | type: 'warning' | 172 | type: 'warning' |
| 147 | }) | 173 | }) |
| 148 | return | 174 | return |
| 149 | } | 175 | } |
| 150 | if(n.signEndTime <= dayjs().format('YYYY-MM-DD HH:mm:ss')){ | 176 | if (n.signEndTime <= dayjs().format('YYYY-MM-DD HH:mm:ss')) { |
| 151 | ElMessage({ | 177 | ElMessage({ |
| 152 | message: language.value==0?'赛事报名已结束无法继续报名':'The event registration has ended.', | 178 | message: language.value == 0 ? '赛事报名已结束无法继续报名' : 'The event registration has ended.', |
| 153 | type: 'warning' | 179 | type: 'warning' |
| 154 | }) | 180 | }) |
| 155 | return | 181 | return |
| ... | @@ -158,7 +184,7 @@ function continueSign(n){ | ... | @@ -158,7 +184,7 @@ function continueSign(n){ |
| 158 | // 个人报名 | 184 | // 个人报名 |
| 159 | router.push({ | 185 | router.push({ |
| 160 | name: 'chooseProject', | 186 | name: 'chooseProject', |
| 161 | params:{ | 187 | params: { |
| 162 | id: n.id | 188 | id: n.id |
| 163 | }, | 189 | }, |
| 164 | query: { | 190 | query: { |
| ... | @@ -166,11 +192,11 @@ function continueSign(n){ | ... | @@ -166,11 +192,11 @@ function continueSign(n){ |
| 166 | } | 192 | } |
| 167 | }) | 193 | }) |
| 168 | } | 194 | } |
| 169 | if (user.utype == '2'){ | 195 | if (user.utype == '2') { |
| 170 | // 团队报名 | 196 | // 团队报名 |
| 171 | router.push({ | 197 | router.push({ |
| 172 | name: 'chooseSportsman', | 198 | name: 'chooseSportsman', |
| 173 | params:{ | 199 | params: { |
| 174 | id: n.id | 200 | id: n.id |
| 175 | }, | 201 | }, |
| 176 | query: { | 202 | query: { |
| ... | @@ -179,24 +205,27 @@ function continueSign(n){ | ... | @@ -179,24 +205,27 @@ function continueSign(n){ |
| 179 | } | 205 | } |
| 180 | }) | 206 | }) |
| 181 | } | 207 | } |
| 182 | |||
| 183 | } | 208 | } |
| 184 | function goDetail(n){ | 209 | |
| 210 | function goDetail(n) { | ||
| 185 | // 查看详情 | 211 | // 查看详情 |
| 186 | router.push({ | 212 | router.push({ |
| 187 | name:`signPay`, | 213 | name: `signPay`, |
| 188 | query: { | 214 | query: { |
| 189 | orderId: n.encodeOrderId | 215 | orderId: n.encodeOrderId, |
| 216 | buy: n.insuranceBuyStatus | ||
| 217 | |||
| 190 | } | 218 | } |
| 191 | }) | 219 | }) |
| 192 | } | 220 | } |
| 221 | |||
| 193 | function goRefund(n) { | 222 | function goRefund(n) { |
| 194 | ElMessageBox.confirm('Are you sure to refund?', 'Refund', { | 223 | ElMessageBox.confirm('Are you sure to refund?', 'Refund', { |
| 195 | confirmButtonText: 'Confirm', | 224 | confirmButtonText: 'Confirm', |
| 196 | cancelButtonText: 'Cancel', | 225 | cancelButtonText: 'Cancel', |
| 197 | type: 'warning', | 226 | type: 'warning' |
| 198 | }).then(() => { | 227 | }).then(() => { |
| 199 | match.refundApply(n.orderId).then(res=>{ | 228 | match.refundApply(n.orderId).then(res => { |
| 200 | ElMessage({ | 229 | ElMessage({ |
| 201 | message: 'Refund success', | 230 | message: 'Refund success', |
| 202 | type: 'success' | 231 | type: 'success' |
| ... | @@ -204,6 +233,7 @@ function goRefund(n) { | ... | @@ -204,6 +233,7 @@ function goRefund(n) { |
| 204 | }) | 233 | }) |
| 205 | }) | 234 | }) |
| 206 | } | 235 | } |
| 236 | |||
| 207 | function getList() { | 237 | function getList() { |
| 208 | console.log(query2.value) | 238 | console.log(query2.value) |
| 209 | match.getMySignCptList(query2.value).then(res => { | 239 | match.getMySignCptList(query2.value).then(res => { |
| ... | @@ -220,48 +250,74 @@ function getList() { | ... | @@ -220,48 +250,74 @@ function getList() { |
| 220 | 250 | ||
| 221 | </script> | 251 | </script> |
| 222 | 252 | ||
| 223 | <style scoped lang="scss"> | 253 | <style lang="scss" scoped> |
| 224 | .matchItem { | 254 | .matchItem { |
| 225 | cursor: pointer; | 255 | cursor: pointer; |
| 226 | margin: 0 0 20px; | 256 | margin: 0 0 20px; |
| 227 | padding: 20px 15px;background: #FBFCFD; | 257 | padding: 20px 15px; |
| 258 | background: #FBFCFD; | ||
| 228 | border-radius: 2px; | 259 | border-radius: 2px; |
| 229 | position: relative; | 260 | position: relative; |
| 230 | .status-po{position: absolute;right: 0;top: 0;font-size: 12px; | 261 | |
| 262 | .status-po { | ||
| 263 | position: absolute; | ||
| 264 | right: 0; | ||
| 265 | top: 0; | ||
| 266 | font-size: 12px; | ||
| 231 | color: #FFFFFF; | 267 | color: #FFFFFF; |
| 232 | span{border-radius: 0px 10px 0px 10px;padding: 4px 10px;} | 268 | |
| 233 | .bg-danger{background: #E60012;} | 269 | span { |
| 234 | .bg-warning{background: #e89f39;} | 270 | border-radius: 0px 10px 0px 10px; |
| 235 | .bg-pink{background: #F740A6;} | 271 | padding: 4px 10px; |
| 236 | .bg-primary{background: var(--el-color-primary)} | 272 | } |
| 237 | .bg-blue{background: #00a0e9} | 273 | |
| 274 | .bg-danger { | ||
| 275 | background: #E60012; | ||
| 276 | } | ||
| 277 | |||
| 278 | .bg-warning { | ||
| 279 | background: #e89f39; | ||
| 280 | } | ||
| 281 | |||
| 282 | .bg-pink { | ||
| 283 | background: #F740A6; | ||
| 284 | } | ||
| 285 | |||
| 286 | .bg-primary { | ||
| 287 | background: var(--el-color-primary) | ||
| 288 | } | ||
| 289 | |||
| 290 | .bg-blue { | ||
| 291 | background: #00a0e9 | ||
| 292 | } | ||
| 238 | } | 293 | } |
| 294 | |||
| 239 | &:last-child { | 295 | &:last-child { |
| 240 | border-bottom: none; | 296 | border-bottom: none; |
| 241 | } | 297 | } |
| 242 | 298 | ||
| 243 | .el-avatar { | 299 | .el-avatar { |
| 244 | position: absolute; | 300 | position: absolute; |
| 245 | left: 20px; | 301 | left: 20px; |
| 246 | top: 30px; | 302 | top: 30px; |
| 247 | 303 | ||
| 248 | img { | 304 | img { |
| 249 | background: #fff; | 305 | background: #fff; |
| 250 | } | 306 | } |
| 251 | } | 307 | } |
| 252 | 308 | ||
| 253 | .info { | 309 | .info { |
| 254 | p { | 310 | p { |
| 255 | font-size: 14px; | 311 | font-size: 14px; |
| 256 | } | 312 | } |
| 257 | } | 313 | } |
| 258 | 314 | ||
| 259 | .typeTag { | 315 | .typeTag { |
| 260 | position: absolute; | 316 | position: absolute; |
| 261 | right: 0; | 317 | right: 0; |
| 262 | top: 0; | 318 | top: 0; |
| 263 | } | 319 | } |
| 264 | 320 | ||
| 265 | h3 { | 321 | h3 { |
| 266 | font-weight: 500; | 322 | font-weight: 500; |
| 267 | margin: 0 0 10px; | 323 | margin: 0 0 10px; |
| ... | @@ -269,7 +325,7 @@ function getList() { | ... | @@ -269,7 +325,7 @@ function getList() { |
| 269 | color: #000000; | 325 | color: #000000; |
| 270 | text-overflow: ellipsis; | 326 | text-overflow: ellipsis; |
| 271 | } | 327 | } |
| 272 | 328 | ||
| 273 | &:hover h3 { | 329 | &:hover h3 { |
| 274 | color: var(--el-color-primary); | 330 | color: var(--el-color-primary); |
| 275 | } | 331 | } |
| ... | @@ -279,7 +335,7 @@ function getList() { | ... | @@ -279,7 +335,7 @@ function getList() { |
| 279 | text-align: center; | 335 | text-align: center; |
| 280 | font-size: 26px; | 336 | font-size: 26px; |
| 281 | margin: 20px; | 337 | margin: 20px; |
| 282 | 338 | ||
| 283 | span { | 339 | span { |
| 284 | font-size: 40px; | 340 | font-size: 40px; |
| 285 | font-weight: bold; | 341 | font-weight: bold; |
| ... | @@ -294,7 +350,7 @@ function getList() { | ... | @@ -294,7 +350,7 @@ function getList() { |
| 294 | :deep(.el-radio.el-radio--large .el-radio__label) { | 350 | :deep(.el-radio.el-radio--large .el-radio__label) { |
| 295 | display: flex; | 351 | display: flex; |
| 296 | align-items: center; | 352 | align-items: center; |
| 297 | 353 | ||
| 298 | img { | 354 | img { |
| 299 | margin-right: 6px; | 355 | margin-right: 6px; |
| 300 | } | 356 | } |
| ... | @@ -321,16 +377,41 @@ function getList() { | ... | @@ -321,16 +377,41 @@ function getList() { |
| 321 | .el-form--inline .el-form-item { | 377 | .el-form--inline .el-form-item { |
| 322 | width: auto; | 378 | width: auto; |
| 323 | } | 379 | } |
| 324 | .ppl{font-size: 14px; | 380 | |
| 325 | label{color: #929AA0;display: block;font-size: 12px;} | 381 | .ppl { |
| 382 | font-size: 14px; | ||
| 383 | |||
| 384 | label { | ||
| 385 | color: #929AA0; | ||
| 386 | display: block; | ||
| 387 | font-size: 12px; | ||
| 388 | } | ||
| 326 | } | 389 | } |
| 327 | .btnbox{text-align: right;} | 390 | |
| 391 | .btnbox { | ||
| 392 | text-align: right; | ||
| 393 | } | ||
| 394 | |||
| 328 | @media screen and (max-width: 768px) { | 395 | @media screen and (max-width: 768px) { |
| 329 | .matchItem{ | 396 | .matchItem { |
| 330 | img.w100{margin-bottom: 10px} | 397 | img.w100 { |
| 331 | .ppl{margin: 0 0 5px;display: flex;} | 398 | margin-bottom: 10px |
| 332 | .status-po{right: 15px;top: 23px;z-index: 2} | 399 | } |
| 333 | .btnbox{justify-content: end;} | 400 | |
| 401 | .ppl { | ||
| 402 | margin: 0 0 5px; | ||
| 403 | display: flex; | ||
| 404 | } | ||
| 405 | |||
| 406 | .status-po { | ||
| 407 | right: 15px; | ||
| 408 | top: 23px; | ||
| 409 | z-index: 2 | ||
| 410 | } | ||
| 411 | |||
| 412 | .btnbox { | ||
| 413 | justify-content: end; | ||
| 414 | } | ||
| 334 | } | 415 | } |
| 335 | } | 416 | } |
| 336 | </style> | 417 | </style> | ... | ... |
| ... | @@ -481,7 +481,7 @@ function submitForm(n) { | ... | @@ -481,7 +481,7 @@ function submitForm(n) { |
| 481 | 481 | ||
| 482 | function commit() { | 482 | function commit() { |
| 483 | if (language.value == 0 && insuranceFlag.value == 2 && checked.value == '0') { | 483 | if (language.value == 0 && insuranceFlag.value == 2 && checked.value == '0') { |
| 484 | ElMessageBox.confirm(language.value == 0 ? '你是否同意赛事放帮忙购买保险?' : 'Do you agree to have the event organizer help purchase insurance?', | 484 | ElMessageBox.confirm(language.value == 0 ? '你是否同意赛事方帮忙购买保险?' : 'Do you agree to have the event organizer help purchase insurance?', |
| 485 | language.value == 0 ? '提示' : 'Tip', { | 485 | language.value == 0 ? '提示' : 'Tip', { |
| 486 | confirmButtonText: language.value == 0 ? '是' : 'Yes', | 486 | confirmButtonText: language.value == 0 ? '是' : 'Yes', |
| 487 | cancelButtonText: language.value == 0 ? '否,进入下一步' : 'NO,Go Next', | 487 | cancelButtonText: language.value == 0 ? '否,进入下一步' : 'NO,Go Next', | ... | ... |
| ... | @@ -437,7 +437,7 @@ function submitForm() { | ... | @@ -437,7 +437,7 @@ function submitForm() { |
| 437 | type: 'warning' | 437 | type: 'warning' |
| 438 | }) | 438 | }) |
| 439 | } else if (language.value == 0 && insuranceFlag.value == '2' && checked.value == 0) { | 439 | } else if (language.value == 0 && insuranceFlag.value == '2' && checked.value == 0) { |
| 440 | ElMessageBox.confirm(language.value == 0 ? '你是否同意赛事放帮忙购买保险?' : 'Do you agree to have the event organizer help purchase insurance?', | 440 | ElMessageBox.confirm(language.value == 0 ? '你是否同意赛事方帮忙购买保险?' : 'Do you agree to have the event organizer help purchase insurance?', |
| 441 | language.value == 0 ? '提示' : 'Tip', { | 441 | language.value == 0 ? '提示' : 'Tip', { |
| 442 | confirmButtonText: language.value == 0 ? '是' : 'Yes', | 442 | confirmButtonText: language.value == 0 ? '是' : 'Yes', |
| 443 | cancelButtonText: language.value == 0 ? '否,进入下一步' : 'NO,Go Next', | 443 | cancelButtonText: language.value == 0 ? '否,进入下一步' : 'NO,Go Next', | ... | ... |
| ... | @@ -3,7 +3,9 @@ | ... | @@ -3,7 +3,9 @@ |
| 3 | <div v-if="!errorBox" class="box"> | 3 | <div v-if="!errorBox" class="box"> |
| 4 | <el-card :body-style="{ padding: '0px' }" class="mt20"> | 4 | <el-card :body-style="{ padding: '0px' }" class="mt20"> |
| 5 | <div slot="header"> | 5 | <div slot="header"> |
| 6 | <div class="bg-lineg">{{ language == 0 ? '报名缴费清单' : 'Registration Payment List' }}</div> | 6 | <div class="bg-lineg"> |
| 7 | {{ language == 0 ? '报名缴费清单' : 'Registration Payment List' }} | ||
| 8 | </div> | ||
| 7 | </div> | 9 | </div> |
| 8 | <match-info-row v-if="matchId" :match-id="matchId" /> | 10 | <match-info-row v-if="matchId" :match-id="matchId" /> |
| 9 | <div v-if="isLogin"> | 11 | <div v-if="isLogin"> |
| ... | @@ -11,7 +13,8 @@ | ... | @@ -11,7 +13,8 @@ |
| 11 | <coach-info-row v-if="groupId" :group-id="groupId" :match-id="matchId" /> | 13 | <coach-info-row v-if="groupId" :group-id="groupId" :match-id="matchId" /> |
| 12 | 14 | ||
| 13 | <div v-if="user.utype=='1'&&myMemberTable.length>0" class="pd20"> | 15 | <div v-if="user.utype=='1'&&myMemberTable.length>0" class="pd20"> |
| 14 | <div class="leftboderTT">{{ language == 0 ? '随行人员清单' : 'List of accompanying personnel' }} | 16 | <div class="leftboderTT"> |
| 17 | {{ language == 0 ? '随行人员清单' : 'List of accompanying personnel' }} | ||
| 15 | </div> | 18 | </div> |
| 16 | <div> | 19 | <div> |
| 17 | <el-table :data="myMemberTable" border class="mt20"> | 20 | <el-table :data="myMemberTable" border class="mt20"> |
| ... | @@ -41,7 +44,9 @@ | ... | @@ -41,7 +44,9 @@ |
| 41 | </div> | 44 | </div> |
| 42 | </div> | 45 | </div> |
| 43 | <div v-if="signInfoList?.length>0||zuQuery.athName" class="pd20"> | 46 | <div v-if="signInfoList?.length>0||zuQuery.athName" class="pd20"> |
| 44 | <div class="leftboderTT">{{ language == 0 ? '参赛人员保险费' : 'Participant Insurance Fee' }} | 47 | <div class="leftboderTT"> |
| 48 | <!-- {{ language == 0 ? '' + '参赛人员保险费' : 'Participant Insurance Fee' }}--> | ||
| 49 | {{ language == 0 ? '' + '参赛人员' : 'Participant' }} | ||
| 45 | <div class="fr"> | 50 | <div class="fr"> |
| 46 | <el-input | 51 | <el-input |
| 47 | v-model="zuQuery.athName" :prefix-icon="Search" clearable | 52 | v-model="zuQuery.athName" :prefix-icon="Search" clearable |
| ... | @@ -51,12 +56,18 @@ | ... | @@ -51,12 +56,18 @@ |
| 51 | </div> | 56 | </div> |
| 52 | <!-- 人员列表--> | 57 | <!-- 人员列表--> |
| 53 | <sign-info-table | 58 | <sign-info-table |
| 54 | v-if="matchId" :has-action="false" :list="signInfoList" :match-id="matchId" | 59 | v-if="matchId" |
| 55 | :show-summary="true" :total="insuranceFeeTotal" class="mt20" | 60 | :has-action="false" |
| 61 | :list="signInfoList" | ||
| 62 | :match-id="matchId" | ||
| 63 | :show-summary="buy==1" | ||
| 64 | :total="insuranceFeeTotal" | ||
| 65 | class="mt20" | ||
| 56 | /> | 66 | /> |
| 57 | </div> | 67 | </div> |
| 58 | <div v-if="zuTableList?.length>0||zuQuery.groName" class="pd20"> | 68 | <div v-if="zuTableList?.length>0||zuQuery.groName" class="pd20"> |
| 59 | <div class="leftboderTT">{{ language == 0 ? '参赛设项服务费' : 'Registration Fee for Event Entry' }} | 69 | <div class="leftboderTT"> |
| 70 | {{ language == 0 ? '参赛设项服务费' : 'Registration Fee for Event Entry' }} | ||
| 60 | <div class="fr"> | 71 | <div class="fr"> |
| 61 | <el-input | 72 | <el-input |
| 62 | v-model="zuQuery.groName" :prefix-icon="Search" clearable | 73 | v-model="zuQuery.groName" :prefix-icon="Search" clearable |
| ... | @@ -65,7 +76,10 @@ | ... | @@ -65,7 +76,10 @@ |
| 65 | </div> | 76 | </div> |
| 66 | </div> | 77 | </div> |
| 67 | <zu-table | 78 | <zu-table |
| 68 | :has-action="false" :list="zuTableList" :show-summary="true" :total="serviceFeeTotal" | 79 | :has-action="false" |
| 80 | :list="zuTableList" | ||
| 81 | :show-summary="true" | ||
| 82 | :total="serviceFeeTotal" | ||
| 69 | class="mt20" | 83 | class="mt20" |
| 70 | /> | 84 | /> |
| 71 | </div> | 85 | </div> |
| ... | @@ -96,12 +110,13 @@ | ... | @@ -96,12 +110,13 @@ |
| 96 | <div v-if="signInfoList?.length>0" class="item"><label>{{ | 110 | <div v-if="signInfoList?.length>0" class="item"><label>{{ |
| 97 | language == 0 ? '参赛服务费' : 'REGISTRATION FEE' | 111 | language == 0 ? '参赛服务费' : 'REGISTRATION FEE' |
| 98 | }}:</label><span>{{ language == 0 ? '¥' : '€' }}{{ serviceFeeTotal }}</span></div> | 112 | }}:</label><span>{{ language == 0 ? '¥' : '€' }}{{ serviceFeeTotal }}</span></div> |
| 99 | <div v-if="zuTableList?.length>0" class="item"><label>{{ | 113 | <div v-if="zuTableList?.length>0 &&buy!='0'" class="item"><label>{{ |
| 100 | language == 0 ? '保险费' : 'INSURANCE' | 114 | language == 0 ? '保险费' : 'INSURANCE' |
| 101 | }}:</label><span>{{ language == 0 ? '¥' : '€' }}{{ insuranceFeeTotal }}</span></div> | 115 | }}:</label><span>{{ language == 0 ? '¥' : '€' }}{{ insuranceFeeTotal }}</span></div> |
| 102 | <div class="item"><label>{{ language == 0 ? '费用总计' : 'Total Cost' }}:</label><span | 116 | <div class="item"> |
| 103 | class="size26" | 117 | <label>{{ language == 0 ? '费用总计' : 'Total Cost' }}:</label> |
| 104 | >{{ language == 0 ? '¥' : '€' }}{{ form.totalFee }}</span></div> | 118 | <span class="size26">{{ language == 0 ? '¥' : '€' }}{{ form.totalFee }}</span> |
| 119 | </div> | ||
| 105 | </div> | 120 | </div> |
| 106 | </el-col> | 121 | </el-col> |
| 107 | </el-row> | 122 | </el-row> |
| ... | @@ -162,7 +177,9 @@ | ... | @@ -162,7 +177,9 @@ |
| 162 | </el-row> | 177 | </el-row> |
| 163 | </el-card> | 178 | </el-card> |
| 164 | <el-card v-if="form.auditStatus=='2'&&form.payStatus=='0'&&Number(form.totalFee)>0" class="mb60"> | 179 | <el-card v-if="form.auditStatus=='2'&&form.payStatus=='0'&&Number(form.totalFee)>0" class="mb60"> |
| 165 | <div class="leftboderTT">{{ language == 0 ? '选择支付方式' : 'Choose payment method' }}</div> | 180 | <div class="leftboderTT"> |
| 181 | {{ language == 0 ? '选择支付方式' : 'Choose payment method' }} | ||
| 182 | </div> | ||
| 166 | <div class="mt20"> | 183 | <div class="mt20"> |
| 167 | <el-radio-group v-model="payType" @change="changePaytype"> | 184 | <el-radio-group v-model="payType" @change="changePaytype"> |
| 168 | <!-- 0 线下 1 支付宝 2 微信 3 paypal--> | 185 | <!-- 0 线下 1 支付宝 2 微信 3 paypal--> |
| ... | @@ -291,73 +308,76 @@ | ... | @@ -291,73 +308,76 @@ |
| 291 | 308 | ||
| 292 | <div v-if="payType == '3'"> | 309 | <div v-if="payType == '3'"> |
| 293 | <table cellpadding="0" cellspacing="0" class="table-border table"> | 310 | <table cellpadding="0" cellspacing="0" class="table-border table"> |
| 294 | <tr> | 311 | <tbody> |
| 295 | <th class="head" colspan="2"> | 312 | <tr> |
| 296 | {{ language == 0 ? '线下缴费的收款信息' : 'Offline Payment Collection Information' }} | 313 | <th class="head" colspan="2"> |
| 297 | </th> | 314 | {{ language == 0 ? '线下缴费的收款信息' : 'Offline Payment Collection Information' }} |
| 298 | </tr> | 315 | </th> |
| 299 | <tr> | 316 | </tr> |
| 300 | <th>{{ language == 0 ? '付款金额' : 'Payment Amount' }}</th> | 317 | <tr> |
| 301 | <td> | 318 | <th>{{ language == 0 ? '付款金额' : 'Payment Amount' }}</th> |
| 302 | {{ language == 0 ? '¥' : '€' }}{{ totalFee }} | 319 | <td> |
| 303 | <div class="text-gray">{{ | 320 | {{ language == 0 ? '¥' : '€' }}{{ totalFee }} |
| 304 | language == 0 ? '请按照指定金额进行打款' : 'Please make the payment according to the specified amount' | 321 | <div class="text-gray">{{ |
| 305 | }} | 322 | language == 0 ? '请按照指定金额进行打款' : 'Please make the payment according to the specified amount' |
| 306 | </div> | 323 | }} |
| 307 | </td> | 324 | </div> |
| 308 | </tr> | 325 | </td> |
| 309 | <tr> | 326 | </tr> |
| 310 | <th>{{ language == 0 ? '收款账号' : `Receiver's Account Number` }}</th> | 327 | <tr> |
| 311 | <td> | 328 | <th>{{ language == 0 ? '收款账号' : `Receiver's Account Number` }}</th> |
| 312 | {{ form.payInformation?.receivingAccount }} | 329 | <td> |
| 313 | <span | 330 | {{ form.payInformation?.receivingAccount }} |
| 314 | v-if="language==0" class="text-primary size12 pointer" | 331 | <span |
| 315 | @click="copy(form.payInformation?.receivingAccount)" | 332 | v-if="language==0" class="text-primary size12 pointer" |
| 316 | >复制25位账号</span> | 333 | @click="copy(form.payInformation?.receivingAccount)" |
| 317 | <span v-else class="text-primary size12 pointer" @click="copy(form.payInformation?.receivingAccount)">Copy 25-digit Account Number</span> | 334 | >复制25位账号</span> |
| 318 | <div v-if="language==0" class="text-gray">请勿重复打款</div> | 335 | <span v-else class="text-primary size12 pointer" @click="copy(form.payInformation?.receivingAccount)">Copy 25-digit Account Number</span> |
| 319 | <div v-else class="text-gray">Please do not make duplicate payments</div> | 336 | <div v-if="language==0" class="text-gray">请勿重复打款</div> |
| 320 | </td> | 337 | <div v-else class="text-gray">Please do not make duplicate payments</div> |
| 321 | </tr> | 338 | </td> |
| 322 | <tr> | 339 | </tr> |
| 323 | <th>{{ language == 0 ? '收款公司名' : 'Name of the Payee Company' }}</th> | 340 | <tr> |
| 324 | <td>{{ form.payInformation?.receivingCompany }}</td> | 341 | <th>{{ language == 0 ? '收款公司名' : 'Name of the Payee Company' }}</th> |
| 325 | </tr> | 342 | <td>{{ form.payInformation?.receivingCompany }}</td> |
| 326 | <tr> | 343 | </tr> |
| 327 | <th>{{ language == 0 ? '开户银行' : 'Bank Name' }}</th> | 344 | <tr> |
| 328 | <td>{{ form.payInformation?.openingBank }}</td> | 345 | <th>{{ language == 0 ? '开户银行' : 'Bank Name' }}</th> |
| 329 | </tr> | 346 | <td>{{ form.payInformation?.openingBank }}</td> |
| 330 | <tr> | 347 | </tr> |
| 331 | <th>{{ language == 0 ? '备注信息' : 'Remarks' }}</th> | 348 | <tr> |
| 332 | <td> | 349 | <th>{{ language == 0 ? '备注信息' : 'Remarks' }}</th> |
| 333 | {{ form.payInformation?.remarks }} | 350 | <td> |
| 334 | </td> | 351 | {{ form.payInformation?.remarks }} |
| 335 | </tr> | 352 | </td> |
| 336 | <tr> | 353 | </tr> |
| 337 | <th>{{ language == 0 ? '联系人' : 'Contacts' }}</th> | 354 | <tr> |
| 338 | <td> | 355 | <th>{{ language == 0 ? '联系人' : 'Contacts' }}</th> |
| 339 | {{ form.payInformation?.contacts }} | 356 | <td> |
| 340 | </td> | 357 | {{ form.payInformation?.contacts }} |
| 341 | </tr> | 358 | </td> |
| 342 | <tr> | 359 | </tr> |
| 343 | <th>{{ language == 0 ? '联系电话' : 'Telephone' }}</th> | 360 | <tr> |
| 344 | <td>{{ form.payInformation?.contactPhone }}</td> | 361 | <th>{{ language == 0 ? '联系电话' : 'Telephone' }}</th> |
| 345 | </tr> | 362 | <td>{{ form.payInformation?.contactPhone }}</td> |
| 346 | <tr> | 363 | </tr> |
| 347 | <th>{{ language == 0 ? '操作' : 'Actions' }}</th> | 364 | <tr> |
| 348 | <td> | 365 | <th>{{ language == 0 ? '操作' : 'Actions' }}</th> |
| 349 | <file-upload | 366 | <td> |
| 350 | v-model="voucherObj" :button-text="language==0?'上传汇款单':'Upload Remittance Receipt'" | 367 | <file-upload |
| 351 | :button-type="1" :is-show-tip="false" | 368 | v-model="voucherObj" :button-text="language==0?'上传汇款单':'Upload Remittance Receipt'" |
| 352 | :limit="1" | 369 | :button-type="1" :is-show-tip="false" |
| 353 | /> | 370 | :limit="1" |
| 354 | <span | 371 | /> |
| 355 | v-if="language==0" | 372 | <span |
| 356 | class="text-danger size12" | 373 | v-if="language==0" |
| 357 | >*您可以在上传汇款单完成后,与联系人进行电话确认。具体缴费结果,可以在个人中心-我的报名中查看进度</span> | 374 | class="text-danger size12" |
| 358 | <span v-else class="text-danger size12">*You can confirm with the contact person by phone after uploading the remittance form. The specific payment results can be viewed in the My Registration section of the personal center to check the progress</span> | 375 | >*您可以在上传汇款单完成后,与联系人进行电话确认。具体缴费结果,可以在个人中心-我的报名中查看进度</span> |
| 359 | </td> | 376 | <span v-else class="text-danger size12">*You can confirm with the contact person by phone after uploading the remittance form. The specific payment results can be viewed in the My Registration section of the personal center to check the progress</span> |
| 360 | </tr> | 377 | </td> |
| 378 | </tr> | ||
| 379 | </tbody> | ||
| 380 | |||
| 361 | </table> | 381 | </table> |
| 362 | 382 | ||
| 363 | <div class="text-center"> | 383 | <div class="text-center"> |
| ... | @@ -432,7 +452,9 @@ | ... | @@ -432,7 +452,9 @@ |
| 432 | </el-form-item> | 452 | </el-form-item> |
| 433 | </div> | 453 | </div> |
| 434 | <div class="tip mt20"> | 454 | <div class="tip mt20"> |
| 435 | <label>{{ language == 0 ? '开电子收据须知' : 'Receipt notice' }}:</label> | 455 | <label> |
| 456 | {{ language == 0 ? '开电子收据须知' : 'Receipt notice' }}: | ||
| 457 | </label> | ||
| 436 | <div class="pd10"> | 458 | <div class="pd10"> |
| 437 | {{ remark }} | 459 | {{ remark }} |
| 438 | </div> | 460 | </div> |
| ... | @@ -467,6 +489,7 @@ import { useStorage } from '@vueuse/core/index' | ... | @@ -467,6 +489,7 @@ import { useStorage } from '@vueuse/core/index' |
| 467 | import { ElMessage, ElMessageBox } from 'element-plus' | 489 | import { ElMessage, ElMessageBox } from 'element-plus' |
| 468 | import { getBaseInfoByActiveId, getReceipt } from '@/apiPc/booking' | 490 | import { getBaseInfoByActiveId, getReceipt } from '@/apiPc/booking' |
| 469 | 491 | ||
| 492 | const buy = ref(route.query.buy || '0') | ||
| 470 | const isLogin = ref(false) | 493 | const isLogin = ref(false) |
| 471 | const language = useStorage('language', 0) | 494 | const language = useStorage('language', 0) |
| 472 | const signInfoList = ref([]) | 495 | const signInfoList = ref([]) |
| ... | @@ -486,7 +509,8 @@ const insuranceFeeTotal = ref(0) | ... | @@ -486,7 +509,8 @@ const insuranceFeeTotal = ref(0) |
| 486 | const serviceFeeTotal = ref(0) | 509 | const serviceFeeTotal = ref(0) |
| 487 | const zuQuery = ref({ | 510 | const zuQuery = ref({ |
| 488 | cptId: matchId.value, | 511 | cptId: matchId.value, |
| 489 | groupId: groupId.value | 512 | groupId: groupId.value, |
| 513 | buy: route.query.buy || '0' | ||
| 490 | }) | 514 | }) |
| 491 | const user = useUserStore().user | 515 | const user = useUserStore().user |
| 492 | const remark = ref('') | 516 | const remark = ref('') |
| ... | @@ -521,7 +545,10 @@ if (useUserStore().user) { | ... | @@ -521,7 +545,10 @@ if (useUserStore().user) { |
| 521 | } | 545 | } |
| 522 | 546 | ||
| 523 | function getData() { | 547 | function getData() { |
| 524 | return match.getMyOrderDetail({ orderId: orderId.value }).then(res => { | 548 | return match.getMyOrderDetail({ |
| 549 | orderId: orderId.value, | ||
| 550 | buy: buy.value | ||
| 551 | }).then(res => { | ||
| 525 | totalFee.value = res.data.totalFee | 552 | totalFee.value = res.data.totalFee |
| 526 | form.value = res.data | 553 | form.value = res.data |
| 527 | form.value.payTypeArr = res.data.payType.split(',') | 554 | form.value.payTypeArr = res.data.payType.split(',') |
| ... | @@ -560,6 +587,7 @@ function upRR() { | ... | @@ -560,6 +587,7 @@ function upRR() { |
| 560 | 587 | ||
| 561 | function getSignList() { | 588 | function getSignList() { |
| 562 | match.getMySignInfoList(zuQuery.value).then(res => { | 589 | match.getMySignInfoList(zuQuery.value).then(res => { |
| 590 | console.log(res) | ||
| 563 | insuranceFeeTotal.value = 0 | 591 | insuranceFeeTotal.value = 0 |
| 564 | serviceFeeTotal.value = 0 | 592 | serviceFeeTotal.value = 0 |
| 565 | signInfoList.value = res.data?.singleData || [] | 593 | signInfoList.value = res.data?.singleData || [] |
| ... | @@ -571,6 +599,7 @@ function getSignList() { | ... | @@ -571,6 +599,7 @@ function getSignList() { |
| 571 | serviceFeeTotal.value = serviceFeeTotal.value + Number(z.project.serviceFee) | 599 | serviceFeeTotal.value = serviceFeeTotal.value + Number(z.project.serviceFee) |
| 572 | } | 600 | } |
| 573 | }).catch(err => { | 601 | }).catch(err => { |
| 602 | console.log(err) | ||
| 574 | if (isLogin.value) { | 603 | if (isLogin.value) { |
| 575 | router.push({ name: 'myMatch' }) | 604 | router.push({ name: 'myMatch' }) |
| 576 | } | 605 | } |
| ... | @@ -740,6 +769,7 @@ function downloadAndSend() { | ... | @@ -740,6 +769,7 @@ function downloadAndSend() { |
| 740 | showSJ() | 769 | showSJ() |
| 741 | }) | 770 | }) |
| 742 | }).catch(err => { | 771 | }).catch(err => { |
| 772 | console.log(err) | ||
| 743 | loading.value = false | 773 | loading.value = false |
| 744 | }) | 774 | }) |
| 745 | } | 775 | } | ... | ... |
-
Please register or sign in to post a comment