diff --git a/public/css/iconfont.css b/public/css/iconfont.css index 4253d337..2f4d3b81 100644 --- a/public/css/iconfont.css +++ b/public/css/iconfont.css @@ -1,8 +1,8 @@ @font-face { font-family: "iconfont"; /* Project id 2340181 */ - src: url('iconfont.woff2?t=1639537334021') format('woff2'), - url('iconfont.woff?t=1639537334021') format('woff'), - url('iconfont.ttf?t=1639537334021') format('truetype'); + src: url('iconfont.woff2?t=1641524827252') format('woff2'), + url('iconfont.woff?t=1641524827252') format('woff'), + url('iconfont.ttf?t=1641524827252') format('truetype'); } .iconfont { @@ -13,6 +13,22 @@ -moz-osx-font-smoothing: grayscale; } +.icon-ioon:before { + content: "\e90e"; +} + +.icon-shanchu_tc_icon1:before { + content: "\e90c"; +} + +.icon-zhuanjiaicon:before { + content: "\e90d"; +} + +.icon-shengming:before { + content: "\e90b"; +} + .icon-chenggong1:before { content: "\e907"; } diff --git a/public/css/iconfont.js b/public/css/iconfont.js index de14d5fa..0fc1191c 100644 --- a/public/css/iconfont.js +++ b/public/css/iconfont.js @@ -1 +1 @@ -!function(a){var c,l,h,i,o,z='',t=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss"),p=function(a,c){c.parentNode.insertBefore(a,c)};if(t&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}function m(){o||(o=!0,h())}function v(){try{i.documentElement.doScroll("left")}catch(a){return void setTimeout(v,50)}m()}c=function(){var a,c;(c=document.createElement("div")).innerHTML=z,z=null,(a=c.getElementsByTagName("svg")[0])&&(a.setAttribute("aria-hidden","true"),a.style.position="absolute",a.style.width=0,a.style.height=0,a.style.overflow="hidden",c=a,(a=document.body).firstChild?p(c,a.firstChild):a.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(l=function(){document.removeEventListener("DOMContentLoaded",l,!1),c()},document.addEventListener("DOMContentLoaded",l,!1)):document.attachEvent&&(h=c,i=a.document,o=!1,v(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,m())})}(window); +!function(a){var c,l,h,i,o,z='',t=(t=document.getElementsByTagName("script"))[t.length-1].getAttribute("data-injectcss"),p=function(a,c){c.parentNode.insertBefore(a,c)};if(t&&!a.__iconfont__svg__cssinject__){a.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(a){console&&console.log(a)}}function v(){o||(o=!0,h())}function m(){try{i.documentElement.doScroll("left")}catch(a){return void setTimeout(m,50)}v()}c=function(){var a,c;(c=document.createElement("div")).innerHTML=z,z=null,(a=c.getElementsByTagName("svg")[0])&&(a.setAttribute("aria-hidden","true"),a.style.position="absolute",a.style.width=0,a.style.height=0,a.style.overflow="hidden",c=a,(a=document.body).firstChild?p(c,a.firstChild):a.appendChild(c))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(l=function(){document.removeEventListener("DOMContentLoaded",l,!1),c()},document.addEventListener("DOMContentLoaded",l,!1)):document.attachEvent&&(h=c,i=a.document,o=!1,m(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,v())})}(window); \ No newline at end of file diff --git a/public/css/iconfont.json b/public/css/iconfont.json index f7ba00fe..dfda7758 100644 --- a/public/css/iconfont.json +++ b/public/css/iconfont.json @@ -5,6 +5,34 @@ "css_prefix_text": "icon-", "description": "", "glyphs": [ + { + "icon_id": "27041503", + "name": "ioon", + "font_class": "ioon", + "unicode": "e90e", + "unicode_decimal": 59662 + }, + { + "icon_id": "26470602", + "name": "shanchu_tc_icon", + "font_class": "shanchu_tc_icon1", + "unicode": "e90c", + "unicode_decimal": 59660 + }, + { + "icon_id": "26470603", + "name": "专家icon", + "font_class": "zhuanjiaicon", + "unicode": "e90d", + "unicode_decimal": 59661 + }, + { + "icon_id": "12505154", + "name": "声明", + "font_class": "shengming", + "unicode": "e90b", + "unicode_decimal": 59659 + }, { "icon_id": "26470597", "name": "成功", diff --git a/public/css/iconfont.ttf b/public/css/iconfont.ttf index c95a3b43..851a48ab 100644 Binary files a/public/css/iconfont.ttf and b/public/css/iconfont.ttf differ diff --git a/public/css/iconfont.woff b/public/css/iconfont.woff index 30def064..00f3b702 100644 Binary files a/public/css/iconfont.woff and b/public/css/iconfont.woff differ diff --git a/public/css/iconfont.woff2 b/public/css/iconfont.woff2 index 34960ae9..eb68a204 100644 Binary files a/public/css/iconfont.woff2 and b/public/css/iconfont.woff2 differ diff --git a/src/military/expert.js b/src/military/expert.js index a00e6a5f..e9611dc4 100644 --- a/src/military/expert.js +++ b/src/military/expert.js @@ -43,7 +43,6 @@ const Expert = (propsTransmit) => { }, []); let propsF = { ...propsTransmit }; propsF.current_user = currentUser; - console.log(currentUser); return (
diff --git a/src/military/expert/api.js b/src/military/expert/api.js index f5e64b71..cf36e643 100644 --- a/src/military/expert/api.js +++ b/src/military/expert/api.js @@ -109,14 +109,24 @@ export function updateScoringDetails(data){ }); } -//编辑评审规则 //获取创客任务评审规则 -export function getRules(params){ - return fetch({ +export async function getRules(params){ + let response = await fetch({ url: `/api/taskRuleCriteria/getRuleAndCriteria`, method: 'get', params - }) + }); + if(response && response.message === "success"){ + let criterias = []; + response.data.criteriaOne && (criterias[criterias.length] = (criterias.length+1)+"、"+response.data.criteriaOne); + response.data.criteriaTwo && (criterias[criterias.length] = (criterias.length+1)+"、"+response.data.criteriaTwo); + response.data.criteriaThree && (criterias[criterias.length] = (criterias.length+1)+"、"+response.data.criteriaThree); + response.data.criteriaFour && (criterias[criterias.length] = (criterias.length+1)+"、"+response.data.criteriaFour); + response.data.criteriaFive && (criterias[criterias.length] = (criterias.length+1)+"、"+response.data.criteriaFive); + response.data.criterias = criterias; + response.data.reviewData = response.data.reviewStartOn.substring(0,response.data.reviewStartOn.length-3) + " ~ " + response.data.reviewEndOn.substring(0,response.data.reviewEndOn.length-3) + } + return response; } //编辑评审规则(第一次) diff --git a/src/military/expert/reviewResult/index.jsx b/src/military/expert/reviewResult/index.jsx index 9e4c6c06..268aa31c 100644 --- a/src/military/expert/reviewResult/index.jsx +++ b/src/military/expert/reviewResult/index.jsx @@ -1,10 +1,23 @@ import React from "react"; +import Link from "react-router-dom/Link"; import './index.scss'; +import '../index.scss'; +import paginationTable from "src/military/components/paginationTable"; -function ReviewResult() { +function ReviewResult({ location, history }) { + const { taskRecord } = location && location.state; return (
- aaa +
+
+ 评审结果 + +
+

