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

 Conflicts:
	.env.production
	vite.config.ts
GST002_admin
喻忠伟 2 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. 10
      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. 86
      src/views/login/index.vue
  11. 27
      src/views/login/registered.vue
  12. 14
      src/views/news/components/newsDetail.vue
  13. 155
      src/views/raceInfo/index.vue
  14. 8
      src/views/registrationGroup/components/stuList.vue
  15. 17
      src/views/registrationGroup/index.vue
  16. 164
      src/views/registrationPersonage/index.vue
  17. 3
      src/views/userInfo/components/awardeList.vue
  18. 68
      src/views/userInfo/components/reacList.vue

@ -1,5 +1,5 @@
# 变量必须以 VITE_ 为前缀才能暴露给外部读取
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://127.0.0.1:8080'

@ -1,9 +1,11 @@
<template>
<div class="footer">
<div class="footer-nav">
<div class="item">关于我们</div>
<div class="item">联系我们</div>
<div class="item">服务协议</div>
<div v-for="item in NewList" :key="item.id" @click="toNewsDetail(item.id)">
<div class="item">
{{ item.title }}
</div>
</div>
</div>
<div class="copyright">源码自然版权所有@2023 湘豫CP备 19005950-1</div>
<div class="report">
@ -13,7 +15,26 @@
</template>
<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>
<style lang="scss" scoped>

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

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

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

@ -46,4 +46,9 @@
}
img{
width: 100%;
}
.race-description{
p{
line-height: 30px;
}
}

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

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

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

