diff --git a/src/forge/users/Team.jsx b/src/forge/users/Team.jsx index 788f17f8..6225998b 100644 --- a/src/forge/users/Team.jsx +++ b/src/forge/users/Team.jsx @@ -59,7 +59,7 @@ function Team(props){ { current_user && current_user.login === username && // {props.history.push('/organize/new')}}>新建组织 - 新建组织 + 新建组织 } 排序 diff --git a/src/military/task/api.js b/src/military/task/api.js index 60d8fbc5..2eddd60e 100644 --- a/src/military/task/api.js +++ b/src/military/task/api.js @@ -723,4 +723,13 @@ export function checkVerificationCode(data) { method: 'post', data: data, }); +} + +// 更新置顶顺序 +export function changePinnedTaskSort(data){ + return fetch({ + url: `/api/tasks/backend/admin/changePinnedTaskSort`, + method: 'post', + data + }); } \ No newline at end of file diff --git a/src/military/task/taskAdmin/exportTable.jsx b/src/military/task/taskAdmin/exportTable.jsx index f5bd9e8b..9f50e1a1 100644 --- a/src/military/task/taskAdmin/exportTable.jsx +++ b/src/military/task/taskAdmin/exportTable.jsx @@ -66,7 +66,7 @@ export default ({downloading,setDownloading}) => { }, { title: '赏金分配方式', - dataIndex: 'bounty', + dataIndex: 'task_mode_id', width:130, render:(text) => ( text||'--' @@ -100,8 +100,8 @@ export default ({downloading,setDownloading}) => { title: '身份证/信用代码', dataIndex: 'card', width:200, - render:(text) => ( - text||'--' + render:(text,record) => ( + text||record.credit_code||'--' ) }, { diff --git a/src/military/task/taskAdmin/index.jsx b/src/military/task/taskAdmin/index.jsx index 7b71e985..5ef8137a 100644 --- a/src/military/task/taskAdmin/index.jsx +++ b/src/military/task/taskAdmin/index.jsx @@ -1,11 +1,11 @@ import React, { useCallback, useEffect, useState, useMemo } from 'react'; import classNames from 'classnames'; -import { Input, Select, Button, Form, DatePicker, Modal, message, Popover } from 'antd'; +import { Input, Select, Button, Form, DatePicker, Modal, message, Popover, InputNumber } from 'antd'; import { Link } from 'react-router-dom'; import moment from 'moment'; import { paperCheckStatusArr, publishModeArr, taskStatusAllArr, showUserModeArr, main_web_site_url } from '../static'; -import { getTaskAdminList, changeShowUserMode, deleteTask, recommendTask, addExpertReview, publishExpertsAndRules,delayTask ,resetTask} from '../api'; +import { getTaskAdminList, changeShowUserMode, deleteTask, recommendTask, addExpertReview, publishExpertsAndRules, delayTask, resetTask, changePinnedTaskSort } from '../api'; import '../index.scss'; import './index.scss'; import { getRules, selectExpertList } from 'src/military/expert/api'; @@ -27,7 +27,7 @@ for (const item of paperCheckStatusArr) { // 管理端 创客任务列表 export default Form.create()(({ form, showNotification, match, history, state }) => { const { getFieldDecorator, setFieldsValue, getFieldsValue, validateFields } = form; - const { hash} = history && history.location; + const { hash } = history && history.location; const [reload, setReload] = useState(); const [loading, setLoading] = useState(false); const [statusString, setStatusString] = useState(''); @@ -37,15 +37,15 @@ export default Form.create()(({ form, showNotification, match, history, state }) const [recommend, setRecommend] = useState(''); const [sort, setSort] = useState('Desc'); - const [order, setOrder] = useState('createdAt'); + const [order, setOrder] = useState('default'); const [searchObj, setSearchObj] = useState({}); const [curPage, setCurPage] = useState(hashDate(hash) || 1); const [total, setTotal] = useState(0); const [taskList, setTaskList] = useState([]); const [expertReview, setExpertReview] = useState(''); - const [downloading,setDownloading] = useState(false); + const [downloading, setDownloading] = useState(false); - const [restartVisible,setRestartVisible]= useState(false); //重启任务modal + const [restartVisible, setRestartVisible] = useState(false); //重启任务modal //查看评审规则、查看选取专家、发布评审任务 const [lookRules, setLookRules] = useState(false); @@ -58,10 +58,11 @@ export default Form.create()(({ form, showNotification, match, history, state }) const [reviewTaskId, setReviewTaskId] = useState(undefined); const [visible, setVisible] = useState(false); //延期任务modal const [checkedItem, setCheckedItem] = useState(''); + const [orderVisible, setOrderVisible] = useState(false); - useEffect(()=>{ + useEffect(() => { setCurPage(hashDate(hash) || 1); - },[hash]) + }, [hash]) useEffect(() => { const params = { @@ -71,16 +72,16 @@ export default Form.create()(({ form, showNotification, match, history, state }) showUserMode: showUserMode.length > 1 ? '' : showUserMode, curPage, pageSize: 10, - orderBy: order + sort, + orderBy: order === 'default' ? '' : order + sort, isDelete, recommend, - expertReview: expertReview==='-1'?"":expertReview, + expertReview: expertReview === '-1' ? "" : expertReview, }; setLoading(true); getTaskAdminList(params).then(data => { if (data) { let taskIds = []; - for(const item of data.rows){ + for (const item of data.rows) { item.expertReview && (taskIds[taskIds.length] = item.id) } setReviewTaskId(taskIds.toString()); @@ -100,7 +101,7 @@ export default Form.create()(({ form, showNotification, match, history, state }) ), []); function hashDate(hash) { - return parseInt(hash.split("&")[0].substring(hash.split("&")[0].indexOf("=")+1)); + return parseInt(hash.split("&")[0].substring(hash.split("&")[0].indexOf("=") + 1)); } function onSearch() { let values = getFieldsValue(['nameInput', 'endTime', 'startTime', 'enterpriseNameInput']); @@ -124,7 +125,7 @@ export default Form.create()(({ form, showNotification, match, history, state }) expertReviewStatus: '-1', showStatus: '0', isRecommend: 'all', - sortBy: 'createdAt' + sortBy: 'default' }); setStatusString('0,1,2,3,4,5,6,7,8,9'); setShowUserMode('0,1,2'); @@ -132,35 +133,36 @@ export default Form.create()(({ form, showNotification, match, history, state }) setExpertReview('-1'); setIsDelete('0'); setRecommend(''); - setOrder("createdAt"); + setOrder("default"); setSearchObj({}); } - function delayClick(item,restart) { + // 延期任务 + function delayClick(item, restart) { setCheckedItem(item); - if(restart){ + if (restart) { setVisible(true); - }else{ + } else { setRestartVisible(true); } } + // 主列表 const columns = useMemo(() => { return [ { title: '任务编号', dataIndex: 'number', - width: "26%" }, { title: '任务名称', dataIndex: 'name', width: "10%", render: (text, record) => ( -

任务名称:{text}

-

截稿时间:{record.collectingEndTime && record.collectingEndTime.replaceAll('-','/').substring(0,16) || '--'}

+

截稿时间:{record.collectingEndTime && record.collectingEndTime.replaceAll('-', '/').substring(0, 16) || '--'}

稿件数:{record.papersCount || '--'}

}> @@ -177,7 +179,7 @@ export default Form.create()(({ form, showNotification, match, history, state }) dataIndex: 'publishedAt', width: "8%", render: (text, record) => { - text = text && text.replaceAll('-','/').substring(0,16); + text = text && text.replaceAll('-', '/').substring(0, 16); return text || '--' } }, @@ -209,12 +211,17 @@ export default Form.create()(({ form, showNotification, match, history, state }) { showUserModeArr.map(item => { // 若创客任务在公示期及以后阶段,则不显示“自动公示”选项 - return + return }) } } }, + { + title: '排序', + key: 'orderNum', + dataIndex: 'orderNum' + }, { title: '操作', key: 'action', @@ -222,28 +229,17 @@ export default Form.create()(({ form, showNotification, match, history, state }) align: 'center', render: (text, record) => { const disabled = record.assignRuleAndExperts || !(record.status == 1 || record.status == 3); - return( - - {[3,4,6,7].includes(record.status)&&} - {record.status==8&& record.exceptClosedBoolean&&} - - - - {/* { - isDelete == '0' ? - : - } - - { - !record.recommend && [3, 4, 5, 6, 7, 8].includes(record.status) && - } - - { - record.recommend && - } */} - {/* 查看 */} - - )}, + return ( + + {[3, 4, 6, 7].includes(record.status) && } + {record.status == 8 && record.exceptClosedBoolean && } + + + + + + ) + }, }, ] }, [isDelete, curPage]); @@ -293,13 +289,18 @@ export default Form.create()(({ form, showNotification, match, history, state }) title: '专家评估', dataIndex: 'expertScore', align: 'center', - render:(text,record)=>{ + render: (text, record) => { return record.expertScore || '--'; } } ]; }, []); + // 打开排序弹框后执行赋值语句 + useEffect(()=>{ + orderVisible&&setFieldsValue({ orderNum: checkedItem.orderNum }) + },[orderVisible]) + // function resetTaskModal function recommendItem(id, recommend) { @@ -337,7 +338,7 @@ export default Form.create()(({ form, showNotification, match, history, state }) } //监听lookRules,lookExperts,pulicReview的变化,弹框 - useEffect(()=>{ + useEffect(() => { //评审规则 lookRules && rules && Modal.info({ className: 'publishReview', @@ -347,7 +348,7 @@ export default Form.create()(({ form, showNotification, match, history, state })
{rules && rules.rule}

评分标准

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

{item}

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

{item}

})}

评审时间

{rules.reviewData}
@@ -362,9 +363,9 @@ export default Form.create()(({ form, showNotification, match, history, state }) title: "已选取评审专家", content: , + dataSource={selectedExperts} + columns={columnsExperts} + scroll={{ y: 395 }} />, }); lookExperts && setLookExperts(false); @@ -383,7 +384,7 @@ export default Form.create()(({ form, showNotification, match, history, state })
{rules && rules.rule}

评分标准

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

{item}

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

{item}

})}