任务名称{taskRecord.name}

+

任务链接{`/task/taskDetail/${taskRecord.id}`}

+
+

应征者排名

+
) } export default ReviewResult; \ No newline at end of file diff --git a/src/military/expert/reviewResult/index.scss b/src/military/expert/reviewResult/index.scss index e69de29b..3d29f465 100644 --- a/src/military/expert/reviewResult/index.scss +++ b/src/military/expert/reviewResult/index.scss @@ -0,0 +1,14 @@ +.expert_review_system.centerbox{ + background: white; + font-family: 'PingFangSC-Semibold'; + padding: 0 1.5em; + .font-w{ + font-weight: bold; + } + .df{ + display: flex; + justify-content: space-between; + align-items: center; + } + .mt10.pb20{border-bottom: 1px solid #eeeeee;} +} diff --git a/src/military/expert/reviewRules/index.jsx b/src/military/expert/reviewRules/index.jsx index fb859b0b..8d514808 100644 --- a/src/military/expert/reviewRules/index.jsx +++ b/src/military/expert/reviewRules/index.jsx @@ -15,6 +15,15 @@ function ReviewRules({ location, form, history }) { //是否有初始值 const [ initValue, setInitValue] = useState(false); + const disabledDate = (current) =>{ + if(taskRecord.status === 1){ + return current && current < moment(taskRecord.createdAt).endOf('day'); + }else if(taskRecord.status === 3){ + const endDate = new Date((new Date(taskRecord.collectingEndTime)/1000 + 86400*taskRecord.collectingDays)*1000); + return current && current < moment(taskRecord.collectingEndTime).endOf('day') || current > moment(endDate).endOf('day'); + } + } + useEffect(()=>{ //获取评审规则 const params = { @@ -75,7 +84,7 @@ function ReviewRules({ location, form, history }) {
任务信息 - +

任务名称{taskRecord.name}

任务链接{`/task/taskDetail/${taskRecord.id}`}

@@ -149,7 +158,7 @@ function ReviewRules({ location, form, history }) { showTime={{ format: 'HH:mm' }} format="YYYY-MM-DD HH:mm" placeholder={['开始时间', '结束时间']} - + disabledDate={disabledDate} />, )} diff --git a/src/military/expert/reviewRules/index.scss b/src/military/expert/reviewRules/index.scss index 6e45f9df..2ab2d53d 100644 --- a/src/military/expert/reviewRules/index.scss +++ b/src/military/expert/reviewRules/index.scss @@ -37,6 +37,7 @@ .but41_fill, .but41_border, .butE3_border{ width: 6.5em; } + .goback_but{width: 9.5em;} .but41_border{padding: 0;} .rules_bar{ margin: 25px -2em; diff --git a/src/military/expert/selectExpert/index.jsx b/src/military/expert/selectExpert/index.jsx index bfb01dc3..3e158b4b 100644 --- a/src/military/expert/selectExpert/index.jsx +++ b/src/military/expert/selectExpert/index.jsx @@ -1,5 +1,5 @@ import React, { useState, useEffect, useMemo } from "react"; -import { Tabs, Input, Select, Button, Modal, Form, message } from 'antd'; +import { Tabs, Input, Select, Button, Modal, Form, message, Popconfirm } from 'antd'; import { professionalType, reviewArea } from '../static.js'; import { assignExperts, deleteExperts, expertList, selectExpertList } from "../api.js"; import Paginationtable from "../../components/paginationTable"; @@ -97,7 +97,7 @@ function SelectExpert(props) { render: (text, record) => { return {activeKey == "1" && (record.isExpertTask ? 已添加 : {SelectExperts([record.id])}}>添加)} - {activeKey == "0" && } + {activeKey == "0" && { deleteExpert(record.taskExpertId, record.id)}} okText="是" cancelText="否">} } } @@ -215,6 +215,8 @@ function SelectExpert(props) { setRandomErrorMessage('请输入随机抽取的专家数量!'); }else if(isNaN(randomCount)){ setRandomErrorMessage('请输入数字!'); + }else if(randomCount.indexOf('.')!==-1){ + setRandomErrorMessage('请输入整数!'); }else{ let params = { searchInput, @@ -275,10 +277,12 @@ function SelectExpert(props) { }) } - return (
-

评审专家选取

+
+

评审专家选取

+ +
{setActiveKey(activeKey);setSelectedRowKeys([]);setCurPage(1);}}>
@@ -327,7 +331,7 @@ function SelectExpert(props) {

添加评审专家

- + {allSelectedExpertsId && allSelectedExpertsId.size === total ? : } \ No newline at end of file diff --git a/src/military/task/taskAdmin/image/right.svg b/src/military/task/taskAdmin/image/right.svg new file mode 100644 index 00000000..c7bbb9bb --- /dev/null +++ b/src/military/task/taskAdmin/image/right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/military/task/taskAdmin/index.jsx b/src/military/task/taskAdmin/index.jsx index c7ea1fe3..00847e20 100644 --- a/src/military/task/taskAdmin/index.jsx +++ b/src/military/task/taskAdmin/index.jsx @@ -126,7 +126,7 @@ export default Form.create()(({ form, showNotification, match, history, state }) showArrow defaultValue={text?1:-1} onChange={(key) => { changeExpertReviewStatus(key, record.id) }} - disabled={!(record.status < 4) || record.assignRuleAndExperts} + disabled={!(record.status < 4 && record.status !== 2) || record.assignRuleAndExperts} > { expertReviewArr.map(item => { @@ -223,28 +223,28 @@ export default Form.create()(({ form, showNotification, match, history, state }) title: '评审规则', dataIndex: 'ruleEditedCount', render: (text, record) => { - return record.expertReview && (record.status < 4) && !record.assignRuleAndExperts ? 编辑:'' + return record.assignRuleAndExperts ? : record.expertReview && (record.status === 1 || record.status === 3) ? 编辑 : 编辑 } }, { title: '专家选取', dataIndex: 'expertSelectedCount', render: (text, record) => { - return record.expertReview && (record.status < 4) && !record.assignRuleAndExperts ? 选择:'' + return record.assignRuleAndExperts ? : record.expertReview && (record.status === 1 || record.status === 3) ? 选择 : 编辑 } }, { title: '评审任务', dataIndex: 'expertReview1', render: (text, record) => { - return record.expertReview && (record.status < 4) ? !record.assignRuleAndExperts? : '已发布' :'' + return record.expertReview && record.status < 4 && record.status !== 2 ? !record.assignRuleAndExperts ? : 已发布 :发布 } }, { title: '评审结果', dataIndex: 'expertReview2', render: (text, record) => { - return record.assignRuleAndExperts && 查看 + return record.assignRuleAndExperts ? 查看:查看 } }, { @@ -357,6 +357,7 @@ export default Form.create()(({ form, showNotification, match, history, state }) }); } + //发布评审任务 function publishTaskReview(record){ if(!record.ruleEditedCount || !record.expertSelectedCount){ message.error("请先编辑评审规则以及选取评选专家再发布此任务"); @@ -365,13 +366,6 @@ export default Form.create()(({ form, showNotification, match, history, state }) let selectedExperts = undefined; getRules({containerId: record.id, containerType: 1, statusString: 3}).then(response=>{ if(response && response.message === "success"){ - let criterias = []; - response.data.criteriaOne && (criterias[criterias.length] = (criterias.length+1)+"、"+response.data.criteriaOne); - response.data.criteriaTwo && (criterias[criterias.length] = (criterias.length+1)+"、"+response.data.criteriaTwo); - response.data.criteriaThree && (criterias[criterias.length] = (criterias.length+1)+"、"+response.data.criteriaThree); - response.data.criteriaFour && (criterias[criterias.length] = (criterias.length+1)+"、"+response.data.criteriaFour); - response.data.criteriaFive && (criterias[criterias.length] = (criterias.length+1)+"、"+response.data.criteriaFive); - response.data.criterias = criterias; rules = response.data; } }) @@ -388,6 +382,47 @@ export default Form.create()(({ form, showNotification, match, history, state }) setTimeout(() => { Modal.confirm({ className: 'publishReview', + title: "评审规则", + content: + +
{rules && rules.rule}
+

评分标准

+
+ {rules.criterias.map(item=>{return

{item}

})} +
+

评审时间

+
{rules.reviewData}
+

已选取评审专家

+ +
+ , + okText: '确定', + cancelText: '取消', + onOk() { + publishExpertsAndRules(record.id).then(response=>{ + if(response && response.message==="发布成功"){ + setReload(Math.random()); + } + }) + }, + }); + }, 300); + } + } + + //已发布任务 查看评审规则 + function viewRules(record){ + let rules = undefined; + getRules({containerId: record.id, containerType: 1, statusString: '-1,1'}).then(response=>{ + if(response && response.message === "success"){ + rules = response.data; + } + }); + setTimeout(() => { + Modal.info({ + className: 'publishReview', title: "评审规则", content: @@ -397,25 +432,36 @@ export default Form.create()(({ form, showNotification, match, history, state }) {rules.criterias.map(item=>{return

