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 @@ 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.name}} +

+ + {{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.workscope_name}} + {{item.name}} +

+ + 考试地点:{{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.name}}

- 公开可选 + 公开可选 该类别下包含{{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