Merge branch 'GST002_admin' of http://182.92.169.222:3000/dlsx/ContestPortal into GST002_admin

 Conflicts:
	.env.production
	vite.config.ts
GST002_admin
喻忠伟 3 months ago
commit 8b402b8717
  1. 2
      .env.production
  2. 29
      src/Layout/footer/index.vue
  3. 6
      src/api/news.ts
  4. 4
      src/api/person.ts
  5. 8
      src/api/race.ts
  6. 5
      src/styles/index.scss
  7. 3
      src/styles/reset.scss
  8. 3
      src/utils/requset.ts
  9. 21
      src/views/home/index.vue
  10. 28
      src/views/login/index.vue
  11. 21
      src/views/login/registered.vue
  12. 12
      src/views/news/components/newsDetail.vue
  13. 93
      src/views/raceInfo/index.vue
  14. 8
      src/views/registrationGroup/components/stuList.vue
  15. 17
      src/views/registrationGroup/index.vue
  16. 160
      src/views/registrationPersonage/index.vue
  17. 3
      src/views/userInfo/components/awardeList.vue
  18. 66
      src/views/userInfo/components/reacList.vue

@ -1,5 +1,5 @@
# 变量必须以 VITE_ 为前缀才能暴露给外部读取 # 变量必须以 VITE_ 为前缀才能暴露给外部读取
NODE_ENV = 'development' NODE_ENV = 'development'
VITE_APP_TITLE = '高赛通' VITE_APP_TITLE = '高赛通单项目'
VITE_APP_BASE_API = http://182.92.169.222:18088/jeecg-boot VITE_APP_BASE_API = http://182.92.169.222:18088/jeecg-boot
# VITE_APP_BASE_API = 'http://127.0.0.1:8080' # VITE_APP_BASE_API = 'http://127.0.0.1:8080'

@ -1,9 +1,11 @@
<template> <template>
<div class="footer"> <div class="footer">
<div class="footer-nav"> <div class="footer-nav">
<div class="item">关于我们</div> <div v-for="item in NewList" :key="item.id" @click="toNewsDetail(item.id)">
<div class="item">联系我们</div> <div class="item">
<div class="item">服务协议</div> {{ item.title }}
</div>
</div>
</div> </div>
<div class="copyright">源码自然版权所有@2023 湘豫CP备 19005950-1</div> <div class="copyright">源码自然版权所有@2023 湘豫CP备 19005950-1</div>
<div class="report"> <div class="report">
@ -13,7 +15,26 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {} from 'vue' import { ref} from 'vue'
import { queryNewListApi } from '@/api/news'
import { useRouter } from 'vue-router'
const NewList = ref<any>([])
const getNewList = async () =>{
const res:any = await queryNewListApi()
console.log(res,111111111)
NewList.value = res.result
console.log(NewList.value,22222222)
}
getNewList()
const router = useRouter()
const toNewsDetail = (id: number) => {
router.push({
path: '/detail/' + id,
})
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>

@ -9,6 +9,12 @@ export const getColumnListApi = () => {
export function queryEssayListApi(columnId:any) { export function queryEssayListApi(columnId:any) {
return request.get(`/cms/front/getArticleListByColumn?columnId=${columnId}`) return request.get(`/cms/front/getArticleListByColumn?columnId=${columnId}`)
} }
//获取关于我们,联系我们,服务协议的id
export const queryNewListApi = () => {
return request({
url: '/cms/cmsArticle/getdatainfo',
})
}
//根据点击的新闻id获取新闻详细信息 //根据点击的新闻id获取新闻详细信息
export function queryEssayApi(id:any) { export function queryEssayApi(id:any) {
return request.get(`/cms/front/getByArticleTitle?id=${id}`) return request.get(`/cms/front/getByArticleTitle?id=${id}`)

@ -59,7 +59,9 @@ interface SignUpData {
entryFormat: '团队' | '个人' entryFormat: '团队' | '个人'
id: string id: string
instructorSheetList?: any[] instructorSheetList?: any[]
teamManagementList?: any[] teamManagementList?: any[],
file:string
WorkName:any
} }
interface MembersOrAdviser { interface MembersOrAdviser {

@ -128,3 +128,11 @@ export const cancelRace = (params: any) => {
params, params,
}) })
} }
// 获取项目id
export const getProjectId = (params: any) => {
return request({
url: '/comp/comp/findanncomppid',
method: 'GET',
params,
})
}

@ -47,3 +47,8 @@
img{ img{
width: 100%; width: 100%;
} }
.race-description{
p{
line-height: 30px;
}
}

@ -37,7 +37,6 @@
code, code,
del, del,
dfn, dfn,
em,
img, img,
ins, ins,
kbd, kbd,
@ -46,14 +45,12 @@
samp, samp,
small, small,
strike, strike,
strong,
sub, sub,
sup, sup,
tt, tt,
var, var,
b, b,
u, u,
i,
center, center,
dl, dl,
dt, dt,

@ -19,6 +19,9 @@ server.interceptors.request.use((config) => {
}) })
// 创建相应拦截器 // 创建相应拦截器
server.interceptors.response.use((response) => { server.interceptors.response.use((response) => {
if(response.data.code === 412){
return Promise.reject(response)
}
return response.data return response.data
}) })