@ -30,9 +30,9 @@
</el-form>
<!-- <div class="submit gradient" @click="submit">登录</div> -->
<div class="btn">
<div @click="Router.push('/')">返回首页</div>
<div class="gradient" @click="submit">登录</div>
</div>
<div @click="Router.push('/')">返回首页</div>
<div class="gradient" @click="submit">登录</div>
</div>
</div>
<div class="registered">
还没账号
@ -44,11 +44,11 @@
</template>
<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 userStore from '@/store/module/user'
import { ElMessage } from 'element-plus'
import { useRouter,useRoute } from 'vue-router'
import { useRouter, useRoute } from 'vue-router'
import RegisTered from './registered.vue'
const route = useRoute()
const useUserStore = userStore()
@ -80,17 +80,20 @@ const submit = async () => {
password: form.value.password,
username: form.value.account,
}
const res = await useUserStore.login(data)
console.log(res)
if (res === 0) {
ElMessage('验证码错误')
getcodeinfo()
} else if (res === 1) {
ElMessage('账号或密码错误')
try {
const res = await useUserStore.login(data)
console.log(res)
isSubmitting.value = false
if (res === 1) {
ElMessage('账号或密码错误')
getcodeinfo()
} else {
Router.push('/')
}
} catch (error: any) {
ElMessage(error.data.message)
getcodeinfo()
} else {
Router.push('/')
}
}
onMounted(() => {
@ -98,15 +101,22 @@ onMounted(() => {
// setTimeout(() => {
// getcodeinfo()
// },6000)
if(route.query.registered){
if (route.query.registered) {
registered()
}
})
onBeforeUnmount(() => {
window.removeEventListener('keyup', keyDown) //
})
const isSubmitting = ref(false) //
const keyDown = (e: any) => {
//
//
if (isSubmitting.value) return
//
if (e.keyCode == 13) {
//
submit()
isSubmitting.value = true //
submit() //
}
}
@ -191,26 +201,26 @@ const backLoginEvent = () => {
}
}
.btn {
display: flex;
justify-content: space-between;
margin-top: 45px;
div {
width: 210px;
height: 42px;
text-align: center;
line-height: 42px;
font-size: 14px;
cursor: pointer;
border-radius: 10px;
}
div:nth-child(1) {
border: 1px solid #dbdbdb;
color: #3c3c3c;
}
div:nth-child(2) {
color: #fff;
}
display: flex;
justify-content: space-between;
margin-top: 45px;
div {
width: 210px;
height: 42px;
text-align: center;
line-height: 42px;
font-size: 14px;
cursor: pointer;
border-radius: 10px;
}
div:nth-child(1) {
border: 1px solid #dbdbdb;
color: #3c3c3c;
}
div:nth-child(2) {
color: #fff;
}
}
:deep(.el-form-item) {
display: flex;
flex-direction: column;

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

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

@ -1,13 +1,11 @@
<template>
<div class="container-1420 container">
<!-- 年度比赛详细信息 -->
<div class="year-race-info">
<div class="left-info">
<el-card>
<template #header>
<div style="display: flex;justify-content: space-between;">
<div style="display: flex; justify-content: space-between">
<el-breadcrumb>
<el-breadcrumb-item
v-for="item in Route.matched"
@ -17,7 +15,10 @@
{{ item.meta.title }}
</el-breadcrumb-item>
</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>
</template>
<div>
@ -99,7 +100,7 @@
<div class="description">往年历史赛事</div>
<el-scrollbar height="650px">
<ul>
<li v-for="item in historyRaceList" :key="item.id">
<li v-for="item in historyRaceList" :key="item.id" >
<div class="year">2024年度</div>
<div class="name">{{ item.name }}</div>
<div class="time">
@ -121,7 +122,7 @@
<div style="margin-top: 30px; font-size: 24px; font-weight: 600">
年度比赛列表:
</div>
<el-card v-if="reacProjectList.length === 0" style="margin-top: 20px;">
<el-card v-if="reacProjectList.length === 0" style="margin-top: 20px">
<div
style="
display: flex;
@ -135,43 +136,52 @@
<p>没有年度比赛~</p>
</div>
</el-card>
<el-card style="margin-top: 20px;" v-else>
<div class="race-list">
<div
class="item"
v-for="item in reacProjectList"
:key="item.id"
@click="goToCompetition(item.id)"
>
<div class="image">
<img :src="setImageUrl(item.image)" alt="" v-default-image/>
</div>
<div class="reac-info">
<div class="niandu">{{ item.annualname }}年度</div>
<div
class="reac-title"
style="font-weight: 600; color: #000; font-size: 16px"
>
{{ item.name }}
</div>
<div class="reac-title">负责部门{{ item.compOrgan }}</div>
<!-- <div class="reac-project">{{ item.introduction }}</div> -->
<div
class="time"
style="display: flex; justify-content: space-between"
>
<div>开始时间:{{ item.starttime }}</div>
结束时间:{{ item.endtime }}
<div></div>
<el-card style="margin-top: 20px" v-else>
<div class="race-list" v-loading="loading">
<div
class="item"
v-for="item in reacProjectList"
:key="item.id"
@click="goToCompetition(item.id, item.endtime,item.isopen)"
:style="{
'background-color': isTimePassed(item.endtime) ? 'rgb(232 232 232)' : '#fff',
}"
>
<div class="image">
<img :src="setImageUrl(item.image)" alt="" v-default-image />
</div>
<!-- <div class="time">
<div class="reac-info">
<div class="niandu">
<div>{{ item.annualname }}年度</div>
<el-button type="primary" size="small">报名</el-button>
</div>
<div
class="reac-title"
style="font-weight: 600; color: #000; font-size: 16px;overflow: hidden;white-space: nowrap;text-overflow: ellipsis;"
>
{{ item.name }}
</div>
<div class="reac-title">负责部门{{ item.compOrgan }}</div>
<!-- <div class="reac-project">{{ item.introduction }}</div> -->
<div
class="time"
style="display: flex; justify-content: space-between"
>
<div>开始时间:{{ item.starttime }}</div>
结束时间:{{ item.endtime }}
<div></div>
</div>
<!-- <div class="time">
</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>
<h3
style="margin-top: 20px; font-size: 24px; font-weight: 700"
id="introduction"
@ -184,28 +194,44 @@
<script lang="ts" setup>
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 { ElMessage } from 'element-plus'
import { pa } from 'element-plus/es/locales.mjs'
const Route = useRoute()
const Router = useRouter()
console.log(Route, 'Route')
const defaultImageUrl = '/src/assets/images/item.png'
const loading = ref(false)
const reacProjectList = ref<any>([])
const getRaceProjectListEvent = async () => {
let page = {
let page = ref<any>({
id: Route.query.id,
column: 'createTime',
order: 'desc',
pageNo: 1,
pageSize: 8,
}
const res: any = await getYearRaceList(page)
total: 0
})
const getRaceProjectListEvent = async () => {
loading.value = true
const res: any = await getYearRaceList(page.value)
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 ')
loading.value = false
}
getRaceProjectListEvent()
const pageChange = (e:any) => {
page.value.pageNo = e
getRaceProjectListEvent()
}
const setImageUrl = (url: string) => {
return import.meta.env.VITE_APP_BASE_API + '/sys/common/static/' + url
}
@ -220,10 +246,29 @@ const getraceInfoEvent = async () => {
getraceInfoEvent()
//
const goToCompetition = (id: any) => {
Router.push({ path: '/competition', query: { id, raceId: Route.query.id } })
const goToCompetition = async (id: any, endTime: string,isOpen:string) => {
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) => {
// 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)
@ -248,12 +293,13 @@ const createfileLink = (url: any) => {
fileList.value = list
}
const scrollToPosition = () => {
const targetPosition = (document.getElementById('introduction')as HTMLElement).offsetTop - 100;
window.scrollTo({
top: targetPosition,
behavior: 'smooth', //
});
}
const targetPosition =
(document.getElementById('introduction') as HTMLElement).offsetTop - 100
window.scrollTo({
top: targetPosition,
behavior: 'smooth', //
})
}
</script>
<style lang="scss" scoped>
@ -321,6 +367,9 @@ const scrollToPosition = () => {
font-size: 18px;
margin-top: 20px;
font-weight: 600;
display: flex;
justify-content: space-between;
align-items: center;
}
}
}
@ -471,7 +520,7 @@ const scrollToPosition = () => {
font-size: 14px;
line-height: 22px;
border: 1px solid #ccc;
padding: 10px;
padding: 20px;
margin-top: 20px;
p {
img {

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

@ -23,7 +23,7 @@
<div class="annual">{{ ndbs.annualid }}年度</div>
<div class="title-box">
<div class="text">{{ ndbs.name }}</div>
<img src="../../assets/images/编组.png" alt="" />
<img style="width: 35px;" src="../../assets/images/编组.png" alt="" />
</div>
</div>
<div class="right">
@ -122,7 +122,7 @@
<el-form-item label="队伍名称" prop="teamName">
<el-input v-model="ruleForm.teamName" maxlength="30" type="text" :disabled="isDisable"/>
</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-option
v-for="item in options"
@ -151,7 +151,7 @@
</el-card>
<div class="bottom">
<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 ? '确认修改' : '确认报名' }}
</el-button>
</div>
@ -202,7 +202,7 @@ if (route.query.edit) {
const getOldRaceInfoEvent = async () => {
const res: any = await getOldRaceInfo({ id: route.query.id})
console.log(res,'res~~~');
ruleForm.annualCompid = route.query.annualCompid
// ruleForm.annualCompid = route.query.annualCompid
ruleForm.teamName = res.result.teamName
ruleForm.topicid = res.result.topicObj ? res.result.topicObj.id : ''
ruleForm.objName = res.result.annualCompPointName
@ -252,7 +252,7 @@ const activeName = ref('members')
const ruleFormRef = ref<FormInstance>()
const ruleForm = reactive<any>({
annualCompid:'' ,
// annualCompid:'' ,
entryFormat: '团队',
id: route.query.id,
teamName: '', //
@ -277,7 +277,7 @@ const submit = () => {
// ruleForm.annualCompid = route.query.id
if(route.query.edit){
ruleForm.enrollCode = route.query.enrollCode
ruleForm.id = route.query.annualCompid
}
getSignUpApi(ruleForm)
.then((res: any) => {
@ -449,6 +449,11 @@ const submit = () => {
font-size: 32px;
color: #ffffff;
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="title-box">
<div class="text">{{ ndbs.name }}</div>
<img src="../../assets/images/编组.png" alt="" />
<img style="width: 35px" src="../../assets/images/编组.png" alt="" />
</div>
</div>
<div class="right">
@ -72,16 +72,10 @@
</div>
</el-card>
</div>
<el-acrd>
<el-card>
<div>
<el-form
ref="ruleFormRef"
style="max-width: 600px"
:model="ruleForm"
status-icon
label-width="auto"
class="demo-ruleForm"
>
<el-form ref="ruleFormRef" style="max-width: 600px" :model="ruleForm" status-icon label-width="auto"
class="demo-ruleForm">
<el-form-item label="年度比赛项目">
<el-input v-model="ruleForm.objName" type="text" disabled />
</el-form-item>
@ -89,19 +83,21 @@
<el-input v-model="ruleForm.entryFormat" type="text" disabled />
</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-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
/>
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value" />
</el-select>
</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>
</div>
</el-acrd>
</el-card>
<el-card class="center">
<div class="personage-info">
<div class="head">
@ -168,12 +164,43 @@
</el-card>
<div class="bottom">
<el-button class="btn" @click="() => router.back()">{{ isDisable ? '返回' : isEdit ? '取消修改' : '取消报名' }}</el-button>
<el-button class="btn cyan" :loading="subLoading" @click="submit" :disabled="isDisable">
{{ isEdit ? '确认修改' : '确认报名' }}
<el-button class="btn" @click="() => router.back()">
{{ 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 ? '确认修改' : '确认报名' }}
</el-button>
</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>
<script lang="ts" setup>
@ -184,7 +211,7 @@ import { useRoute, useRouter } from 'vue-router'
import userStore from '@/store/module/user'
import { getNdbswxqList, getComppxqList } from '@/api/person'
import { getOldRaceList, getOldRaceInfo } from '@/api/oldRace'
import { getTopicList } from '@/api/race'
import { getTopicList, uploadFileZp, uploadFile } from '@/api/race'
const user = userStore()
const route = useRoute()
@ -208,22 +235,81 @@ const upData = ref<Parameters<typeof getSignUpApi>[0]>({
entryFormat: '个人',
id: route.query.edit ? route.query.annualCompid : route.query.id,
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 ndbsXm = ref<any>({})
const subLoading = ref(false)
async function submit() {
console.log(ruleForm, 'ruleForm');
async function submit(substa:string) {
console.log(ruleForm, 'ruleForm')
if (!ruleForm.topicid) return ElMessage.warning('请选择题目')
upData.value.teamManagementList[0].realname = info.value.realname
upData.value.teamManagementList[0].userId = info.value.id
upData.value.annualCompid = route.query.annualCompid
upData.value.topicid = ruleForm.topicid
upData.value.workName = WorkName.value
upData.value.files = fileUrl.value
upData.value.substa = substa
// if (!upData.value.teamName) {
// ElMessage({
// message: '',
@ -233,8 +319,8 @@ async function submit() {
// }
try {
subLoading.value = true
const res: any = await getSignUpApi(upData.value)
const res: any = await getSignUpApi({ ...upData.value })
console.log(res, 999999999)
ElMessage({
message: res?.message || res?.result || '报名成功',
type: 'success',
@ -258,7 +344,10 @@ const ruleForm = reactive<any>({
entryFormat: '个人',
id: route.query.id,
topicid: '',
objName:route.query.objName
objName: route.query.objName,
// requireUploadWorks: ndbsXm.requireUploadWorks,
raceName: WorkName.value,
fileUrl: fileUrl.value
})
const options = ref([])
if (route.query.edit) {
@ -274,7 +363,8 @@ if (route.query.edit) {
ruleForm.teamName = res.result.teamName
ruleForm.topicid = res.result.topicObj ? res.result.topicObj.id : ''
ruleForm.objName = res.result.annualCompPointName
ruleForm.requireUploadWorks = res.result.requireUploadWorks
WorkName.value = res.result.uploadFile.topicName
options.value = res.result.topicList.map((item) => {
return {
value: item.id,
@ -377,7 +467,7 @@ getTopicListApi()
margin: 0 auto;
width: 1397px;
& > * {
&>* {
background: #ffffff;
}
@ -445,6 +535,12 @@ getTopicListApi()
font-size: 32px;
color: #ffffff;
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 {
.info-box {
width: 210px;
.name {
height: 20px;
font-family:
@ -645,6 +742,11 @@ getTopicListApi()
--color1: #00d0d0;
--color2: #42d9ac;
}
&.temp {
// --color1: #b9e63f;
--color2: #FFA500;
}
}
}
}

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

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

Loading…
Cancel
Save