评审时间

{rules.reviewData}
@@ -391,37 +392,37 @@ export default Form.create()(({ form, showNotification, match, history, state }) + scroll={{ y: 230 }} /> , okText: '确定', cancelText: '取消', onOk() { - publishExpertsAndRules(publicTaskId,1).then(response=>{ - if(response && response.message==="发布成功"){ + publishExpertsAndRules(publicTaskId, 1).then(response => { + if (response && response.message === "发布成功") { setReload(Math.random()); } }) }, }); pulicReview && setPublicReview(false); - },[lookRules,lookExperts,pulicReview]) + }, [lookRules, lookExperts, pulicReview]) //发布评审任务 - function publishTaskReview(record){ - if(!record.ruleEditedCount || !record.expertSelectedCount){ + function publishTaskReview(record) { + if (!record.ruleEditedCount || !record.expertSelectedCount) { message.error("请先编辑评审规则以及选取评选专家再发布此任务"); - }else{ - getRules({containerId: record.id, containerType: 1, statusString: 3}).then(response=>{ - if(response && response.message === "success"){ + } else { + getRules({ containerId: record.id, containerType: 1, statusString: 3 }).then(response => { + if (response && response.message === "success") { setRules(response.data); } }) - selectExpertList({containerId: record.id, containerType: 1, curPage:curPage, pageSize: 10000, curPage: 1,}).then(response=>{ - if(response && response.message === "success" && Array.isArray(response.data.rows)){ + 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.reviewAreas = `${item.reviewAreaOne} ${item.reviewAreaTwo ? `、${item.reviewAreaTwo}` : ''} ${item.reviewAreaThree ? `、${item.reviewAreaThree}` : ''}`; item.index = (index++) + (curPage > 1 ? (curPage - 1) * 10 : 0); } setPublicTaskId(record.id); @@ -433,9 +434,9 @@ export default Form.create()(({ form, showNotification, match, history, state }) } //已发布任务 查看评审规则 - function viewRules(record){ - getRules({containerId: record.id, containerType: 1, statusString: '-1,1,2'}).then(response=>{ - if(response && response.message === "success"){ + function viewRules(record) { + getRules({ containerId: record.id, containerType: 1, statusString: '-1,1,2' }).then(response => { + if (response && response.message === "success") { setRules(response.data); setLookRules(true); } @@ -443,12 +444,12 @@ export default Form.create()(({ form, showNotification, match, history, state }) } //已发布任务 查看已选专家 - function viewExperts(record){ - selectExpertList({containerId: record.id, containerType: 1, curPage:curPage, pageSize: 10000, curPage: 1,}).then(response=>{ - if(response && response.message === "success" && Array.isArray(response.data.rows)){ + function viewExperts(record) { + 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.reviewAreas = `${item.reviewAreaOne} ${item.reviewAreaTwo ? `、${item.reviewAreaTwo}` : ''} ${item.reviewAreaThree ? `、${item.reviewAreaThree}` : ''}`; item.index = (index++) + (curPage > 1 ? (curPage - 1) * 10 : 0); } setSelectedExperts(response.data.rows); @@ -469,7 +470,7 @@ export default Form.create()(({ form, showNotification, match, history, state }) } function changeExpertReviewStatus(expertReviewStatus, taskId) { - addExpertReview(taskId,expertReviewStatus).then(res => { + addExpertReview(taskId, expertReviewStatus).then(res => { if (res && res.message === 'success') { showNotification('操作成功!'); setReload(Math.random()); @@ -479,9 +480,9 @@ export default Form.create()(({ form, showNotification, match, history, state }) }) } - function setCurPage1(page){ + function setCurPage1(page) { setCurPage(page); - window.location.href=`/managements/task/taskAdmin#page=${page}`; + window.location.href = `/managements/task/taskAdmin#page=${page}`; } // 改变排序字段 @@ -510,21 +511,17 @@ export default Form.create()(({ form, showNotification, match, history, state }) setCurPage1(1); }); - const ExpertDetail = (record)=>{ + const ExpertDetail = (record) => { const unDisabled = record.expertReview && (record.status === 1 || record.status === 3); return
专家评审信息:
-
评审规则 {record.assignRuleAndExperts ? : unDisabled ? : }
-
专家选取 {record.assignRuleAndExperts ? : unDisabled ? : }
-
评审任务 {record.assignRuleAndExperts ? : unDisabled ? : }
-
评审结果 {record.assignRuleAndExperts ? :}
+
评审规则 {record.assignRuleAndExperts ? : unDisabled ? : }
+
专家选取 {record.assignRuleAndExperts ? : unDisabled ? : }
+
评审任务 {record.assignRuleAndExperts ? : unDisabled ? : }
+
评审结果 {record.assignRuleAndExperts ? : }
} - function downloadFile() { - window.open(main_web_site_url + '/admin/tasks.xlsx'); - } - function disabledDate(current) { return current && current < moment(checkedItem.eachPhaseEndTime).endOf('day'); } @@ -534,7 +531,7 @@ export default Form.create()(({ form, showNotification, match, history, state }) } function delayTime() { - validateFields(['delayedTo'],(err, values) => { + validateFields(['delayedTo'], (err, values) => { if (!err) { delayTask({ taskId: checkedItem.id, @@ -552,13 +549,13 @@ export default Form.create()(({ form, showNotification, match, history, state }) }); } - function restartTask(){ - validateFields(["restartEndTime"],(err, values) => { + function restartTask() { + validateFields(["restartEndTime"], (err, values) => { if (!err) { resetTask({ - taskId: checkedItem.id, - endTime: moment(values.restartEndTime).format(format) - }).then(res => { + taskId: checkedItem.id, + endTime: moment(values.restartEndTime).format(format) + }).then(res => { if (res && res.message === 'success') { showNotification('操作成功'); setReload(Math.random()); @@ -569,6 +566,26 @@ export default Form.create()(({ form, showNotification, match, history, state }) }); } + function changeOrderNum() { + validateFields(["orderNum"], (err, values) => { + if (!err) { + changePinnedTaskSort([{ + id: checkedItem.id, + orderNum: values.orderNum + }] + ).then(res => { + if (res && res.data) { + showNotification('操作成功'); + setOrderVisible(false); + setReload(Math.random()) + } else { + showNotification(res && res.message || '操作失败') + } + }) + } + }); + } + return (
@@ -594,27 +611,27 @@ export default Form.create()(({ form, showNotification, match, history, state })
- {helper( - "发布时间:", - "startTime", - [], - - )} + {helper( + "发布时间:", + "startTime", + [], + + )} - {helper( - "", - "endTime", - [], - - )} + {helper( + "", + "endTime", + [], + + )}
{helper( @@ -624,7 +641,7 @@ export default Form.create()(({ form, showNotification, match, history, state }) {setPublishMode(value);setCurPage1(1);}} + onChange={(value) => { setPublishMode(value); setCurPage1(1); }} > @@ -679,7 +696,7 @@ export default Form.create()(({ form, showNotification, match, history, state }) , '-1' )} - {/*
*/} - {helper( - "显示状态", - "showStatus", - [], - , - '0' - )} - {helper( - "是否推荐", - "isRecommend", - [], - , - 'all' - )} - {helper( - "排序", - "sortBy", - [], - , - 'createdAt' - )} -
- {/* 导出 downloadFile*/} - - - -
- { changeSort('Desc') }}> - - - { changeSort('Asc') }}> - - - {/*
*/} + {helper( + "显示状态", + "showStatus", + [], + , + '0' + )} + {helper( + "是否推荐", + "isRecommend", + [], + , + 'all' + )} + {helper( + "排序", + "sortBy", + [], + , + 'default' + )} +
+ + + +
+ { changeSort('Desc') }}> + + + { changeSort('Asc') }}> + +
@@ -754,58 +769,76 @@ export default Form.create()(({ form, showNotification, match, history, state }) columns={columns} total={total} current={curPage} - setCurPage={(page)=>{setCurPage1(page)}} + setCurPage={(page) => { setCurPage1(page) }} className="expertReviewTable" expandedRowRender={ExpertDetail} expandedRowKeys={reviewTaskId} />
- + { setVisible(false) }} - className="time-edit-modal" - destroyOnClose - > - {helper( - "", - "delayedTo", - [{ required: true, message: "请选择日期" }], - , - null - )} - + title="请输入延期截止的具体时间" + visible={visible} + onOk={delayTime} + onCancel={() => { setVisible(false) }} + className="time-edit-modal" + destroyOnClose + > + {helper( + "", + "delayedTo", + [{ required: true, message: "请选择日期" }], + , + null + )} + - { setRestartVisible(false) }} - // className="time-edit-modal" - destroyOnClose - > -
当前任务将恢复至{statusArr[checkedItem.currentStatus]},请选择该阶段的截止日期:
- {helper( - "", - "restartEndTime", - [{ required: true, message: "请选择时间" }], - , - moment(moment(new Date()).format(formatDelay)+' 23:59:59') - )} -
+ { setRestartVisible(false) }} + // className="time-edit-modal" + destroyOnClose + > +
当前任务将恢复至{statusArr[checkedItem.currentStatus]},请选择该阶段的截止日期:
+ {helper( + "", + "restartEndTime", + [{ required: true, message: "请选择时间" }], + , + moment(moment(new Date()).format(formatDelay) + ' 23:59:59') + )} +
- + { setOrderVisible(false) }} + className="time-edit-modal" + destroyOnClose + > + {helper( + "", + "orderNum", + [{ required: true, message: "请输入正整数" }], + + )} + + + + {/* 导出创客任务的组件 */} + ) diff --git a/src/modules/loginRegister/Login.jsx b/src/modules/loginRegister/Login.jsx index 8540860c..5a4a58eb 100644 --- a/src/modules/loginRegister/Login.jsx +++ b/src/modules/loginRegister/Login.jsx @@ -2,6 +2,7 @@ import React, { useEffect, useState } from "react"; import { Form, Input, Button, Checkbox } from "antd"; import { Link } from "react-router-dom"; import axios from 'axios'; +import { Base64 } from 'js-base64'; // import educoderLogo from '../login/educoder.png'; import openKylin from '../login/openKylin.svg'; import gitLink from '../login/gitLink.png'; @@ -32,7 +33,7 @@ function Login(props) { if (!err) { axios.post(`/accounts/login.json`, { login: values.username, - password: values.password, + password: Base64.encode(values.password), autologin: values.remember ? 1 : 0, }).then((response) => { if (!response.data.login) { diff --git a/src/modules/loginRegister/LoginRegisterPage.scss b/src/modules/loginRegister/LoginRegisterPage.scss index f75bf257..23f75ee3 100644 --- a/src/modules/loginRegister/LoginRegisterPage.scss +++ b/src/modules/loginRegister/LoginRegisterPage.scss @@ -149,11 +149,17 @@ color: #808080; font-size: 0.9em; } - .message, .ant-form-explain{ + .ant-form-explain{ position: absolute; bottom: -1.45em; color: #D40000; font-size: 13px; + } + .message{ + position: absolute; + // bottom: -1.45em; + color: #D40000; + font-size: 13px; } .message.active{ margin-bottom: -30px !important;