0610fc57 by 杨炀

no message

1 parent 261424a0
# 页面标题
VITE_APP_TITLE = 中跆协后台管理系统
# 开发环境配置
VITE_APP_ENV = 'development'
# 中跆协管理系统/开发环境
VITE_APP_BASE_API = '/dev-api'
# 应用访问路径 例如使用前缀 /admin/
VITE_APP_CONTEXT_PATH = '/'
# 监控地址
VITE_APP_MONITRO_ADMIN = 'http://localhost:9090/admin/login'
# xxl-job 控制台地址
VITE_APP_XXL_JOB_ADMIN = 'http://localhost:9100/xxl-job-admin'
VITE_APP_SOCKET_URL='http://192.168.1.133:8088'
# 页面标题
VITE_APP_TITLE = 中跆协后台管理系统
# 生产环境配置
VITE_APP_ENV = 'production'
# 应用访问路径 例如使用前缀 /admin/
VITE_APP_CONTEXT_PATH = '/'
# 监控地址
VITE_APP_MONITRO_ADMIN = '/admin/login'
# 监控地址
VITE_APP_XXL_JOB_ADMIN = '/xxl-job-admin'
# 中跆协管理系统/生产环境
VITE_APP_BASE_API = '/prod-api'
# 是否在打包时开启压缩,支持 gzip 和 brotli
VITE_BUILD_COMPRESS = gzip
# 页面标题
VITE_APP_TITLE = 中跆协后台管理系统
# 生产环境配置
VITE_APP_ENV = 'production'
# 应用访问路径 例如使用前缀 /admin/
VITE_APP_CONTEXT_PATH = '/'
# 监控地址
VITE_APP_MONITRO_ADMIN = '/admin/login'
# 监控地址
VITE_APP_XXL_JOB_ADMIN = '/xxl-job-admin'
# 中跆协管理系统/测试环境
VITE_APP_BASE_API = '/stage-api'
# 是否在打包时开启压缩,支持 gzip 和 brotli
VITE_BUILD_COMPRESS = gzip
VITE_APP_SOCKET_URL='http://192.168.1.133:8088'
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="renderer" content="webkit">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<link rel="icon" href="/favicon.ico">
<title>亚洲舞蹈大赛</title>
<!-- <script src="./browser.js"></script>-->
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
<style>
html,
body,
#app {
height: 100%;
margin: 0px;
padding: 0px;
}
.chromeframe {
margin: 0.2em 0;
background: #ccc;
color: #000;
padding: 0.2em 0;
}
#loader-wrapper {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 999999;
}
#loader {
display: block;
position: relative;
left: 50%;
top: 50%;
width: 150px;
height: 150px;
margin: -75px 0 0 -75px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-webkit-animation: spin 2s linear infinite;
-ms-animation: spin 2s linear infinite;
-moz-animation: spin 2s linear infinite;
-o-animation: spin 2s linear infinite;
animation: spin 2s linear infinite;
z-index: 1001;
}
#loader:before {
content: "";
position: absolute;
top: 5px;
left: 5px;
right: 5px;
bottom: 5px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-webkit-animation: spin 3s linear infinite;
-moz-animation: spin 3s linear infinite;
-o-animation: spin 3s linear infinite;
-ms-animation: spin 3s linear infinite;
animation: spin 3s linear infinite;
}
#loader:after {
content: "";
position: absolute;
top: 15px;
left: 15px;
right: 15px;
bottom: 15px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
-moz-animation: spin 1.5s linear infinite;
-o-animation: spin 1.5s linear infinite;
-ms-animation: spin 1.5s linear infinite;
-webkit-animation: spin 1.5s linear infinite;
animation: spin 1.5s linear infinite;
}
@-webkit-keyframes spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg);
}
}
@keyframes spin {
0% {
-webkit-transform: rotate(0deg);
-ms-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
-ms-transform: rotate(360deg);
transform: rotate(360deg);
}
}
#loader-wrapper .loader-section {
position: fixed;
top: 0;
width: 51%;
height: 100%;
background: #7171C6;
z-index: 1000;
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
transform: translateX(0);
}
#loader-wrapper .loader-section.section-left {
left: 0;
}
#loader-wrapper .loader-section.section-right {
right: 0;
}
.loaded #loader-wrapper .loader-section.section-left {
-webkit-transform: translateX(-100%);
-ms-transform: translateX(-100%);
transform: translateX(-100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader-wrapper .loader-section.section-right {
-webkit-transform: translateX(100%);
-ms-transform: translateX(100%);
transform: translateX(100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
}
.loaded #loader {
opacity: 0;
-webkit-transition: all 0.3s ease-out;
transition: all 0.3s ease-out;
}
.loaded #loader-wrapper {
visibility: hidden;
-webkit-transform: translateY(-100%);
-ms-transform: translateY(-100%);
transform: translateY(-100%);
-webkit-transition: all 0.3s 1s ease-out;
transition: all 0.3s 1s ease-out;
}
.no-js #loader-wrapper {
display: none;
}
.no-js h1 {
color: #222222;
}
#loader-wrapper .load_title {
font-family: 'Open Sans';
color: #FFF;
font-size: 19px;
width: 100%;
text-align: center;
z-index: 9999999999999;
position: absolute;
top: 60%;
opacity: 1;
line-height: 30px;
}
#loader-wrapper .load_title span {
font-weight: normal;
font-style: italic;
font-size: 13px;
color: #FFF;
opacity: 0.5;
}
</style>
</head>
<body>
<div id="app">
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
<div class="load_title">正在加载系统资源,请耐心等待</div>
</div>
</div>
<script type="module" src="/src/mainPc.js"></script>
</body>
</html>
<template>
<!-- <el-config-provider :locale="locale">-->
<router-view />
<!-- </el-config-provider>-->
<reset-pwd ref="resetPwdRef" />
</template>
<script setup>
import useSettingsStore from '@/store/modules/settings'
import { handleThemeStyle } from '@/utils/theme'
import { nextTick, onMounted, watch } from 'vue'
import useUserStore from '@/store/modules/user'
import { handleThemeStyle } from '@/utils/theme'
import useSettingsStore from '@/store/modules/settings'
import ResetPwd from '@/views/system/user/profile/components/resetPwd'
import useUserStore from '@/store/modules/user'
import { getCurrentInstance } from '@vue/runtime-core'
// import { ElConfigProvider } from 'element-plus'
// import locale from 'element-plus/lib/locale/lang/zh-cn'
const userStore = useUserStore()
const { proxy } = getCurrentInstance()
onMounted(() => {
document.body.style.setProperty('--el-color-primary', '#453DEA')
// 鼠标移动到按钮上方时显示的颜色,默认蓝色,可以和primary设置的颜色不一样
document.body.style.setProperty('--el-color-primary-light-3', '#8623FC')
document.body.style.setProperty('--el-color-success', '#29c490')
document.body.style.setProperty('--el-color-success-light-3', '#54d0a6')
// danger
document.body.style.setProperty('--el-color-danger', '#d51515')
document.body.style.setProperty('--el-color-danger-light-3', '#d44')
// warning
document.body.style.setProperty('--el-color-warning', '#e6a23c')
document.body.style.setProperty('--el-color-warning-light-3', '#ebb563')
document.body.style.setProperty('--el-button-hover-bg-color', '#fff')
nextTick(() => {
// 初始化主题样式
handleThemeStyle(useSettingsStore().theme)
})
})
watch(() => userStore.user?.changePassFlag, (val) => {
if (val === '1') {
proxy.$modal.confirm('密码长期未更新,请及时更新').then(() => {
proxy.$refs['resetPwdRef'].open()
})
}
})
// watch(() => userStore.user?.changePassFlag, (val) => {
// if (val === '1') {
// proxy.$modal.confirm('密码长期未更新,请及时更新').then(() => {
// proxy.$refs['resetPwdRef'].open()
// })
// }
// })
</script>
<style lang="scss">
.app-container{
background-color: #F5F7F9;
padding:20px;
min-height: calc(100vh - 85px);
:root {
--el-color-golden: #946A12;
--el-fill-color-light: #faf5f5;
--el-button-hover-border-color: #94080B;
--el-button-hover-bg-color: rgba(148, 8, 11, 0.3);
--el-fill-color-lighter: #F6F9FE!important;
}
/* 搜索栏 */
.from-Card{
background-color: #fff;
padding: 20px;
.el-button:focus, .el-button:hover {
//--el-button-hover-border-color: #94080B;
//--el-button-hover-bg-color: transparent;
}
.btn-card{
padding: 20px;
background: #fff;
border-radius: 10px;
.box {
width: 90%;
max-width: 1600px;
margin: auto;
}
/* 表格 */
.table{
background-color: #fff;
padding:0 20px 10px;
position: relative;
.app-container {
min-height: 100vh;
}
.box{
background: #fff;
border-radius: 5px;
padding: 10px;
.app-main {
background: #F4F4F4;
}
.el-breadcrumb__inner {
display: flex;
.el-icon {
margin: 0 4px;
}
}
li.el-select-dropdown__item {
height: auto;
}
:root {
--el-menu-active-color: var(--el-color-primary);
}
/* 分页 */
.foot{
background-color: #fff;
.el-popper .el-menu {
background: #fff;
}
.el-popper .el-menu--horizontal .el-menu .el-menu-item {
background: transparent;
justify-content: center;
height: 50px;
font-size: 18px;
}
.el-popper .el-menu--horizontal .el-menu .el-sub-menu .el-sub-menu__title {
background: transparent;
justify-content: center;
height: 50px;
font-size: 18px;
}
.el-popper .el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title {
color: #fff;
}
.el-popper .el-menu--horizontal .el-menu .el-menu-item.is-active {
color:var(--el-color-primary);
}
.el-popper, .el-menu--popup {
border-radius: 0;
}
:deep(.el-menu--popup) {
min-width: 130px;padding: 0;
}
.el-popper.is-light.is-pure {
border: none;
}
.el-popper {
.el-menu--horizontal .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal .el-menu-item:not(.is-disabled):hover {
color: var(--el-color-primary);
}
.el-menu--horizontal {
border: none;
}
}
.home-menu {
.el-menu {color: #000;}
.el-menu--horizontal>.el-menu-item {
transition: none;color: #000;padding: 6px 10px ;margin: 0 10px;border-radius: 18px;
}
.el-sub-menu .el-sub-menu__title {
font-size: 20px;color: #000;
}
.el-menu--horizontal > .el-sub-menu.is-active .el-sub-menu__title {
border-bottom: none;
color: var(--el-color-primary);
}
.el-menu--horizontal .el-menu .el-menu-item {
justify-content: center;
}
.el-menu--horizontal > .el-sub-menu .el-sub-menu__title:hover {
color: #453DEA;
}
.el-menu--horizontal .el-menu-item:not(.is-disabled):focus {
}
.el-menu--horizontal .el-menu-item:not(.is-disabled):hover {
color: #453DEA;
}
.el-menu--horizontal > .el-menu-item.is-active {
border-bottom: none;background: linear-gradient(-90deg, #8623FC, #453DEA);
border-radius: 18px;color: #fff!important;
}
.el-menu--horizontal {
height: 35px;
border-bottom: none;
justify-content: space-between;
}
.el-menu--horizontal > .el-menu-item {
font-size: 20px;
}
}
@media (max-width: 1600px) {
.el-menu--horizontal > .el-menu-item {
padding: 0 15px;
}
}
.btn-top{
margin-top: 10px;
@media (max-width: 1500px) {
.home-menu .el-menu--horizontal > .el-menu-item {
padding: 0 10px;
}
}
.el-table{
background: url("@/assets/admin/tableBg.png") #F5FBFE no-repeat top;
background-color:#F5FBFE!important;
background-size: 750px;
--el-bg-color:#F5FBFE;
--el-table-border-color:#e1e4ec;
--el-fill-color-blank:transparent;
--el-fill-color-light:#fff;
@media (max-width: 1440px) {
.fixed_nav{ transform: scale(0.8);
transform-origin: left;}
.home-menu .el-menu--horizontal > .el-menu-item {
font-size: 16px;
padding: 0 10px;
}
.home-menu .el-sub-menu .el-sub-menu__title {
font-size: 16px;
}
.serverRow .item {
height: 260px;
}
.el-popper .el-menu--horizontal .el-menu .el-menu-item {
font-size: 16px;
}
}
// 审核通过添加背景色
.success-row{
--el-table-tr-bg-color: rgba(41, 196, 144,.15);
//思源宋体
@font-face {
font-family: SC-song;
src: url("@/assets/fonts/SHSCN_regular.otf") format('otf');
}
.totalCost{
font-weight: 700;
font-size: 16px;
margin-top: 10px;
position: absolute;
bottom: 30px;
left: 20px;
z-index: 999;
.imgbox {
img {
width: 100%;
}
}
span{
color: orange;
margin-right: 20px;
.searchpp {
.el-dialog__headerbtn .el-dialog__close {
font-size: 33px;
}
&.el-dialog {
padding: 0 100px;
--el-dialog-title-font-size: 40px;
--el-dialog-padding-primary: 50px 20px 0 0;
box-shadow: 0 2000px 0 2000px rgba(0, 0, 0, 0.6);
}
.el-dialog__headerbtn {
right: 20px;
top: 30px;
}
}
.searchPark{padding: 10px 20px;height: 100%;
background: #F6F6F6;
.el-input__suffix{color:var(--el-color-primary)}
.el-icon{color:var(--el-color-primary)}
.el-input{--el-input-icon-color:var(--el-color-primary)}
}
.flexformItem{
display: flex;width: 100%;
.el-date-editor{
--el-date-editor-width:100%
}
.el-input__suffix{color:var(--el-color-primary)}
.el-icon{color:var(--el-color-primary)}
.el-input{--el-input-icon-color:var(--el-color-primary)}
}
.topBanner{
.imgbox{position: relative;height: 100%;
img{height: 100%;object-fit: cover;}
}
h3{position: absolute;bottom: 0;color: #fff;
font-size: 36px;margin: 0;
text-align: center;width: 100%;padding: 60px 0 40px;
background: linear-gradient(0deg,rgba(0,0,0,0.5),rgba(0,0,0,0));
}
}
.tablebody{width: 100%;overflow: auto}
// 禁选背景色
.disabled-row{
--el-table-tr-bg-color: rgba(36, 37, 37,0.1);
@media (max-width: 800px) {
.box{width: 96%}
}
</style>
......
<template>
<router-view />
<reset-pwd ref="resetPwdRef" />
</template>
<script setup>
import { nextTick, onMounted, watch } from 'vue'
import { handleThemeStyle } from '@/utils/theme'
import useSettingsStore from '@/store/modules/settings'
import ResetPwd from '@/views/system/user/profile/components/resetPwd'
import useUserStore from '@/store/modules/user'
import { getCurrentInstance } from '@vue/runtime-core'
const userStore = useUserStore()
const { proxy } = getCurrentInstance()
onMounted(() => {
document.body.style.setProperty('--el-color-primary', '#453DEA')
document.body.style.setProperty('--el-color-primary-light-3', '#8623FC')
document.body.style.setProperty('--el-button-hover-bg-color', '#fff')
nextTick(() => {
// 初始化主题样式
handleThemeStyle(useSettingsStore().theme)
})
})
// watch(() => userStore.user?.changePassFlag, (val) => {
// if (val === '1') {
// proxy.$modal.confirm('密码长期未更新,请及时更新').then(() => {
// proxy.$refs['resetPwdRef'].open()
// })
// }
// })
</script>
<style lang="scss">
:root {
--el-color-golden: #946A12;
--el-fill-color-light: #faf5f5;
--el-button-hover-border-color: #94080B;
--el-button-hover-bg-color: rgba(148, 8, 11, 0.3);
--el-fill-color-lighter: #F6F9FE!important;
}
.el-button:focus, .el-button:hover {
//--el-button-hover-border-color: #94080B;
//--el-button-hover-bg-color: transparent;
}
.box {
width: 90%;
max-width: 1400px;
margin: auto;
}
.app-container {
min-height: 100vh;
}
.app-main {
background: #F4F4F4;
}
.el-breadcrumb__inner {
display: flex;
.el-icon {
margin: 0 4px;
}
}
li.el-select-dropdown__item {
height: auto;
}
:root {
--el-menu-active-color: var(--el-color-primary);
}
.el-popper .el-menu {
background: #fff;
}
.el-popper .el-menu--horizontal .el-menu .el-menu-item {
background: transparent;
justify-content: center;
height: 50px;
font-size: 18px;
}
.el-popper .el-menu--horizontal .el-menu .el-sub-menu .el-sub-menu__title {
background: transparent;
justify-content: center;
height: 50px;
font-size: 18px;
}
.el-popper .el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title {
color: #fff;
}
.el-popper .el-menu--horizontal .el-menu .el-menu-item.is-active {
color:var(--el-color-primary);
}
.el-popper, .el-menu--popup {
border-radius: 0;
}
:deep(.el-menu--popup) {
min-width: 130px;padding: 0;
}
.el-popper.is-light.is-pure {
border: none;
}
.el-popper {
.el-menu--horizontal .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal .el-menu-item:not(.is-disabled):hover {
color: var(--el-color-primary);
}
.el-menu--horizontal {
border: none;
}
}
.home-menu {
.el-menu {color: #000;}
.el-menu--horizontal>.el-menu-item {
transition: none;color: #000;padding: 6px 10px ;margin: 0 10px;border-radius: 18px;
}
.el-sub-menu .el-sub-menu__title {
font-size: 20px;color: #000;
}
.el-menu--horizontal > .el-sub-menu.is-active .el-sub-menu__title {
border-bottom: none;
color: var(--el-color-primary);
}
.el-menu--horizontal .el-menu .el-menu-item {
justify-content: center;
}
.el-menu--horizontal > .el-sub-menu .el-sub-menu__title:hover {
color: #453DEA;
}
.el-menu--horizontal .el-menu-item:not(.is-disabled):focus {
}
.el-menu--horizontal .el-menu-item:not(.is-disabled):hover {
color: #453DEA;
}
.el-menu--horizontal > .el-menu-item.is-active {
border-bottom: none;background: linear-gradient(-90deg, #8623FC, #453DEA);
border-radius: 18px;color: #fff!important;
}
.el-menu--horizontal {
height: 35px;
border-bottom: none;
justify-content: space-between;
}
.el-menu--horizontal > .el-menu-item {
font-size: 20px;
}
}
@media (max-width: 1600px) {
.el-menu--horizontal > .el-menu-item {
padding: 0 15px;
}
}
@media (max-width: 1500px) {
.home-menu .el-menu--horizontal > .el-menu-item {
padding: 0 10px;
}
}
@media (max-width: 1440px) {
.fixed_nav{ transform: scale(0.8);
transform-origin: left;}
.home-menu .el-menu--horizontal > .el-menu-item {
font-size: 16px;
padding: 0 10px;
}
.home-menu .el-sub-menu .el-sub-menu__title {
font-size: 16px;
}
.serverRow .item {
height: 260px;
}
.el-popper .el-menu--horizontal .el-menu .el-menu-item {
font-size: 16px;
}
}
//思源宋体
@font-face {
font-family: SC-song;
src: url("@/assets/fonts/SHSCN_regular.otf") format('otf');
}
.imgbox {
img {
width: 100%;
}
}
.searchpp {
.el-dialog__headerbtn .el-dialog__close {
font-size: 33px;
}
&.el-dialog {
padding: 0 100px;
--el-dialog-title-font-size: 40px;
--el-dialog-padding-primary: 50px 20px 0 0;
box-shadow: 0 2000px 0 2000px rgba(0, 0, 0, 0.6);
}
.el-dialog__headerbtn {
right: 20px;
top: 30px;
}
}
.searchPark{padding: 10px 20px;height: 100%;
background: #F6F6F6;
.el-input__suffix{color:var(--el-color-primary)}
.el-icon{color:var(--el-color-primary)}
.el-input{--el-input-icon-color:var(--el-color-primary)}
}
.flexformItem{
display: flex;width: 100%;
.el-date-editor{
--el-date-editor-width:100%
}
.el-input__suffix{color:var(--el-color-primary)}
.el-icon{color:var(--el-color-primary)}
.el-input{--el-input-icon-color:var(--el-color-primary)}
}
.topBanner{
.imgbox{position: relative;height: 100%;
img{height: 100%;object-fit: cover;}
}
h3{position: absolute;bottom: 0;color: #fff;
font-size: 36px;margin: 0;
text-align: center;width: 100%;padding: 60px 0 40px;
background: linear-gradient(0deg,rgba(0,0,0,0.5),rgba(0,0,0,0));
}
}
</style>
<template>
<!-- <el-config-provider :locale="locale">-->
<router-view />
<!-- </el-config-provider>-->
<reset-pwd ref="resetPwdRef" />
</template>
<script setup>
import useSettingsStore from '@/store/modules/settings'
import { handleThemeStyle } from '@/utils/theme'
import { nextTick, onMounted, watch } from 'vue'
import useUserStore from '@/store/modules/user'
import ResetPwd from '@/views/system/user/profile/components/resetPwd'
import { getCurrentInstance } from '@vue/runtime-core'
// import { ElConfigProvider } from 'element-plus'
// import locale from 'element-plus/lib/locale/lang/zh-cn'
const userStore = useUserStore()
const { proxy } = getCurrentInstance()
onMounted(() => {
document.body.style.setProperty('--el-color-primary', '#453DEA')
// 鼠标移动到按钮上方时显示的颜色,默认蓝色,可以和primary设置的颜色不一样
document.body.style.setProperty('--el-color-primary-light-3', '#8623FC')
document.body.style.setProperty('--el-color-success', '#29c490')
document.body.style.setProperty('--el-color-success-light-3', '#54d0a6')
// danger
document.body.style.setProperty('--el-color-danger', '#d51515')
document.body.style.setProperty('--el-color-danger-light-3', '#d44')
// warning
document.body.style.setProperty('--el-color-warning', '#e6a23c')
document.body.style.setProperty('--el-color-warning-light-3', '#ebb563')
nextTick(() => {
// 初始化主题样式
handleThemeStyle(useSettingsStore().theme)
})
})
watch(() => userStore.user?.changePassFlag, (val) => {
if (val === '1') {
proxy.$modal.confirm('密码长期未更新,请及时更新').then(() => {
proxy.$refs['resetPwdRef'].open()
})
}
})
</script>
<style lang="scss">
.app-container{
background-color: #F5F7F9;
padding:20px;
min-height: calc(100vh - 85px);
}
/* 搜索栏 */
.from-Card{
background-color: #fff;
padding: 20px;
}
.btn-card{
padding: 20px;
background: #fff;
border-radius: 10px;
}
/* 表格 */
.table{
background-color: #fff;
padding:0 20px 10px;
position: relative;
}
.box{
background: #fff;
border-radius: 5px;
padding: 10px;
}
/* 分页 */
.foot{
background-color: #fff;
height: 50px;
}
.btn-top{
margin-top: 10px;
}
.el-table{
background: url("@/assets/admin/tableBg.png") #F5FBFE no-repeat top;
background-color:#F5FBFE!important;
background-size: 750px;
--el-bg-color:#F5FBFE;
--el-table-border-color:#e1e4ec;
--el-fill-color-blank:transparent;
--el-fill-color-light:#fff;
}
// 审核通过添加背景色
.success-row{
--el-table-tr-bg-color: rgba(41, 196, 144,.15);
}
.totalCost{
font-weight: 700;
font-size: 16px;
margin-top: 10px;
position: absolute;
bottom: 30px;
left: 20px;
z-index: 999;
span{
color: orange;
margin-right: 20px;
}
}
// 禁选背景色
.disabled-row{
--el-table-tr-bg-color: rgba(36, 37, 37,0.1);
}
</style>

291 KB | W: | H:

129 KB | W: | H:

src/assets/dance/map.png
src/assets/dance/map.png
src/assets/dance/map.png
src/assets/dance/map.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -496,13 +496,13 @@ img{display: block;}
}
}
.bg-lineg{ background: linear-gradient(90deg, #8623FC, #453DEA);color: #fff;}
.lineHead{height: 50px;padding: 15px;
.lineHead{height: 50px;padding: 15px;overflow: auto;
background: linear-gradient(90deg, #8623FC, #453DEA);
h3{margin: 0;background: #FFFFFF;
font-size: 18px;
color: var(--el-color-primary);
border-radius: 5px;display: inline;padding: 5px 15px;}
ul{margin: 0;padding: 0;
ul{margin: 0;padding: 0;white-space: nowrap;
li{border-radius: 5px;display: inline;padding: 5px 15px; font-size: 18px;
color: #fff;cursor: pointer;}
li.active{background: #FFFFFF;color: var(--el-color-primary);cursor: default;}
......@@ -510,7 +510,7 @@ img{display: block;}
}
.news-l-r{
.item{display: flex;border-bottom: 1px dashed #EEEEEE;padding: 15px;cursor: pointer;
.imgbox{aspect-ratio: 16/9;width: 110px;margin-right: 10px; flex: 0 0 auto;
.imgbox{aspect-ratio: 16/9;width: 200px;margin-right: 10px; flex: 0 0 auto;
img{height: 100%;object-fit: cover;}
}
.info{ flex: 1 1 auto;
......@@ -535,6 +535,7 @@ img{display: block;}
}
.item:hover{
h3{color:var(--el-color-primary);}
h2{color:var(--el-color-primary);}
}
}
.nakedTitle{display: flex;justify-content: space-between;align-items: baseline;
......@@ -552,7 +553,7 @@ img{display: block;}
}
.topNews{align-items: flex-start;}
.carouselImg{position: relative;height: 100%;
background: url("@/assets/v1/default.jpg") #f4f4f4 no-repeat center;
background: #f4f4f4;
background-size: cover;
img{object-fit: cover;height: 100%;}
.date{width: 60px;height: 60px;text-align: center;
......@@ -911,7 +912,7 @@ img{display: block;}
.item{
.imgbox{
background: url("@/assets/v1/default.jpg") #f4f4f4 no-repeat center;
background: #f4f4f4;
background-size: cover;
}
}
......@@ -960,8 +961,8 @@ img{display: block;}
line-height: 1;padding-left: 10px;
border-left: 1px solid var(--el-color-primary);
color: var(--el-color-primary);}
@media (max-width: 500px) {
.app-main{height: 100vh;
@media (max-width: 800px) {
.app-main{
overflow: auto;
background: #F7F8FA;}
}
......@@ -1378,3 +1379,16 @@ img{display: block;}
span:hover{font-weight: bold;}
.active{color: var(--el-color-primary);font-weight: bold;cursor: pointer;}
}
.mapBox{word-break: break-all;}
@media (max-width: 800px) {
//.liveImgbox{margin: 0 0 20px;}
//.videoImgbox{margin: 0 0 20px;}
//.picbox{margin: 0 0 20px;}
.leftboderTT{font-size: 20px}
.mapBox{
div{padding-left: 40px;}
.content{ width: 80%;left: 10%;padding:10px 20px 0 20px;}
.address{margin: 30px 0;}
p{text-align: left;word-break: break-all;}
}
}
......

200 Bytes | W: | H:

3.53 KB | W: | H:

src/assets/v1/menu.png
src/assets/v1/menu.png
src/assets/v1/menu.png
src/assets/v1/menu.png
  • 2-up
  • Swipe
  • Onion skin

399 KB | W: | H:

191 KB | W: | H:

src/assets/zhinan/map.png
src/assets/zhinan/map.png
src/assets/zhinan/map.png
src/assets/zhinan/map.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -21,7 +21,6 @@ const tagsViewStore = useTagsViewStore()
<style lang="scss" scoped>
.app-main {
/* 50= navbar 50 */
min-height: calc(100vh - 50px);
width: 100%;
position: relative;
overflow: hidden;
......
......@@ -5,7 +5,7 @@
<el-col :lg="12" :md="12" :xs="24">
<ul>
<li>
<router-link to="/about">亚洲舞蹈大赛版权所有</router-link>
<router-link to="/about">亚洲体育舞蹈节版权所有</router-link>
</li>
<li>
<a target="_blank" href="https://beian.miit.gov.cn/">ICP备案号:京ICP备2022009428号-1</a>
......@@ -30,7 +30,7 @@
<router-link to="/about">All rights reserved WDSF ASIAN DANCESPORT FESTIVAL .WUXI 2024</router-link>
</li>
<li>
Phone: Miss Chang +86 13921876678
Phone: Miss Chang +86 18888888888
</li>
</ul>
</el-col>
......
<template>
<div class="topNav forPc">
<div class="topNav">
<router-link to="/">
<img class="logo" src="@/assets/v1/nav_logo.png">
</router-link>
<div class="home-menu">
<div class="home-menu forPc">
<el-menu
v-if="language==0"
router :default-active="activeIndex" mode="horizontal" :ellipsis="false"
router :default-active="activeIndex" :mode="mode" :ellipsis="true"
popper-effect="dark" @select="handleSelect"
>
<el-menu-item index="/">首页</el-menu-item>
......@@ -25,7 +25,7 @@
</el-menu>
<el-menu
v-if="language==1"
router :default-active="activeIndex" mode="horizontal" :ellipsis="false"
router :default-active="activeIndex" mode="horizontal" :ellipsis="true"
popper-effect="dark" @select="handleSelect"
>
<el-menu-item index="/">HOME</el-menu-item>
......@@ -36,22 +36,25 @@
<el-menu-item index="/meta">MEDIA</el-menu-item>
<el-menu-item index="/guide">GUIDELINE</el-menu-item>
<el-sub-menu index="/about">
<template #title>ABOUT US</template>
<el-menu-item index="/about/wuDao">舞蹈节</el-menu-item>
<el-menu-item index="/about/culture">地方文化</el-menu-item>
<template #title>CONTACT & MORE</template>
<el-menu-item index="/about/wuDao">About Us</el-menu-item>
<el-menu-item index="/about/regulations">Rules & Regulations</el-menu-item>
<el-menu-item index="/about/culture">Culture</el-menu-item>
</el-sub-menu>
</el-menu>
</div>
<div class="flex-right">
<div class="search mr20">
<div class="search mr20 forPc">
<el-button :icon="Search" circle @click="searchNews" />
</div>
<div class="languageBtn">
<span :class="language==0?'active':''" @click="changeLanguage(0)">中文</span>
<span v-if="language==0" :class="language==0?'active':''" @click="changeLanguage(0)">中文</span>
<span v-else :class="language==0?'active':''" @click="changeLanguage(0)">CN</span>
|
<span :class="language==1?'active':''" @click="changeLanguage(1)">EN</span>
</div>
<div class="ml20">
<div class="ml20 forPc" >
<el-button v-if="!isLogin" style="border-radius: 20px;" class="loginBtn">
<span v-if="language==0" @click="goLogin">登录</span>
<span v-if="language==1" @click="goLogin">LOGIN</span>
......@@ -62,27 +65,63 @@
&nbsp;&nbsp;<span @click="logout()">退出</span></el-button>
</div>
</div>
<a class="ropenbtn" @click="showDrawer">
<img src="@/assets/v1/menu.png">
</a>
</div>
<div class="forWei ">
<div class="weitop">
<img src="@/assets/v1/nav_logo.png" style="height: 40px;margin: 10px">
<a class="ropenbtn" @click="showDrawer">
<img src="@/assets/v1/menu.png">
</a>
</div>
</div>
<el-drawer
v-model="drawer"
:style="{'--el-drawer-padding-primary':0}" direction="ltr" :with-header="false" title="菜单"
v-model="drawer" size="100%"
:style="{'--el-drawer-padding-primary':0}" direction="ltr"
:with-header="false" title="菜单"
>
<el-menu
:style="{'--el-menu-hover-bg-color':'#faeeed'}"
class="weiMenu"
router :default-active="activeIndex" mode="vertical" :ellipsis="false"
popper-effect="dark" @select="handleSelect"
<div class="weiHead">
<div class="languageBtn">
<span v-if="language==0" :class="language==0?'active':''" @click="changeLanguage(0)">中文</span>
<span v-else :class="language==0?'active':''" @click="changeLanguage(0)">CN</span>
|
<span :class="language==1?'active':''" @click="changeLanguage(1)">EN</span>
</div>
<el-icon color="#453DEA" size="30" @click="closeDrawer"><close/></el-icon>
</div>
<el-menu class="weiMenu"
v-if="language==0"
router :default-active="activeIndex" mode="vertical" :ellipsis="false"
popper-effect="dark" @select="handleSelect"
>
<el-menu-item index="/">首页</el-menu-item>
<el-menu-item index="/news">新闻资讯</el-menu-item>
<el-menu-item index="/notice">通知公告</el-menu-item>
<el-menu-item index="/match/list/0">大赛报名</el-menu-item>
<el-menu-item index="/saiC">赛程安排</el-menu-item>
<el-menu-item index="/meta">媒体中心</el-menu-item>
<el-menu-item index="/guide">参赛指南</el-menu-item>
<el-sub-menu index="/about">
<template #title>关于我们</template>
<el-menu-item index="/about/wuDao">舞蹈节</el-menu-item>
<el-menu-item index="/about/culture">地方文化</el-menu-item>
</el-sub-menu>
</el-menu>
<el-menu class="weiMenu"
v-if="language==1"
router :default-active="activeIndex" mode="vertical" :ellipsis="false"
popper-effect="dark" @select="handleSelect"
>
<el-menu-item index="/">HOME</el-menu-item>
<el-menu-item index="/news">NEWS</el-menu-item>
<el-menu-item index="/notice">NOTICEBOARD</el-menu-item>
<el-menu-item index="/match/list/0">SIGN UP</el-menu-item>
<el-menu-item index="/saiC">COMPETITIONS</el-menu-item>
<el-menu-item index="/meta">MEDIA</el-menu-item>
<el-menu-item index="/guide">GUIDELINE</el-menu-item>
<el-sub-menu index="/about">
<template #title>CONTACT & MORE</template>
<el-menu-item index="/about/wuDao">About Us</el-menu-item>
<el-menu-item index="/about/regulations">Rules & Regulations</el-menu-item>
<el-menu-item index="/about/culture">Culture</el-menu-item>
</el-sub-menu>
</el-menu>
</el-drawer>
<LoginDialog ref="pcloginDialog" @submitForm="reFlash" />
......@@ -149,24 +188,29 @@ const activeIndex = ref('/')
const registerVisible = ref(false)
const loginForm = ref({})
const drawer = ref(false)
const mode = ref('horizontal')
const language = ref(cache.local.get('language') || 0)
onMounted(() => {
console.log(window.location.href)
if (useUserStore().perId) {
isLogin.value = true
}
if (window.location.href.indexOf('en') > -1) {
cache.local.set('language', 1)
// location.reload()
}
if (route.fullPath.indexOf('news') > -1) {
activeIndex.value = '/news'
} else if (route.fullPath.indexOf('notice') > -1) {
activeIndex.value = '/notice'
} else if (route.fullPath.indexOf('about') > -1) {
activeIndex.value = '/about'
} else if (route.fullPath.indexOf('teen') > -1) {
activeIndex.value = '/teen'
} else if (route.fullPath.indexOf('fitness') > -1) {
activeIndex.value = '/fitness'
} else if (route.fullPath.indexOf('dope') > -1) {
activeIndex.value = '/dope'
} else if (route.fullPath.indexOf('mate') > -1) {
activeIndex.value = '/mate'
} else if (route.fullPath.indexOf('guide') > -1) {
activeIndex.value = '/guide'
} else if (route.fullPath.indexOf('saiC') > -1) {
activeIndex.value = '/saiC'
}
// console.log(activeIndex.value)
})
......@@ -178,6 +222,9 @@ function changeLanguage(n) {
function showDrawer() {
drawer.value = true
}
function closeDrawer() {
drawer.value = false
}
function handleSelect(key, keyPath) {
// console.log(key)
activeIndex.value = key
......@@ -194,13 +241,13 @@ const logout = () => {
}
const goLogin = (flag) => {
let param = null
if (_.isBoolean(flag)) {
param = {
notShowClose: flag
}
}
proxy.$refs['pcloginDialog'].open(param)
// let param = null
// if (_.isBoolean(flag)) {
// param = {
// notShowClose: flag
// }
// }
// proxy.$refs['pcloginDialog'].open(param)
}
const goRegister = () => {
registerVisible.value = true
......@@ -240,20 +287,7 @@ function getCode() {
}
.quickNav {
a {
padding: 0 25px;
line-height: 1;
border-right: 1px solid #DCDCDC;
font-size: 14px;
color: #9D630F;
&:last-child {
border-right: none;
}
&:hover{font-weight: bold;text-decoration: underline;}
}
}
.topNav {
box-shadow: 0px 0px 13px rgba(113,113,113);
......@@ -305,37 +339,51 @@ function getCode() {
background: var(--el-color-primary);
}
@media (max-width: 1000px) {
.box {
width: 100%
}
.flex-right {
.quickNav a {
padding: 0 4px;
border: none;
}
.ropenbtn{padding: 10px;display: none;
img{ width: 50px;}
}
:deep(.el-input){height: 100%}
:deep(.el-form-item){height: 40px;}
.weiMenu.el-menu{
border: none;
:deep(.el-menu-item.is-active){color: var(--el-color-primary);}
}
.weiHead{display: flex;justify-content: end;padding: 15px;align-items: center;
.languageBtn{font-size: 20px;margin-right: 20px;line-height: 30px;}
}
.weiMenu{
.el-menu-item{font-size: 20px}
:deep(.el-sub-menu__title){font-size: 20px}
:deep(.el-sub-menu .el-sub-menu__icon-arrow){font-size: 20px}
}
@media (max-width: 750px) {
@media (max-width: 1400px) {
.search {
display: none
display: none;
}
}
@media (max-width: 500px) {
.forPc {
@media (max-width: 1340px) {
.loginBtn {
display: none;
}
.home-menu .el-menu--horizontal > .el-menu-item{margin: 0; }
}
.weitop{display: flex;justify-content: space-between;
.ropenbtn{padding: 10px}
@media (max-width: 1000px) {
.box {
width: 100%
}
}
:deep(.el-input){height: 100%}
:deep(.el-form-item){height: 40px;}
.weiMenu.el-menu{
border: none;
:deep(.el-menu-item.is-active){color: var(--el-color-primary);}
@media (max-width: 800px) {
.ropenbtn{display: block}
.forPc {
display: none;
}
}
</style>
......
......@@ -13,7 +13,6 @@
<style lang="scss" scoped>
.app-main {
/* 50= navbar 50 */
min-height: calc(100vh - 50px);
width: 100%;
position: relative;
overflow: auto;
......
......@@ -6,18 +6,9 @@
>
<div class="searchBody">
<div class="searchline">
<el-input v-model="query.name" placeholder="请输入关键词搜索" @change="search" />
<el-input v-model="query.name" placeholder="Search entire site" @change="search" />
<el-button :icon="Search" @click="search">search</el-button>
</div>
<h2>近期热门</h2>
<el-row class="newsimgcover" :gutter="20">
<el-col v-for="(n,index) in hottest" v-show="index<4" :key="index" :span="6">
<div class="item shadow" @click="goDetail(n)">
<div class="imgbox"><img :src="fillImgUrl_webSite(n.picUrl)"></div>
<h3 class="esp">{{ n.name }}</h3>
</div>
</el-col>
</el-row>
</div>
</el-dialog>
......
......@@ -3,12 +3,9 @@ import { createApp } from 'vue'
import Cookies from 'js-cookie'
import ElementPlus from 'element-plus'
import locale from 'element-plus/lib/locale/lang/zh-cn' // 中文语言
import '@/assets/styles/index.scss' // global css
import App from './App'
import store from './store'
import router from './router'
import directive from './directive' // directive
// 注册指令
......@@ -20,29 +17,20 @@ import 'virtual:svg-icons-register'
import SvgIcon from '@/components/SvgIcon'
import elementIcons from '@/components/SvgIcon/svgicon'
import './permission' // permission control
import './permissionPc' // permission control
import * as socket from './utils/sockets'
import { useDict } from '@/utils/dict'
import { getConfigKey, updateConfigByKey } from '@/api/system/config'
import {
parseTime,
resetForm,
addDateRange,
handleTree,
selectDictLabel,
selectDictLabels,
fillImgUrl
} from '@/utils/ruoyi'
import VueUeditorWrap from 'vue-ueditor-wrap'
import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels, fillImgUrl, downloadFile } from '@/utils/ruoyi'
import { CountDown } from 'vant'
import 'vant/lib/index.css'
// 分页组件
import Pagination from '@/components/Pagination'
import PaginationPc from '@/components/PaginationPc'
// 自定义表格工具组件
import RightToolbar from '@/components/RightToolbar'
// 富文本组件
import Editor from '@/components/Editor'
import UEditor from '@/components/UEditor'
// 文件上传组件
import FileUpload from '@/components/FileUpload'
// 图片上传组件
......@@ -56,7 +44,18 @@ import TreeSelect from '@/components/TreeSelect'
import DictTag from '@/components/DictTag'
import draggable from 'vuedraggable'
import wePay from '@/components/hy/wePay'
import VueVideoPlayer from '@videojs-player/vue'
import 'video.js/dist/video-js.min.css'
import cache from '@/plugins/cache'
import routerCn from './routerPc/cn'
import routerEn from './routerPc/en'
import localeCn from 'element-plus/lib/locale/lang/zh-cn' // 中文语言
import localeEn from 'element-plus/lib/locale/lang/en'
const language = cache.local.get('language') || 0
const app = createApp(App)
// 全局方法挂载
......@@ -71,10 +70,17 @@ app.config.globalProperties.addDateRange = addDateRange
app.config.globalProperties.selectDictLabel = selectDictLabel
app.config.globalProperties.selectDictLabels = selectDictLabels
app.config.globalProperties.fillImgUrl = fillImgUrl
app.config.globalProperties.fillImgUrl_train = (url) => fillImgUrl(url, 'ztx-train')
app.config.globalProperties.fillImgUrl_match = (url) => fillImgUrl(url, 'ztx-match')
app.config.globalProperties.fillImgUrl_webSite = (url) => fillImgUrl(url, 'ztx-webSite')
app.config.globalProperties.downloadFile = downloadFile
app.config.globalProperties.downloadFile_match = (filePath) => downloadFile(filePath, 'ztx-webSite')
app.config.globalProperties.downloadFile_webSite = (filePath) => downloadFile(filePath, 'ztx-webSite')
app.config.globalProperties.$socket = socket
// 全局组件挂载
app.component('DictTag', DictTag)
app.component('Pagination', Pagination)
app.component('PaginationPc', PaginationPc)
app.component('TreeSelect', TreeSelect)
app.component('FileUpload', FileUpload)
app.component('ImageUpload', ImageUpload)
......@@ -82,25 +88,33 @@ app.component('ImageUpload2', ImageUpload2)
app.component('ImagePreview', ImagePreview)
app.component('RightToolbar', RightToolbar)
app.component('Editor', Editor)
app.component('UEditor', UEditor)
app.component('Draggable', draggable)
app.component('WePay', wePay)
if (language == 0) {
app.use(routerCn)
app.use(ElementPlus, {
locale: localeCn,
size: Cookies.get('size') || 'default'
})
} else {
app.use(routerEn)
app.use(ElementPlus, {
locale: localeEn,
size: Cookies.get('size') || 'default'
})
}
app.use(router)
app.use(store)
app.use(VueUeditorWrap)
app.use(plugins)
app.use(elementIcons)
app.use(CountDown)
app.component('SvgIcon', SvgIcon)
app.use(VueVideoPlayer)
directive(app)
// 使用element-plus 并且设置全局的大小
app.use(ElementPlus, {
locale: locale,
// 支持 large、default、small
size: Cookies.get('size') || 'default'
})
// 修改 el-dialog 默认点击遮照为不关闭
app._context.components.ElDialog.props.closeOnClickModal.default = false
......
......@@ -3,9 +3,12 @@ import { createApp } from 'vue'
import Cookies from 'js-cookie'
import ElementPlus from 'element-plus'
import locale from 'element-plus/lib/locale/lang/zh-cn' // 中文语言
import '@/assets/styles/index.scss' // global css
import App from './AppPc'
import App from './App'
import store from './store'
import router from './router'
import directive from './directive' // directive
// 注册指令
......@@ -17,20 +20,29 @@ import 'virtual:svg-icons-register'
import SvgIcon from '@/components/SvgIcon'
import elementIcons from '@/components/SvgIcon/svgicon'
import './permissionPc' // permission control
import * as socket from './utils/sockets'
import './permission' // permission control
import { useDict } from '@/utils/dict'
import { getConfigKey, updateConfigByKey } from '@/api/system/config'
import { parseTime, resetForm, addDateRange, handleTree, selectDictLabel, selectDictLabels, fillImgUrl, downloadFile } from '@/utils/ruoyi'
import { CountDown } from 'vant'
import 'vant/lib/index.css'
import {
parseTime,
resetForm,
addDateRange,
handleTree,
selectDictLabel,
selectDictLabels,
fillImgUrl
} from '@/utils/ruoyi'
import VueUeditorWrap from 'vue-ueditor-wrap'
// 分页组件
import PaginationPc from '@/components/PaginationPc'
import Pagination from '@/components/Pagination'
// 自定义表格工具组件
import RightToolbar from '@/components/RightToolbar'
// 富文本组件
import Editor from '@/components/Editor'
import UEditor from '@/components/UEditor'
// 文件上传组件
import FileUpload from '@/components/FileUpload'
// 图片上传组件
......@@ -44,18 +56,7 @@ import TreeSelect from '@/components/TreeSelect'
import DictTag from '@/components/DictTag'
import draggable from 'vuedraggable'
import wePay from '@/components/hy/wePay'
import VueVideoPlayer from '@videojs-player/vue'
import 'video.js/dist/video-js.min.css'
import cache from '@/plugins/cache'
import routerCn from './routerPc/cn'
import routerEn from './routerPc/en'
import localeCn from 'element-plus/lib/locale/lang/zh-cn' // 中文语言
import localeEn from 'element-plus/lib/locale/lang/en'
const language = cache.local.get('language') || 0
const app = createApp(App)
// 全局方法挂载
......@@ -70,17 +71,10 @@ app.config.globalProperties.addDateRange = addDateRange
app.config.globalProperties.selectDictLabel = selectDictLabel
app.config.globalProperties.selectDictLabels = selectDictLabels
app.config.globalProperties.fillImgUrl = fillImgUrl
app.config.globalProperties.fillImgUrl_train = (url) => fillImgUrl(url, 'ztx-train')
app.config.globalProperties.fillImgUrl_match = (url) => fillImgUrl(url, 'ztx-match')
app.config.globalProperties.fillImgUrl_webSite = (url) => fillImgUrl(url, 'ztx-webSite')
app.config.globalProperties.downloadFile = downloadFile
app.config.globalProperties.downloadFile_match = (filePath) => downloadFile(filePath, 'ztx-webSite')
app.config.globalProperties.downloadFile_webSite = (filePath) => downloadFile(filePath, 'ztx-webSite')
app.config.globalProperties.$socket = socket
// 全局组件挂载
app.component('DictTag', DictTag)
app.component('PaginationPc', PaginationPc)
app.component('Pagination', Pagination)
app.component('TreeSelect', TreeSelect)
app.component('FileUpload', FileUpload)
app.component('ImageUpload', ImageUpload)
......@@ -88,33 +82,25 @@ app.component('ImageUpload2', ImageUpload2)
app.component('ImagePreview', ImagePreview)
app.component('RightToolbar', RightToolbar)
app.component('Editor', Editor)
app.component('UEditor', UEditor)
app.component('Draggable', draggable)
app.component('WePay', wePay)
if (language == 0) {
app.use(routerCn)
app.use(ElementPlus, {
locale: localeCn,
size: Cookies.get('size') || 'default'
})
} else {
app.use(routerEn)
app.use(ElementPlus, {
locale: localeEn,
size: Cookies.get('size') || 'default'
})
}
app.use(router)
app.use(store)
app.use(VueUeditorWrap)
app.use(plugins)
app.use(elementIcons)
app.use(CountDown)
app.component('SvgIcon', SvgIcon)
app.use(VueVideoPlayer)
directive(app)
// 使用element-plus 并且设置全局的大小
app.use(ElementPlus, {
locale: locale,
// 支持 large、default、small
size: Cookies.get('size') || 'default'
})
// 修改 el-dialog 默认点击遮照为不关闭
app._context.components.ElDialog.props.closeOnClickModal.default = false
......
......@@ -84,15 +84,21 @@ export const constantRoutes = [
children: [
{
path: 'wudao',
component: () => import('@/viewsPc/about/wudao'),
component: () => import('@/viewsPc/about/wudao_en'),
name: 'dangNews',
meta: { title: '舞蹈节' }
meta: { title: 'about us' }
},
{
path: 'culture',
component: () => import('@/viewsPc/about/culture'),
component: () => import('@/viewsPc/about/culture_en'),
name: 'culture',
meta: { title: '地方文化' }
meta: { title: 'culture' }
},
{
path: 'regulations',
component: () => import('@/viewsPc/about/fileList'),
name: 'regulations',
meta: { title: 'rules and regulations' }
}
]
},
......@@ -103,7 +109,7 @@ export const constantRoutes = [
children: [
{
path: 'index',
component: () => import('@/viewsPc/notice/index'),
component: () => import('@/viewsPc/notice/index_en'),
name: 'notice',
meta: { title: 'NOTICEBOARD' }
},
......@@ -140,13 +146,13 @@ export const constantRoutes = [
children: [
{
path: 'index',
component: () => import('@/viewsPc/news/index'),
component: () => import('@/viewsPc/news/index_en'),
name: 'news',
meta: { title: 'NEWS' }
},
{
path: 'list/:id',
component: () => import('@/viewsPc/news/list'),
component: () => import('@/viewsPc/news/list_en'),
name: 'newsList',
meta: { title: '新闻列表' }
},
......@@ -185,9 +191,9 @@ export const constantRoutes = [
children: [
{
path: 'index',
component: () => import('@/viewsPc/meta/index'),
component: () => import('@/viewsPc/meta/index_en'),
name: 'meta',
meta: { title: '媒体中心' }
meta: { title: 'MEDIA' }
}
]
},
......@@ -198,9 +204,9 @@ export const constantRoutes = [
children: [
{
path: 'index',
component: () => import('@/viewsPc/saiC/index'),
component: () => import('@/viewsPc/saiC/index_en'),
name: 'saiC',
meta: { title: '赛程安排' }
meta: { title: 'COMPETITIONS' }
}
]
},
......@@ -213,108 +219,7 @@ export const constantRoutes = [
path: 'index',
component: () => import('@/viewsPc/guide/index_en'),
name: 'guide',
meta: { title: '参赛指南' }
}
]
},
{
path: 'fitness',
component: Empty,
redirect: '/fitness/index',
children: [
{
path: 'index',
component: () => import('@/viewsPc/fitness/index'),
name: 'fitness',
meta: { title: '全民健身' }
}
]
},
{
path: 'dope',
component: Empty,
redirect: '/dope/index',
children: [
{
path: 'index',
component: () => import('@/viewsPc/dope/index'),
name: 'dope',
meta: { title: '反兴奋剂' }
}
]
},
{
path: 'vip',
component: Empty,
redirect: '/vip/index',
children: [
{
path: 'index',
component: () => import('@/viewsPc/vip/index'),
name: 'vip',
meta: { title: '会员服务' }
},
{
path: 'index/teamVip',
component: () => import('@/viewsPc/vip/teamVip'),
name: 'teamVip',
meta: { title: '会员服务' }
},
{
path: 'index/examPoints',
component: () => import('@/viewsPc/vip/examPoints'),
name: 'examPoints',
meta: { title: '考点展示' }
},
{
path: 'index/plan',
component: () => import('@/viewsPc/vip/plan'),
name: 'plan',
meta: { title: '培训计划' }
},
{
path: 'pplist/:id',
component: () => import('@/viewsPc/vip/pplist'),
name: 'ppList',
meta: { title: '人员列表' }
}
]
},
{
path: 'business',
component: Empty,
redirect: '/business/index',
children: [
{
path: 'index',
component: () => import('@/viewsPc/business/index'),
name: 'business',
meta: { title: '商务专区' }
}
]
},
{
path: 'local',
component: Empty,
redirect: '/local/index',
children: [
{
path: 'index',
component: () => import('@/viewsPc/local/index'),
name: 'local',
meta: { title: '地方协会' }
},
{
path: 'index/list',
component: () => import('@/viewsPc/local/list'),
name: 'locallist',
meta: { title: '地方协会' }
},
{
path: 'index/:id',
component: () => import('@/viewsPc/local/detail'),
name: 'localDetail',
meta: { title: '地方协会' }
meta: { title: 'GUIDELINE' }
}
]
},
......@@ -375,7 +280,7 @@ export const constantRoutes = [
},
{
path: 'list/:id',
component: () => import('@/viewsPc/match/detail'),
component: () => import('@/viewsPc/match/detail_en'),
name: 'matchDetail',
meta: { title: '赛事详情' }
},
......
......@@ -2,7 +2,7 @@
<div class="login">
<el-row :inline="true" justify="space-between" class="title">
<div class="imgBox">
<img class="img" src="@/assets/images/logo@2x.png" alt="">
<!-- <img class="img" src="@/assets/images/logo@2x.png" alt="">-->
</div>
<div class="title-right">
<router-link to="login" class="tilt-btn">
......@@ -104,8 +104,6 @@ watch(() => route.name, (val) => {
.login {
height: 100%;
background-image: url("@/assets/images/bg@2x.png");
background-size: cover;
}
.login-center {
height: 80%;
......@@ -151,10 +149,10 @@ watch(() => route.name, (val) => {
}
.btnText{
color:#014A9F
color:#014A9F
}
.btn-B{
color:#008BF7
color:#008BF7
}
:deep(.el-button--success){
......@@ -168,7 +166,7 @@ color:#014A9F
font-weight: 400;
color: #FFFFFF;
}
}
:deep(.el-tabs__item){
......
......@@ -344,7 +344,7 @@ import { deptTreeSelect } from '@/api/system/user'
import { getCurrentInstance } from '@vue/runtime-core'
import { ref, reactive, toRefs } from 'vue'
import auditEdit from './auditEdit'
import image from '@/assets/images/certificate.png'
// import image from '@/assets/images/certificate.png'
import { certifiedDeptTree } from '@/api/system/userInfo.js'
import { ElMessageBox } from 'element-plus'
// import type { Action } from 'element-plus'
......
......@@ -33,7 +33,7 @@
</script>
<style scoped lang="scss">
.bban{width: 100%;}
.bban{width: 100%;min-height: 280px;object-fit: cover;object-position: center;}
.prbox{position: relative;padding: 0 0 20px;margin: 0 0 30px;
.bbg{max-width: 100%;margin: auto;}
.bbtn{position: absolute;right: 5px;bottom: 0px;
......
<template>
<div>
<div>
<img class="bban" src="@/assets/zhinan/banner_en.png"/>
</div>
<div class="box">
<el-row :gutter="20" class="mt30">
<el-col :lg="8">
<div class="prbox">
<img class="bbg" src="@/assets/zhinan/bg01.png"/>
<!-- <img class="bbtn" src="@/assets/zhinan/btn01.png"/>-->
<div class="bbtn">WuXi Culture</div>
</div>
</el-col>
<el-col :lg="8">
<div class="prbox">
<img class="bbg" src="@/assets/zhinan/bg02.png"/>
<div class="bbtn">Local Specialties</div>
<!-- <img class="bbtn" src="@/assets/zhinan/btn02.png"/>-->
</div>
</el-col>
<el-col :lg="8">
<div class="prbox">
<img class="bbg" src="@/assets/zhinan/bg03.png"/>
<div class="bbtn">Scenic Spots</div>
<!-- <img class="bbtn" src="@/assets/zhinan/btn03.png"/>-->
</div>
</el-col>
</el-row>
</div>
</div>
</template>
<script setup>
</script>
<style scoped lang="scss">
.bban{width: 100%;min-height: 280px;object-fit: cover;object-position: center;}
.prbox{position: relative;padding: 0 0 20px;margin: 0 0 30px;
.bbg{max-width: 100%;margin: auto;}
.bbtn{position: absolute;right: 5px;bottom: 0px;
color: #fff;border-radius: 50px;padding: 10px 20px;
font-size: 18px;cursor: pointer;
background: linear-gradient(-90deg, #8623FC, #453DEA); ;
&:hover{filter: brightness(1.6)}
}
}
</style>
<template>
<div>
<div class="box">
<!-- <el-breadcrumb class="mt20" :separator-icon="ArrowRight">-->
<!-- <el-breadcrumb-item :to="{ path: '/' }">-->
<!-- <el-icon>-->
<!-- <HomeFilled/>-->
<!-- </el-icon>-->
<!-- 首页-->
<!-- </el-breadcrumb-item>-->
<!-- <el-breadcrumb-item :to="{ path: '/business/index' }">商务专区</el-breadcrumb-item>-->
<!-- <el-breadcrumb-item>文件下载</el-breadcrumb-item>-->
<!-- </el-breadcrumb>-->
<el-card class=" mt20 mb20" style="min-height: 70vh;">
<div>
<div v-for="n in newsList" class="item" @click="goDetail(n)">
<a class="file-item" target="_blank" :href="fillImgUrl_webSite(n.attacthJsonObj[0]?.url)">
<h3 class="esp underline" style="color: var(--el-color-primary)">
<i class="icon pdf" v-if="n.attacthJsonObj[0]?.url.indexOf('pdf')>-1"></i>
<i class="icon doc" v-else-if="n.attacthJsonObj[0]?.url.indexOf('doc')>-1"></i>
<i class="icon xls" v-else-if="n.attacthJsonObj[0]?.url.indexOf('xls')>-1"></i>
<i class="icon txt" v-else-if="n.attacthJsonObj[0]?.url.indexOf('txt')>-1"></i>
<i class="icon ppt" v-else-if="n.attacthJsonObj[0]?.url.indexOf('ppt')>-1"></i>
<i class="icon zip" v-else-if="n.attacthJsonObj[0]?.url.indexOf('zip')>-1"></i>
<i class="icon zip" v-else-if="n.attacthJsonObj[0]?.url.indexOf('rar')>-1"></i>
<i class="icon othe" v-else></i>
<el-icon color="#453DEA" size="20" style="position: relative;top: 2px"><download/></el-icon>
{{ n.name }}
</h3>
</a>
</div>
</div>
<div class="pc-page-box" v-if="total>8">
<PaginationPc v-model:page="query.pageNum" v-model:limit="query.pageSize" :total="total" @pagination="getList"/>
</div>
<el-empty v-if="newsList.length == 0" description="暂无数据"/>
</el-card>
</div>
</div>
</template>
<script setup>
import { ArrowRight } from '@element-plus/icons-vue'
const route = useRoute()
const router = useRouter()
import { onMounted, ref } from 'vue'
import { getNewsListById } from '@/apiPc/webSite'
import { useRoute, useRouter } from 'vue-router'
const query = ref({
pageSize: 10,
pageNum: 1
})
const total = ref(0)
const newsList = ref([
{name:'Invitation to WDSF Asian DanceSport Festival 2023(230502).pdf',attacthJsonObj:{}},
{name:'Invitation WDSF World Championship Junior 2 Standard and Adult Latin 2023.pdf',attacthJsonObj:{}},
{name:'WDSF DanceSport Championship Protocol .pdf',attacthJsonObj:{}},
])
onMounted(() => {
query.value.sortId = route.query.sortId
query.value.code = route.query.code
// getList()
})
const getList = () => {
getNewsListById(query.value).then(res => {
newsList.value = res.rows
for(var f of newsList.value){
f.attacthJsonObj = JSON.parse(f.attacthJson)
}
total.value = res.total
})
}
const goDetail = (n) => {
// if (n.isOut == '1') {
// window.open(n.jumpUrl)
// } else {
// router.push({
// path: `/news/detail/${n.noteId}`
// })
// }
}
</script>
<style scoped lang="scss">
.file-item{
&:hover{background: #BE8EFB;}
}
</style>
......@@ -45,11 +45,11 @@
<div class="content">
<div class="phone">
<h4>电话</h4>
<p>张小姐:13921876678</p>
<p>张小姐:18888888888</p>
</div>
<div class="address">
<h4>地址</h4>
<p>江苏省无锡市滨湖区体育中心A区201</p>
<p>无锡市经开区清舒道88号</p>
</div>
<div class="email">
<h4>邮箱</h4>
......
<template>
<div>
<div class="mt20" />
<div class="box">
<el-card>
<el-row :gutter="20">
<el-col :lg="5">
<div class="leftNav">
<ul>
<li class="active">About the Organizer</li>
<li>WDSF Asian Dancesport Festival</li>
<li>About Sports Dance</li>
</ul>
</div>
</el-col>
<el-col :lg="19">
<div class="infoPart pd20">
<h3 class="leftboderTT">About the organizer</h3>
<div class="content">
<p>On site, the World Sports Dance (Wuxi) Center, a joint headquarters base established by the World Sports Dance Federation that integrates the world, intercontinental, and China, was officially unveiled. In the future, Wuxi will take the settlement of its headquarters as an opportunity to launch and cultivate its own brand event, the China Wuxi Sports and Dance Festival, and continue to expand communication and cooperation, event research and development, education and training and other fields, committed to creating a global sports and dance landmark city and a unique and charming international event city.</p>
<p>The Asian Sports Dance Festival has landed in Wuxi in an innovative form of "three competitions in one". Over a period of four days, it will hold two international level events, the World Standard Dance Championships and the World Sports Dance Grand Prix (Wuxi Station), as well as a national level event, the China Sports Dance Open Series (Wuxi Station), attracting more than 1700 participants from 39 countries and regions to participate.</p>
<p>Sports dance is divided into two groups and ten dance genres, among which the standard dance (also known as modern dance) group includes waltz, Viennese waltz, tango, foxtrot, and brisk step. The Latin dance project group includes rumba, cha cha, samba, cowboy, and bullfighting dance. According to incomplete statistics, there are currently over 50 million sports dance enthusiasts in China.</p>
<p>On site, Latin Girl dance performance and sports dance costume show were performed brilliantly. Top domestic and foreign athletes compete passionately, showcasing their gorgeous makeup and dance moves to the heart of the "gentlemen" and "beauties" participating in the competition.</p>
<p>The "most beautiful" sports project is shining on the shore of the Taihu Lake Lake, creating the highlight scene of the annual global sports dance field, and giving another shining card of Wuxi sports.
</p>
<p>The Asian Sports Dance Festival is open to the public with two types of tickets: VIP and stand tickets. At the same time, the event will also be broadcast online through the Olympic Channel, People's Daily Vision, Migu, the official website of China Sports Dance Federation and Tiktok, Asia Sports Dance Festival WeChat video number, Tiger Teeth, Penguin, Weibo and other platforms.</p>
<img src="@/assets/zhinan/photo.png"/>
</div>
</div>
</el-col>
</el-row>
</el-card>
<div class="indexTitle">
<h3 class="leftboderTT">CONTACT</h3>
</div>
<div class="mapBox mb20">
<div class="content">
<div class="phone">
<h4>Phone</h4>
<p>Miss Chang:+86 18888888888</p>
</div>
<div class="address">
<h4>Address</h4>
<p>No.88 Qingshu Road,Economic and Development District, Wuxi City,Jiangsu Province,China</p>
</div>
<div class="email">
<h4>Email</h4>
<p>8888989@163.com</p>
</div>
</div>
</div>
</div>
</div>
</template>
<script setup>
</script>
<style scoped lang="scss">
.leftNav{
ul{border-right: 2px solid #E5E5E5;padding:0 20px 0 0;}
li{margin: 30px 0;padding: 10px;text-align: right;
border-radius: 2px;position: relative;
font-weight: 600;
font-size: 18px;
background: linear-gradient(90deg, rgba(134, 35, 252, 0.1), rgba(69, 61, 234, 0.1));}
li::after{content: '';position: absolute;background: #898989;width: 8px;height: 8px;
border-radius: 50%;right: -29px;border: 4px solid #fff;outline: 2px solid #898989;
box-sizing: content-box;top: 0;bottom: 0;margin: auto;}
li.active{color: #fff;
background: linear-gradient(90deg, #8623FC, #453DEA);
&::after{outline: 2px solid #453DEA;background: #453DEA;}
}
}
.infoPart{
.leftboderTT{font-size:20px;color: var(--el-color-primary); }
}
.content{margin: 20px 0 0;text-indent: 2em;
line-height: 1.8;
font-weight: 400;
font-size: 16px;
color: #29343C;
img{max-width: 100%;margin: 20px auto;display: block;}
h4{text-indent: 0}
}
.mapBox{background: url("@/assets/zhinan/map.png") no-repeat right;height: 375px;
background-size: cover;padding: 1px;position: relative;display: flex;
.content{background: #fff;width: 60%;left: 40px;padding: 30px;text-indent: 0;
line-height: 1;
position: absolute;height: 90%;top: 0;bottom: 0;margin: auto;
}
div{padding-left: 60px;}
.phone{background: url("@/assets/dance/map01.png") no-repeat left;background-size: 30px;}
.address{background: url("@/assets/dance/map02.png") no-repeat left;background-size: 30px;
margin:50px 0;
}
.email{background: url("@/assets/dance/map03.png") no-repeat left;background-size: 30px;}
h4{margin: 0;
font-size: 16px;
color: #AAAAAA;}
p{margin: 13px 0 0;}
}
@media (max-width: 800px) {
.mapBox {
div {
padding-left: 40px;
}
.content {
width: 80%;
left: 10%;
padding: 10px 20px 0 20px;
}
.address {
margin: 30px 0;
}
p {
text-align: left;
word-break: break-all;
}
}
}
</style>
......@@ -93,7 +93,7 @@
<div class="content" v-if="activeName==7"><el-empty description="暂未上线"></el-empty></div>
<div class="content" v-if="activeName==8">
<label>点击下载:</label>
<a target="_blank" class="text-primary" href="@/assets/zhinan/参赛指南.pdf">
<a target="_blank" class="text-primary">
<el-icon style="position: relative;top: 2px"><download/></el-icon>
WDSF亚洲体育舞蹈节参赛指南0714
</a>
......@@ -181,7 +181,7 @@ h4.leftboderTT{text-indent: 0;
span{color: #929AA0;font-size: 16px;margin-left: 5px;}
}
.custom-tabs-label {
display: flex;
display: flex;font-size: 16px;
align-items: center;
}
......
......@@ -4,10 +4,10 @@
<div class="box mb20 ">
<el-card class="mb20">
<el-row :gutter="20">
<el-col :lg="6">
<img>
<el-col :lg="7" :md="24" :xl="6" >
<img class="mauto" src="@/assets/dance/fm.jpg">
</el-col>
<el-col :lg="10">
<el-col :lg="9" :md="12" :xl="10">
<h3>
2024年WDSF亚洲体育舞蹈节亚洲体育 舞蹈节
</h3>
......@@ -16,7 +16,7 @@
<p class="ppl"><label class="bm3">&ensp;&ensp;&ensp;&ensp;点:</label>江苏省无锡市滨湖区体育中心A区201</p>
<p class="ppl"><label class="bm4">报名截止:</label>2024-06-30 13:00</p>
</el-col>
<el-col :lg="8">
<el-col :lg="8" :md="12" :xl="8">
<p class="countDownTitle"><span>报名截止倒计时</span></p>
<van-count-down :time="time" format="DD 天 HH 时 mm 分 ss 秒">
<template #default="timeData">
......@@ -50,7 +50,7 @@
</el-card>
<el-row :gutter="20">
<el-col :span="18">
<el-col :lg="18">
<el-card :body-style="{'padding':'0'}">
<div class="lineHead">
......@@ -359,9 +359,10 @@
</div>
</div>
</el-card>
<div style="height: 20px"></div>
</el-col>
<el-col :span="6">
<el-col :lg="6">
<a class="btn-lineG mb20" style="display: block;text-align: center;">我要报名</a>
<el-card :body-style="{padding: 0}">
<el-tabs v-model="activeName2" class="match-tabs" @tab-click="handleClick">
......@@ -394,7 +395,7 @@
</div>
</el-dialog>
<groupDetail ref="dialogEditGroup" @submitForm="getMyGroupList" />
</div>
</template>
......@@ -410,180 +411,8 @@ import * as match from '@/apiPc/match'
import { toRefs } from '@vueuse/shared'
import { ElMessage } from 'element-plus'
import groupDetail from '../center/component/teamInfo_form'
const activeName2 = ref('first')
const data = reactive({
activeName: 'tab1',
matchData: {},
activeName2: 'first',
projectList: [],
groupList: [],
levelList: [],
levelListGirl: [],
levelListBoy: [],
popup: false,
popupGroupList: false,
groupListArr: [],
matchId: 0,
groups: [],
time: 0,
groupId: '',
signDoneGroupList: [],
cptLabelsList: [],
secondTabName: '参赛队',
collapseActive: '0',
activeNames: '1'
})
const {
activeName, activeName2, matchData, projectList, groupList, levelList, popup, popupGroupList, time,
groupListArr, matchId, groups, groupId, signDoneGroupList, levelListGirl, levelListBoy, cptLabelsList, secondTabName,
collapseActive, activeNames
} = toRefs(data)
onMounted(() => {
matchId.value = route.params.id
})
function getMyGroupList() {
match.getMyGroupList().then(res => {
groups.value = res.data
popupGroupList.value = true
})
}
function getMatch(id) {
match.getMatchById({ id: id }).then(res => {
matchData.value = res.data
if (matchData.value.disclaimerUrl && (matchData.value.disclaimerUrl.indexOf('https://') > -1)) {
matchData.value.dUrl = JSON.parse(matchData.value.disclaimerUrl)
}
if (matchData.value.signKnowUrl && (matchData.value.signKnowUrl.indexOf('https://') > -1)) {
matchData.value.sUrl = JSON.parse(matchData.value.signKnowUrl)
}
if (matchData.value.ruleUrl && (matchData.value.ruleUrl.indexOf('https://') > -1)) {
matchData.value.rUrl = JSON.parse(matchData.value.ruleUrl)
}
time.value = res.data.secondRemain * 1000
if (matchData.value.signType == 1 || matchData.value.signType == 2) {
} else {
secondTabName.value = '参赛人员'
}
if (matchData.value.type == 1 && matchData.value.cpts) {
secondTabName.value = '分站赛'
activeName.value = 'third'
}
if (res.data.cptLabels && cptLabelsList.value.length == 0) {
cptLabelsList.value = res.data.cptLabels
for (const c of cptLabelsList.value) {
if (c.fileUrl && c.fileUrl != 'null') {
var arr = JSON.parse(c.fileUrl)
c.fileObj = arr[0]
console.log(c.fileObj)
}
}
}
})
}
function getGroupListByCptId(id) {
match.getGroupListByCptId(id).then(res => {
signDoneGroupList.value = res.data
})
}
function getThisGroupId(item) {
groupId.value = item.id
checkIsSign(matchData.value.signType).then(() => {
goSignType2()
})
}
function handleClick(tab, event) {
// console.log(tab, event)
}
// 获取已报信息
function checkIsSign(signType) {
var obj = {
cptId: matchId.value,
groupId: groupId.value || ''
}
return match.getMySignInfo(obj).then(res => {
if (res.data.type == '1') {
let str = ''
if (signType == '0') {
str = '已报名,不能重复报名'
} else {
str = '该参赛队已报名,请选择其他参赛队'
}
ElMessage.error(str)
return Promise.reject('rejected message')
}
})
}
function choseSignType(item) {
if (item.signType == '0') {
// 个人报名
checkIsSign(item.signType).then((res) => {
router.push({
path: `${route.params.id}/singleSign`
})
})
} else {
// 团队报名 团体-队伍报名
getMyGroupList()
}
}
function goSignType2() {
router.push({
path: `${route.params.id}/teamSign`,
query: {
matchId: matchId.value,
groupId: groupId.value,
signType: matchData.value.signType
}
})
}
function goAddgroup() {
// 新团
proxy.$refs['dialogEditGroup'].open({
title: '新建参赛队'
})
}
function goDetail(id) {
const routeData = router.resolve({
path: `${id}`
})
window.open(routeData.href, '_blank')
}
function getLevelList(val) {
levelList.value = []
levelListGirl.value = []
levelListBoy.value = []
if (val) {
match.getLeveListByGroupId(val).then(res => {
for (const l of res.data) {
if (l.levelType == '1') {
levelListBoy.value.push(l)
} else if (l.levelType == '2') {
levelListGirl.value.push(l)
} else {
levelList.value.push(l)
}
}
})
}
}
// getMatch(route.params.id)
// getGroupListByCptId(router.currentRoute.value.params.id)
</script>
<style scoped lang="scss">
......@@ -1016,4 +845,17 @@ function getLevelList(val) {
h4{margin: 0;font-size: 16px;}
}
}
.table{white-space: nowrap}
@media (max-width: 800px) {
.van-count-down{
.block{margin: 0 10px;}
}
.colon{display: none;}
.funcBtns{
div{padding: 0 0 10px;
margin: 0 5px;
}
}
}
</style>
......
......@@ -8,7 +8,7 @@
<el-row :gutter="20">
<el-col :lg="12" :sm="24" :md="12">
<div class="liveImgbox">
<div class="liveImgbox" @click="goDetail(newsList[0])">
<i class="ii">直播中</i>
<img :src="fillImgUrl_webSite(newsList[0]?.picUrl)">
<h3 class="esp">{{ newsList[0]?.name }}
......@@ -45,25 +45,25 @@
<div class="indexTitle">
<h3 class="leftboderTT">精彩图片</h3>
<a class="more" @click="goList(query2.sortId,'舞蹈动态')">MORE</a>
<a class="more" @click="goList(query2.sortId,'精彩图片')">MORE</a>
</div>
<el-row class="mb20" :gutter="20">
<el-col :lg="9">
<div class="picbox" ><img :src="fillImgUrl_webSite(newsList2[0]?.picUrl)"/></div>
<div class="picbox" @click="goDetail(newsList2[0])"><img :src="fillImgUrl_webSite(newsList2[0]?.picUrl)"/></div>
</el-col>
<el-col :lg="15">
<el-row :gutter="20">
<el-col :lg="16">
<div class="picbox"><img :src="fillImgUrl_webSite(newsList2[1]?.picUrl)"/></div>
<div class="picbox" @click="goDetail(newsList2[1])"><img :src="fillImgUrl_webSite(newsList2[1]?.picUrl)"/></div>
</el-col>
<el-col :lg="8">
<div class="picbox" style="height: calc(50% - 10px)"><img :src="fillImgUrl_webSite(newsList2[2]?.picUrl)"/></div>
<div class="picbox" style="height: calc(50% - 10px);margin-top: 20px"><img :src="fillImgUrl_webSite(newsList2[3]?.picUrl)"/></div>
<div class="picbox" @click="goDetail(newsList2[2])" style="height: calc(50% - 10px)"><img :src="fillImgUrl_webSite(newsList2[2]?.picUrl)"/></div>
<div class="picbox" @click="goDetail(newsList2[3])" style="height: calc(50% - 10px);margin-top: 20px"><img :src="fillImgUrl_webSite(newsList2[3]?.picUrl)"/></div>
</el-col>
</el-row>
<el-row :gutter="20" class="mt20">
<el-col :lg="8" v-for="(n,index) in newsList2" :key="index" v-show="index>3">
<div class="picbox"><img :src="fillImgUrl_webSite(n.picUrl)"/></div>
<div class="picbox" @click="goDetail(n)" ><img :src="fillImgUrl_webSite(n.picUrl)"/></div>
</el-col>
</el-row>
</el-col>
......@@ -88,12 +88,12 @@ const newsList2 = ref([])
const query1 = ref({
pageSize: 5,
pageNum: 1,
sortId: '30000000'
sortId: '10000006'
})
const query2 = ref({
pageSize: 7,
pageNum: 1,
sortId: '30000001'
sortId: '10000007'
})
onMounted(() => {
......@@ -133,5 +133,7 @@ const goDetail = (n) => {
<style lang="scss" scoped>
.leftboderTT{
font-size: 20px;}
@media (max-width: 800px) {
[class*=el-col-]{display: block;margin: 0 0 20px}
}
</style>
......
<template>
<div>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">Event Video</h3>
<a class="more" @click="goList(query1.sortId,'Event Video')">MORE</a>
</div>
<el-row :gutter="20">
<el-col :lg="12" :sm="24" :md="12">
<div class="liveImgbox" @click="goDetail(newsList[0])">
<i class="ii">LIVE</i>
<img :src="fillImgUrl_webSite(newsList[0]?.picUrl)">
<h3 class="esp">{{ newsList[0]?.name }}
</h3>
</div>
</el-col>
<el-col :lg="12" :sm="24">
<el-row :gutter="20">
<el-col :md="12" :lg="12">
<div class="videoImgbox" @click="goDetail(newsList[1])">
<img :src="fillImgUrl_webSite(newsList[1]?.picUrl)">
</div>
</el-col>
<el-col :md="12" :lg="12">
<div class="videoImgbox" @click="goDetail(newsList[2])">
<img :src="fillImgUrl_webSite(newsList[2]?.picUrl)">
</div>
</el-col>
<el-col :md="12" :lg="12" class="mt20">
<div class="videoImgbox" @click="goDetail(newsList[3])">
<img :src="fillImgUrl_webSite(newsList[3]?.picUrl)">
</div>
</el-col>
<el-col :md="12" :lg="12" class="mt20">
<div class="videoImgbox" @click="goDetail(newsList[4])">
<img :src="fillImgUrl_webSite(newsList[4]?.picUrl)">
</div>
</el-col>
</el-row>
</el-col>
</el-row>
<div class="indexTitle">
<h3 class="leftboderTT">Exciting Pictures</h3>
<a class="more" @click="goList(query2.sortId,'Exciting Pictures')">MORE</a>
</div>
<el-row class="mb20" :gutter="20">
<el-col :lg="9">
<div class="picbox" @click="goDetail(newsList2[0])"><img :src="fillImgUrl_webSite(newsList2[0]?.picUrl)"/></div>
</el-col>
<el-col :lg="15">
<el-row :gutter="20" style="height: 100%">
<el-col :lg="16">
<div class="picbox" @click="goDetail(newsList2[1])"><img :src="fillImgUrl_webSite(newsList2[1]?.picUrl)"/></div>
</el-col>
<el-col :lg="8">
<div class="picbox" @click="goDetail(newsList2[2])" style="height: calc(50% - 10px)"><img :src="fillImgUrl_webSite(newsList2[2]?.picUrl)"/></div>
<div class="picbox" @click="goDetail(newsList2[3])" style="height: calc(50% - 10px);margin-top: 20px"><img :src="fillImgUrl_webSite(newsList2[3]?.picUrl)"/></div>
</el-col>
</el-row>
<el-row :gutter="20" class="mt20">
<el-col :lg="8" v-for="(n,index) in newsList2" :key="index" v-show="index>3">
<div class="picbox" @click="goDetail(n)"><img :src="fillImgUrl_webSite(n.picUrl)"/></div>
</el-col>
</el-row>
</el-col>
</el-row>
<div class="mb60" />
</div>
</div>
</template>
<script setup>
import { ArrowRight, Search } from '@element-plus/icons-vue'
import { onMounted, ref } from 'vue'
import { getNewsListById } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
const router = useRouter()
const activeName = ref(0)
const total = ref(0)
const list = ref([])
const newsList = ref([])
const newsList2 = ref([])
const query1 = ref({
pageSize: 5,
pageNum: 1,
sortId: '10000008'
})
const query2 = ref({
pageSize: 7,
pageNum: 1,
sortId: '10000009'
})
onMounted(() => {
getList(query1.value)
getList2(query2.value)
})
const getList = (obj) => {
getNewsListById(obj).then(res => {
newsList.value = res.rows
})
}
const getList2 = (obj) => {
getNewsListById(obj).then(res => {
newsList2.value = res.rows
})
}
const goList = (sortId, name) => {
router.push({
path: `/news/list/${sortId}`,
query: {
kindName: name
}
})
}
const goDetail = (n) => {
if (n.isOut == '1') {
window.open(n.jumpUrl)
} else {
window.open(router.resolve({
path: `/news/detail/${n.noteId}`
}).href)
}
}
</script>
<style lang="scss" scoped>
.leftboderTT{
font-size: 20px;}
@media (max-width: 800px) {
[class*=el-col-]{display: block;margin: 0 0 20px}
}
</style>
<template>
<div>
<div class="box">
<el-breadcrumb class="mt20 forPc" :separator-icon="ArrowRight">
<el-breadcrumb-item :to="{ path: '/' }">
<el-icon>
<HomeFilled />
</el-icon>
首页
</el-breadcrumb-item>
<el-breadcrumb-item :to="{ name: 'news' }">新闻</el-breadcrumb-item>
<el-breadcrumb-item>详情</el-breadcrumb-item>
</el-breadcrumb>
<el-row :gutter="30" class="forPc">
<el-col :lg="24" :sm="24">
<!-- <el-breadcrumb class="mt20 forPc" :separator-icon="ArrowRight">-->
<!-- <el-breadcrumb-item :to="{ path: '/' }">-->
<!-- <el-icon>-->
<!-- <HomeFilled />-->
<!-- </el-icon>-->
<!-- 首页-->
<!-- </el-breadcrumb-item>-->
<!-- <el-breadcrumb-item :to="{ name: 'news' }">新闻</el-breadcrumb-item>-->
<!-- <el-breadcrumb-item>详情</el-breadcrumb-item>-->
<!-- </el-breadcrumb>-->
<el-card v-if="form.isOld=='1'" class="mt20 mb20">
<iframe
id="newsIframe" :src="`./source${form.jumpUrl}`" width="100%" height="0" frameborder="none"
scrolling="no"
/>
</el-card>
<el-card v-else class="mt20 mb20" :body-style="{padding:'30px 60px'}">
<h3 class="title">
<el-card v-else class="mt20 mb20">
<div class="bpd">
<h3 class="title">
<span v-if="form.publishType">
<span v-for="(t,index) in form.publishType.split(',')" :key="index" class="jstype">{{ t }}</span>
</span>
{{ form.name }}</h3>
<div class="nInfo">
<span>{{ form.belongTime }}</span>
<span v-if="form.source">{{ form.source }}</span>
<span v-if="form.author">责任编辑:{{ form.author }}</span>
{{ form.name }}</h3>
<div class="nInfo">
<span>{{ form.belongTime }}</span>
<span v-if="form.source">{{ form.source }}</span>
<span v-if="form.author">责任编辑:{{ form.author }}</span>
</div>
<el-divider />
<div class="content" v-html="form.content" />
<!-- 视频-->
<div v-if="hasMp4">
<video-player v-for="(f,index) in fileList" :key="index" class="videoPlay mb20" controls :src="fillImgUrl_webSite(f.url)" />
</div>
<div v-if="!hasMp4 && fileList.length>0" class="mt20">
<!-- 附件-->
<p class="fwb mt20">附件下载:</p>
<p v-for="(f,index) in fileList" :key="index" class="fwb">
{{ index + 1 }}<a :href="fillImgUrl_webSite(f.url)" target="_blank">{{ f.name }}</a>
</p>
</div>
</div>
<el-divider />
<div class="content" v-html="form.content" />
<!-- 视频-->
<div v-if="hasMp4">
<video-player v-for="(f,index) in fileList" :key="index" class="videoPlay mb20" controls :src="fillImgUrl_webSite(f.url)" />
</div>
<div v-if="!hasMp4 && fileList.length>0" class="mt20">
<!-- 附件-->
<p class="fwb mt20">附件下载:</p>
<p v-for="(f,index) in fileList" :key="index" class="fwb">
{{ index + 1 }}<a :href="fillImgUrl_webSite(f.url)" target="_blank">{{ f.name }}</a>
</p>
</div>
</el-card>
</el-col>
</el-row>
</div>
</div>
......@@ -73,7 +74,7 @@ let newsId
onMounted(() => {
newsId = route.params.id
getData(newsId)
getNew()
// getNew()
window.addEventListener('message', onMessage)
})
......@@ -108,6 +109,9 @@ function setIframeHeight(height, iframe, handleTimeout) {
watch(() => route.params.id, (val) => {
if (val) {
if(val==0){
return
}
getData(val)
}
})
......@@ -175,7 +179,7 @@ const goDetail = (n) => {
.content {
text-align: justify;
:deep(video){max-width: 100%;}
p {
img {
max-width: 100%;
......@@ -303,33 +307,12 @@ h2 {
.forWei {
display: none;
}
@media (max-width: 500px) {
.forWei {
height: 100vh;
box-sizing: border-box;
overflow: auto;
display: block;
background: #fff;
padding: 1px 15px;
.title {
text-align: left;
}
.nInfo {
text-align: left;
span {
padding: 0;
margin-right: 10px;
}
}
}
.forPc {
display: none;
font-size: 17px;
}
.bpd{padding:30px 60px;
video{max-width: 100%;}
img{max-width: 100%;}
}
@media (max-width: 800px) {
.bpd{padding:30px 10px}
}
</style>
......
......@@ -10,12 +10,12 @@
<el-col :lg="12" :sm="24" :md="12">
<el-carousel indicator-position="none" height="330">
<el-carousel-item v-for="(n,index) in newsList" :key="index">
<div class="imgbox carouselImg">
<div class="imgbox carouselImg" @click="goDetail(n)">
<div class="date">
<div class="day">{{ n.belongTime?.substring(8, 10) }}</div>
<p>{{ n.belongTime?.substring(0, 7).replace(/-/g, '/') }}</p>
</div>
<img :src="fillImgUrl_webSite(n.bannerUrl)">
<img :src="fillImgUrl_webSite(n.picUrl)">
<h3 class="esp">{{ n.name }}
</h3>
</div>
......@@ -72,13 +72,13 @@
<el-row :gutter="20">
<el-col
v-for="(n,index) in newsList3"
v-show="index<3" :key="n.id" :xs="12" :sm="8"
v-show="index<3" :key="n.id" :xs="24" :sm="8"
:lg="8"
>
<div class="activeItem">
<div class="activeItem" @click="goDetail(n)">
<div class="info">
<div class="date">
2023-12-12
{{n.belongTime}}
</div>
<h3 class="esp_2" style="height: 50px">{{ n.name }}</h3>
<p class="esp_2" />
......@@ -337,25 +337,11 @@ const goDetail = (n) => {
height: 100%;
}
}
.forWei {
display: none;
}
@media (max-width: 500px) {
.box {
width: 100%
}
.forWei {
display: block;
:deep(.el-input__wrapper){
border-radius: 20px;
background: #F4F6FA;
}
}
.forPc {
display: none
}
@media (max-width: 800px) {
.infoPart{padding: 0;}
.activeItem{margin: 0 0 20px;}
.topBannerbox {
background: #fff;
padding: 1px;
......
......@@ -2,20 +2,20 @@
<div>
<div class="box">
<div class="indexTitle">
<h3 class="leftboderTT">要闻</h3>
<a class="more" @click="goList(query1.sortId,'要闻')">MORE</a>
<h3 class="leftboderTT">Asian Games News</h3>
<a class="more" @click="goList(query1.sortId,'Asian Games News')">MORE</a>
</div>
<el-card>
<el-row class="topNews" :gutter="20">
<el-col :lg="12" :sm="24" :md="12">
<el-carousel indicator-position="none" height="330">
<el-carousel-item v-for="(n,index) in newsList" :key="index">
<div class="imgbox carouselImg">
<div class="imgbox carouselImg" @click="goDetail(n)">
<div class="date">
<div class="day">{{ n.belongTime?.substring(8, 10) }}</div>
<p>{{ n.belongTime?.substring(0, 7).replace(/-/g, '/') }}</p>
</div>
<img :src="fillImgUrl_webSite(n.bannerUrl)">
<img :src="fillImgUrl_webSite(n.picUrl)">
<h3 class="esp">{{ n.name }}
</h3>
</div>
......@@ -41,8 +41,8 @@
</el-card>
<div class="indexTitle">
<h3 class="leftboderTT">舞蹈动态</h3>
<a class="more" @click="goList(query2.sortId,'舞蹈动态')">MORE</a>
<h3 class="leftboderTT">Official Release</h3>
<a class="more" @click="goList(query2.sortId,'Official Release')">MORE</a>
</div>
<el-row class="newsflex mb20">
<el-col
......@@ -63,45 +63,46 @@
</div>
</el-col>
</el-row>
<div class="indexTitle">
<h3 class="leftboderTT">官方发布</h3>
<a class="more" @click="goList(query3.sortId,'官方发布')">MORE</a>
</div>
<el-row :gutter="20">
<el-col
v-for="(n,index) in newsList3"
v-show="index<3" :key="n.id" :xs="12" :sm="8"
:lg="8"
>
<div class="activeItem">
<div class="info">
<div class="date">
2023-12-12
</div>
<h3 class="esp_2" style="height: 50px">{{ n.name }}</h3>
<p class="esp_2" />
<a>查看详情</a>
</div>
</div>
</el-col>
</el-row>
<div class="indexTitle">
<h3 class="leftboderTT">专题报道</h3>
<a class="more" @click="goList(query4.sortId,'专题报道')">MORE</a>
</div>
<el-row :gutter="30" class="newsimgcover">
<el-col v-for="(n,index) in newsList4" v-show="index<3" :lg="8" @click="goDetail(n)">
<div class="item shadow">
<div class="imgbox"><img :src="fillImgUrl_webSite(n.picUrl)"></div>
<h3 class="esp">
<span v-if="n.publishType">
<span v-for="(t,index) in n.publishType.split(',')" :key="index" class="jstype">{{ t }}</span>
</span>
{{ n.name }}</h3>
</div>
</el-col>
</el-row>
<!-- <div class="indexTitle">-->
<!-- <h3 class="leftboderTT">官方发布</h3>-->
<!-- <a class="more" @click="goList(query3.sortId,'官方发布')">MORE</a>-->
<!-- </div>-->
<!-- <el-row :gutter="20">-->
<!-- <el-col-->
<!-- v-for="(n,index) in newsList3"-->
<!-- v-show="index<3" :key="n.id" :xs="12" :sm="8"-->
<!-- :lg="8"-->
<!-- >-->
<!-- <div class="activeItem">-->
<!-- <div class="info">-->
<!-- <div class="date">-->
<!-- 2023-12-12-->
<!-- </div>-->
<!-- <h3 class="esp_2" style="height: 50px">{{ n.name }}</h3>-->
<!-- <p class="esp_2" />-->
<!-- <a>查看详情</a>-->
<!-- </div>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<!-- <div class="indexTitle">-->
<!-- <h3 class="leftboderTT">专题报道</h3>-->
<!-- <a class="more" @click="goList(query4.sortId,'专题报道')">MORE</a>-->
<!-- </div>-->
<!-- <el-row :gutter="30" class="newsimgcover">-->
<!-- <el-col v-for="(n,index) in newsList4" v-show="index<3" :lg="8" @click="goDetail(n)">-->
<!-- <div class="item shadow">-->
<!-- <div class="imgbox"><img :src="fillImgUrl_webSite(n.picUrl)"></div>-->
<!-- <h3 class="esp">-->
<!-- <span v-if="n.publishType">-->
<!-- <span v-for="(t,index) in n.publishType.split(',')" :key="index" class="jstype">{{ t }}</span>-->
<!-- </span>-->
<!-- {{ n.name }}</h3>-->
<!-- </div>-->
<!-- </el-col>-->
<!-- </el-row>-->
<div class="mb60" />
</div>
......@@ -124,12 +125,12 @@ const newsList4 = ref([])
const query1 = ref({
pageSize: 5,
pageNum: 1,
sortId:'10000001'
sortId:'10000004'
})
const query2 = ref({
pageSize: 4,
pageNum: 1,
sortId:'10000002'
sortId:'10000005'
})
const query3 = ref({
pageSize: 6,
......@@ -145,8 +146,8 @@ const query4 = ref({
onMounted(() => {
getList(query1.value)
getList2(query2.value)
getList3(query3.value)
getList4(query4.value)
// getList3(query3.value)
// getList4(query4.value)
})
const getList = (obj) => {
......@@ -339,20 +340,7 @@ const goDetail = (n) => {
display: none;
}
@media (max-width: 500px) {
.box {
width: 100%
}
.forWei {
display: block;
:deep(.el-input__wrapper){
border-radius: 20px;
background: #F4F6FA;
}
}
.forPc {
display: none
}
@media (max-width: 800px) {
.infoPart{padding: 0;}
.topBannerbox {
background: #fff;
......
......@@ -5,7 +5,7 @@
<div class="lineHead">
<h3>全部{{ kindName }}</h3>
</div>
<div class="infoPart forPc">
<div class="infoPart">
<div class="newsBlock">
<div v-for="(n,i) in newsList" :key="i" class="item" @click="goDetail(n)">
<div class="date">
......@@ -17,7 +17,7 @@
</div>
<div class="item-body">
<h3 v-html="n.name" />
<p v-html="n.subName" />
<p v-html="n.subName"/>
<a class="go">查看详情
<el-icon class="rotate90_180"><sort-down/></el-icon>
</a>
......@@ -118,25 +118,11 @@ const goDetail = (n) => {
height: 100%;
}
}
.forWei {
display: none;
}
@media (max-width: 500px) {
.box {
width: 100%
}
.forWei {
display: block;
:deep(.el-input__wrapper){
border-radius: 20px;
background: #F4F6FA;
}
}
.forPc {
display: none
}
.infoPart{padding: 0;}
@media (max-width: 800px) {
//.infoPart{padding: 0;}
.topBannerbox {
background: #fff;
padding: 1px;
......@@ -162,5 +148,11 @@ const goDetail = (n) => {
font-size: 14px;
}
}
.newsBlock{
.item{flex-direction: column;margin: 0 0 40px;padding: 0;
.date{position: absolute;top: 20px}
}
.imgbox{width: 100%;height: auto;margin: 0 0 20px}
}
}
</style>
......
<template>
<div>
<div class="box">
<el-card class="mt20 mb20" :body-style="{'padding':'0'}">
<div class="lineHead">
<h3>All {{ kindName }}</h3>
</div>
<div class="infoPart">
<div class="newsBlock">
<div v-for="(n,i) in newsList" :key="i" class="item" @click="goDetail(n)">
<div class="date">
<div class="day">{{ n.belongTime?.substring(8, 10) }}</div>
<p>{{ n.belongTime?.substring(0, 7).replace(/-/g, '/') }}</p>
</div>
<div v-if="n.picUrl" class="imgbox">
<img :src="fillImgUrl_webSite(n.picUrl)">
</div>
<div class="item-body">
<h3 v-html="n.name" />
<p v-html="n.subName" />
<a class="go">Detail
<el-icon class="rotate90_180"><sort-down/></el-icon>
</a>
</div>
</div>
<el-empty v-if="newsList.length == 0" description="no data" />
<div v-if="total>9" class="pc-page-box">
<!-- <el-pagination @current-change="getList" layout="prev, pager, next" :total="total" />-->
<PaginationPc
v-model:page="query.pageNum" v-model:limit="query.pageSize" :total="total"
@pagination="getList"
/>
</div>
</div>
</div>
</el-card>
</div>
</div>
</template>
<script setup>
import { ArrowRight, Search } from '@element-plus/icons-vue'
import { onMounted, ref } from 'vue'
import { getNewsListById } from '@/apiPc/webSite'
import { useRoute, useRouter } from 'vue-router'
// import Pagination from '@/components/Pagination'
const route = useRoute()
const router = useRouter()
const kindName = ref('')
const total = ref(0)
const list = ref([])
const newsList = ref([])
const query = ref({
pageSize: 10,
pageNum: 1
})
onMounted(() => {
console.log(route)
query.value.sortId = route.params.id
kindName.value = route.query.kindName
getList()
})
const getList = () => {
console.log(query.value)
getNewsListById(query.value).then(res => {
newsList.value = res.rows
total.value = res.total
})
}
const goDetail = (n) => {
if (n.isOut == '1') {
window.open(n.jumpUrl)
} else {
window.open(router.resolve({
path: `/news/detail/${n.noteId}`
}).href)
// router.push({
// path: `/news/detail/${n.noteId}`
// })
}
}
</script>
<style lang="scss" scoped>
.flexBody {
display: flex;
align-items: center;
.el-form-item {
margin-bottom: 0
}
}
.infoPart {
padding: 20px;
flex: 1;
& > h3 {
font-size: 24px;
color: var(--el-color-primary);
}
}
.firstItem {
background: #FAFAFA;
}
.searchPark {
background: #F6F6F6;
}
.topBanner {height:500px;
:deep(.el-carousel__container) {
height: 100%;
}
}
.forWei {
display: none;
}
@media (max-width: 800px) {
//.infoPart{padding: 0;}
.topBannerbox {
background: #fff;
padding: 1px;
.el-carousel {
--el-carousel-indicator-height: 4px;
--el-carousel-indicator-width: 4px;
}
}
.topBanner {
height: 160px;
border-radius: 6px;
margin: 10px;
h3{text-align: left;font-size: 15px;padding: 30px 15px 20px;
}
:deep(.el-carousel__indicators--horizontal){left: auto;right: 0;
bottom: 12px;
}
:deep(.el-carousel__button){border-radius: 5px;}
:deep(.el-carousel__indicator.is-active button){width: 12px;}
h3 {
font-size: 14px;
}
}
.newsBlock{
.item{flex-direction: column;margin: 0 0 40px;padding: 0;
.date{position: absolute;top: 20px}
}
.imgbox{width: 100%;height: auto;margin: 0 0 20px}
}
}
</style>
......@@ -93,7 +93,7 @@ const total = ref(0)
const query = ref({
pageSize: 10,
pageNum: 1,
sortId:2000
sortId:20000000
})
onMounted(() => {
getList()
......
<template>
<div>
<div class="box">
<el-card class="mt20 mb20" :body-style="{'padding':'0'}">
<div class="lineHead">
<h3> NOTICE </h3>
</div>
<!-- <el-tabs v-model="activeName" @tab-change="changeTab" @tab-click="clickTab">-->
<!-- <el-tab-pane v-for="(tab,index) in list" :key="index" :label="tab.name" :name="index" />-->
<!-- </el-tabs>-->
<div class="pd20">
<el-row class="mb20">
<el-col :lg="24" :xs="24">
<div v-for="(n,index) in newsList?.slice(0,1)" v-show="index<1" :key="index" class="firstItem" @click="goDetail(n)">
<div class="date">
<p>{{ n.belongTime }}</p>
</div>
<div class="item-body">
<h3 class="esp_2"><span class="istop">TOP</span>{{n.name}}</h3>
</div>
<a class="go">DETAIL ⇀</a>
</div>
</el-col>
<!-- <el-col :lg="8" :xs="24" class="forPc">-->
<!-- <div class="searchPark">-->
<!-- <h3>通知搜索</h3>-->
<!-- <el-form>-->
<!-- <el-form-item>-->
<!-- <div class="flexformItem">-->
<!-- <el-date-picker-->
<!-- v-model="query.year"-->
<!-- class="mr10"-->
<!-- type="year" value-format="YYYY"-->
<!-- placeholder="选择年份" @change="getList"-->
<!-- />-->
<!-- <el-date-picker-->
<!-- v-model="query.month"-->
<!-- format="MM" value-format="MM"-->
<!-- type="month"-->
<!-- placeholder="选择月份" @change="getList"-->
<!-- />-->
<!-- </div>-->
<!-- </el-form-item>-->
<!-- <el-form-item>-->
<!-- <el-input-->
<!-- v-model="query.name"-->
<!-- placeholder="输入关键字"-->
<!-- :suffix-icon="Search" @change="getList"-->
<!-- />-->
<!-- </el-form-item>-->
<!-- </el-form>-->
<!-- </div>-->
<!-- </el-col>-->
</el-row>
<div class="newsLine">
<div v-for="(n,index) in newsList" v-show="index>0" :key="index" class="item" @click=" goDetail(n)">
<div class="date">
<div class="day">{{ n.belongTime?.substring(8, 10) }}</div>
<p>{{ n.belongTime?.substring(0, 7).replace(/-/g, '/') }}</p>
</div>
<div class="item-body">
<h3 v-html="n.name" />
</div>
<a class="go" />
</div>
</div>
<div v-if="total>8" class="pc-page-box">
<PaginationPc v-model:page="query.pageNum" v-model:limit="query.pageSize" :total="total" @pagination="getList" />
</div>
<el-empty v-if="newsList.length == 0" description="暂无数据" />
</div>
</el-card>
</div>
</div>
</template>
<script setup>
import { ArrowRight, Search } from '@element-plus/icons-vue'
import { onMounted, ref } from 'vue'
import { getNewsListById, getNoticeSorts } from '@/apiPc/webSite'
import { useRouter } from 'vue-router'
const router = useRouter()
const activeName = ref(0)
const list = ref([])
const newsList = ref([])
const nowTab = ref({})
const total = ref(0)
const query = ref({
pageSize: 10,
pageNum: 1,
sortId:20000001
})
onMounted(() => {
getList()
})
const getList = () => {
getNewsListById(query.value).then(res => {
newsList.value = res.rows
total.value = res.total
if (query.value.name) {
const pattern = new RegExp(query.value.name, 'gi')
for (var n of newsList.value) {
n.name = n.name.replace(pattern, `<span class="highlight">$&</span>`)
n.subName = n.name.replace(pattern, `<span class="highlight">$&</span>`)
}
}
})
}
const clickTab = (pane, ev) => {
console.log(pane, ev)
}
const goDetail = (n) => {
if (n.isOut == '1') {
window.open(n.jumpUrl)
} else {
router.push({
path: `/news/detail/${n.noteId}`
})
}
}
</script>
<style lang="scss" scoped>
.infoPart{padding: 20px; flex: 1;
&>h3{
font-size: 24px;
color: var(--el-color-primary);}
}
.firstItem{cursor: pointer;
background: #F8F4FF;height: 100%;padding: 10px 20px;
.date{font-weight: bold;transform: scaleX(0.7);transform-origin: left;
font-size: 18px;
color: var(--el-color-primary);}
h3{margin: 10px 0;
font-size: 22px;}
.go{color: var(--el-color-primary);
font-size: 14px;padding: 0 0 5px;}
}
.newsLine{
.item{display: flex;position: relative;width: 100%;height: 90px;
align-items: center;cursor: pointer;border-bottom: 1px dashed #EEEEEE;
.date{width: 60px;height: 60px;text-align: center;background: #FAFAFA;margin: 0 10px;
.day{color: var(--el-color-primary);transform: scaleX(0.7);font-weight: bold;font-size: 24px;}
p{font-size: 14px;margin: 0;transform: scaleX(0.7);font-weight: bold;color: #7B7F83;}
}
.item-body{width: 60%;
h3{padding: 0 10px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;font-size: 18px;color: #000000;}
}
.go{background: url("@/assets/v1/about/go.png") no-repeat center;background-size: contain;
position: absolute;width: 30px;height: 30px;right: 10px;
filter:grayscale(1);
}
}
.item:hover{background: #F8F4FF;
.date{
background: var(--el-color-primary);
.day{color: #fff;}
p{color: #fff;}
}
.item-body{
h3{color: var(--el-color-primary);}
}
}
}
@media (max-width: 500px) {
.box{width: 100%}
.forWei {
display: block;
}
.forPc{display: none}
:deep(.el-tabs__nav-scroll){overflow: auto;}
:deep(.el-card__body){padding: 10px;}
.flexBody{display: block;background: transparent;}
.infoPart{background: #fff;padding: 10px;margin:0 15px}
.firstItem{padding: 10px 20px;
.date{
font-size: 14px;}
h3{margin: 10px 0;
font-size: 14px;}
.go{font-size: 12px;}
}
.newsLine{
.item{height: 50px;
.date{height: 34px;width: 44px;margin: 0;
.day{font-size: 16px;}
p{font-size: 12px;}
}
.item-body{width: 80%;
h3{font-size: 14px;}
}
}
.go{display: none;}
}
}
</style>
......@@ -48,6 +48,7 @@
<el-card class="mt20 mb20">
<div class="leftboderTT">2023.07.22 赛事成绩</div>
<h3 class="text-center">08:00-09:30 拉丁舞第一组比赛结果</h3>
<div class="tablebody">
<table class="table table-striped">
<thead>
<tr class="bg-lineg">
......@@ -111,11 +112,12 @@
</tbody>
</table>
</div>
<br><br>
<div class="leftboderTT">2023.07.22 赛事成绩</div>
<h3 class="text-center">08:00-09:30 拉丁舞第一组比赛结果</h3>
<div class="tablebody">
<table class="table table-striped">
<tr class="bg-lineg">
<td>编号</td>
......@@ -168,6 +170,7 @@
</table>
</div>
</el-card>
</div>
</div>
......@@ -188,18 +191,18 @@ const loading = ref(false)
const calendarValue = ref('2024-07-22')
onMounted(() => {
currYear.value = dayjs().year()
getPlanYears().then(res => {
years.value = res.data
})
})
watch(currYear, (val) => {
if (val) {
getPlanList()
}
})
// onMounted(() => {
// currYear.value = dayjs().year()
// getPlanYears().then(res => {
// years.value = res.data
// })
// })
//
// watch(currYear, (val) => {
// if (val) {
// getPlanList()
// }
// })
function getPlanList() {
loading.value = true
......
<template>
<div>
<div class="box">
<div class="mt20" />
<el-card>
<el-row :gutter="20">
<el-col :sm="24" :lg="12">
<!--赛事日历-->
<el-calendar v-model="calendarValue">
<template #date-cell="data">
<div v-if="data.data.day.slice(8,10)==22" class="primaryDate date">22</div>
<div v-else class="date">
{{ data.data.day.slice(8,10) }}
</div>
</template>
</el-calendar>
</el-col>
<el-col :sm="24" :lg="12">
<div class="calendarList">
<ul>
<li>
<label>08:00~10:30</label> Wuxi Open
</li>
<li>
<label>11:00</label> the WDSF ASIAN DANCESPORT FESTIVAL .WUXI 2024 group A
</li>
<li>
<label>12:00</label> the WDSF ASIAN DANCESPORT FESTIVAL .WUXI 2024 group B
</li>
<li>
<label>13:00</label> the WDSF ASIAN DANCESPORT FESTIVAL .WUXI 2024 group C
</li>
<li>
<label>15:00</label> the WDSF ASIAN DANCESPORT FESTIVAL .WUXI 2024 group D
</li>
</ul>
</div>
</el-col>
</el-row>
</el-card>
<el-card class="mt20 mb20">
<div class="leftboderTT">2023.07.22 Result</div>
<h3 class="text-center">08:00-09:30 The results of the group A of Latin dance competitions</h3>
<div class="tablebody">
<table class="table table-striped">
<thead>
<tr class="bg-lineg">
<td>Number</td>
<td>Name</td>
<td>Country</td>
<td>Score</td>
<td>Ranking</td>
<td>Final result</td>
</tr>
</thead>
<tbody>
<tr>
<td>3456</td>
<td>Wang wenwen</td>
<td>China</td>
<td class="text-primary">198.00</td>
<td>1</td>
<td class="text-primary">advancement</td>
</tr>
<tr>
<td>4567</td>
<td>Zhang</td>
<td>China</td>
<td class="text-primary">191.00</td>
<td>2</td>
<td class="text-primary">advancement</td>
</tr>
<tr>
<td>3456</td>
<td>Sdehj Lijukl</td>
<td>Uzbekistan</td>
<td class="text-primary">190.00</td>
<td>3</td>
<td class="text-primary">advancement</td>
</tr>
<tr>
<td>1255</td>
<td>XuDu</td>
<td>Hong Kong, China</td>
<td class="text-primary">188.00</td>
<td>4</td>
<td class="text-primary">advancement</td>
</tr>
<tr>
<td>1299</td>
<td>Alice Luyr</td>
<td>Thailand</td>
<td class="text-primary">180.00</td>
<td>5</td>
<td class="text-primary">advancement</td>
</tr>
<tr>
<td>1652</td>
<td>Wu Yuan</td>
<td>Hong Kong, China</td>
<td class="text-primary">188.00</td>
<td>6</td>
<td>Out</td>
</tr>
</tbody>
</table>
</div>
<br><br>
<div class="leftboderTT">2023.07.22 Result</div>
<h3 class="text-center">08:00-09:30 The results of the group A of Latin dance competitions</h3>
<div class="tablebody">
<table class="table table-striped">
<tr class="bg-lineg">
<td>Number</td>
<td>Name</td>
<td>Country</td>
<td>Score</td>
<td>Ranking</td>
<td>Final result</td>
</tr>
<tr>
<td>3456</td>
<td>Chen Sha</td>
<td>China</td>
<td class="text-primary">198.00</td>
<td>1</td>
<td class="text-primary">advancement</td>
</tr>
<tr>
<td>3001</td>
<td>ZhaoQian</td>
<td>China</td>
<td class="text-primary">196.00</td>
<td>2</td>
<td class="text-primary">advancement</td>
</tr>
<tr>
<td>1005</td>
<td>ZhangChuChu</td>
<td>China</td>
<td class="text-primary">190.00</td>
<td>3</td>
<td class="text-primary">advancement</td>
</tr>
<tr>
<td>1544</td>
<td>LiuYiwan</td>
<td>China</td>
<td class="text-primary">186.90</td>
<td>4</td>
<td class="text-primary">advancement</td>
</tr>
<tr>
<td>1293</td>
<td>LiHan</td>
<td>China</td>
<td class="text-primary">186.90</td>
<td>5</td>
<td>Out</td>
</tr>
</table>
</div>
</el-card>
</div>
</div>
</template>
<script setup>
import { onMounted, ref, watch } from 'vue'
import { getPlanYears, getYearZtxPlanList } from '@/apiPc/train'
import { ArrowRight } from '@element-plus/icons-vue'
import { dayjs } from 'element-plus'
import { szToHz } from '@/utils/ruoyi'
const years = ref([])
const currYear = ref(null)
const ztxPlanList = ref([])
const planList = ref([])
const loading = ref(false)
const calendarValue = ref('2024-07-22')
// onMounted(() => {
// currYear.value = dayjs().year()
// getPlanYears().then(res => {
// years.value = res.data
// })
// })
//
// watch(currYear, (val) => {
// if (val) {
// getPlanList()
// }
// })
function getPlanList() {
loading.value = true
Promise.all([
getYearZtxPlanList({
year: currYear.value,
type: 1// 中跆协
}),
getYearZtxPlanList({
year: currYear.value,
type: 0 // 省
})
]).then(res => {
loading.value = false
ztxPlanList.value = res[0].rows
planList.value = res[1].rows
})
}
</script>
<style scoped lang="scss">
.leftboderTT{margin: 0 0 20px;color: var(--el-color-primary);
font-size: 20px;}
h3{background: #F5F0FF;margin: 0;padding: 10px 0;
color: var(--el-color-primary);
font-size: 18px;}
.table { border-spacing: 0;
border-collapse: collapse;
width: 100%;
max-width: 100%;
margin-bottom: 20px;
td,th{ padding: 8px; font-size: 14px;}
}
:deep(.table-striped > tbody > tr:nth-of-type(odd)){
background: #F6F9FE;
}
.el-calendar{--el-calendar-border:none;--el-calendar-cell-width:51px;text-align:center;
--el-text-color-regular:#8E8D94;
:deep(.el-calendar__header){justify-content: center;}
:deep(.el-calendar__body){border: 1px solid #F0F0F0;padding: 0}
:deep(.el-calendar-table .el-calendar-day){padding: 1px;}
:deep(.el-calendar-table td.is-selected){background: transparent;}
:deep(.el-calendar__button-group){display: none;}
}
.primaryDate{color: #fff;
background: linear-gradient(90deg, #8623FC, #453DEA);}
.date{ margin:5px auto;border-radius: 50%;width: 30px;height: 30px;line-height: 30px;
font-weight: bold;
}
.calendarList{border: 1px solid #F0F0F0;padding:12px 20px;overflow: hidden;
margin: 46px 0 0;
ul{
li{background: #F6F9FE;margin:7px 0 7px 20px;position: relative;padding: 13px;
border-radius: 10px;
font-weight: 500;
font-size: 15px;
label{color: #453DEA;margin-right: 15px;
&::before{content: '';background:#fff;left: -17px;top: 0px;bottom: 0;margin: auto;
border-radius: 50%;width: 2px;height: 2px;position: absolute;z-index: 1}
}
}
li::before{content: '';background: linear-gradient(0deg, #8623FC, #453DEA);
border-radius: 50%;width: 8px;height: 8px;position: absolute;
left: -20px;top: 0;bottom: 0;margin: auto;z-index: 1;
}
li::after{content: ''; left: -16px;width: 1px;height: 100%;
background: #EBEBEB; position: absolute;top: 20px}
li:hover{color: #fff;
background: linear-gradient(-90deg, #8623FC, #453DEA);
label{color: #fff;}
}
}
}
</style>
<template>
<div>
<div class="box">
<el-breadcrumb class="mt20" :separator-icon="ArrowRight">
<el-breadcrumb-item :to="{ path: '/' }">
<el-icon>
<HomeFilled/>
</el-icon>
首页
</el-breadcrumb-item>
<el-breadcrumb-item>搜索结果</el-breadcrumb-item>
</el-breadcrumb>
<!-- <el-breadcrumb class="mt20" :separator-icon="ArrowRight">-->
<!-- <el-breadcrumb-item :to="{ path: '/' }">-->
<!-- <el-icon>-->
<!-- <HomeFilled/>-->
<!-- </el-icon>-->
<!-- 首页-->
<!-- </el-breadcrumb-item>-->
<!-- <el-breadcrumb-item>搜索结果</el-breadcrumb-item>-->
<!-- </el-breadcrumb>-->
<el-card class="mt20 mb20">
<div class="infoPart">
<div class="infoPart" style="min-height: 65vh">
<div class="newsBlock">
<div v-for="n in newsList" class="item" @click="goDetail(n)">
<div class="date">
......@@ -29,7 +29,7 @@
<a class="go"/>
</div>
</div>
<el-empty v-if="newsList.length == 0" description="暂无数据"/>
<el-empty v-if="newsList.length == 0" />
</div>
......
......@@ -53,18 +53,18 @@
<el-col :lg="12" :xs="24" :sm="12">
<div class="black-pic-bg">
<div class="item" @click="goCoach(1)">
<div><img src="@/assets/v1/hy_btn01.png">
<div>
<h3>教练员</h3></div>
</div>
<div class="item" @click="goCoach(2)">
<div><img src="@/assets/v1/hy_btn02.png">
<div>
<h3>裁判员</h3></div>
</div>
<!-- <div class="item" @click="goNationalTeam('t1')">-->
<!-- <div><img src="@/assets/v1/hy_btn03.png"><h3>运动员</h3></div>-->
<!-- </div>-->
<div class="item" @click="goCoach(3)">
<div><img src="@/assets/v1/hy_btn04.png">
<div>
<h3>考官</h3></div>
</div>
</div>
......
......@@ -111,7 +111,6 @@ export default defineConfig(({ mode, command }) => {
rollupOptions: {
input: {
main: resolve(__dirname, 'index.html')
// pc: resolve(__dirname, 'pc.html')
}
}
}
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!