From 374f2c4c5f1e775d044a5a5f3dfc29b9a6713f73 Mon Sep 17 00:00:00 2001
From: zjz1993 <1429595365@qq.com>
Date: Mon, 22 Jul 2019 17:30:40 +0800
Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E7=AE=A1=E7=90=86?=
=?UTF-8?q?=E4=B8=AD=E5=BF=83=E9=87=8C=E9=80=89=E9=A2=98=E6=97=B6=E7=9A=84?=
=?UTF-8?q?=E6=93=8D=E4=BD=9C=E4=BA=A4=E4=BA=92=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
modules/practice.js | 26 +++++-
views/admin_classify.ejs | 185 ++++++++++++++++++++++++---------------
2 files changed, 134 insertions(+), 77 deletions(-)
diff --git a/modules/practice.js b/modules/practice.js
index 15c2485..64590ab 100644
--- a/modules/practice.js
+++ b/modules/practice.js
@@ -284,6 +284,28 @@ app.put('/api/practice/classify/update/:id', async (req, res) => {
}
});
+app.get('/api/pagination/allproblem', async (req, res) => {
+ try {
+ let query = await Problem.createQueryBuilder();
+ let problemInfo = await query.select('COUNT(*)', 'count').getRawOne();
+ res.send({ problemInfo});
+ } catch(e) {
+ res.send({ error_code: e.errno, error_msg: '失败' });
+ }
+});
+
+app.get('/api/pagination', async (req, res) => {
+ let pagesize = parseInt(req.query.pagesize);
+ let page = parseInt(req.query.page);
+ try {
+ let query = await Problem.createQueryBuilder();
+ let problemInfo = await query.limit(pagesize).offset(pagesize*page).getMany();
+ res.send({ problemInfo});
+ } catch(e) {
+ res.send({ error_code: e.errno, error_msg: '失败' });
+ }
+});
+
app.get('/api/getProblem/:id', async (req, res) => {
let id = parseInt(req.params.id);
try {
@@ -303,10 +325,6 @@ app.get('/api/practice/all', async (req, res) => {
result.sort(function(a,b) {
return a.order - b.order;
})
- // if (result.length !== 0) {
- // const currentClassifyId = result[0].id;
- //
- // }
let problem = await CToP.queryAll(ctopQuery);
res.send({ result, problem});
} catch(e) {
diff --git a/views/admin_classify.ejs b/views/admin_classify.ejs
index 1eb2055..d66b49e 100644
--- a/views/admin_classify.ejs
+++ b/views/admin_classify.ejs
@@ -28,26 +28,34 @@
-
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+
@@ -102,45 +110,78 @@
classifyId: -1,
problemOptions: [],
loading: false,
+ problemList: [],
+ usedProblemId: [],
+ multipleSelection: [],
+ problemCount: -1
},
created: function() {
this.getClassifyInfo();
+ this.getCount();
},
methods: {
- remoteMethod(query) {
+ getCount: function(){
let that = this;
- if (query !== '') {
- if (this.usedProblemId.includes(parseInt(query))) {
- this.$message({
- message: '这道题已经分配过',
- type: 'warning'
- });
- } else {
- this.loading = true;
- setTimeout(() => {
- $.ajax({
- url: `/api/v2/search/problems/${query}`,
- type: 'GET',
- success: function (data) {
- that.problemOptions = data.results.map((item) => {
- return {
- id: item.value,
- label: item.name,
- value: item.value,
- }
- })
- },
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- alert('创建失败');
- }
- });
- this.loading = false;
- }, 200);
+ $.ajax({
+ url: '/api/pagination/allproblem',
+ type: 'GET',
+ success: function (data) {
+ console.log(data.problemInfo.count);
+ that.problemCount = parseInt(data.problemInfo.count);
+ },
+ error: function (XMLHttpRequest, textStatus, errorThrown) {
+ alert('创建失败');
}
+ })
+ },
+ disableCheckbox: function(row) {
+ const currentIdArray = this.problemIdArray.map((function(item){
+ return item.id;
+ }));
+ function findDifference(source, target){
+ return target.filter(function(item){
+ return !source.includes(item);
+ })
+ }
+ const disabledId = findDifference(currentIdArray, this.usedProblemId)
+ return !disabledId.includes(row.id);
+ },
+ toggleSelection(rows) {
+ if (rows) {
+ rows.forEach(row => {
+ this.$refs.multipleTable.toggleRowSelection(row);
+ });
} else {
- this.options = [];
+ this.$refs.multipleTable.clearSelection();
}
},
+ handlePageChange(page) {
+ this.selectProblem();
+ this.getProblemPagination(page);
+ if (this.classifyId) {
+ this.getClassifyInfos(this.classifyId);
+ }
+ },
+ getProblemPagination(page) {
+ let that = this;
+ $.ajax({
+ url: '/api/pagination',
+ type: 'GET',
+ data: {
+ pagesize: 10,
+ page: page - 1
+ },
+ success: function (data) {
+ that.problemList = data.problemInfo;
+ },
+ error: function (XMLHttpRequest, textStatus, errorThrown) {
+ alert('创建失败');
+ }
+ })
+ },
+ handleSelectionChange(val) {
+ this.multipleSelection = val;
+ },
getClassifyInfo: function() {
let that = this;
$.ajax({
@@ -163,10 +204,12 @@
this.problemOptions=[];
this.order = this.calcOrderMax;
},
- show: function(id){
+ selectProblem: function() {
+ this.toggleSelection(this.problemIdArray)
+ },
+ getClassifyInfos: function(id){
let that = this;
- if (id) {
- this.classifyId = id;
+ if (id !== -1) {
$.ajax({
url: `/api/practice/classify/${id}`,
type: 'GET',
@@ -175,33 +218,27 @@
const {classifyInfo: {id, intro, name, order}, problem} = data;
that.classifyName = name;
that.classifyIntro = intro;
- that.problemIdArray = problem;
+ that.problemIdArray = that.problemList.filter(function(problemItem){
+ return problem.includes(problemItem.id)
+ });
+ that.toggleSelection(that.problemIdArray)
that.order = order;
- problem.forEach(function(problemId) {
- $.ajax({
- url: `/api/v2/search/problems/${problemId}`,
- type: 'GET',
- success: function (data) {
- that.problemOptions = data.results.map((item) => {
- return {
- id: item.value,
- label: item.name,
- disabled: true,
- value: item.value,
- }
- })
- },
- error: function (XMLHttpRequest, textStatus, errorThrown) {
- alert('创建失败');
- }
- });
- })
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert('创建失败');
}
});
+ }
+ },
+ show: function(id){
+ let that = this;
+ console.log(id);
+ this.getProblemPagination(1)
+ if (id) {
+ this.classifyId = id;
+ // this.getProblemPagination(1)
+ this.getClassifyInfos(id);
} else {
this.resetModal();
}
@@ -215,12 +252,14 @@
let that = this;
let name = this.classifyName;
let intro = this.classifyIntro;
- if(this.checkStringLength(name, 20) && this.checkStringLength(intro, 100) && this.problemIdArray.length > 0) {
+ if(this.checkStringLength(name, 20) && this.checkStringLength(intro, 100) && this.multipleSelection.length > 0) {
const obj = {
name: this.classifyName,
intro: this.classifyIntro,
order: this.order,
- problemIdArray: this.problemIdArray
+ problemIdArray: this.multipleSelection.map(function(item){
+ return item.id
+ })
}
if (this.classifyId === -1) {
$.ajax({