证书核心功能开发完毕

This commit is contained in:
caoqianming 2021-06-07 22:40:58 +08:00
parent 95b67942cd
commit fb636ec86c
12 changed files with 203 additions and 19 deletions

View File

@ -25,7 +25,7 @@ App({
// var currentPage = pages[pages.length - 1] //获取当前页面的对象
// currentPage.showExp()
if(res.data.userinfo.role_name == '游客'){
if(res.data.userinfo.role_name == '游客' && this.globalData.rlogin){
//匿名用户
wx.reLaunch({
url: '/pages/login/login',
@ -70,10 +70,11 @@ 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 : '',
rlogin:true
}
})

View File

@ -38,7 +38,8 @@
"pages/admin/exam/detail",
"pages/admin/exam/index",
"pages/candidate/show",
"pages/admin/candidate/index"
"pages/admin/candidate/index",
"pages/candidate/my"
],
"window": {
"backgroundTextStyle": "light",
@ -95,7 +96,7 @@
},
"plugins": {
"tencentvideo": {
"version": "1.3.31",
"version": "1.4.0",
"provider": "wxa75efa648b60994b"
}
},

View File

@ -16,10 +16,10 @@ Page({
let id = options.id
this.getDetail(id)
},
getDetail: function(id){
api.request(`/crm/candidate/${id}/`, 'GET').then(res=>{
getDetail: function (id) {
api.request(`/crm/candidate/${id}/`, 'GET').then(res => {
this.setData({
candidate:res.data
candidate: res.data
})
})
},
@ -71,17 +71,40 @@ Page({
onShareAppMessage: function () {
},
godetail: function(e){
godetail: function (e) {
wx.navigateTo({
url: '/pages/test/detail?id='+this.data.candidate.examtest,
url: '/pages/test/detail?id=' + this.data.candidate.examtest,
})
},
goCandidate:function(e){
goCandidate: function (e) {
wx.navigateTo({
url: '/pages/candidate/show?number='+this.data.candidate.number,
url: '/pages/candidate/show?number=' + this.data.candidate.number,
})
},
downDoc: function(e){
downDoc: function (e) {
let id = this.data.candidate.id
wx.showLoading({
title: '正在生成...',
})
api.request(`/crm/candidate/${id}/down/`, 'GET').then(res => {
wx.showLoading({
title: '正在下载...',
})
wx.downloadFile({
url: getApp().globalData.host + res.data.path,
success(res) {
const filePath = res.tempFilePath
wx.openDocument({
filePath,
fileType: 'docx',
success: function (res) {
wx.hideLoading({
success: (res) => {},
})
}
})
}
})
})
}
})

View File

@ -1,5 +1,5 @@
<!--pages/candidate/detail.wxml-->
<view style="margin-left:4px;margin-right:4px">
<view style="margin-left:12px;margin-right:12px">
<image style="width: 100%;height:200px" src="/images/bg.png" mode="aspectFit"></image>
</view>
<view class="weui-panel__bd">

View File

@ -0,0 +1,89 @@
const api = require("../../utils/request.js");
Page({
/**
* 页面的初始数据
*/
data: {
results:[]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
this.getList()
},
getList: function() {
wx.showLoading({
title: '正在加载...',
})
api.request('/crm/candidate/my/', 'GET').then(res=>{
wx.hideLoading()
this.setData({
results:res.data,
})
}).catch(
wx.hideLoading()
)
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
},
scanC: function() {
wx.scanCode({
onlyFromCamera: true,
success(res) {
console.log(res)
let number = res.result.split('/')[6]
let id = number.substring(number.length-4).replace("0","")
wx.navigateTo({
url: 'detail?id=' + id,
})
}
})
}
})

View File

@ -0,0 +1,4 @@
{
"usingComponents": {},
"navigationBarTitleText": "Ⅲ类证书"
}

View File

@ -0,0 +1,30 @@
<view class="page__bd">
<a class="weui-btn weui-btn_primary" bindtap="scanC">扫一扫证书二维码</a>
<view class="weui-panel weui-panel_access">
<view class="weui-panel__hd">我的Ⅲ类证书</view>
<view class="weui-panel__bd" wx:if="{{results.length}}">
<navigator class="weui-media-box weui-media-box_text" wx:for="{{results}}" wx:key="unique" url="/pages/candidate/detail?id={{item.id}}">
<h4 class="weui-media-box__title">
<text style="color:blue;">{{item.consumer_name}}</text>
{{item.number}}
</h4>
<view class="weui-media-box__desc">
身份证号:{{item.ID_number}}
</view>
<view class="weui-media-box__desc">
工作类别:{{item.workscope_name}}
</view>
<view class="weui-media-box__desc">
期限:{{item.start_date}}至{{item.end_date}}
</view>
</navigator>
</view>
<view wx:else style="text-align:center">暂无证书信息</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 File

@ -0,0 +1 @@
/* pages/candidate/my.wxss */

View File

@ -32,6 +32,15 @@ Page({
},
submit: function(){
var that = this
var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
if(!reg.test(this.data.form.ID_number))
{
wx.showToast({
title: '身份证号有误',
icon:'none'
})
return false;
}
if(this.data.form.deptname&&this.data.form.code&&this.data.form.name&&this.data.form.company_name&&this.data.form.ID_number){
wx.showLoading({
title: '加入考试...',

View File

@ -88,6 +88,14 @@
</view>
<view class="weui-cell__bd">Ⅲ类自测入口</view>
<view class="weui-cell__ft weui-cell__ft_in-access" style="color:red"></view>
</navigator>
<navigator url="/pages/candidate/my" class="weui-cell weui-cell_access" hover-class="weui-cell_active">
<view class="weui-cell__hd">
<image src="/images/candidate.svg" style="margin-right: 16px;vertical-align: middle;width:20px; height: 20px;">
</image>
</view>
<view class="weui-cell__bd">Ⅲ类报告单</view>
<view class="weui-cell__ft weui-cell__ft_in-access" style="color:red"></view>
</navigator>
</view>
<view style="margin-top:6px">

View File

@ -651,6 +651,7 @@ def candidate(request, number):
candidate = Candidate.objects.get(number=number)
return render(request, 'index.html', {"candidate":candidate})
from examtest.exports import exportw_test
class CandidateViewSet(RetrieveModelMixin, ListModelMixin, GenericViewSet):
"""
出征记录:列表
@ -662,12 +663,13 @@ class CandidateViewSet(RetrieveModelMixin, ListModelMixin, GenericViewSet):
serializer_class = CandidateSerializer
pagination_class = CommonPagination
filter_backends = [DjangoFilterBackend,SearchFilter, OrderingFilter]
filterset_fields = ['consumer']
search_fields = ('number', 'consumer_name', 'workscope_name', 'company_name')
ordering_fields = ('-id', 'update_time')
ordering = ['-update_time']
def get_authenticators(self, request):
if self.request.action == 'retrieve':
def get_authenticators(self):
if self.detail:
return []
return super().get_authenticators()
@ -695,5 +697,16 @@ class CandidateViewSet(RetrieveModelMixin, ListModelMixin, GenericViewSet):
return Candidate.objects.none()
else:
return queryset.none()
print(queryset)
return queryset
return queryset
@action(methods=['get'], detail = True, authentication_classes=[], permission_classes=[])
def down(self, request, *args, **kwargs):
instance = self.queryset.get(*args, **kwargs)
path = exportw_test(instance.examtest, False)
return Response({'path': path})
@action(methods=['get'], detail = False, permission_classes=[])
def my(self, request, *args, **kwargs):
queryset = self.queryset.filter(consumer=request.user)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)

View File

@ -391,6 +391,11 @@ class ExamTestViewSet(PageOrNot, ModelViewSet):
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ['type','is_pass', 'exam']
def get_serializer_class(self):
if self.request.query_params.get('exam', None) or self.request.query_params.get('type') == '正式考试':
return ExamTestExamListSerializer
return ExamTestListSerializer
def filter_queryset(self, queryset):
for backend in list(self.filter_backends):
queryset = backend().filter_queryset(self.request, queryset, self)