{item}

})}

评审时间

-
{rules.reviewStartOn}~{rules.reviewEndOn}
-

已选取评审专家

- +
{rules.reviewData}
, - okText: '确定', - cancelText: '取消', - onOk() { - publishExpertsAndRules(record.id).then(response=>{ - if(response && response.message==="发布成功"){ - setReload(Math.random()); - } - }) - }, }); - }, 300); - } + }, 300); + } + + //已发布任务 查看已选专家 + function viewExperts(record){ + let selectedExperts = undefined; + selectExpertList({containerId: record.id, containerType: 1, curPage:curPage, pageSize: 10000, curPage: 1,}).then(response=>{ + if(response && response.message === "success" && Array.isArray(response.data.rows)){ + let index = 1; + for (const item of response.data.rows) { + item.reviewAreas = `${item.reviewAreaOne} ${item.reviewAreaTwo ? `、${item.reviewAreaTwo}`:''} ${item.reviewAreaThree ? `、${item.reviewAreaThree}`:''}`; + item.index = (index++) + (curPage > 1 ? (curPage - 1) * 10 : 0); + } + selectedExperts = response.data.rows + } + }); + setTimeout(() => { + Modal.info({ + className: 'publishReview', + title: "已选取评审专家", + content: + , + }); + }, 300); } function changeStatus(showUserMode, taskId) { diff --git a/src/military/task/taskAdmin/index.scss b/src/military/task/taskAdmin/index.scss index 6a72aa97..94b516fc 100644 --- a/src/military/task/taskAdmin/index.scss +++ b/src/military/task/taskAdmin/index.scss @@ -62,6 +62,10 @@ display: flex; justify-content: space-around; } + + // .ant-table-row-collapsed::after, .ant-table-row-expanded::after { + // content: url('./image/down.svg'); + // } } .inline-form { @@ -83,12 +87,17 @@ color: #29bd8b; } +.gary_span{ + color: rgba(176, 176, 176, 1); +} + // 发布评审任务弹框样式 .publishReview{ width: 1050px !important; .ant-modal-confirm-title{ border-bottom: 1px solid #eeeeee; padding-bottom: 10px; + font-weight: bold; } .ant-modal-confirm-body > .anticon{ display: none; @@ -102,12 +111,13 @@ color: rgba(51, 51, 51, 1); border-bottom: 1px solid #eeeeee; padding: 10px 0; + font-weight: bold; } &>div{ padding: 10px; } } - .ant-table-tbody > tr > td{ + .pagination-table .ant-table-tbody > tr > td{ padding: 1px 16px; } } diff --git a/src/military/task/taskDetail/index.jsx b/src/military/task/taskDetail/index.jsx index 0ae98091..7207aeaf 100644 --- a/src/military/task/taskDetail/index.jsx +++ b/src/military/task/taskDetail/index.jsx @@ -12,6 +12,7 @@ import { getTaskDetail, getTaskCategory, getTaskPaper, makePublic, addPaper, get import { taskModeIdArr, applyStatusArr, applyStatusAllArr, agreementContent, paperCheckTextArr } from '../static'; import { httpUrl } from '../fetch'; import './index.scss'; +import { getRules } from 'src/military/expert/api'; const { TextArea } = Input; @@ -52,6 +53,8 @@ export default Form.create()( const [relaodChildList, setRelaodChildList] = useState(0); const [visibleProofs, setVisibleProofs] = useState(false); + // 已发布评审任务 评审规则 + const [publishedReviewRules, setPublishedReviewRules] = useState(undefined); // 获取任务领域配置数据 useEffect(() => { @@ -73,6 +76,11 @@ export default Form.create()( history.push('/task'); } setDetailData(data || {}); + if(data && data.assignRuleAndExperts){ + getRules({ containerId: data.id, containerType: 1, statusString: '-1,1', }).then(response=>{ + response && setPublishedReviewRules(response.data || undefined); + }) + } }); }, [id, reload]); @@ -451,6 +459,14 @@ export default Form.create()(

应征者提交的稿件必须是设计作品,广告等无效交稿一律不采用!

+ {publishedReviewRules && +
评审规则:
+

{publishedReviewRules.rule}

+
评分标准:
+

{publishedReviewRules.criterias.map(item=>{return

{item}

})}

+
评审时间:
+

{publishedReviewRules.reviewData}

+
}
{!current_user.enterpriseCertification &&
@@ -469,7 +485,7 @@ export default Form.create()( {dataList.length > 0 && taskLimit && { window.open(`${httpUrl}/api/paper/papers/download/${id}`) }}>一键导出成果物 >>} {(!detailData.showUserStatus) && taskLimit && 应征者名单公示 >>} {/* [添加专家评审流程]按钮入口,仅管理员可见 */} - {taskLimit && !detailData.expertReview && 添加专家评审流程} + {taskLimit && !detailData.expertReview && detailData.status<4 && 添加专家评审流程}
- +
}