1
0
Go 4 лет назад
Родитель
Сommit
f948264a3a

+ 5 - 1
front/project/admin/routes/course/previewDetail/page.js

@@ -167,7 +167,11 @@ export default class extends Page {
             linkTo(`/course/preview/detail/${result.id}`);
           }
         }).catch((e) => {
-          if (e.result) form.setFields(formatFormError(data, e.result));
+          if (e.result) {
+            form.setFields(formatFormError(data, e.result));
+          } else {
+            asyncSMessage(e.message, 'error');
+          }
         });
       }
     });

+ 19 - 19
front/project/www/components/OtherModal/index.js

@@ -688,7 +688,7 @@ export class RestartConfirmModal extends Component {
 export class FeedbackErrorDataModal extends Component {
   constructor(props) {
     super(props);
-    this.state = { data: { position: ['', '', ''] } };
+    this.state = { data: { position: ['', '', ''], content: '', originContent: '' } };
   }
 
   componentWillReceiveProps(nextProps) {
@@ -703,7 +703,7 @@ export class FeedbackErrorDataModal extends Component {
     if (!data.content || !data.originContent) return;
     My.addFeedbackErrorData(data.dataId, data.title, data.position.join(','), data.originContent, data.content).then(
       () => {
-        this.setState({ data: { position: ['', '', ''] } });
+        this.setState({ data: { position: ['', '', ''], content: '', originContent: '' } });
         if (onConfirm) onConfirm();
       },
     );
@@ -711,7 +711,7 @@ export class FeedbackErrorDataModal extends Component {
 
   onCancel() {
     const { onCancel } = this.props;
-    this.setState({ data: { position: [] } });
+    this.setState({ data: { position: ['', '', ''], content: '', originContent: '' } });
     if (onCancel) onCancel();
   }
 
@@ -790,7 +790,7 @@ export class FeedbackErrorDataModal extends Component {
 export class AskCourseModal extends Component {
   constructor(props) {
     super(props);
-    this.state = { data: { position: [] } };
+    this.state = { data: { position: [], content: '', originContent: '' } };
   }
 
   componentWillReceiveProps(nextProps) {
@@ -804,14 +804,14 @@ export class AskCourseModal extends Component {
     const { data } = this.state;
     if (!data.position || !data.originContent || !data.content) return;
     My.addCourseAsk(course.id, courseNo.id, data.position.join(','), data.originContent, data.content).then(() => {
-      this.setState({ data: { position: [] } });
+      this.setState({ data: { position: [], content: '', originContent: '' } });
       if (onConfirm) onConfirm();
     });
   }
 
   onCancel() {
     const { onCancel } = this.props;
-    this.setState({ data: {} });
+    this.setState({ data: { position: [], content: '', originContent: '' } });
     if (onCancel) onCancel();
   }
 
@@ -873,7 +873,7 @@ export class AskCourseModal extends Component {
 export class CourseNoteModal extends Component {
   constructor(props) {
     super(props);
-    this.state = { data: {} };
+    this.state = { data: { content: '' } };
   }
 
   componentWillReceiveProps(nextProps) {
@@ -887,14 +887,14 @@ export class CourseNoteModal extends Component {
     const { data } = this.state;
     if (!data.content) return;
     My.updateCourseNote(course.id, data.courseNoId, data.content).then(() => {
-      this.setState({ data: {} });
+      this.setState({ data: { content: '' } });
       if (onConfirm) onConfirm();
     });
   }
 
   onCancel() {
     const { onCancel } = this.props;
-    this.setState({ data: {} });
+    this.setState({ data: { content: '' } });
     if (onCancel) onCancel();
   }
 
@@ -951,7 +951,7 @@ export class TextbookFeedbackModal extends Component {
   constructor(props) {
     super(props);
     this.state = {
-      data: {},
+      data: { content: '' },
       targetList: TextbookFeedbackTarget.map(row => {
         return {
           title: row.label,
@@ -979,14 +979,14 @@ export class TextbookFeedbackModal extends Component {
     if (!data.content) return;
     if (data.target !== 'new' && !data.no) return;
     My.addTextbookFeedback(data.textbookSubject, data.target, data.no, data.content).then(() => {
-      this.setState({ data: {} });
+      this.setState({ data: { content: '' } });
       if (onConfirm) onConfirm();
     });
   }
 
   onCancel() {
     const { onCancel } = this.props;
-    this.setState({ data: {} });
+    this.setState({ data: { content: '' } });
     if (onCancel) onCancel();
   }
 
@@ -1050,7 +1050,7 @@ export class TextbookFeedbackModal extends Component {
 export class FaqModal extends Component {
   constructor(props) {
     super(props);
-    this.state = { data: {} };
+    this.state = { data: { content: '' } };
   }
 
   componentWillReceiveProps(nextProps) {
@@ -1099,7 +1099,7 @@ export class FaqModal extends Component {
 export class CommentModal extends Component {
   constructor(props) {
     super(props);
-    this.state = { data: {} };
+    this.state = { data: { content: '' } };
   }
 
   componentWillReceiveProps(nextProps) {
@@ -1113,14 +1113,14 @@ export class CommentModal extends Component {
     const { data } = this.state;
     if (!data.content) return;
     My.addComment(data.channel, data.position, data.content).then(() => {
-      this.setState({ data: {} });
+      this.setState({ data: { content: '' } });
       if (onConfirm) onConfirm();
     });
   }
 
   onCancel() {
     const { onCancel } = this.props;
-    this.setState({ data: {} });
+    this.setState({ data: { content: '' } });
     if (onCancel) onCancel();
   }
 
@@ -1162,7 +1162,7 @@ export class FinishModal extends Component {
 export class SuppleModal extends Component {
   constructor(props) {
     super(props);
-    this.state = { data: {} };
+    this.state = { data: { content: '' } };
   }
 
   componentWillReceiveProps(nextProps) {
@@ -1176,14 +1176,14 @@ export class SuppleModal extends Component {
     const { data } = this.state;
     if (!data.content) return;
     My.addRoomFeedback(data.roomId, data.content).then(() => {
-      this.setState({ data: {} });
+      this.setState({ data: { content: '' } });
       if (onConfirm) onConfirm();
     });
   }
 
   onCancel() {
     const { onCancel } = this.props;
-    this.setState({ data: {} });
+    this.setState({ data: { content: '' } });
     if (onCancel) onCancel();
   }
 

+ 1 - 1
front/project/www/routes/course/dataDetail/page.js

@@ -241,7 +241,7 @@ export default class extends Page {
         <AnswerCarousel
           hideBtn
           list={faqs}
-          onFaq={() => this.setState({ showFaq: true, faq: { channel: 'course_data', position: data.id } })}
+          onFaq={() => User.needLogin().then(() => this.setState({ showFaq: true, faq: { channel: 'course_data', position: data.id } }))}
         />
       </div>
     );

+ 1 - 1
front/project/www/routes/course/detail/page.js

@@ -610,7 +610,7 @@ export default class extends Page {
         <AnswerCarousel
           hideBtn
           list={faqs}
-          onFaq={() => this.setState({ showFaq: true, faq: { channel: 'course-video', position: data.id } })}
+          onFaq={() => User.needLogin().then(() => this.setState({ showFaq: true, faq: { channel: 'course-video', position: data.id } }))}
         />
       </div>
     );

+ 1 - 1
front/project/www/routes/course/main/page.js

@@ -141,7 +141,7 @@ export default class extends Page {
           </div>
         </div>
         <CommentFalls list={comments} />
-        <AnswerCarousel list={faqs} onFaq={() => this.setState({ showFaq: true, faq: { channel: 'course-index' } })} />
+        <AnswerCarousel list={faqs} onFaq={() => User.needLogin().then(() => this.setState({ showFaq: true, faq: { channel: 'course-index' } }))} />
         <Contact data={base.contact} />
         <Footer />
         <FaqModal show={showFaq} defaultData={faq} onCancel={() => this.setState({ showFaq: false, faq: {} })} onConfirm={() => this.setState({ showFaq: false, faq: {}, showFinish: true })} />

+ 2 - 1
front/project/www/routes/course/online/page.js

@@ -12,6 +12,7 @@ import { SingleItem, PackageItem } from '../../../components/Item';
 import UserPagination from '../../../components/UserPagination';
 import { Main } from '../../../stores/main';
 import { Course } from '../../../stores/course';
+import { User } from '../../../stores/user';
 
 export default class extends Page {
   initState() {
@@ -153,7 +154,7 @@ export default class extends Page {
         </div>
         <Consultation data={base.contact} />
         <CommentFalls list={comments} />
-        <AnswerCarousel list={faqs} onFaq={() => this.setState({ showFaq: true, faq: { channel: tab === 'single' ? 'course-video_index' : 'course-package_index' } })} />
+        <AnswerCarousel list={faqs} onFaq={() => User.needLogin().then(() => this.setState({ showFaq: true, faq: { channel: tab === 'single' ? 'course-video_index' : 'course-package_index' } }))} />
         <Contact data={base.contact} />
         <Footer />
         <FaqModal show={showFaq} defaultData={faq} onCancel={() => this.setState({ showFaq: false, faq: {} })} onConfirm={() => this.setState({ showFaq: false, faq: {}, showFinish: true })} />

+ 1 - 1
front/project/www/routes/course/vs/page.js

@@ -290,7 +290,7 @@ export default class extends Page {
         <AnswerCarousel
           hideBtn
           list={faqs || []}
-          onFaq={() => this.setState({ showFaq: true, faq: { channel: 'course-vs', position: data.id } })}
+          onFaq={() => User.needLogin().then(() => this.setState({ showFaq: true, faq: { channel: 'course-vs', position: data.id } }))}
         />
       </div>
     );

+ 11 - 0
front/project/www/routes/page/ready/index.less

@@ -40,6 +40,10 @@
           display: block;
           transform: rotate(-90deg);
         }
+
+        .change {
+          display: none;
+        }
       }
 
       .page-item.active {
@@ -51,6 +55,11 @@
           display: none;
         }
 
+        .change {
+          display: block;
+          transform: rotate(-90deg);
+        }
+
         .page-item-title {
           font-weight: 600;
         }
@@ -104,9 +113,11 @@
         }
 
       }
+
       .faq-layout {
         .module {
           box-shadow: none;
+          padding: 0;
         }
       }
 

+ 3 - 3
front/project/www/routes/page/ready/page.js

@@ -330,7 +330,8 @@ export default class extends Page {
                     onClick={() => this.changePage(item.key)}
                   >
                     {item.children && item.children.length > 0 && <Assets name="dropdown_hover" className="up" />}
-                    {item.children && item.children.length > 0 && <Assets name="dropdown_normal" className="down" />}
+                    {<Assets name="dropdown_normal" className="down" />}
+                    {(!item.children || item.children.length === 0) && <Assets name="dropdown_hover" className="change" />}
                     <div className="page-item-title">{item.title}</div>
                     {current === item.key &&
                       item.children &&
@@ -429,7 +430,6 @@ export default class extends Page {
 
   renderRead() {
     const { readTab, reads = [], readPlates, plate = {} } = this.state;
-    console.log(plate);
     return <div className='read-layout'>
       <Tabs
         className='m-b-2'
@@ -454,7 +454,7 @@ export default class extends Page {
   renderFaq() {
     const { faqs = [], showFaq, showFinish, faq = {} } = this.state;
     return <div className='faq-layout'>
-      <Button onClick={() => this.setState({ showFaq: true, faq: { channel: 'getready' } })}>我要提问 ></Button>
+      <Button onClick={() => User.needLogin().then(() => this.setState({ showFaq: true, faq: { channel: 'getready' } }))}>我要提问 ></Button>
       <QAList data={faqs} />
 
       <FaqModal show={showFaq} defaultData={faq} onCancel={() => this.setState({ showFaq: false, faq: {} })} onConfirm={() => this.setState({ showFaq: false, faq: {}, showFinish: true })} />

+ 12 - 4
server/gateway-api/src/main/java/com/qxgmat/controller/admin/PreviewController.java

@@ -64,10 +64,11 @@ public class PreviewController {
     public Response<PreviewPaper> add(@RequestBody @Validated PreviewPaperDto dto, HttpServletRequest request) {
         PreviewPaper entity = Transform.dtoToEntity(dto);
         entity.setQuestionSubject(QuestionSubject.FromType(QuestionType.ValueOf(entity.getQuestionType())).key);
-        previewPaperService.add(entity);
         if (dto.getCourseNo() != null){
             entity = previewPaperService.addCourseNo(entity);
-            previewAssignService.addCourseNo(entity.getId(), dto.getCourseId(), dto.getCourseNo());
+            previewAssignService.addCourseNo(entity.getId(), dto.getCourseId(), dto.getCourseNo(), dto.getQuestionNoIds());
+        }else{
+            entity = previewPaperService.add(entity);
         }
         managerLogService.log(request);
         return ResponseHelp.success(entity);
@@ -77,8 +78,13 @@ public class PreviewController {
     @ApiOperation(value = "编辑预习作业", httpMethod = "PUT")
     public Response<Boolean> edit(@RequestBody @Validated PreviewPaperDto dto, HttpServletRequest request) {
         PreviewPaper entity = Transform.dtoToEntity(dto);
-        previewPaperService.edit(entity);
-        // 不允许编辑课时,如果允许,该处进行处理
+        PreviewPaper in = previewPaperService.get(entity.getId());
+        if (in.getCourseNo() != null && in.getCourseNo() > 0){
+            previewPaperService.edit(entity);
+            previewAssignService.editCourseNo(in.getId(), in.getCourseId(), in.getCourseNo(), dto.getQuestionNoIds());
+        }else{
+            previewPaperService.edit(entity);
+        }
         managerLogService.log(request);
         return ResponseHelp.success(true);
     }
@@ -125,6 +131,8 @@ public class PreviewController {
     @ApiOperation(value = "添加分配预习作业", httpMethod = "POST")
     public Response<PreviewAssign> addAssign(@RequestBody @Validated PreviewAssignDto dto, HttpServletRequest request) {
         PreviewAssign entity = Transform.dtoToEntity(dto);
+        PreviewPaper previewPaper = previewPaperService.get(entity.getPaperId());
+        entity.setCourseId(previewPaper.getCourseId());
         previewAssignService.add(entity);
         managerLogService.log(request);
         return ResponseHelp.success(entity);

+ 1 - 1
server/gateway-api/src/main/java/com/qxgmat/controller/admin/QuestionController.java

@@ -170,7 +170,7 @@ public class QuestionController {
     @RequestMapping(value = "/search/no", method = RequestMethod.POST)
     @ApiOperation(value = "搜索题目编号列表:题目编号搜索", httpMethod = "POST")
     public Response<PageMessage<QuestionNoExtendDto>> searchNo(@RequestBody @Validated QuestionNoSearchDto dto, HttpServletRequest request) {
-        PageResult<QuestionNoRelation> p = questionNoService.searchNo(dto.getPage(), dto.getSize(), dto.getKeyword(), dto.getModule());
+        PageResult<QuestionNoRelation> p = questionNoService.searchNo(dto.getPage(), dto.getSize(), dto.getKeyword(), dto.getModule(), dto.getIds() !=null ? dto.getIds().length == 0? null:dto.getIds() : dto.getIds());
         List<QuestionNoExtendDto> pr = Transform.convert(p, QuestionNoExtendDto.class);
 
         return ResponseHelp.success(pr, dto.getPage(), dto.getSize(), p.getTotal());

+ 20 - 0
server/gateway-api/src/main/java/com/qxgmat/dto/admin/request/PreviewAssignDto.java

@@ -25,6 +25,10 @@ public class PreviewAssignDto {
 
     private Date targetTime;
 
+    private Date startTime;
+
+    private Date endTime;
+
     public Integer getId() {
         return id;
     }
@@ -96,4 +100,20 @@ public class PreviewAssignDto {
     public void setTargetTime(Date targetTime) {
         this.targetTime = targetTime;
     }
+
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
 }

+ 13 - 1
server/gateway-api/src/main/java/com/qxgmat/service/inline/PreviewAssignService.java

@@ -64,7 +64,7 @@ public class PreviewAssignService extends AbstractService {
         return one(previewAssignMapper, example);
     }
 
-    public PreviewAssign addCourseNo(Integer paperId, Integer courseId, Integer no){
+    public PreviewAssign addCourseNo(Integer paperId, Integer courseId, Integer no, Integer[] questionNoIds){
         PreviewAssign assign = getByCourseNo(courseId, no);
         if (assign != null){
             throw new ParameterException("该课时已创建");
@@ -73,6 +73,18 @@ public class PreviewAssignService extends AbstractService {
                 .courseId(courseId)
                 .courseNo(no)
                 .paperId(paperId)
+                .questionNoIds(questionNoIds)
+                .build());
+    }
+
+    public void editCourseNo(Integer paperId, Integer courseId, Integer no, Integer[] questionNoIds){
+        PreviewAssign assign = getByCourseNo(courseId, no);
+        if (assign == null){
+            throw new ParameterException("该课时未创建");
+        }
+        edit(PreviewAssign.builder()
+                .id(assign.getId())
+                .questionNoIds(questionNoIds)
                 .build());
     }
 

+ 6 - 2
server/gateway-api/src/main/java/com/qxgmat/service/inline/QuestionNoService.java

@@ -70,8 +70,7 @@ public class QuestionNoService extends AbstractService {
      * @param module
      * @return
      */
-    public PageResult<QuestionNoRelation> searchNo(int page, int size, String keyword, String module){
-        logger.info("SearchNo: {}, {}", page, size);
+    public PageResult<QuestionNoRelation> searchNo(int page, int size, String keyword, String module, Integer[] ids){
         Example example = new Example(QuestionNo.class);
         if(keyword != null)
             example.and(
@@ -83,6 +82,11 @@ public class QuestionNoService extends AbstractService {
                     example.createCriteria()
                             .andEqualTo("module", module)
             );
+        if (ids != null)
+            example.and(
+                    example.createCriteria()
+                            .andIn("id", Arrays.stream(ids).collect(Collectors.toList()))
+            );
         example.orderBy("id").asc();
         Page<QuestionNo> p = page(()->select(questionNoMapper, example), page, size);
         logger.info("SearchNo result: {}", p.toString());