diff --git a/src/common/TextUtil.js b/src/common/TextUtil.js index 4a1441fc7..0775a0be2 100644 --- a/src/common/TextUtil.js +++ b/src/common/TextUtil.js @@ -68,6 +68,7 @@ export function appendFileSizeToUploadFile(item) { return `${item.title}${uploadNameSizeSeperator}${item.filesize}` } export function appendFileSizeToUploadFileAll(fileList) { + console.log('fileList',fileList); return fileList && fileList.map(item => { if (item.name.indexOf(uploadNameSizeSeperator) == -1) { return Object.assign({}, item, { name: `${item.name}${uploadNameSizeSeperator}${bytesToSize(item.size)}` }) diff --git a/src/military/qz2022.js b/src/military/qz2022.js index 772906b8a..4c3a46203 100644 --- a/src/military/qz2022.js +++ b/src/military/qz2022.js @@ -13,6 +13,7 @@ import './qz2022/index.scss'; import { Button, Dropdown, Menu, Popover, Spin } from "antd"; import banner from './qz2022/image/banner.png' import { paths } from "./qz2022/static"; +import { getQz2022, userCompetitionStatus } from "./qz2022/api"; const Introduce = Loadable({ loader: () => import('./qz2022/introduce'), @@ -63,17 +64,36 @@ const menu = ( ); const Qz2022 = (props) => { - // const history:{location:{pathname}} - const {history} = props; + const {history, current_user} = props; const {location} = history; const {pathname} = location; const [active, setActive] = useState(); - console.log(active); + const [reload, setReload] = useState(); + const [qzDetail, setQzDetail] = useState(); + const [enrollStatus, setEnrollStatus] = useState(); useEffect(()=>{ setActive(pathname.substring(pathname.lastIndexOf('/')+1, pathname.lenght)); }, [pathname]) + useEffect(()=>{ + // 获取启智2022详情 + getQz2022().then(response=>{ + if(response && response.status===200){ + setQzDetail(response.data.data); + } + }) + }, []) + + useEffect(()=>{ + // 获取用户参与竞赛状态 + userCompetitionStatus('qz2022').then(response=>{ + if(response && response.status === 200){ + setEnrollStatus(response.data.data); + } + }) + }, [reload]) + return ( {/* banner图+选项 */} @@ -89,12 +109,12 @@ const Qz2022 = (props) => {
  • 通知公告
  • -
  • + {current_user && current_user.login ?
  • 参赛报名 -
  • -
  • +
  • : props.showLoginDialog} + {current_user && current_user.login ?
  • 提案提交 -
  • + : props.showLoginDialog}
  • 数据统计
  • @@ -104,11 +124,11 @@ const Qz2022 = (props) => {
  • 联系我们
  • -
  • + {current_user && current_user.login && current_user.admin &&
  • 后台管理 -
  • + } } {paths.indexOf(active) !== -1 &&
    } @@ -122,7 +142,7 @@ const Qz2022 = (props) => { {/* 大赛指南 */} () + () => () } > {/* 通知公告详情页 */} @@ -140,7 +160,13 @@ const Qz2022 = (props) => { {/* 参赛报名 */} () + () => () + } + > + {/* 提案提交 */} + () } > {/* 交流互动 */} diff --git a/src/military/qz2022/api.js b/src/military/qz2022/api.js index da339b14d..c4dc1b377 100644 --- a/src/military/qz2022/api.js +++ b/src/military/qz2022/api.js @@ -1,31 +1,18 @@ -import fetch,{ current_main_site_url} from './fetch'; import axios from 'axios'; - -// 用户参与启智2022状态 +// 用户参与启智2022状态?debug=teacher export async function userCompetitionStatus(id) { - let res = await fetch({ - url: `${current_main_site_url}/api/competition_infos/${id}/enroll_status.json`, - method: 'get' - }); - return res; + return axios.get(`/competition_infos/${id}/enroll_status.json`); } // 启智2022详情接口 export function getQz2022() { - return fetch({ - url: `${current_main_site_url}/api/competition_infos/qz2022.json`, - method: 'get' - }); + return axios.get(`/competition_infos/qz2022.json`); } -// 报名启智2022 竞赛 +// 报名启智2022 竞赛?debug=teacher export async function enrollCompetition(data){ - return fetch({ - url: `${current_main_site_url}/api/competition_infos/qz2022/enroll.json`, - method: 'post', - data, - }); + return axios.post(`/competition_infos/qz2022/enroll.json`,data); } // 统计启智2022 竞赛 @@ -39,35 +26,15 @@ export async function stattistics(data){ // 竞赛提交作品 export async function uploadCompetition(data){ - return fetch({ - url: `${current_main_site_url}/api/competition_infos/qz2022/upload.json`, - method: 'post', - data, - }); + return axios.post(`/competition_infos/qz2022/upload.json`,data); } -// 管理-竞赛报名列表 +// 管理-竞赛报名列表?debug=admin export function getQzEnrollList(params) { - return fetch({ - url: `${current_main_site_url}/api/competition_infos/qz2022/enroll_list.json`, - method: 'get', - params - }); + return axios.get(`/competition_infos/qz2022/enroll_list.json`,params={params}); } -// 管理-竞赛报名列表导出 -export function exportEnrollList(params) { - return fetch({ - url: `${current_main_site_url}/api/competition_infos/qz2022/enroll_list.xlsx`, - method: 'get', - }); -} - -// 管理-竞赛提交作品列表 +// 管理-竞赛提交作品列表&debug=admin export function getQzProList(params) { - return fetch({ - url: `${current_main_site_url}/api/competition_infos/qz2022/enroll_list.json?upload=true`, - method: 'get', - params - }); + return axios.get(`/competition_infos/qz2022/enroll_list.json?upload=true`,params={params}); } diff --git a/src/military/qz2022/apply/index.jsx b/src/military/qz2022/apply/index.jsx index 982bf54b8..c35824103 100644 --- a/src/military/qz2022/apply/index.jsx +++ b/src/military/qz2022/apply/index.jsx @@ -1,9 +1,7 @@ -import React, { useState, useCallback, useMemo, useEffect, useRef } from "react"; -import { Input, Select, Button, Form, message, DatePicker, Table, Pagination, Upload, Modal } from 'antd'; -import {competitionArea, competitionType} from '../static.js'; -import { Link } from "react-router-dom"; -import { formatDuring } from 'educoder'; -import {userCompetitionStatus, enrollCompetition} from '../api'; +import React, {useState, useCallback} from "react"; +import { Input, Select, Button, Form, message, Radio } from 'antd'; +import {enrollCompetition} from '../api'; +import {httpUrl} from '../fetch'; import EditTable from "../editTable"; import apply_top from "../image/apply_top.png"; import apply_down from "../image/apply_down.png"; @@ -18,11 +16,11 @@ import '../../index.scss'; const Option = Select.Option; export default Form.create()((props) => { - const { match, history, showNotification, form, current_user, qzDetail} = props - const { getFieldDecorator, validateFields, setFieldsValue } = form; - const [applyStatue, setApplyState] = useState(undefined); + const {form, qzDetail, enrollStatus, setReload} = props + const {getFieldDecorator, validateFields, setFieldsValue } = form; const [members, setMembers] = useState([]); const [errorMessage, setErrorMessage] = useState(undefined); + const [sourceBy, setSourceBy] = useState(1); // form表单公共处理函数 const helper = useCallback( @@ -34,15 +32,6 @@ export default Form.create()((props) => { [] ); - useEffect(() => { - // 获取用户是否报名启智2022 - userCompetitionStatus('qz2022').then(response=>{ - if(response && response.message === "success"){ - setApplyState(response.data.enroll_status); - } - }) - }, []); - // 当用户输入结束时 检验用户输入是否符合规范 function verify(dataIndex){ validateFields([dataIndex],(error, values)=>{ @@ -72,37 +61,47 @@ export default Form.create()((props) => { // 用户输入正确 报名该竞赛 const params = { ...values, - members + members, + subject_source_type: sourceBy, } enrollCompetition(params).then(response=>{ - if(response && response.message === "success"){ + if(response && response.data.message === "success"){ + setReload(Math.random()); message.success('报名成功') + }else{ + message.error(response.message); } }) } }) } - + return (
      报名
    - +
    + + 个人信息 +
    - +
    + + 报名成功 +
    - {!applyStatue &&
    + {!(enrollStatus && enrollStatus.enroll_status) &&
    请认真核对报名信息,务必与线下报名表信息一致!
    }
    -
    {!applyStatue && '填写'}报名信息
    +
    {!(enrollStatus && enrollStatus.enroll_status) && '填写'}报名信息
    {/* 报名表单 */} - {!applyStatue &&
    + {!(enrollStatus && enrollStatus.enroll_status) && {helper('参赛单位', 'org_name', [{ required: true, message: "请正确输入报名信息" }, @@ -131,22 +130,26 @@ export default Form.create()((props) => { 'zone', [{ required: true, message: "请正确输入报名信息" }], )} {helper('赛项', 'sub_competition', [{ required: true, message: "请正确输入报名信息" }], )} {qzDetail && qzDetail.is_local &&
    + {setSourceBy(e.target.value)}} value={sourceBy} defaultValue={1}> + 计划支持 + 自主提报 + {helper('课题来源', - 'subject_source_type', + 'subject_source_name', [{ required: true, message: "请正确输入报名信息" }, { max: 32, message: '超出限制长度32位字符,请重新编辑' }], - {verify("subject_source_type")}}/> + {verify("subject_source_name")}} disabled={sourceBy === 0}/> )}
    } {helper('电话', @@ -163,25 +166,25 @@ export default Form.create()((props) => {
    } {/* 已报名,报名信息 */} - {applyStatue &&
    -
    参赛单位 :
    -
    参赛团队负责人姓名 :
    -
    职务 :
    -
    JXJXJX :
    -
    赛区 :
    -
    赛项 :
    -
    课题来源 :
    -
    成员 :
    -
    电话 :
    + {enrollStatus && enrollStatus.enroll_status &&
    +
    参赛单位 : {enrollStatus && enrollStatus.enroll_info.org_name}
    +
    参赛团队负责人姓名 : {enrollStatus && enrollStatus.enroll_info.leader}
    +
    职务 : {enrollStatus && enrollStatus.enroll_info.org_job}
    +
    JXJXJX : {enrollStatus && enrollStatus.enroll_info.org_rank}
    +
    赛区 : {enrollStatus && enrollStatus.enroll_info.zone}
    +
    赛项 : {enrollStatus && enrollStatus.enroll_info.sub_competition}
    +
    课题来源 : {enrollStatus && enrollStatus.enroll_info.subject_source_type === 0 ? "自主提报" : enrollStatus.enroll_info.subject_source_name || '--'}
    +
    成员 : {enrollStatus && enrollStatus.enroll_info.members && enrollStatus.enroll_info.members.map(item=>{return item.real_name + ' '})}
    +
    电话 : {enrollStatus && enrollStatus.enroll_info.phone}
    }
    - {!applyStatue &&
    + {!(enrollStatus && enrollStatus.enroll_status) &&
    - +
    }
    ) diff --git a/src/military/qz2022/apply/index.scss b/src/military/qz2022/apply/index.scss index 528d3d4cd..d1c86feda 100644 --- a/src/military/qz2022/apply/index.scss +++ b/src/military/qz2022/apply/index.scss @@ -1,7 +1,7 @@ .step{ display: flex; align-items: center; - margin: 50px 0 60px; + margin: 30px 0 40px; .left_tit{ height: 20px; line-height: 19px; @@ -16,6 +16,12 @@ margin: 0 12px; border-bottom: 1px dashed #bac1c9; } + .img_span{ + display: flex; + flex-direction: column; + align-items: center; + margin-top: 25px; + } } .apply_tip{ background-color:#fff5eb; @@ -47,7 +53,17 @@ .ant-input:hover{border-color:#2e5bfe;} } .class_from{ - display: inline; + position: relative; + display: inline-block; + width: 46.5%; + } + .class_from .ant-form-item{ + width: 71%; + } + .class_from>.ant-radio-group{ + position: absolute; + left: 36%; + top: 10px; } } .info{ @@ -113,11 +129,11 @@ .apply_but{ padding-bottom: 60px; text-align: center; - .cancel_submit, .submit_info{ + .download, .submit_info{ padding: 0 18px; height: 36px; } - .cancel_submit{ - padding: 0 30px; + .download{ + padding: 0 10px; } } \ No newline at end of file diff --git a/src/military/qz2022/fingerpost/index.jsx b/src/military/qz2022/fingerpost/index.jsx index a24ccbfde..5bd32b8d3 100644 --- a/src/military/qz2022/fingerpost/index.jsx +++ b/src/military/qz2022/fingerpost/index.jsx @@ -1,22 +1,14 @@ -import React, { useState, useCallback, useMemo, useEffect } from "react"; -import { Input, Select, Button, Form, DatePicker, Table, Pagination, Upload, Modal } from 'antd'; -import { Link } from "react-router-dom"; -import { formatDuring } from 'educoder'; +import React from "react"; import './index.scss'; import '../../index.scss'; -const Option = Select.Option; - -function Introduce({ form, showNotification, match, history }) { - - useEffect(() => { - - }, []); +function Introduce({qzDetail }) { return ( - - da指南 - +
    +
    2022年赛程说明
    +
    +
    ) } export default Introduce; \ No newline at end of file diff --git a/src/military/qz2022/fingerpost/index.scss b/src/military/qz2022/fingerpost/index.scss index e69de29bb..13117c1fe 100644 --- a/src/military/qz2022/fingerpost/index.scss +++ b/src/military/qz2022/fingerpost/index.scss @@ -0,0 +1,8 @@ +.fingerpost{ + .fingerpost_head{ + padding: 60px 0 30px; + text-align: center; + border-bottom: 1px dashed #979797; + font-weight: bold; + } +} \ No newline at end of file diff --git a/src/military/qz2022/image/banner.png b/src/military/qz2022/image/banner.png index 3ea9f6a0f..a1180b557 100644 Binary files a/src/military/qz2022/image/banner.png and b/src/military/qz2022/image/banner.png differ diff --git a/src/military/qz2022/management/index.jsx b/src/military/qz2022/management/index.jsx index ccf022ee8..b5fb405d8 100644 --- a/src/military/qz2022/management/index.jsx +++ b/src/military/qz2022/management/index.jsx @@ -1,23 +1,19 @@ -import React, { useState, useCallback, useMemo, useEffect } from "react"; -import { Input, Select, Button, Form, DatePicker, Table, Pagination, Upload, Modal, Icon } from 'antd'; -import { Link } from "react-router-dom"; -import { formatDuring } from 'educoder'; -import {competitionArea, competitionType} from '../static.js'; +import React, { useState, useMemo, useEffect } from "react"; +import {Select, Button, Tooltip } from 'antd'; +import {current_main_site_url} from '../fetch'; import PaginationTable from "../../components/paginationTable"; import './index.scss'; import '../index.scss'; -import { getQzEnrollList, getQzProList, exportEnrollList } from "../api.js"; +import { getQzEnrollList, getQzProList } from "../api.js"; const Option = Select.Option; -function Introduce({ form, showNotification, match, history:{location:{pathname}},qzDetail }) { - console.log(qzDetail); +function Introduce({history:{location:{pathname}},qzDetail }) { // 报名列表和作品列表到指向此处,type做区分,0报名,1作品 const [type, setType] = useState(pathname.substring(pathname.lastIndexOf('/')+1, pathname.lenght)); const [reload, setReload] = useState(); const [loading, setLoading] = useState(false); const [curPage, setCurPage] = useState(1); - const [pageSize, setPageSize] = useState(10); const [dataList, setDataList] = useState([]); const [total, setTotal] = useState(0); // 赛区 赛项 @@ -29,7 +25,6 @@ function Introduce({ form, showNotification, match, history:{location:{pathname} }, [pathname]); useEffect(()=>{ - console.log(zone, subCompetition); const params = { zone: zone === '-1' ? undefined : zone, sub_competition: subCompetition === '-1' ? undefined : subCompetition @@ -37,24 +32,23 @@ function Introduce({ form, showNotification, match, history:{location:{pathname} if(type === "applys"){ // 报名列表 getQzEnrollList(params).then(response=>{ - console.log(response); - if(response && response.message === "success"){ + if(response && response.status === 200){ setTotal(response.count); - setDataList(response.data); + setDataList(response.data.data); } }) }else{ // 提交作品列表 getQzProList(params).then(response=>{ - if(response && response.message === "success"){ + if(response && response.status === 200){ setTotal(response.count); - setDataList(response.data); + setDataList(response.data.data); } }) } }, [type, zone, subCompetition]) - const columns_apply = useMemo(() => { + let columns_apply = useMemo(() => { return [ { title: '参赛单位', @@ -67,16 +61,7 @@ function Introduce({ form, showNotification, match, history:{location:{pathname} dataIndex: 'leader', key: 'leader', }, - { - title: '职务', - dataIndex: 'org_job', - key: 'org_job', - }, - { - title: 'JXJXJX', - dataIndex: 'org_rank', - key: 'org_rank', - }, + { title: '电话', dataIndex: 'phone', @@ -85,29 +70,15 @@ function Introduce({ form, showNotification, match, history:{location:{pathname} { title: '赛区', dataIndex: 'zone', - render:(text, record)=>{ - return (qzDetail && qzDetail.zones[text]) || '--'; - } }, { title: '赛项', - dataIndex: 'sub_competition', - render:(text, record)=>{ - return (qzDetail && qzDetail.sub_competitions[text]) || '--'; - } - }, - { - title: '课题来源', - dataIndex: 'subject_source_type', - render:(text, record)=>{ - return text === '0' ? "自主提报" : record.subject_source_name || '--'; - } + dataIndex: 'sub_competition' }, { title: '成员', dataIndex: 'members', render:(text, record)=>{ - console.log('members', text); return ''; } } @@ -126,24 +97,44 @@ function Introduce({ form, showNotification, match, history:{location:{pathname} }, { title: '赛区', - dataIndex: 'zone', - render:(text, record)=>{ - return (qzDetail && qzDetail.zones[text]) || '--'; - } + dataIndex: 'zone' }, { title: '赛项', - dataIndex: 'sub_competition', - render:(text, record)=>{ - return (qzDetail && qzDetail.sub_competitions[text]) || '--'; - } + dataIndex: 'sub_competition' }, { title: '作品', - dataIndex: 'sttachments', + dataIndex: 'attachments', + render:(text, record)=>{ + return {text[0].title}; + } }, ]; - }, [qzDetail]); + }, [qzDetail, reload]); + + // 如果是内网环境,则增加部分字段 + if(qzDetail && qzDetail.is_local && columns_apply[2].title !== "职务"){ + // 职务、JXJXJX、课题来源 + columns_apply.splice(2,0,{ + title: '职务', + dataIndex: 'org_job', + key: 'org_job', + }, + { + title: 'JXJXJX', + dataIndex: 'org_rank', + key: 'org_rank', + },); + columns_apply.splice(7,0, + { + title: '课题来源', + dataIndex: 'subject_source_type', + render:(text, record)=>{ + return text === 0 ? "自主提报" : record.subject_source_name || '--'; + } + },) + } const expandRow = (record) =>{ return
    @@ -165,13 +156,25 @@ function Introduce({ form, showNotification, match, history:{location:{pathname} })}
    } - - const customExpandIcon1 = useMemo((props)=>{ - // console.log(props); - },[dataList]) + // 外网环境下 赛队成员无职务、JXJXJX属性 + const expandRowWai = (record) =>{ + return
    +
    +
    序号
    +
    姓名
    +
    单位
    +
    + {record.members && record.members.map((item, index)=>{ + return
    +
    {index+1}
    +
    {item.real_name}
    +
    {item.org_job}
    +
    + })} +
    + } const customExpandIcon = (props) => { - console.log(props); if(props.record.members.length > 0){ if (props.expanded) { return { @@ -187,10 +190,6 @@ function Introduce({ form, showNotification, match, history:{location:{pathname} } } - function exportApplyInfo(){ - exportEnrollList(); - } - return (
    @@ -209,7 +208,7 @@ function Introduce({ form, showNotification, match, history:{location:{pathname} {qzDetail && qzDetail.sub_competitions.map((item,i)=> {return })}
    - {type === "applys" && } +
    diff --git a/src/military/qz2022/management/index.scss b/src/military/qz2022/management/index.scss index 7feaf794a..7a6f604ed 100644 --- a/src/military/qz2022/management/index.scss +++ b/src/military/qz2022/management/index.scss @@ -21,6 +21,21 @@ display: inline-block; width: 17%; text-align: center; + padding-top: 15px; &.job{width: 30%;} + &:first-child{ + padding-top: 0; + padding-bottom: 15px; + } + } + .expandRowManage .row{ + border-bottom: 1px solid #ececec; + margin: 0 -8px; + } + .expandRowManage .row:last-child{ + border-bottom: none; + } + .attachments_a{ + color: #2e5bfe; } } diff --git a/src/military/qz2022/refer/index.jsx b/src/military/qz2022/refer/index.jsx index df9032f21..3c107b502 100644 --- a/src/military/qz2022/refer/index.jsx +++ b/src/military/qz2022/refer/index.jsx @@ -1,10 +1,12 @@ import React, { useState, useCallback, useMemo, useEffect } from "react"; -import { Input, Select, Button, Form, DatePicker, Table, Pagination, Upload, Modal, Icon } from 'antd'; +import { Input, Select, Button, Form, DatePicker, Table, Pagination, Upload, Modal, Icon, message } from 'antd'; import { appendFileSizeToUploadFileAll } from 'educoder'; import { Link } from "react-router-dom"; import { formatDuring } from 'educoder'; -import {httpUrl} from '../fetch.js'; -import {uploadCompetition} from '../api'; +import {httpUrl, current_main_site_url} from '../fetch.js'; +import {uploadCompetition, uploadFile} from '../api'; +import {getFile} from '../../expert/api'; +import { Confirm } from '../../components/ModalFun'; import refer_tip from "../image/refer_tip.svg"; import refer from "../image/refer.svg"; @@ -12,45 +14,37 @@ import './index.scss'; import '../../index.scss'; const Option = Select.Option; -function Introduce({ form, showNotification, match, history }) { +function Introduce({ form, showNotification, match, history, enrollStatus }) { // 上传文件时 按钮loading效果 const [loading, setLoading] = useState(false); - const [referStatue, setReferState] = useState(true); - const [files, setFiles] = useState(undefined); - - const showUploadList = { - - } + const [files, setFiles] = useState(); useEffect(() => { - - }, []); + if(enrollStatus && enrollStatus.upload_status){ + enrollStatus.attachments.map(item=>{ + item.uid = 'rc-upload'+item.id; + item.name = item.title; + item.status = "done"; + }); + + setFiles(enrollStatus.attachments); + } + }, [enrollStatus]); function handleChange(info) { - if (info.file.status === 'uploading' || info.file.status === 'done' || info.file.status === 'removed') { + if (info.file.status === 'uploading' || info.file.status == "done" || info.file.status === 'removed') { setLoading(true); - let fileList = info.fileList; - setFiles(appendFileSizeToUploadFileAll(fileList)); - if (info.file.response) { - for (let i = 0; i < fileList.length; i++) { - if (fileList[i].response && !fileList[i].response.data) { - fileList.splice(i, 1); - } - } - if (!info.file.response.data) { - info.file.response && showNotification(info.file.response.message) - } - } + setFiles(appendFileSizeToUploadFileAll(info.fileList).slice(-1)) } - if(info.file.status == "done"){ + if(info.file.status == "done" || info.file.status === 'removed'){ setLoading(false); } } // 支持文件下载 function download(file){ - const fileId = file.response.data.id; - window.open(`${httpUrl}/busiAttachments/download/${fileId}`); + const fileId = file.id || file.response.id; + window.open(`${current_main_site_url}/api/attachments/${fileId}`); } // 进行文件大小检查 @@ -65,18 +59,25 @@ function Introduce({ form, showNotification, match, history }) { // 作品提交 function referProduction(){ if(files && files.length === 1){ - uploadCompetition({"attachment_ids":Array.from(files[0].response.data.id)}).then(response=>{ - console.log(response); + const params = { + "attachment_ids": [files[0].response.id] + } + uploadCompetition(params).then(response=>{ + if(response && response.status === 200){ + message.success('提交作品成功'); + }else{ + message.error(response.data.message); + } }) } } - return (
    -
    上传小于等于256m的作品压缩包(仅限上传一个压缩包,格式如下: .zip, .rar, .tar)
    + + {enrollStatus && enrollStatus.upload_status &&
    您已上传作品压缩包,再次上传将会覆盖您上一次的提交。
    } +
    上传单个作品压缩包(仅限上传一个压缩包)
    diff --git a/src/military/qz2022/refer/index.scss b/src/military/qz2022/refer/index.scss index 4e4b39161..b413e0855 100644 --- a/src/military/qz2022/refer/index.scss +++ b/src/military/qz2022/refer/index.scss @@ -15,6 +15,13 @@ .refer_tip{ color:#595959; font-size:15px; + &.cover{ + color: red; + margin-bottom: -20px; + } + &.cover .icon-erciqueren_icon{ + color: #FA2D2D; + } } .refer_bor{ width: 40vw; @@ -31,6 +38,9 @@ right: -55px; .anticon{padding-right: 10px;} } + & a:link{ + color: #2e5bfe; + } } .ant-upload-list-item:hover .ant-upload-list-item-info{background: none;} } \ No newline at end of file