@ -35,6 +35,13 @@
> >
{{ item.name }} {{ item.name }}
</div> </div>
<div
class="item"
@click="router.push('/news')"
>
更多
</div>
</div> </div>
<div class="newa-main"> <div class="newa-main">
<div class="left"> <div class="left">
@ -49,13 +56,13 @@
<ul> <ul>
<li v-for="item in childrenNewList" :key="item.id" @click="toNewsDetail(item.id)"> <li v-for="item in childrenNewList" :key="item.id" @click="toNewsDetail(item.id)">
<div class="info"> <div class="info">
{{ item.columnName }} {{ item.title }}
</div> </div>
<div class="time">{{ item.createTime }}</div> <div class="time">{{ item.createTime }}</div>
<div class="name"> <!-- <div class="name">
{{ item.createBy_dictText }} {{ item.createBy_dictText }}
</div> </div> -->
</li> </li>
</ul> </ul>
</div> </div>
@ -123,9 +130,9 @@ const toNewsDetail = (id: number) => {
const newList = ref<any>([]) const newList = ref<any>([])
const getNewsList = async () => { const getNewsList = async () => {
const res: any = await getColumnListApi() const res: any = await getColumnListApi()
console.log(res) // console.log(res)
newList.value = res.result newList.value = res.result.slice(0, 4)
console.log(newList.value, 'newList.value') // console.log(newList.value, 'newList.value')
newInfo.value = newList.value[0] newInfo.value = newList.value[0]
getNewInfo(newList.value[0].id) getNewInfo(newList.value[0].id)
} }
@ -138,7 +145,7 @@ const childrenNewList = ref<any>([])
const getNewInfo = async (id: any) => { const getNewInfo = async (id: any) => {
const res: any = await queryEssayListApi(id) const res: any = await queryEssayListApi(id)
childrenNewList.value = res.result.records childrenNewList.value = res.result.records
console.log(childrenNewList, 'childrenNewList') // console.log(childrenNewList, 'childrenNewList')
} }
// tab // tab

@ -44,7 +44,7 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, reactive, ref, toRefs, watch } from 'vue' import { onMounted, reactive, ref, toRefs, watch,onBeforeUnmount } from 'vue'
import { getCode } from '@/api/user' import { getCode } from '@/api/user'
import userStore from '@/store/module/user' import userStore from '@/store/module/user'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
@ -80,18 +80,21 @@ const submit = async () => {
password: form.value.password, password: form.value.password,
username: form.value.account, username: form.value.account,
} }
try {
const res = await useUserStore.login(data) const res = await useUserStore.login(data)
console.log(res) console.log(res)
isSubmitting.value = false
if (res === 0) { if (res === 1) {
ElMessage('验证码错误')
getcodeinfo()
} else if (res === 1) {
ElMessage('账号或密码错误') ElMessage('账号或密码错误')
getcodeinfo() getcodeinfo()
} else { } else {
Router.push('/') Router.push('/')
} }
} catch (error: any) {
ElMessage(error.data.message)
getcodeinfo()
}
} }
onMounted(() => { onMounted(() => {
window.addEventListener('keyup', keyDown) window.addEventListener('keyup', keyDown)
@ -102,11 +105,18 @@ onMounted(() => {
registered() registered()
} }
}) })
onBeforeUnmount(() => {
window.removeEventListener('keyup', keyDown) //
})
const isSubmitting = ref(false) //
const keyDown = (e: any) => { const keyDown = (e: any) => {
// //
if (isSubmitting.value) return
//
if (e.keyCode == 13) { if (e.keyCode == 13) {
// isSubmitting.value = true //
submit() submit() //
} }
} }

@ -143,22 +143,22 @@ const KeyValue: any = {
} }
const rules = { const rules = {
username: [ username: [
{ required: true, message: '请输入名', trigger: 'blur' }, { required: true, message: '请输入用户名', trigger: 'blur' },
{ min: 6, max: 20, message: '账号长度在6到50个字符', trigger: 'blur' }, { min: 6, max: 20, message: '账号长度在6到50个字符', trigger: 'blur' },
{ {
pattern: /^[a-zA-Z0-9]+$/, pattern: /^[a-zA-Z0-9]+$/,
message: '姓名只能包含中文、英文', message: '姓名只能包含数字、英文',
trigger: 'blur', trigger: 'blur',
}, },
], ],
realname: [ realname: [
{ required: true, message: '请输入姓名', trigger: 'blur' }, { required: true, message: '请输入姓名', trigger: 'blur' },
{ min: 2, max: 20, message: '姓名长度在2到10个字符', trigger: 'blur' }, { min: 2, max: 20, message: '姓名长度在2到10个字符', trigger: 'blur' },
{ // {
pattern: /^[a-zA-Z0-9]+$/, // pattern: /^[a-zA-Z0-9]+$/,
message: '姓名只能包含中文、英文', // message: '',
trigger: 'blur', // trigger: 'blur',
}, // },
], ],
workno: [ workno: [
{ required: true, message: '请输入工号/学号', trigger: 'blur' }, { required: true, message: '请输入工号/学号', trigger: 'blur' },
@ -275,10 +275,17 @@ const ragistered = async () => {
console.log(res) console.log(res)
} catch (error: any) { } catch (error: any) {
console.log(error, 'error') console.log(error, 'error')
//
if(error.hasOwnProperty('data')){
ElMessage.warning(error.data.message)
}else{
for (const key in error) { for (const key in error) {
ElMessage.warning(`${KeyValue[key]}${error[key][0].message}`) ElMessage.warning(`${KeyValue[key]}${error[key][0].message}`)
} }
} }
}
} }
const codeUrl = ref('') const codeUrl = ref('')

@ -9,7 +9,7 @@
<div class="center-image"> <div class="center-image">
<img <img
class="list-image" class="list-image"
:src="completeImageUrl" :src="setImageUrl(data.comimg)"
alt="News Image" alt="News Image"
/> />
@ -34,14 +34,10 @@ queryEssayApi(route.params.id).then((res) => {
console.log(`当前id为${route.params.id}新闻详细信息`, data.value) console.log(`当前id为${route.params.id}新闻详细信息`, data.value)
}) })
//
const completeImageUrl = computed(() => { const setImageUrl = (url: string) => {
if (data.value.comimg) { return import.meta.env.VITE_APP_BASE_API + '/sys/common/static/' + url
return new URL(data.value.comimg, 'https://localhost:18085/jeecg-boot/')
.href
} }
return ''
})
</script> </script>
<style scoped> <style scoped>

