diff --git a/docs/用户自行选择工作类别.doc b/docs/用户自行选择工作类别.doc
new file mode 100644
index 0000000..e4f883f
Binary files /dev/null and b/docs/用户自行选择工作类别.doc differ
diff --git a/test_client/src/settings.js b/test_client/src/settings.js
index 0f4a45c..c158b71 100644
--- a/test_client/src/settings.js
+++ b/test_client/src/settings.js
@@ -1,6 +1,6 @@
module.exports = {
- title: '辐射学堂',
+ title: '安建环培训考试平台',
/**
* @type {boolean} true | false
@@ -12,5 +12,5 @@ module.exports = {
* @type {boolean} true | false
* @description Whether show the logo in sidebar
*/
- sidebarLogo: true
+ sidebarLogo: false
}
diff --git a/test_client/src/views/exam/index.vue b/test_client/src/views/exam/index.vue
index d4eba4f..6a1129f 100644
--- a/test_client/src/views/exam/index.vue
+++ b/test_client/src/views/exam/index.vue
@@ -51,7 +51,7 @@
- {{ scope.row.create_admin_name }}
+ {{ scope.row.create_admin_username }}
diff --git a/test_mini/app.js b/test_mini/app.js
index 614fe1f..05eae33 100644
--- a/test_mini/app.js
+++ b/test_mini/app.js
@@ -70,9 +70,9 @@ App({
globalData: {
userInfo: {},
userinfo: {}, // 服务器传回的消费者信息
- host: 'https://apitest.ahctc.cn',
+ //host: 'https://apitest.ahctc.cn',
mediahost: 'https://apitest.ahctc.cn',
- //host: 'http://127.0.0.1:8000',
+ host: 'http://127.0.0.1:8000',
//mediahost: 'http://127.0.0.1:8000',
token : '',
}
diff --git a/test_mini/pages/admin/exam/detail.js b/test_mini/pages/admin/exam/detail.js
index 582b516..89702dd 100644
--- a/test_mini/pages/admin/exam/detail.js
+++ b/test_mini/pages/admin/exam/detail.js
@@ -1,11 +1,13 @@
// pages/admin/exam/detail.js
+const api = require("../../../utils/request.js");
Page({
/**
* 页面的初始数据
*/
data: {
-
+ exam:{},
+ tests:[]
},
/**
@@ -13,10 +15,25 @@ Page({
*/
onLoad: function (options) {
if(options.id){
- console.log(options.id)
+ let id = options.id
+ api.requesta(`/examtest/exam/${id}/`, 'GET').then(res=>{
+ this.setData({
+ exam:res.data
+ })
+ })
+ api.requesta('/examtest/examtest/', 'GET', {exam:id, pageoff:true}).then(res=>{
+ this.setData({
+ tests:res.data
+ })
+ })
}
},
+ issue: function(){
+ wx.showLoading({
+ title: '正在生成...',
+ })
+ },
/**
* 生命周期函数--监听页面初次渲染完成
*/
diff --git a/test_mini/pages/admin/exam/detail.wxml b/test_mini/pages/admin/exam/detail.wxml
index 27e8263..e345b57 100644
--- a/test_mini/pages/admin/exam/detail.wxml
+++ b/test_mini/pages/admin/exam/detail.wxml
@@ -1,2 +1,64 @@
-
-pages/admin/exam/detail.wxml
+
+
+
+
+ {{exam.name}}
+
+
+
+
+ 工作类别:{{exam.workscope_name}}
+
+
+ 考试地点:{{exam.place}}
+
+
+ 开关时间:{{exam.opentime}}-{{exam.closetime}}
+
+
+ 监考人:{{exam.proctor_name}}-{{exam.proctor_phone}}
+
+
+
+
+
+ 共{{tests.length}}名人员参加考试
+
+
+
+
+ {{item.consumer_detail.company_name}} {{item.consumer_detail.deptname}}
+
+
+ 身份证号:{{item.consumer_detail.ID_number}}
+
+
+ 开始答题:{{item.start_time}}-耗时:{{item.took_format}}
+
+
+ 得分:{{item.score}}
+
+
+
+
+
+
+
+
+
+
+ 到底了
+
+
+
+
+
\ No newline at end of file
diff --git a/test_mini/pages/admin/exam/detail.wxss b/test_mini/pages/admin/exam/detail.wxss
index c7c5173..8d4b5d6 100644
--- a/test_mini/pages/admin/exam/detail.wxss
+++ b/test_mini/pages/admin/exam/detail.wxss
@@ -1 +1,4 @@
-/* pages/admin/exam/detail.wxss */
\ No newline at end of file
+/* pages/admin/exam/detail.wxss */
+.weui-media-box {
+ padding: 12px;
+}
\ No newline at end of file
diff --git a/test_mini/pages/admin/exam/index.js b/test_mini/pages/admin/exam/index.js
index b22f606..779b458 100644
--- a/test_mini/pages/admin/exam/index.js
+++ b/test_mini/pages/admin/exam/index.js
@@ -1,20 +1,49 @@
// pages/admin/exam/index.js
+const api = require("../../../utils/request.js");
Page({
/**
* 页面的初始数据
*/
data: {
-
+ page:1,
+ isLoadedAll:false,
+ count:0,
+ results:[]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
-
+ this.getList(1)
+ },
+ getList: function(page) {
+ wx.showLoading({
+ title: '正在加载...',
+ })
+ api.requesta('/examtest/exam/', 'GET', {page:page}).then(res=>{
+ wx.hideLoading()
+ let results = this.data.results
+ let isLoadedAll = false
+ if(res.data.results){
+ if(page==1){results=res.data.results}else{
+ results = results.concat(res.data.results)
+ }
+ }
+ if(!res.data.next){
+ isLoadedAll = true
+ }
+ this.setData({
+ count:res.data.count,
+ results:results,
+ page:page,
+ isLoadedAll: isLoadedAll
+ })
+ }).catch(
+ wx.hideLoading()
+ )
},
-
/**
* 生命周期函数--监听页面初次渲染完成
*/
@@ -47,14 +76,17 @@ Page({
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
-
+ this.getList(1)
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
-
+ if(!this.data.isLoadedAll){
+ this.data.page=this.data.page+1
+ this.getList(this.data.page)
+ }
},
/**
diff --git a/test_mini/pages/admin/exam/index.json b/test_mini/pages/admin/exam/index.json
index 8835af0..eb97555 100644
--- a/test_mini/pages/admin/exam/index.json
+++ b/test_mini/pages/admin/exam/index.json
@@ -1,3 +1,4 @@
{
- "usingComponents": {}
+ "usingComponents": {},
+ "enablePullDownRefresh":true
}
\ No newline at end of file
diff --git a/test_mini/pages/admin/exam/index.wxml b/test_mini/pages/admin/exam/index.wxml
index cc138e1..525b2cf 100644
--- a/test_mini/pages/admin/exam/index.wxml
+++ b/test_mini/pages/admin/exam/index.wxml
@@ -1,2 +1,31 @@
-
-pages/admin/exam/index.wxml
+
+
+ 已发布的考试,共{{count}}场
+
+
+
+
+ 考试地点:{{item.place}}
+
+
+ 开关时间:{{item.opentime}}-{{item.closetime}}
+
+
+ 监考人:{{item.proctor_name}}-{{item.proctor_phone}}
+
+
+
+
+ 到底了
+
+
+
+
\ No newline at end of file
diff --git a/test_mini/pages/admin/index.js b/test_mini/pages/admin/index.js
index 6846dd2..6857d98 100644
--- a/test_mini/pages/admin/index.js
+++ b/test_mini/pages/admin/index.js
@@ -28,13 +28,21 @@ Page({
// 发送 res.code 到后台换取 openId, sessionKey, unionId
api.requesta('/rbac/user/bindmp/','POST', {code:res.code}).then(res=>{
getApp().globalData.admininfo.mpopenid = res.data.mpopenid
- wx.redirectTo({
- url: '/pages/admin/index',
- })
+ this.setData({
+ 'admininfo.mpopenid':res.data.mpopenid
+ })
})
}
})
},
+ unbindmp: function(){
+ api.requesta('/rbac/user/unbindmp/','POST').then(res=>{
+ getApp().globalData.admininfo.mpopenid = null
+ this.setData({
+ 'admininfo.mpopenid':null
+ })
+ })
+ },
/**
* 生命周期函数--监听页面初次渲染完成
*/
diff --git a/test_mini/pages/admin/index.wxml b/test_mini/pages/admin/index.wxml
index 6192f0e..d95310b 100644
--- a/test_mini/pages/admin/index.wxml
+++ b/test_mini/pages/admin/index.wxml
@@ -22,6 +22,7 @@
+
diff --git a/test_mini/pages/my/index.wxml b/test_mini/pages/my/index.wxml
index 1b415d7..7659c07 100644
--- a/test_mini/pages/my/index.wxml
+++ b/test_mini/pages/my/index.wxml
@@ -8,7 +8,7 @@
- 账号:
+ {{userinfo.role_name}}:
{{userinfo.username}}
账号:
diff --git a/test_mini/pages/workscope/index.js b/test_mini/pages/workscope/index.js
index 5359a3b..9bf0f5b 100644
--- a/test_mini/pages/workscope/index.js
+++ b/test_mini/pages/workscope/index.js
@@ -92,16 +92,31 @@ Page({
chooseWork: function (e) {
let work = e.currentTarget.dataset
- api.request(`/examtest/workscope/${work.id}/chose/`, 'GET').then(res => {
- //选择工作类别
- // that.setData({
- // workData:res.data
- // })
- getApp().globalData.userinfo.workscope = res.data.workscope
- getApp().globalData.userinfo.workscope_name = res.data.workscope_name
- wx.navigateBack({
- })
+ wx.showModal({
+ title: '提示',
+ content: '确定修改工作类别吗?',
+ confirmText: '确定',
+ cancelText: '取消',
+ success: function (res) {
+ if (res.confirm) {
+ api.request(`/examtest/workscope/${work.id}/chose/`, 'GET').then(res => {
+ //选择工作类别
+ // that.setData({
+ // workData:res.data
+ // })
+ wx.showToast({
+ title: '成功',
+ icon:'none'
+ })
+ getApp().globalData.userinfo.workscope = res.data.workscope
+ getApp().globalData.userinfo.workscope_name = res.data.workscope_name
+ wx.navigateBack({
+ })
+ })
+ }
+ }
})
+
//wx.setStorageSync('nowWork', work)
},
diff --git a/test_mini/pages/workscope/index.wxml b/test_mini/pages/workscope/index.wxml
index 1d1046b..aedee16 100644
--- a/test_mini/pages/workscope/index.wxml
+++ b/test_mini/pages/workscope/index.wxml
@@ -8,7 +8,7 @@
- 公开可选
+ 公开可选
该类别下包含{{item.questioncat.length}}个科目
diff --git a/test_mini/project.config.json b/test_mini/project.config.json
index 028731e..bc25de0 100644
--- a/test_mini/project.config.json
+++ b/test_mini/project.config.json
@@ -21,15 +21,13 @@
"checkSiteMap": true,
"uploadWithSourceMap": true,
"compileHotReLoad": false,
- "useMultiFrameRuntime": true,
+ "useMultiFrameRuntime": false,
"useApiHook": true,
- "useApiHostProcess": false,
"babelSetting": {
"ignore": [],
"disablePlugins": [],
"outputPath": ""
},
- "enableEngineNative": false,
"bundle": false,
"useIsolateContext": true,
"useCompilerModule": true,
diff --git a/test_server/crm/models.py b/test_server/crm/models.py
index 8c2cdc6..dd88649 100644
--- a/test_server/crm/models.py
+++ b/test_server/crm/models.py
@@ -110,4 +110,5 @@ class Candidate(CommonModel):
report_number = models.TextField('报告单号', null=True, blank=True)
issue_date = models.DateField('发证日期', null=True, blank=True)
start_date = models.DateField('有效期始', null=True, blank=True)
- end_date = models.DateField('有效期止', null=True, blank=True)
\ No newline at end of file
+ end_date = models.DateField('有效期止', null=True, blank=True)
+ examtest = models.ForeignKey(to='examtest.examtest', verbose_name='关联考试', null=True, blank=True, on_delete=models.CASCADE)
diff --git a/test_server/examtest/serializers.py b/test_server/examtest/serializers.py
index d7f668e..2829ea3 100644
--- a/test_server/examtest/serializers.py
+++ b/test_server/examtest/serializers.py
@@ -175,6 +175,12 @@ class ExamListSerializer(serializers.ModelSerializer):
class Meta:
model = Exam
fields = '__all__'
+
+ @staticmethod
+ def setup_eager_loading(queryset):
+ """ Perform necessary eager loading of data. """
+ queryset = queryset.prefetch_related('workscope','create_admin')
+ return queryset
class ExamSimpleSerializer(serializers.ModelSerializer):
class Meta:
@@ -186,9 +192,10 @@ class ConsumerSimpleSerializer(serializers.ModelSerializer):
class Meta:
model = Consumer
fields = ['id', 'name', 'ID_number1', 'comanyname', 'deptname', 'username']
+
class ExamTestDetailSerializer(serializers.ModelSerializer):
"""
- 考试详情序列化(导出用)
+ 考试详情序列化(导出用);目前是正式考试,用户详情从consumer_detail获取
"""
workscope_name = serializers.StringRelatedField(source='workscope', read_only=True)
paper_name = serializers.StringRelatedField(source='paper', )
diff --git a/test_server/examtest/views.py b/test_server/examtest/views.py
index 350a0d1..dd5ad55 100644
--- a/test_server/examtest/views.py
+++ b/test_server/examtest/views.py
@@ -33,6 +33,7 @@ from .serializers import (
WorkScopeSerializer, ExamCreateUpdateSerializer, ExamListSerializer, ExamTestDetailSerializer)
from django.utils import timezone
from django.db.models import Q
+from utils.pagination import PageOrNot
# Create your views here.
class ExamViewSet(ModelViewSet):
@@ -375,7 +376,7 @@ class TestRuleViewSet(ModelViewSet):
self.permission_classes = []
return [permission() for permission in self.permission_classes]
-class ExamTestViewSet(ModelViewSet):
+class ExamTestViewSet(PageOrNot, ModelViewSet):
"""
考试记录列表和详情
"""
diff --git a/test_server/init.json b/test_server/init.json
new file mode 100644
index 0000000..1474729
--- /dev/null
+++ b/test_server/init.json
@@ -0,0 +1 @@
+[{"model": "rbac.menu", "pk": 1, "fields": {"create_time": "2020-08-10T02:50:00Z", "update_time": "2020-09-02T04:03:14.146Z", "is_delete": false, "name": "\u5b66\u5458\u76f8\u5173", "type": "menu", "is_frame": false, "sort": 1, "pid": null, "method": "consumer_view"}}, {"model": "rbac.menu", "pk": 2, "fields": {"create_time": "2020-08-10T02:51:00Z", "update_time": "2020-08-10T02:51:42.612Z", "is_delete": false, "name": "\u65b0\u589e\u7528\u6237", "type": "api", "is_frame": false, "sort": 1, "pid": 1, "method": "consumer_create"}}, {"model": "rbac.menu", "pk": 3, "fields": {"create_time": "2020-08-10T02:51:00Z", "update_time": "2020-08-10T02:52:17.780Z", "is_delete": false, "name": "\u7f16\u8f91\u7528\u6237", "type": "api", "is_frame": false, "sort": 1, "pid": 1, "method": "consumer_update"}}, {"model": "rbac.menu", "pk": 4, "fields": {"create_time": "2020-08-10T02:52:00Z", "update_time": "2020-08-10T02:53:02.801Z", "is_delete": false, "name": "\u5220\u9664\u7528\u6237", "type": "api", "is_frame": false, "sort": 1, "pid": 1, "method": "consumer_delete"}}, {"model": "rbac.menu", "pk": 5, "fields": {"create_time": "2020-08-10T02:53:00Z", "update_time": "2020-08-10T02:55:22.206Z", "is_delete": false, "name": "\u89e3\u7ed1\u7528\u6237\u5fae\u4fe1", "type": "api", "is_frame": false, "sort": 1, "pid": 1, "method": "consumer_unbind"}}, {"model": "rbac.menu", "pk": 6, "fields": {"create_time": "2020-08-10T02:55:00Z", "update_time": "2020-08-10T02:55:48.745Z", "is_delete": false, "name": "\u5bfc\u5165\u7528\u6237", "type": "api", "is_frame": false, "sort": 1, "pid": 1, "method": "consumer_import"}}, {"model": "rbac.menu", "pk": 7, "fields": {"create_time": "2020-08-10T02:55:00Z", "update_time": "2021-03-21T05:22:21.678Z", "is_delete": false, "name": "\u67e5\u770b\u8003\u8bd5\u8bb0\u5f55", "type": "api", "is_frame": false, "sort": 1, "pid": 15, "method": "examtest_view"}}, {"model": "rbac.menu", "pk": 8, "fields": {"create_time": "2020-08-23T12:05:00Z", "update_time": "2020-08-23T12:07:20.329Z", "is_delete": false, "name": "\u5ba2\u6237\u4f01\u4e1a", "type": "menu", "is_frame": false, "sort": 1, "pid": null, "method": "company_view"}}, {"model": "rbac.menu", "pk": 9, "fields": {"create_time": "2020-08-23T12:05:00Z", "update_time": "2020-08-23T12:06:36.041Z", "is_delete": false, "name": "\u65b0\u589e\u516c\u53f8", "type": "api", "is_frame": false, "sort": 1, "pid": 8, "method": "company_create"}}, {"model": "rbac.menu", "pk": 10, "fields": {"create_time": "2020-08-23T12:06:00Z", "update_time": "2020-08-23T12:07:09.921Z", "is_delete": false, "name": "\u7f16\u8f91\u516c\u53f8", "type": "cata", "is_frame": false, "sort": 1, "pid": 8, "method": "company_update"}}, {"model": "rbac.menu", "pk": 11, "fields": {"create_time": "2020-08-26T06:35:00Z", "update_time": "2020-08-26T06:36:53.095Z", "is_delete": false, "name": "\u8ba4\u9886\u5b66\u5458", "type": "api", "is_frame": false, "sort": 1, "pid": 1, "method": "consumer_claim"}}, {"model": "rbac.menu", "pk": 12, "fields": {"create_time": "2020-09-02T04:02:00Z", "update_time": "2020-09-02T04:02:59.182Z", "is_delete": false, "name": "\u62a5\u544a\u5355\u67e5\u8be2", "type": "api", "is_frame": false, "sort": 5, "pid": 1, "method": "candidate_search"}}, {"model": "rbac.menu", "pk": 13, "fields": {"create_time": "2020-09-11T03:31:00Z", "update_time": "2020-09-11T03:38:56.321Z", "is_delete": false, "name": "\u5bfc\u51fa\u5b66\u5458", "type": "api", "is_frame": false, "sort": 1, "pid": 1, "method": "consumer__export"}}, {"model": "rbac.menu", "pk": 14, "fields": {"create_time": "2020-12-11T03:07:00Z", "update_time": "2020-12-18T01:52:01.746Z", "is_delete": false, "name": "\u6279\u91cf\u4fee\u6539\u5230\u671f", "type": "api", "is_frame": false, "sort": 1, "pid": 1, "method": "consumer_exceeddates"}}, {"model": "rbac.menu", "pk": 15, "fields": {"create_time": "2021-03-18T13:45:00Z", "update_time": "2021-03-21T05:22:30.987Z", "is_delete": false, "name": "\u8003\u8bd5\u76f8\u5173", "type": "cata", "is_frame": false, "sort": 1, "pid": null, "method": "exam_view"}}, {"model": "rbac.menu", "pk": 16, "fields": {"create_time": "2021-03-18T13:47:00Z", "update_time": "2021-03-18T13:47:44.704Z", "is_delete": false, "name": "\u521b\u5efa\u6b63\u5f0f\u8003\u8bd5", "type": "api", "is_frame": false, "sort": 1, "pid": 15, "method": "exam_create"}}, {"model": "rbac.menu", "pk": 17, "fields": {"create_time": "2021-03-18T13:47:00Z", "update_time": "2021-03-21T05:19:54.699Z", "is_delete": false, "name": "\u7f16\u8f91\u6b63\u5f0f\u8003\u8bd5", "type": "api", "is_frame": false, "sort": 1, "pid": 15, "method": "exam_update"}}, {"model": "rbac.menu", "pk": 18, "fields": {"create_time": "2021-03-18T13:48:00Z", "update_time": "2021-03-18T13:48:39.369Z", "is_delete": false, "name": "\u5220\u9664\u6b63\u5f0f\u8003\u8bd5", "type": "cata", "is_frame": false, "sort": 1, "pid": 15, "method": "exam_delete"}}, {"model": "rbac.menu", "pk": 20, "fields": {"create_time": "2021-03-21T05:19:00Z", "update_time": "2021-03-21T05:23:34.146Z", "is_delete": false, "name": "\u5bfc\u51fa\u8003\u8bd5\u8bb0\u5f55", "type": "api", "is_frame": false, "sort": 1, "pid": 15, "method": "examtest_export"}}, {"model": "rbac.menu", "pk": 21, "fields": {"create_time": "2021-03-21T05:20:00Z", "update_time": "2021-03-21T05:22:04.747Z", "is_delete": false, "name": "\u5220\u9664\u8003\u8bd5\u8bb0\u5f55", "type": "api", "is_frame": false, "sort": 1, "pid": 15, "method": "examtest_delete"}}, {"model": "rbac.role", "pk": 1, "fields": {"create_time": "2020-08-10T02:42:52Z", "update_time": "2021-03-21T05:37:45.317Z", "is_delete": false, "name": "\u666e\u901a\u7ba1\u7406", "desc": "\u53ef\u5bfc\u5165\u7528\u6237\u53ca\u53d1\u5e03\u8003\u8bd5\u7b49", "menus": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21]}}, {"model": "rbac.role", "pk": 2, "fields": {"create_time": "2021-04-05T10:53:53.129Z", "update_time": "2021-04-05T10:53:53.129Z", "is_delete": false, "name": "\u7701\u7ba1\u7406", "desc": "\u67e5\u770b\u672c\u7701\u7684\u4f01\u4e1a\u4ee5\u53ca\u5176\u5458\u5de5\u7684\u7ec3\u4e60\u548c\u8003\u8bd5\u60c5\u51b5", "menus": [1, 7, 8, 12, 15]}}, {"model": "rbac.role", "pk": 3, "fields": {"create_time": "2021-04-05T11:40:26.008Z", "update_time": "2021-04-05T11:40:26.008Z", "is_delete": false, "name": "\u672c\u5355\u4f4d\u7ba1\u7406", "desc": "\u67e5\u770b\u672c\u5355\u4f4d\u5458\u5de5\u7684\u7ec3\u4e60\u548c\u8003\u8bd5\u4fe1\u606f", "menus": [1, 7, 12, 15]}}, {"model": "crm.consumerperm", "pk": 1, "fields": {"create_time": "2020-06-27T07:18:00Z", "update_time": "2020-06-27T13:21:15.155Z", "is_delete": false, "name": "\u6a21\u62df\u8003\u8bd5", "code": "gen_monitest", "pid": null}}, {"model": "crm.consumerperm", "pk": 2, "fields": {"create_time": "2020-06-27T07:19:00Z", "update_time": "2020-06-27T07:21:04.973Z", "is_delete": false, "name": "\u67e5\u770b\u9898\u5e93\u5206\u7c7b", "code": "questioncat_view", "pid": null}}, {"model": "crm.consumerperm", "pk": 3, "fields": {"create_time": "2020-06-27T07:21:00Z", "update_time": "2020-06-27T07:22:28.403Z", "is_delete": false, "name": "\u4e2a\u4eba\u8003\u8bd5\u8bb0\u5f55/\u5206\u6790", "code": "my_examtest", "pid": null}}, {"model": "crm.consumerperm", "pk": 4, "fields": {"create_time": "2020-06-27T12:53:00Z", "update_time": "2020-06-27T12:53:27.834Z", "is_delete": false, "name": "\u4e2a\u4eba\u6536\u85cf\u96c6", "code": "my_collects", "pid": null}}, {"model": "crm.consumerperm", "pk": 5, "fields": {"create_time": "2020-06-27T12:53:00Z", "update_time": "2020-06-27T12:53:46.357Z", "is_delete": false, "name": "\u4e2a\u4eba\u5b66\u79d1", "code": "my_subjects", "pid": null}}, {"model": "crm.consumerperm", "pk": 6, "fields": {"create_time": "2020-06-27T13:21:00Z", "update_time": "2020-06-27T13:22:51.421Z", "is_delete": false, "name": "\u968f\u673a\u7ec3\u4e60", "code": "exercise", "pid": null}}, {"model": "crm.consumerperm", "pk": 7, "fields": {"create_time": "2020-06-27T13:21:00Z", "update_time": "2020-06-27T13:22:32.598Z", "is_delete": false, "name": "\u62bc\u5377\u8003\u8bd5", "code": "paper_view", "pid": null}}, {"model": "crm.consumerperm", "pk": 8, "fields": {"create_time": "2020-06-27T13:26:00Z", "update_time": "2020-06-27T13:26:40.526Z", "is_delete": false, "name": "\u8d44\u6599\u4e0b\u8f7d", "code": "down_material", "pid": null}}, {"model": "crm.consumerperm", "pk": 9, "fields": {"create_time": "2020-06-28T06:26:00Z", "update_time": "2020-06-28T06:27:13.521Z", "is_delete": false, "name": "\u9898\u76ee\u641c\u7d22", "code": "question_view", "pid": null}}, {"model": "crm.consumerperm", "pk": 13, "fields": {"create_time": "2021-03-18T13:49:00Z", "update_time": "2021-03-18T13:49:55.103Z", "is_delete": false, "name": "\u53c2\u52a0\u6b63\u5f0f\u8003\u8bd5", "code": "exam_attend", "pid": null}}, {"model": "crm.consumerrole", "pk": 1, "fields": {"create_time": "2020-06-27T11:59:09Z", "update_time": "2021-04-13T13:22:13.813Z", "is_delete": false, "name": "\u6e38\u5ba2", "description": "", "perms": [1, 2, 3, 4, 8]}}, {"model": "crm.consumerrole", "pk": 2, "fields": {"create_time": "2020-06-27T12:00:00Z", "update_time": "2021-04-13T13:24:12.248Z", "is_delete": false, "name": "\u6ce8\u518c\u7528\u6237", "description": "", "perms": [1, 2, 3, 4, 5, 6, 8]}}, {"model": "crm.consumerrole", "pk": 3, "fields": {"create_time": "2020-06-27T12:00:15Z", "update_time": "2021-03-18T13:50:33.649Z", "is_delete": false, "name": "\u4ed8\u8d39\u5b66\u5458", "description": "", "perms": [1, 2, 3, 4, 5, 6, 8, 9, 13]}}, {"model": "crm.consumerrole", "pk": 4, "fields": {"create_time": "2020-06-28T10:12:16Z", "update_time": "2021-03-18T13:50:38.041Z", "is_delete": false, "name": "\u57f9\u8bad\u73ed\u5b66\u5458", "description": "\u57f9\u8bad\u73ed\u5b66\u5458", "perms": [1, 2, 3, 4, 5, 6, 7, 8, 9, 13]}}]
\ No newline at end of file
diff --git a/test_server/rbac/views/user.py b/test_server/rbac/views/user.py
index b481c0e..c74aa99 100644
--- a/test_server/rbac/views/user.py
+++ b/test_server/rbac/views/user.py
@@ -179,5 +179,15 @@ class UserViewSet(PageOrNot, ModelViewSet):
user.mpopenid = openid
user.save()
return Response({'mpopenid':openid})
+
+ @action(methods=['post'], detail=False, permission_classes=[IsAuthenticated])
+ def unbindmp(self, request, pk=None):
+ """
+ 解绑微信
+ """
+ user = request.user
+ user.mpopenid = None
+ user.save()
+ return Response()
diff --git a/test_server/tmp/examtest - 副本.docx b/test_server/tmp/examtest - 副本.docx
new file mode 100644
index 0000000..0d384bb
Binary files /dev/null and b/test_server/tmp/examtest - 副本.docx differ
diff --git a/test_server/tmp/examtest.docx b/test_server/tmp/examtest.docx
index 0d384bb..a53bc75 100644
Binary files a/test_server/tmp/examtest.docx and b/test_server/tmp/examtest.docx differ
diff --git a/test_server/utils/pagination.py b/test_server/utils/pagination.py
index 675d8a8..09689f1 100644
--- a/test_server/utils/pagination.py
+++ b/test_server/utils/pagination.py
@@ -9,8 +9,8 @@ class PageOrNot:
def paginate_queryset(self, queryset):
if (self.paginator is None):
return None
- elif self.request.query_params.get('pageoff', None) and self.get_queryset().count()<500:
+ elif self.request.query_params.get('pageoff', None) and queryset.count()<500:
return None
- elif self.request.query_params.get('pageoff', None) and self.get_queryset().count()>=500:
+ elif self.request.query_params.get('pageoff', None) and queryset.count()>=500:
return ParseError('单次请求数据量大,请求中止')
return self.paginator.paginate_queryset(queryset, self.request, view=self)
\ No newline at end of file