fix conflict
This commit is contained in:
commit
63017b3c4f
Binary file not shown.
|
@ -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
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
</el-table-column>
|
||||
<el-table-column label="创建人">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ scope.row.create_admin_name }}</span>
|
||||
<span>{{ scope.row.create_admin_username }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" label="操作" fixed="right">
|
||||
|
|
|
@ -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 : '',
|
||||
}
|
||||
|
|
|
@ -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: '正在生成...',
|
||||
})
|
||||
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
|
|
|
@ -1,2 +1,64 @@
|
|||
<!--pages/admin/exam/detail.wxml-->
|
||||
<text>pages/admin/exam/detail.wxml</text>
|
||||
<view class="page">
|
||||
<view class="page__bd">
|
||||
<view style="height:4px"></view>
|
||||
<view class="weui-panel weui-panel_access" style="margin:8px">
|
||||
<view class="weui-panel__hd">{{exam.name}}</view>
|
||||
<view class="weui-panel__bd">
|
||||
<view class="weui-media-box weui-media-box_text">
|
||||
<!-- <h4 class="weui-media-box__title">标题一</h4> -->
|
||||
<view class="weui-media-box__desc">
|
||||
工作类别:{{exam.workscope_name}}
|
||||
</view>
|
||||
<view class="weui-media-box__desc">
|
||||
考试地点:{{exam.place}}
|
||||
</view>
|
||||
<view class="weui-media-box__desc">
|
||||
开关时间:{{exam.opentime}}-{{exam.closetime}}
|
||||
</view>
|
||||
<view class="weui-media-box__desc">
|
||||
监考人:{{exam.proctor_name}}-{{exam.proctor_phone}}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="weui-panel weui-panel_access">
|
||||
<view class="weui-panel__hd">共{{tests.length}}名人员参加考试</view>
|
||||
<view class="weui-panel__bd">
|
||||
<view class="weui-media-box weui-media-box_text" wx:for="{{tests}}" wx:key="unique">
|
||||
<h4 class="weui-media-box__title">
|
||||
<text style="color:green;" wx:if="{{item.is_pass}}">通过</text>
|
||||
<text style="color:red;" wx:else>未过</text>
|
||||
{{item.consumer_detail.name}}
|
||||
</h4>
|
||||
<view class="weui-media-box__desc">
|
||||
{{item.consumer_detail.company_name}} {{item.consumer_detail.deptname}}
|
||||
</view>
|
||||
<view class="weui-media-box__desc">
|
||||
身份证号:{{item.consumer_detail.ID_number}}
|
||||
</view>
|
||||
<view class="weui-media-box__desc">
|
||||
开始答题:{{item.start_time}}-耗时:{{item.took_format}}
|
||||
</view>
|
||||
<view class="weui-media-box__desc">
|
||||
得分:{{item.score}}
|
||||
</view>
|
||||
<view style="text-align:right;padding-right:8rpx">
|
||||
<button type="primary" size="mini" bindtap="issue">颁发证书</button>
|
||||
<button type="default" size="mini" bindtap="unbindmp" style="margin-left:4px">查看证书</button>
|
||||
<button type="default" size="mini" bindtap="logout" style="margin-left:4px">答卷详情</button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<view class="weui-loadmore weui-loadmore_line" wx:if="{{isLoadedAll}}">
|
||||
<text class="weui-loadmore__tips">到底了</text>
|
||||
</view>
|
||||
<!-- <view class="weui-panel__ft">
|
||||
<a class="weui-cell weui-cell_active weui-cell_access weui-cell_link">
|
||||
<view class="weui-cell__bd">查看更多</view>
|
||||
<text class="weui-cell__ft"></text>
|
||||
</a>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
|
@ -1 +1,4 @@
|
|||
/* pages/admin/exam/detail.wxss */
|
||||
.weui-media-box {
|
||||
padding: 12px;
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
{
|
||||
"usingComponents": {}
|
||||
"usingComponents": {},
|
||||
"enablePullDownRefresh":true
|
||||
}
|
|
@ -1,2 +1,31 @@
|
|||
<!--pages/admin/exam/index.wxml-->
|
||||
<text>pages/admin/exam/index.wxml</text>
|
||||
<view class="page__bd">
|
||||
<view class="weui-panel weui-panel_access">
|
||||
<view class="weui-panel__hd">已发布的考试,共{{count}}场</view>
|
||||
<view class="weui-panel__bd">
|
||||
<navigator class="weui-media-box weui-media-box_text" wx:for="{{results}}" wx:key="unique" url="detail?id={{item.id}}">
|
||||
<h4 class="weui-media-box__title">
|
||||
<text style="color:blue;">{{item.workscope_name}}</text>
|
||||
{{item.name}}
|
||||
</h4>
|
||||
<view class="weui-media-box__desc">
|
||||
考试地点:{{item.place}}
|
||||
</view>
|
||||
<view class="weui-media-box__desc">
|
||||
开关时间:{{item.opentime}}-{{item.closetime}}
|
||||
</view>
|
||||
<view class="weui-media-box__desc">
|
||||
监考人:{{item.proctor_name}}-{{item.proctor_phone}}
|
||||
</view>
|
||||
</navigator>
|
||||
</view>
|
||||
<view class="weui-loadmore weui-loadmore_line" wx:if="{{isLoadedAll}}">
|
||||
<text class="weui-loadmore__tips">到底了</text>
|
||||
</view>
|
||||
<!-- <view class="weui-panel__ft">
|
||||
<a class="weui-cell weui-cell_active weui-cell_access weui-cell_link">
|
||||
<view class="weui-cell__bd">查看更多</view>
|
||||
<text class="weui-cell__ft"></text>
|
||||
</a>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
|
@ -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
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 生命周期函数--监听页面初次渲染完成
|
||||
*/
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
</view>
|
||||
<view style="text-align:right;padding-right:8rpx">
|
||||
<button type="primary" size="mini" bindtap="bindmp" wx:if="{{!admininfo.mpopenid}}">绑定微信</button>
|
||||
<button type="default" size="mini" bindtap="unbindmp" wx:else>解绑</button>
|
||||
<button type="warn" size="mini" bindtap="logout" style="margin-left:4rpx">退出</button>
|
||||
</view>
|
||||
</view>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
</view>
|
||||
<view class="weui-media-box__bd weui-media-box__bd_in-appmsg">
|
||||
<view class="weui-media-box__title" wx:if="{{userinfo && userinfo.username}}">
|
||||
<span>账号:</span>
|
||||
<span>{{userinfo.role_name}}:</span>
|
||||
<span style="font-weight:bold;">{{userinfo.username}}</span>
|
||||
</view>
|
||||
<view class="weui-media-box__title" wx:else>账号:
|
||||
|
|
|
@ -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)
|
||||
|
||||
},
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<view class="weui-media-box__bd">
|
||||
<h4 class="weui-media-box__title">{{item.name}}</h4>
|
||||
<view class="weui-media-box__desc">
|
||||
<span style="color:blue;border:1rpx solid blue;font-size:12px" wx:if="{{item.can_exam}}">公开可选</span>
|
||||
<span style="color:blue;border:1rpx solid blue;font-size:10px" wx:if="{{item.can_exam}}">公开可选</span>
|
||||
该类别下包含<span style="color:darkblue">{{item.questioncat.length}}</span>个科目
|
||||
</view>
|
||||
</view>
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -111,3 +111,4 @@ class Candidate(CommonModel):
|
|||
issue_date = models.DateField('发证日期', null=True, blank=True)
|
||||
start_date = models.DateField('有效期始', null=True, blank=True)
|
||||
end_date = models.DateField('有效期止', null=True, blank=True)
|
||||
examtest = models.ForeignKey(to='examtest.examtest', verbose_name='关联考试', null=True, blank=True, on_delete=models.CASCADE)
|
||||
|
|
|
@ -176,6 +176,12 @@ class ExamListSerializer(serializers.ModelSerializer):
|
|||
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:
|
||||
model = Exam
|
||||
|
@ -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', )
|
||||
|
|
|
@ -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):
|
||||
"""
|
||||
考试记录列表和详情
|
||||
"""
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -180,4 +180,14 @@ class UserViewSet(PageOrNot, ModelViewSet):
|
|||
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()
|
||||
|
||||
|
||||
|
|
Binary file not shown.
Binary file not shown.
|
@ -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)
|
Loading…
Reference in New Issue