@ -1,13 +1,11 @@
<template> <template>
<div class="container-1420 container"> <div class="container-1420 container">
<!-- 年度比赛详细信息 --> <!-- 年度比赛详细信息 -->
<div class="year-race-info"> <div class="year-race-info">
<div class="left-info"> <div class="left-info">
<el-card> <el-card>
<template #header> <template #header>
<div style="display: flex;justify-content: space-between;"> <div style="display: flex; justify-content: space-between">
<el-breadcrumb> <el-breadcrumb>
<el-breadcrumb-item <el-breadcrumb-item
v-for="item in Route.matched" v-for="item in Route.matched"
@ -17,7 +15,10 @@
{{ item.meta.title }} {{ item.meta.title }}
</el-breadcrumb-item> </el-breadcrumb-item>
</el-breadcrumb> </el-breadcrumb>
<div><el-button @click="scrollToPosition">查看详情</el-button></div> <div>
<el-button @click="Router.back()">返回</el-button>
<el-button @click="scrollToPosition">查看详情</el-button>
</div>
</div> </div>
</template> </template>
<div> <div>
@ -121,7 +122,7 @@
<div style="margin-top: 30px; font-size: 24px; font-weight: 600"> <div style="margin-top: 30px; font-size: 24px; font-weight: 600">
年度比赛列表: 年度比赛列表:
</div> </div>
<el-card v-if="reacProjectList.length === 0" style="margin-top: 20px;"> <el-card v-if="reacProjectList.length === 0" style="margin-top: 20px">
<div <div
style=" style="
display: flex; display: flex;
@ -135,22 +136,28 @@
<p>没有年度比赛~</p> <p>没有年度比赛~</p>
</div> </div>
</el-card> </el-card>
<el-card style="margin-top: 20px;" v-else> <el-card style="margin-top: 20px" v-else>
<div class="race-list"> <div class="race-list" v-loading="loading">
<div <div
class="item" class="item"
v-for="item in reacProjectList" v-for="item in reacProjectList"
:key="item.id" :key="item.id"
@click="goToCompetition(item.id)" @click="goToCompetition(item.id, item.endtime,item.isopen)"
:style="{
'background-color': isTimePassed(item.endtime) ? 'rgb(232 232 232)' : '#fff',
}"
> >
<div class="image"> <div class="image">
<img :src="setImageUrl(item.image)" alt="" v-default-image /> <img :src="setImageUrl(item.image)" alt="" v-default-image />
</div> </div>
<div class="reac-info"> <div class="reac-info">
<div class="niandu">{{ item.annualname }}年度</div> <div class="niandu">
<div>{{ item.annualname }}年度</div>
<el-button type="primary" size="small">报名</el-button>
</div>
<div <div
class="reac-title" class="reac-title"
style="font-weight: 600; color: #000; font-size: 16px" style="font-weight: 600; color: #000; font-size: 16px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;"
> >
{{ item.name }} {{ item.name }}
</div> </div>
@ -170,6 +177,9 @@
</div> </div>
</div> </div>
</div> </div>
<div style="margin-top: 20px;display: flex;justify-content: center;">
<el-pagination background layout="prev, pager, next" :total="page.total" :page-size="page.pageSize" @change="pageChange"/>
</div>
</el-card> </el-card>
<h3 <h3
@ -184,28 +194,44 @@
<script lang="ts" setup> <script lang="ts" setup>
import { onMounted, reactive, ref, toRefs, watch } from 'vue' import { onMounted, reactive, ref, toRefs, watch } from 'vue'
import { getYearRaceList, getRaceInfo, getHistoryRaceList } from '@/api/race' import {
getYearRaceList,
getRaceInfo,
getHistoryRaceList,
getProjectId,
} from '@/api/race'
import { useRouter, useRoute } from 'vue-router' import { useRouter, useRoute } from 'vue-router'
import { ElMessage } from 'element-plus'
import { pa } from 'element-plus/es/locales.mjs'
const Route = useRoute() const Route = useRoute()
const Router = useRouter() const Router = useRouter()
console.log(Route, 'Route') console.log(Route, 'Route')
const defaultImageUrl = '/src/assets/images/item.png' const loading = ref(false)
const reacProjectList = ref<any>([]) const reacProjectList = ref<any>([])
const getRaceProjectListEvent = async () => { let page = ref<any>({
let page = {
id: Route.query.id, id: Route.query.id,
column: 'createTime', column: 'createTime',
order: 'desc', order: 'desc',
pageNo: 1, pageNo: 1,
pageSize: 8, pageSize: 8,
} total: 0
const res: any = await getYearRaceList(page) })
const getRaceProjectListEvent = async () => {
loading.value = true
const res: any = await getYearRaceList(page.value)
console.log(res) console.log(res)
reacProjectList.value = res.result.slice(0, 8) reacProjectList.value = res.result.records
page.value.total = res.result.total
console.log(reacProjectList.value, 'reacProjectList.value ') console.log(reacProjectList.value, 'reacProjectList.value ')
loading.value = false
} }
getRaceProjectListEvent() getRaceProjectListEvent()
const pageChange = (e:any) => {
page.value.pageNo = e
getRaceProjectListEvent()
}
const setImageUrl = (url: string) => { const setImageUrl = (url: string) => {
return import.meta.env.VITE_APP_BASE_API + '/sys/common/static/' + url return import.meta.env.VITE_APP_BASE_API + '/sys/common/static/' + url
} }
@ -220,10 +246,29 @@ const getraceInfoEvent = async () => {
getraceInfoEvent() getraceInfoEvent()
// //
const goToCompetition = (id: any) => { const goToCompetition = async (id: any, endTime: string,isOpen:string) => {
Router.push({ path: '/competition', query: { id, raceId: Route.query.id } }) if(isOpen == '0') return ElMessage.error('比赛未开启')
if (isTimePassed(endTime)) {
return ElMessage.error('比赛已结束')
}
const projectId: any = await getProjectId({ anncmopid: id })
console.log(projectId.result)
// return
Router.push(`/projectName?id=${projectId.result}&bcId=${id}`)
// Router.push({ path: '/competition', query: { id, raceId: Route.query.id } })
} }
function isTimePassed(targetTime) {
//
const now = new Date()
// Date
const target = new Date(targetTime)
//
return now > target
}
const doLoadFile = (url: any) => { const doLoadFile = (url: any) => {
// console.log( import.meta.env.VITE_APP_BASE_API + "/sys/common/static/" + url) // console.log( import.meta.env.VITE_APP_BASE_API + "/sys/common/static/" + url)
window.open(import.meta.env.VITE_APP_BASE_API + '/sys/common/static/' + url) window.open(import.meta.env.VITE_APP_BASE_API + '/sys/common/static/' + url)
@ -248,11 +293,12 @@ const createfileLink = (url: any) => {
fileList.value = list fileList.value = list
} }
const scrollToPosition = () => { const scrollToPosition = () => {
const targetPosition = (document.getElementById('introduction')as HTMLElement).offsetTop - 100; const targetPosition =
(document.getElementById('introduction') as HTMLElement).offsetTop - 100
window.scrollTo({ window.scrollTo({
top: targetPosition, top: targetPosition,
behavior: 'smooth', // behavior: 'smooth', //
}); })
} }
</script> </script>
@ -321,6 +367,9 @@ const scrollToPosition = () => {
font-size: 18px; font-size: 18px;
margin-top: 20px; margin-top: 20px;
font-weight: 600; font-weight: 600;
display: flex;
justify-content: space-between;
align-items: center;
} }
} }
} }
@ -471,7 +520,7 @@ const scrollToPosition = () => {
font-size: 14px; font-size: 14px;
line-height: 22px; line-height: 22px;
border: 1px solid #ccc; border: 1px solid #ccc;
padding: 10px; padding: 20px;
margin-top: 20px; margin-top: 20px;
p { p {
img { img {

@ -74,7 +74,7 @@
<span style="margin-left: 10px">学号</span> <span style="margin-left: 10px">学号</span>
</template> </template>
<template #default="{ row }"> <template #default="{ row }">
<el-input v-model="row.work_no" :disabled="isDisable" /> <el-input v-model="row.workNo" :disabled="isDisable" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column> <el-table-column>
@ -159,7 +159,7 @@ onMounted(() => {
tableData.push({ tableData.push({
userId: userModel.userInfo.id, userId: userModel.userInfo.id,
realname: userModel.userInfo.realname, realname: userModel.userInfo.realname,
work_no: userModel.userInfo.workNo, workNo: userModel.userInfo.workNo,
phone: userModel.userInfo.phone, phone: userModel.userInfo.phone,
email: userModel.userInfo.email, email: userModel.userInfo.email,
captain: '1', captain: '1',
@ -182,7 +182,7 @@ const add = () => {
captain: '0', // captain: '0', //
teamSeq: tableData.length + 1, // teamSeq: tableData.length + 1, //
userId: '', // id userId: '', // id
work_no: '', workNo: '',
phone: '', phone: '',
email: '', email: '',
}) })
@ -210,7 +210,7 @@ const handleSelected = (row: any = {}) => {
return return
} }
console.log(row, 'aqq') console.log(row, 'aqq')
target.value.work_no = row.work_no target.value.workNo = row.work_no
target.value.phone = row.phone target.value.phone = row.phone
target.value.email = row.email target.value.email = row.email
target.value.realname = row.realname target.value.realname = row.realname

@ -23,7 +23,7 @@
<div class="annual">{{ ndbs.annualid }}年度</div> <div class="annual">{{ ndbs.annualid }}年度</div>
<div class="title-box"> <div class="title-box">
<div class="text">{{ ndbs.name }}</div> <div class="text">{{ ndbs.name }}</div>
<img src="../../assets/images/编组.png" alt="" /> <img style="width: 35px;" src="../../assets/images/编组.png" alt="" />
</div> </div>
</div> </div>
<div class="right"> <div class="right">
@ -122,7 +122,7 @@
<el-form-item label="队伍名称" prop="teamName"> <el-form-item label="队伍名称" prop="teamName">
<el-input v-model="ruleForm.teamName" maxlength="30" type="text" :disabled="isDisable"/> <el-input v-model="ruleForm.teamName" maxlength="30" type="text" :disabled="isDisable"/>
</el-form-item> </el-form-item>
<el-form-item label="选择题目" prop="topicid"> <el-form-item label="选择题目" prop="topicid" v-show="false">
<el-select v-model="ruleForm.topicid" placeholder="请选择题目" :disabled="isDisable"> <el-select v-model="ruleForm.topicid" placeholder="请选择题目" :disabled="isDisable">
<el-option <el-option
v-for="item in options" v-for="item in options"
@ -151,7 +151,7 @@
</el-card> </el-card>
<div class="bottom"> <div class="bottom">
<el-button class="btn" @click="$router.back()">{{ isDisable ? '返回' : isEdit ? '取消修改' : '取消报名' }}</el-button> <el-button class="btn" @click="$router.back()">{{ isDisable ? '返回' : isEdit ? '取消修改' : '取消报名' }}</el-button>
<el-button class="btn cyan" @click="submit" :loading="loading" :disabled="isDisable"> <el-button class="btn cyan" @click="submit" :loading="loading" v-if=!isDisable>
{{ isEdit ? '确认修改' : '确认报名' }} {{ isEdit ? '确认修改' : '确认报名' }}
</el-button> </el-button>
</div> </div>
@ -202,7 +202,7 @@ if (route.query.edit) {
const getOldRaceInfoEvent = async () => { const getOldRaceInfoEvent = async () => {
const res: any = await getOldRaceInfo({ id: route.query.id}) const res: any = await getOldRaceInfo({ id: route.query.id})
console.log(res,'res~~~'); console.log(res,'res~~~');
ruleForm.annualCompid = route.query.annualCompid // ruleForm.annualCompid = route.query.annualCompid
ruleForm.teamName = res.result.teamName ruleForm.teamName = res.result.teamName
ruleForm.topicid = res.result.topicObj ? res.result.topicObj.id : '' ruleForm.topicid = res.result.topicObj ? res.result.topicObj.id : ''
ruleForm.objName = res.result.annualCompPointName ruleForm.objName = res.result.annualCompPointName
@ -252,7 +252,7 @@ const activeName = ref('members')
const ruleFormRef = ref<FormInstance>() const ruleFormRef = ref<FormInstance>()
const ruleForm = reactive<any>({ const ruleForm = reactive<any>({
annualCompid:'' , // annualCompid:'' ,
entryFormat: '团队', entryFormat: '团队',
id: route.query.id, id: route.query.id,
teamName: '', // teamName: '', //
@ -277,7 +277,7 @@ const submit = () => {
// ruleForm.annualCompid = route.query.id // ruleForm.annualCompid = route.query.id
if(route.query.edit){ if(route.query.edit){
ruleForm.enrollCode = route.query.enrollCode ruleForm.enrollCode = route.query.enrollCode
ruleForm.id = route.query.annualCompid
} }
getSignUpApi(ruleForm) getSignUpApi(ruleForm)
.then((res: any) => { .then((res: any) => {
@ -449,6 +449,11 @@ const submit = () => {
font-size: 32px; font-size: 32px;
color: #ffffff; color: #ffffff;
line-height: 39px; line-height: 39px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3; /* 限制显示的行数 */
overflow: hidden;
text-overflow: ellipsis;
} }
} }
} }

@ -25,7 +25,7 @@
<div class="annual">{{ ndbs.annualid }}年度</div> <div class="annual">{{ ndbs.annualid }}年度</div>
<div class="title-box"> <div class="title-box">
<div class="text">{{ ndbs.name }}</div> <div class="text">{{ ndbs.name }}</div>
<img src="../../assets/images/编组.png" alt="" /> <img style="width: 35px" src="../../assets/images/编组.png" alt="" />
</div> </div>
</div> </div>
<div class="right"> <div class="right">
@ -72,16 +72,10 @@
</div> </div>
</el-card> </el-card>
</div> </div>
<el-acrd> <el-card>
<div> <div>
<el-form <el-form ref="ruleFormRef" style="max-width: 600px" :model="ruleForm" status-icon label-width="auto"
ref="ruleFormRef" class="demo-ruleForm">
style="max-width: 600px"
:model="ruleForm"
status-icon
label-width="auto"
class="demo-ruleForm"
>
<el-form-item label="年度比赛项目"> <el-form-item label="年度比赛项目">
<el-input v-model="ruleForm.objName" type="text" disabled /> <el-input v-model="ruleForm.objName" type="text" disabled />
</el-form-item> </el-form-item>
@ -89,19 +83,21 @@
<el-input v-model="ruleForm.entryFormat" type="text" disabled /> <el-input v-model="ruleForm.entryFormat" type="text" disabled />
</el-form-item> </el-form-item>
<el-form-item label="选择题目" prop="topicid"> <el-form-item label="选择题目" v-show="false">
<el-select v-model="ruleForm.topicid" placeholder="请选择题目" :disabled="isDisable"> <el-select v-model="ruleForm.topicid" placeholder="请选择题目" :disabled="isDisable">
<el-option <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="作品文件" v-if="ndbsXm.requireUploadWorks === 'Y'">
<template #default="{ row }">
<el-input style="width: auto;" v-model="WorkName" disabled>
</el-input>
<el-button type="primary" style="margin-left:15px ;" @click="uploadZp(ruleForm.id)">上传作品</el-button>
</template>
</el-form-item>
</el-form> </el-form>
</div> </div>
</el-acrd> </el-card>
<el-card class="center"> <el-card class="center">
<div class="personage-info"> <div class="personage-info">
<div class="head"> <div class="head">
@ -168,12 +164,43 @@
</el-card> </el-card>
<div class="bottom"> <div class="bottom">
<el-button class="btn" @click="() => router.back()">{{ isDisable ? '返回' : isEdit ? '取消修改' : '取消报名' }}</el-button> <el-button class="btn" @click="() => router.back()">
<el-button class="btn cyan" :loading="subLoading" @click="submit" :disabled="isDisable"> {{ isDisable ? '返回' : isEdit ? '取消修改' : '取消报名' }}
</el-button>
<el-button class="btn temp" @click="submit('2')" v-if="!isDisable">暂存信息</el-button>
<el-button class="btn cyan" :loading="subLoading" @click="submit('1')" v-if="!isDisable">
{{ isEdit ? '确认修改' : '确认报名' }} {{ isEdit ? '确认修改' : '确认报名' }}
</el-button> </el-button>
</div> </div>
</div> </div>
<el-dialog v-model="dialogVisible" title="上传作品" width="500" :before-close="handleClose" v-if="dialogVisible"
:close-on-click-modal="false">
<el-form label-width="80" style="padding-right: 30px">
<el-form-item label="作品名称">
<el-input v-model="raceName" />
</el-form-item>
<el-form-item label="作品">
<el-upload ref="upload" class="upload-demo" action="#" v-model:file-list="fileList" :limit="1"
:auto-upload="false">
<template #trigger>
<el-button type="primary">选择文件</el-button>
</template>
<template #tip>
<div class="el-upload__tip text-red">作品只允许上传一个,格式为{{ndbsXm.uploadWorksType}}</div>
</template>
</el-upload>
</el-form-item>
</el-form>
<template #footer>
<div class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submitWork">确认</el-button>
</div>
</template>
</el-dialog>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
@ -184,7 +211,7 @@ import { useRoute, useRouter } from 'vue-router'
import userStore from '@/store/module/user' import userStore from '@/store/module/user'
import { getNdbswxqList, getComppxqList } from '@/api/person' import { getNdbswxqList, getComppxqList } from '@/api/person'
import { getOldRaceList, getOldRaceInfo } from '@/api/oldRace' import { getOldRaceList, getOldRaceInfo } from '@/api/oldRace'
import { getTopicList } from '@/api/race' import { getTopicList, uploadFileZp, uploadFile } from '@/api/race'
const user = userStore() const user = userStore()
const route = useRoute() const route = useRoute()
@ -208,22 +235,81 @@ const upData = ref<Parameters<typeof getSignUpApi>[0]>({
entryFormat: '个人', entryFormat: '个人',
id: route.query.edit ? route.query.annualCompid : route.query.id, id: route.query.edit ? route.query.annualCompid : route.query.id,
instructorSheetList: [], instructorSheetList: [],
teamManagementList: [{ realname: '', captain: '', teamSeq: '', userId: '' }], teamManagementList: [{ realname: '', captain: '1', teamSeq: '', userId: '' }],
// WorkName:WorkName.value,
// file:fileUrl.value
}) })
//
const dialogVisible = ref(false)
const fileList = ref<any>([])
const annualCompid = ref('')
const raceName = ref<any>('')
const uploadZp = (id: any) => {
console.log(id)
annualCompid.value = id
dialogVisible.value = true
}
const handleClose = () => {
dialogVisible.value = false
fileList.value = []
raceName.value = ''
annualCompid.value = ''
}
const WorkName = ref<string>('')
// const fileUrl = ref<string>('')
const fileUrl = ref<string[]>([]);
const submitWork = async () => {
if (!raceName.value) return ElMessage.warning('请输入作品名称')
if (!fileList.value.length) return ElMessage.warning('请上传作品')
console.log(fileList.value[0].raw, raceName.value, 'fileList.value[0].raw')
const fromData = new FormData()
fromData.append('annualCompid', annualCompid.value)
console.log(annualCompid.value);
fromData.append('file', fileList.value[0].raw)
// fileUrl.value = fileList.value[0].raw.name
fromData.append('workName', raceName.value)
const res: any = await uploadFile(fromData)
if (res && Array.isArray(res.message)) {
fileUrl.value = res.message;
} else {
fileUrl.value = [res.message];
}
WorkName.value = raceName.value;
handleClose();
};
// fromData.append('annualCompid', annualCompid.value)
// fromData.append('workName', raceName.value)
// const res: any = await uploadFileZp(fromData).then((res: any) => {
// console.log(res)
// if (res.code == 500) return ElMessage.warning(res.message)
// ElMessage.success(res.message)
// })
// console.log(res)
// //
const ndbs = ref<any>({}) const ndbs = ref<any>({})
const ndbsXm = ref<any>({}) const ndbsXm = ref<any>({})
const subLoading = ref(false) const subLoading = ref(false)
async function submit() { async function submit(substa:string) {
console.log(ruleForm, 'ruleForm'); console.log(ruleForm, 'ruleForm')
if (!ruleForm.topicid) return ElMessage.warning('请选择题目') if (!ruleForm.topicid) return ElMessage.warning('请选择题目')
upData.value.teamManagementList[0].realname = info.value.realname upData.value.teamManagementList[0].realname = info.value.realname
upData.value.teamManagementList[0].userId = info.value.id upData.value.teamManagementList[0].userId = info.value.id
upData.value.annualCompid = route.query.annualCompid upData.value.annualCompid = route.query.annualCompid
upData.value.topicid = ruleForm.topicid upData.value.topicid = ruleForm.topicid
upData.value.workName = WorkName.value
upData.value.files = fileUrl.value
upData.value.substa = substa
// if (!upData.value.teamName) { // if (!upData.value.teamName) {
// ElMessage({ // ElMessage({
// message: '', // message: '',
@ -233,8 +319,8 @@ async function submit() {
// } // }
try { try {
subLoading.value = true subLoading.value = true
const res: any = await getSignUpApi(upData.value) const res: any = await getSignUpApi({ ...upData.value })
console.log(res, 999999999)
ElMessage({ ElMessage({
message: res?.message || res?.result || '报名成功', message: res?.message || res?.result || '报名成功',
type: 'success', type: 'success',
@ -258,7 +344,10 @@ const ruleForm = reactive<any>({
entryFormat: '个人', entryFormat: '个人',
id: route.query.id, id: route.query.id,
topicid: '', topicid: '',
objName:route.query.objName objName: route.query.objName,
// requireUploadWorks: ndbsXm.requireUploadWorks,
raceName: WorkName.value,
fileUrl: fileUrl.value
}) })
const options = ref([]) const options = ref([])
if (route.query.edit) { if (route.query.edit) {
@ -274,7 +363,8 @@ if (route.query.edit) {
ruleForm.teamName = res.result.teamName ruleForm.teamName = res.result.teamName
ruleForm.topicid = res.result.topicObj ? res.result.topicObj.id : '' ruleForm.topicid = res.result.topicObj ? res.result.topicObj.id : ''
ruleForm.objName = res.result.annualCompPointName ruleForm.objName = res.result.annualCompPointName
ruleForm.requireUploadWorks = res.result.requireUploadWorks
WorkName.value = res.result.uploadFile.topicName
options.value = res.result.topicList.map((item) => { options.value = res.result.topicList.map((item) => {
return { return {
value: item.id, value: item.id,
@ -445,6 +535,12 @@ getTopicListApi()
font-size: 32px; font-size: 32px;
color: #ffffff; color: #ffffff;
line-height: 39px; line-height: 39px;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
/* 限制显示的行数 */
overflow: hidden;
text-overflow: ellipsis;
} }
} }
} }
@ -452,6 +548,7 @@ getTopicListApi()
.right { .right {
.info-box { .info-box {
width: 210px; width: 210px;
.name { .name {
height: 20px; height: 20px;
font-family: font-family:
@ -645,6 +742,11 @@ getTopicListApi()
--color1: #00d0d0; --color1: #00d0d0;
--color2: #42d9ac; --color2: #42d9ac;
} }
&.temp {
// --color1: #b9e63f;
--color2: #FFA500;
}
} }
} }
} }

@ -95,6 +95,7 @@ const dialogVisible = ref(false)
const tableData = ref<any>([]) const tableData = ref<any>([])
const getAwardListApi = async () => { const getAwardListApi = async () => {
const data = { const data = {
acpid: '',
column: 'createTime', column: 'createTime',
order: 'desc', order: 'desc',
pageNo: 1, pageNo: 1,
@ -102,7 +103,7 @@ const getAwardListApi = async () => {
} }
const res: any = await getAwardslist(data) const res: any = await getAwardslist(data)
tableData.value = res.result.records tableData.value = res.result.records
console.log(tableData.value, 'tableData.value') // console.log(tableData.value, 'tableData.value')
} }
getAwardListApi() getAwardListApi()
const setImageUrl = (url: string) => { const setImageUrl = (url: string) => {

@ -6,17 +6,21 @@
</template> </template>
<el-table :data="list" v-loading="isLoading" > <el-table :data="list" v-loading="isLoading" >
<el-table-column <el-table-column
label="年度比赛名称"
prop="compName"
/>
<!-- <el-table-column
label="年度比赛项目名称" label="年度比赛项目名称"
prop="annualCompid_dictText" prop="annualCompid_dictText"
/> /> -->
<el-table-column label="比赛类型" prop="entryFormat" /> <el-table-column label="比赛类型" prop="entryFormat" />
<el-table-column label="报名编号" prop="enrollCode" /> <el-table-column label="报名编号" prop="enrollCode" />
<el-table-column label="比赛状态" prop="enrollStatic_dictText" /> <el-table-column label="比赛状态" prop="enrollStatic_dictText" />
<el-table-column label="报名状态"> <!-- <el-table-column label="报名状态">-->
<template #default="{ row }"> <!-- <template #default="{ row }">-->
{{ formatstatus(row.workStatus) }} <!-- {{ formatstatus(row.workStatus) }}-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column label="作品名称" prop="fileName" /> <el-table-column label="作品名称" prop="fileName" />
<el-table-column label="作品文件" prop="fileName"> <el-table-column label="作品文件" prop="fileName">
<template #default="{ row }"> <template #default="{ row }">
@ -33,28 +37,29 @@
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="上传作品"> <!-- <el-table-column label="上传作品">-->
<template #default="{ row }"> <!-- <template #default="{ row }">-->
<el-button <!-- <el-button-->
link <!-- link-->
type="primary" <!-- :type="row.enrollStatic == '2' ? 'primary': 'warning' "-->
size="small" <!-- size="small"-->
@click="uploadZp(row.annualCompid, row.enrollStatic)" <!-- @click="uploadZp(row.annualCompid, row.enrollStatic)"-->
v-if="row.uploadWorkFlag != 'yes'" <!-- v-if="row.uploadWorkFlag != 'yes'"-->
> <!-- >-->
上传作品 <!-- {{row.enrollStatic == '2' ? '上传作品' : '未审核'}}-->
</el-button> <!-- </el-button>-->
<el-tag v-else>已上传作品</el-tag> <!-- <el-tag v-else>已上传作品</el-tag>-->
</template> <!-- </template>-->
</el-table-column> <!-- </el-table-column>-->
<el-table-column label="操作" prop="fileName"> <el-table-column label="操作" prop="fileName">
<template #default="{ row }"> <template #default="{ row }">
<div class="action-buttons">
<el-button <el-button
link link
type="primary" type="primary"
size="small" size="small"
@click="saveEvent(row.enrollCode)" @click="saveEvent(row.enrollCode)"
v-if="row.workStatus == '4' || row.workStatus == '3'" v-if="row.enrollStatic == '0' || row.enrollStatic == '3'"
> >
提交 提交
</el-button> </el-button>
@ -63,7 +68,7 @@
type="primary" type="primary"
size="small" size="small"
@click="editEvent(row.id,row.annualCompid,row.enrollCode,row.entryFormat)" @click="editEvent(row.id,row.annualCompid,row.enrollCode,row.entryFormat)"
v-if="row.enrollStatic == '1' || row.enrollStatic == '3'" v-if="row.enrollStatic == '0' || row.enrollStatic == '3'"
> >
编辑 编辑
</el-button> </el-button>
@ -85,6 +90,7 @@
> >
取消 取消
</el-button> </el-button>
</div>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -168,8 +174,8 @@ const raceName = ref<any>('')
const dialogVisible = ref(false) const dialogVisible = ref(false)
const annualCompid = ref('') const annualCompid = ref('')
const uploadZp = (id: any, staus: any) => { const uploadZp = (id: any, staus: any) => {
if (staus == 1) return ElMessage.warning('审核后方可上传作品') if (staus != 2) return ElMessage.warning('审核后方可上传作品')
console.log(id) //console.log(id)
annualCompid.value = id annualCompid.value = id
dialogVisible.value = true dialogVisible.value = true
} }
@ -198,7 +204,6 @@ const submit = async () => {
} }
const headerChange = (pageNumber: any) => { const headerChange = (pageNumber: any) => {
console.log(pageNumber) console.log(pageNumber)
page.value.pageNo = pageNumber page.value.pageNo = pageNumber
getList() getList()
} }
@ -208,7 +213,7 @@ const download = async (url:any,name:any) => {
const a = document.createElement('a') const a = document.createElement('a')
a.style.display = 'none' a.style.display = 'none'
document.body.appendChild(a) document.body.appendChild(a)
a.href = import.meta.env.VITE_APP_BASE_API + '/sys/common/zuopin/' + url a.href = import.meta.env.VITE_APP_BASE_API + '/sys/common' + url
a.setAttribute('download', name); a.setAttribute('download', name);
a.click() a.click()
document.body.removeChild(a) document.body.removeChild(a)
@ -318,6 +323,11 @@ const cancelEvent = async (id: any) => {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.action-buttons {
display: flex;
justify-content: space-between; /* 平均分布间距 */
align-items: center;
}
.container { .container {
margin-top: 25px; margin-top: 25px;
.page { .page {
@ -329,4 +339,8 @@ const cancelEvent = async (id: any) => {
:deep(.el-table__row) { :deep(.el-table__row) {
height: 50px; height: 50px;
} }
:deep(.el-button){
margin-left: 0px !important;
}
</style> </style>

Loading…
Cancel
Save