Skip to content

Commit 89864b0

Browse files
committed
fix:试卷/题目优化
1 parent 24e4505 commit 89864b0

7 files changed

Lines changed: 86 additions & 65 deletions

File tree

src/assets/data/publish/exam.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77
"-2": "已删除",
88
"-1": "未通过审核",
99
"0": "待审核",
10-
"1": "已入库",
11-
"2": "私有"
10+
"1": "已入库"
11+
},
12+
"publicmap": {
13+
"0": "私有",
14+
"1": "公开"
1215
},
1316
"styles": [
1417
{ "label": "蓝色", "value": "default" },

src/bucket/paper.vue

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@
33
<li v-for="(item, i) in list" :key="i">
44
<a class="u-title" target="_blank" :href="postLink(item.id)">
55
<!-- [{{ item.type | typeFormat }}] -->
6-
<i class="u-icon">
7-
<img v-if="item.status != 0" svg-inline src="@/assets/img/publish/works/repo.svg" />
8-
<img v-else svg-inline src="@/assets/img/publish/works/draft.svg" />
9-
</i>
6+
<el-tag v-if="isPrivate(item)" class="u-private-tag" size="small" effect="plain">
7+
{{ publicmap[0] }}
8+
</el-tag>
109
{{ item.title || "无标题" }}
1110
</a>
1211
<div class="u-desc">
@@ -22,7 +21,7 @@
2221
pending: item.status == 0,
2322
fail: item.status < 0 || item.status > 1,
2423
}"
25-
>{{ statusmap[item.status] }}</b
24+
>{{ statusFormat(item) }}</b
2625
>
2726
</span>
2827
<time class="u-time u-desc-subitem">提交于: {{ dateFormat(item.createTime) }}</time>
@@ -40,13 +39,14 @@ import examData from "@/assets/data/publish/exam.json";
4039
import dateFormat from "@/utils/dateFormat";
4140
import { getLink } from "@jx3box/jx3box-common/js/utils";
4241
import { deletePaper } from "@/service/publish/exam.js";
43-
const { types, statusmap } = examData;
42+
const { types, statusmap, publicmap } = examData;
4443
export default {
4544
name: "paper",
4645
props: ["data"],
4746
data: function () {
4847
return {
4948
statusmap,
49+
publicmap,
5050
list: this.data || [],
5151
};
5252
},
@@ -84,6 +84,12 @@ export default {
8484
typeFormat: function (type) {
8585
return types[type];
8686
},
87+
isPrivate: function (item) {
88+
return item.is_public === 0;
89+
},
90+
statusFormat: function (item) {
91+
return statusmap[item.status];
92+
},
8793
},
8894
};
8995
</script>
@@ -104,6 +110,17 @@ export default {
104110
.m-publish__paper-list{
105111
.u-title{
106112
padding:4px 0;
113+
gap: 4px;
114+
}
115+
.u-private-tag {
116+
--el-tag-bg-color: fade(@v4primary, 8%);
117+
--el-tag-border-color: fade(@v4primary, 35%);
118+
--el-tag-text-color: @v4primary;
119+
height: 18px;
120+
padding: 0 5px;
121+
font-size: 11px;
122+
line-height: 16px;
123+
vertical-align: 1px;
107124
}
108125
}
109126
</style>

src/bucket/question.vue

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
<template>
22
<ul class="m-publish__question-list">
33
<li v-for="(item, i) in list" :key="i">
4-
<a class="u-title" target="_blank" :href="postLink(item.id)"
5-
><i class="u-icon">
6-
<img v-if="item.status > 0" svg-inline src="@/assets/img/publish/works/repo.svg" />
7-
<img v-else svg-inline src="@/assets/img/publish/works/draft.svg" /> </i
8-
>{{ item.title || "无标题" }}</a
9-
>
4+
<a class="u-title" target="_blank" :href="postLink(item.id)">
5+
<el-tag v-if="isPrivate(item)" class="u-private-tag" size="small" effect="plain">
6+
{{ publicmap[0] }}
7+
</el-tag>
8+
{{ item.title || "无标题" }}
9+
</a>
1010
<div class="u-desc">
1111
<span class="u-desc-subitem">
1212
编号 :
@@ -20,7 +20,7 @@
2020
pending: item.status == 0,
2121
fail: item.status < 0,
2222
}"
23-
>{{ statusmap[item.status] }}</b
23+
>{{ statusFormat(item) }}</b
2424
>
2525
</span>
2626
<span class="u-type u-desc-subitem">
@@ -41,13 +41,14 @@ import examData from "@/assets/data/publish/exam.json";
4141
import dateFormat from "@/utils/dateFormat";
4242
import { getLink } from "@jx3box/jx3box-common/js/utils";
4343
import { deleteQuestion } from "@/service/publish/exam.js";
44-
const { types, statusmap } = examData;
44+
const { types, statusmap, publicmap } = examData;
4545
export default {
4646
name: "question",
4747
props: ["data"],
4848
data: function () {
4949
return {
5050
statusmap,
51+
publicmap,
5152
list: this.data || [],
5253
};
5354
},
@@ -85,6 +86,12 @@ export default {
8586
typeFormat: function (type) {
8687
return types[type];
8788
},
89+
isPrivate: function (item) {
90+
return item.is_public === 0;
91+
},
92+
statusFormat: function (item) {
93+
return statusmap[item.status];
94+
},
8895
},
8996
};
9097
</script>
@@ -105,6 +112,17 @@ export default {
105112
.m-publish__question-list{
106113
.u-title{
107114
padding:4px 0;
115+
gap: 4px;
116+
}
117+
.u-private-tag {
118+
--el-tag-bg-color: fade(@v4primary, 8%);
119+
--el-tag-border-color: fade(@v4primary, 35%);
120+
--el-tag-text-color: @v4primary;
121+
height: 18px;
122+
padding: 0 5px;
123+
font-size: 11px;
124+
line-height: 16px;
125+
vertical-align: 1px;
108126
}
109127
}
110128
</style>

src/post/exam_paper.vue

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
<!-- 客户端 -->
1111
<publish-client v-model="primary.client"></publish-client>
1212
<el-form-item label="状态" class="m-publish-exam-common">
13-
<el-radio-group v-model="primary.status">
14-
<el-radio value="">公开</el-radio>
15-
<el-radio :value="PRIVATE_STATUS">私有</el-radio>
13+
<el-radio-group v-model="primary.is_public">
14+
<el-radio :value="PUBLIC_VALUE">公开</el-radio>
15+
<el-radio :value="PRIVATE_VALUE">私有</el-radio>
1616
</el-radio-group>
1717
</el-form-item>
1818
<el-form-item label="标题" class="m-publish-exam-title">
@@ -98,12 +98,13 @@ import examData from "@/assets/data/publish/exam.json";
9898
import { getLink } from "@jx3box/jx3box-common/js/utils";
9999
const { awards, marks, styles } = examData;
100100
const DEFAULT_CLIENT = "std";
101-
const PRIVATE_STATUS = 2;
101+
const PUBLIC_VALUE = 1;
102+
const PRIVATE_VALUE = 0;
102103
103104
function getDefaultPrimary() {
104105
return {
105106
client: DEFAULT_CLIENT,
106-
status: "",
107+
is_public: PUBLIC_VALUE,
107108
title: "",
108109
desc: "",
109110
questionList: [],
@@ -116,24 +117,15 @@ function getDefaultPrimary() {
116117
};
117118
}
118119
119-
function getFormStatus(status) {
120-
return Number(status) === PRIVATE_STATUS ? PRIVATE_STATUS : "";
120+
function getFormPublic(isPublic) {
121+
return Number(isPublic) === PRIVATE_VALUE ? PRIVATE_VALUE : PUBLIC_VALUE;
121122
}
122123
123-
function hasStatus(status) {
124-
return status !== "" && status !== undefined && status !== null;
125-
}
126-
127-
function getSubmitData(primary, originalStatus) {
124+
function getSubmitData(primary) {
128125
const data = { ...primary };
129126
data.client = data.client || DEFAULT_CLIENT;
130-
if (Number(data.status) === PRIVATE_STATUS) {
131-
data.status = PRIVATE_STATUS;
132-
} else if (hasStatus(originalStatus)) {
133-
data.status = originalStatus;
134-
} else {
135-
delete data.status;
136-
}
127+
data.is_public = getFormPublic(data.is_public);
128+
delete data.status;
137129
return data;
138130
}
139131
@@ -148,8 +140,8 @@ export default {
148140
awards,
149141
marks,
150142
styles,
151-
PRIVATE_STATUS,
152-
originalStatus: "",
143+
PUBLIC_VALUE,
144+
PRIVATE_VALUE,
153145
processing: false,
154146
loading: false,
155147
};
@@ -163,7 +155,7 @@ export default {
163155
methods: {
164156
publish: function () {
165157
this.processing = true;
166-
const data = getSubmitData(this.primary, this.id ? this.originalStatus : undefined);
158+
const data = getSubmitData(this.primary);
167159
data.questionList = this.checkList();
168160
if (!data.questionList) return;
169161
const request = this.id ? updatePaper(this.id, data) : createPaper(data);
@@ -190,12 +182,11 @@ export default {
190182
getPaper(this.id, this)
191183
.then((res) => {
192184
let data = res.data;
193-
this.originalStatus = data.status;
194185
this.primary = {
195186
...getDefaultPrimary(),
196187
...data,
197188
client: data.client || DEFAULT_CLIENT,
198-
status: getFormStatus(data.status),
189+
is_public: getFormPublic(data.is_public),
199190
};
200191
this.primary.tags = data.tags ? JSON.parse(data.tags) : [];
201192
this.primary.questionList = data.questionList ? JSON.parse(data.questionList) : [];

src/post/exam_question.vue

Lines changed: 15 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
<el-form label-position="left" label-width="80px" class="m-publish-exam">
1010
<publish-client v-model="primary.client"></publish-client>
1111
<el-form-item label="状态" class="m-publish-exam-common">
12-
<el-radio-group v-model="primary.status">
13-
<el-radio value="">公开</el-radio>
14-
<el-radio :value="PRIVATE_STATUS">私有</el-radio>
12+
<el-radio-group v-model="primary.is_public">
13+
<el-radio :value="PUBLIC_VALUE">公开</el-radio>
14+
<el-radio :value="PRIVATE_VALUE">私有</el-radio>
1515
</el-radio-group>
1616
</el-form-item>
1717
<el-form-item label="题目" class="m-publish-exam-title">
@@ -90,12 +90,13 @@ import User from "@jx3box/jx3box-common/js/user";
9090
import { getQuestion, createQuestion, updateQuestion } from "@/service/publish/exam";
9191
import { getLink } from "@jx3box/jx3box-common/js/utils";
9292
const DEFAULT_CLIENT = "std";
93-
const PRIVATE_STATUS = 2;
93+
const PUBLIC_VALUE = 1;
94+
const PRIVATE_VALUE = 0;
9495
9596
function getDefaultPrimary() {
9697
return {
9798
client: DEFAULT_CLIENT,
98-
status: "",
99+
is_public: PUBLIC_VALUE,
99100
title: "",
100101
type: "radio",
101102
options: ["", "", "", ""],
@@ -107,24 +108,15 @@ function getDefaultPrimary() {
107108
};
108109
}
109110
110-
function getFormStatus(status) {
111-
return Number(status) === PRIVATE_STATUS ? PRIVATE_STATUS : "";
111+
function getFormPublic(isPublic) {
112+
return Number(isPublic) === PRIVATE_VALUE ? PRIVATE_VALUE : PUBLIC_VALUE;
112113
}
113114
114-
function hasStatus(status) {
115-
return status !== "" && status !== undefined && status !== null;
116-
}
117-
118-
function getSubmitData(primary, originalStatus) {
115+
function getSubmitData(primary) {
119116
const data = { ...primary };
120117
data.client = data.client || DEFAULT_CLIENT;
121-
if (Number(data.status) === PRIVATE_STATUS) {
122-
data.status = PRIVATE_STATUS;
123-
} else if (hasStatus(originalStatus)) {
124-
data.status = originalStatus;
125-
} else {
126-
delete data.status;
127-
}
118+
data.is_public = getFormPublic(data.is_public);
119+
delete data.status;
128120
return data;
129121
}
130122
@@ -134,8 +126,8 @@ export default {
134126
data: function () {
135127
return {
136128
primary: getDefaultPrimary(),
137-
PRIVATE_STATUS,
138-
originalStatus: "",
129+
PUBLIC_VALUE,
130+
PRIVATE_VALUE,
139131
processing: false,
140132
loading: false,
141133
@@ -167,7 +159,7 @@ export default {
167159
methods: {
168160
publish: function () {
169161
this.processing = true;
170-
const data = getSubmitData(this.primary, this.id ? this.originalStatus : undefined);
162+
const data = getSubmitData(this.primary);
171163
const request = this.id ? updateQuestion(this.id, data) : createQuestion(data);
172164
request
173165
.then((res) => {
@@ -192,12 +184,11 @@ export default {
192184
getQuestion(this.id)
193185
.then((res) => {
194186
let data = res.data;
195-
this.originalStatus = data.status;
196187
this.primary = {
197188
...getDefaultPrimary(),
198189
...data,
199190
client: data.client || DEFAULT_CLIENT,
200-
status: getFormStatus(data.status),
191+
is_public: getFormPublic(data.is_public),
201192
};
202193
this.primary.options = data.options ? JSON.parse(data.options) : ["", "", "", ""];
203194
this.primary.tags = data.tags ? JSON.parse(data.tags) : [];

src/service/publish/exam.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ function createPaper(data) {
1717
}
1818

1919
function updatePaper(id, data) {
20-
return $next().put("/api/question/" + "exam-paper/" + id, data);
20+
return $next().put("/api/next2/exam-paper/manager/item/" + id, data);
2121
}
2222

2323
function getPaper(id) {

src/views/publish/bucket.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ export default {
9999
params() {
100100
let params = { page: this.page, limit: this.per };
101101
this.type == "item_plan" ? (params.search = this.search) : (params.title = this.search);
102+
if (this.type == "paper" || this.type == "question") params.is_public = -1;
102103
return params;
103104
},
104105
},

0 commit comments

Comments
 (0)