workscope back

This commit is contained in:
caoqianming 2020-03-26 17:32:37 +08:00
parent 5698e0b2a2
commit 143e34d1ac
22 changed files with 185 additions and 133 deletions

View File

@ -108,6 +108,11 @@
</el-tag>
</template>
</el-table-column>
<el-table-column align="center" label="工作类别">
<template slot-scope="scope" >
<el-tag v-if="scope.row.workscope_name">{{ scope.row.workscope_name }}</el-tag>
</template>
</el-table-column>
<el-table-column label="创建日期">
<template slot-scope="scope">
<span>{{ scope.row.create_time }}</span>
@ -177,6 +182,17 @@
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="工作类别" prop="subjects">
<el-select v-model="consumer.workscope" placeholder="工作类别" style="width:100%" >
<el-option
v-for="item in workscopeData"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
</el-form>
@ -197,6 +213,7 @@ import {
importConsumer
} from "@/api/crm";
import { getSubjectAll } from "@/api/question"
import { getWorkScopeAll } from "@/api/examtest"
import { getCompanyList } from "@/api/crm";
import { genTree, deepClone } from "@/utils";
import checkPermission from "@/utils/permission";
@ -209,7 +226,8 @@ const defaultConsumer = {
name: "",
username: "",
company: null,
subjects:[]
subjects:[],
workscope:null
};
const listQuery = {
page: 1,
@ -253,6 +271,7 @@ export default {
treeLoding: false,
companyData: [],
subjectData: [],
workscopeData:[],
};
},
computed: {},
@ -260,6 +279,7 @@ export default {
this.getList();
this.getCompanyList();
this.getSubjectAll();
this.getWorkScopeAll();
},
methods: {
checkPermission,
@ -313,6 +333,11 @@ export default {
this.subjectData = genTree(response.data);
});
},
getWorkScopeAll() {
getWorkScopeAll().then(response => {
this.workscopeData = genTree(response.data);
});
},
resetFilter() {
this.listQuery = {
page: 1,

View File

@ -20,10 +20,6 @@ App({
wx.reLaunch({
url: '/pages/login/login',
})
}else if(res.data.userinfo.subjects){
try {
wx.setStorageSync('nowSubject', {id:res.data.userinfo.subjects[0],name:res.data.userinfo.subjects_name[0]})
} catch (e) { }
}
}
})
@ -52,9 +48,9 @@ App({
globalData: {
userInfo: null,
userinfo: null, // 服务器传回的消费者信息
host: 'https://apitest.ctcshe.com/',
// host: 'https://apitest.ctcshe.com/',
mediahost: 'https://apitest.ctcshe.com/',
// host: 'http://127.0.0.1:8000/',
host: 'http://127.0.0.1:8000/',
// mediahost: 'http://127.0.0.1:8000/',
token : '',
subject:null,

View File

@ -6,27 +6,25 @@ Page({
* 页面的初始数据
*/
data: {
questioncatData:[],
isLoad:true
questioncatData: [],
isLoad: true
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function () {
try {
var value = wx.getStorageSync('nowWork')
if (value) {
this.setData({
workscopeId: value.id
})
} else{
wx.switchTab({
url: '/pages/main/main',
})
}
} catch (e) {
if (getApp().globalData.userinfo.workscope) {
this.setData({
workscopeId: getApp().globalData.userinfo.workscope
})
} else {
wx.switchTab({
url: '/pages/main/main',
})
}
},
/**
@ -42,10 +40,10 @@ Page({
onShow: function () {
this.getList()
},
getList: function (){
var that = this
if(that.data.workscopeId){
api.request('question/questioncat/workscope/', 'GET', { 'id': that.data.workscopeId }).then(res => {
getList: function () {
var that = this
if (that.data.workscopeId) {
api.request('question/questioncat/workscope/', 'GET', { 'id': that.data.workscopeId }).then(res => {
let questioncatData = []
if (res.data.length > 0) {
for (var i = 0; i < res.data.length; i++) {
@ -61,10 +59,10 @@ Page({
questioncatData: that.showYd(questioncatData)
})
}
})
}
},
})
}
},
showYd: function (cat) {
for (var i = 0; i < cat.length; i++) {
try {
@ -111,10 +109,10 @@ Page({
onShareAppMessage: function () {
},
startLianxi: function (e) {
wx.navigateTo({
url: 'main?questioncat='+e.currentTarget.id,
url: 'main?questioncat=' + e.currentTarget.id,
})
},
restartLianxi: function (e) {

View File

@ -71,11 +71,11 @@ Page({
* 生命周期函数--监听页面显示
*/
onShow: function () {
if(wx.getStorageSync('nowWork')){
this.setData({
nowWork: wx.getStorageSync('nowWork')
})
}
// if(wx.getStorageSync('nowWork')){
// this.setData({
// nowWork: wx.getStorageSync('nowWork')
// })
// }
},
/**
@ -112,36 +112,34 @@ Page({
onShareAppMessage: function () {
},
chooseWork: function () {
wx.navigateTo({
url: '/pages/workscope/index',
})
},
// chooseWork: function () {
// wx.navigateTo({
// url: '/pages/workscope/index',
// })
// },
goLianxi: function () {
let nowWork = wx.getStorageSync('nowWork')
if (nowWork){
if (getApp().globalData.userinfo.workscope){
wx.navigateTo({
url: '/pages/lianxi/index',
})
}else{
wx.showToast({
title: '请先选择工作类别',
title: '未开通权限\r\n请联系顾问师圆',
icon: 'none',
duration: 1500
duration: 2000
})
}
},
goMoni: function () {
let nowWork = wx.getStorageSync('nowWork')
if (nowWork) {
if (getApp().globalData.userinfo.workscope) {
wx.navigateTo({
url: '/pages/moni/index',
})
} else {
wx.showToast({
title: '请先选择工作类别',
title: '未开通权限\r\n请联系顾问师圆',
icon: 'none',
duration: 1500
duration: 2000
})
}
},

View File

@ -8,11 +8,12 @@
</block>
</swiper>
<view style="margin-top:4px">
<a class="weui-btn weui-btn_primary" bindtap="chooseWork">选择工作类别</a>
<view style="color:blue;font-weight:bold;text-align:center">
当前工作类别:
<span style="color:orange;font-weight:bold" wx:if="{{nowWork}}">{{nowWork.name}}</span>
<span style="color:orange;font-weight:bold" wx:else>未选择</span>
欢迎使用中科辐射学堂!
<view style="color:orange;font-weight:bold">
<view >如有疑问请联系顾问师圆</view>
<view >18355135390(微信同号)</view>
</view>
</view>
</view>
<view class="weui-cells__title">练习</view>

View File

@ -14,20 +14,13 @@ Page({
* 生命周期函数--监听页面加载
*/
onLoad: function () {
try {
var value = wx.getStorageSync('nowWork')
if (value) {
this.setData({
workId: value.id
})
this.genPaper()
}else{
wx.navigateBack({
})
}
} catch (e) {
wx.navigateBack({
if (getApp().globalData.userinfo.workscope) {
this.setData({
workscopeId: getApp().globalData.userinfo.workscope
})
} else {
wx.switchTab({
url: '/pages/main/main',
})
}
},

View File

@ -9,7 +9,7 @@ Page({
total:0,
avg_score:0,
pass_rate:0,
nowSubject:'点击选择'
nowWork:'点击选择'
},
/**
@ -32,15 +32,6 @@ Page({
* 生命周期函数--监听页面显示
*/
onShow: function () {
try {
var value = wx.getStorageSync('nowSubject')
if (value) {
this.setData({
nowSubject: value.name
})
}
} catch (e) {
}
api.request('examtest/myexamtestfx', 'GET').then(res => {
this.setData(res.data)
})

View File

@ -26,10 +26,15 @@
</view>
<view class="weui-cells__title">统计分析</view>
<view class="weui-cells weui-cells_after-title">
<navigator class="weui-cell" url="/pages/subject/index">
<view class="weui-cell__bd">当前学科</view>
<view class="weui-cell__ft" style="font-weight:bold;color:darkblue">{{nowSubject}}</view>
</navigator>
<view class="weui-cell" >
<view class="weui-cell__bd">工作类别</view>
<view class="weui-cell__ft" style="font-weight:bold;color:darkblue"
wx:if="{{userinfo.workscope_name}}"
>{{userinfo.workscope_name}}</view>
<view class="weui-cell__ft" style="font-weight:bold;color:darkblue"
wx:else
>无</view>
</view>
<view class="weui-cell">
<view class="weui-cell__bd">自助模考数量</view>
<view class="weui-cell__ft" style="font-weight:bold;color:darkblue">{{total}}</view>

View File

@ -0,0 +1,20 @@
# Generated by Django 3.0.4 on 2020-03-26 07:24
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('examtest', '0016_auto_20200325_1610'),
('crm', '0010_auto_20200324_1621'),
]
operations = [
migrations.AddField(
model_name='consumer',
name='workscope',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='examtest.WorkScope', verbose_name='工作类别'),
),
]

View File

@ -2,6 +2,7 @@ from django.db import models
import django.utils.timezone as timezone
from rbac.models import SoftCommonModel, CommonModel
from question.models import Questioncat, Question
from examtest.models_paper import WorkScope
# Create your models here.
class Company(SoftCommonModel):
@ -29,6 +30,7 @@ class Consumer(SoftCommonModel):
avatar = models.CharField(default='/media/default/avatar.png',max_length=1000, null=True, blank=True, verbose_name='头像')
nickname = models.CharField(max_length=200, verbose_name='昵称', null=True, blank=True)
subjects = models.ManyToManyField(Questioncat, verbose_name='付费学科', through='PaySubject')
workscope = models.ForeignKey(WorkScope, verbose_name='工作类别', on_delete=models.SET_NULL, null=True, blank=True)
collects = models.ManyToManyField(Question, verbose_name='收藏试题')

View File

@ -22,6 +22,7 @@ class ConsumerSerializer(serializers.ModelSerializer):
update_time = serializers.DateTimeField(format="%Y-%m-%d %H:%M:%S", required=False, read_only=True)
company_name = serializers.StringRelatedField(source='company', read_only=True)
subjects_name = serializers.StringRelatedField(source='subjects', many=True, read_only=True)
workscope_name = serializers.StringRelatedField(source='workscope', read_only=True)
class Meta:
model = Consumer

View File

@ -27,6 +27,7 @@ from crm.permission import IsConsumerAuthenticated
from .models import Company, Consumer, PaySubject, SendCode
from .serializers import CompanySerializer, ConsumerSerializer
from question.serializers import QuestionSerializer
from examtest.models_paper import WorkScope
from server import settings
from question.models import Questioncat
from crm.zhenzismsclient import ZhenziSmsClient
@ -101,8 +102,8 @@ class ConsumerViewSet(ModelViewSet):
queryset = Consumer.objects.filter(is_delete=0).all()
serializer_class = ConsumerSerializer
pagination_class = CommonPagination
ordering_fields = ('id',)
ordering = ['company']
ordering_fields = ('id','company','create_time')
ordering = ['company','-create_time']
filter_backends = [DjangoFilterBackend, SearchFilter, OrderingFilter]
filterset_fields = ('company',)
search_fields = ('^name',)
@ -145,7 +146,7 @@ class ConsumerViewSet(ModelViewSet):
url_path='sendcode', url_name='code_send')
def sendcode(self, request):
'''
发送二维
发送验证
'''
client = ZhenziSmsClient(sms_url, sms_appid, sms_appsecret)
code = random.randint(1000,9999)
@ -204,34 +205,44 @@ class ConsumerViewSet(ModelViewSet):
return Response({"error":"单位列错误!"})
if sheet['d2'].value != '付费学科':
return Response({"error":"付费学科列错误!"})
if sheet['e2'].value != '工作类别':
return Response({"error":"工作类别列错误!"})
companydict = {}
consumerdict = {}
companys = Company.objects.filter(is_delete=0)
for i in companys:
companydict[i.name] = i.id
i = 3
while sheet['B'+str(i)].value:
name = sheet['A'+str(i)].value
m = 3
while sheet['B'+str(m)].value:
name = sheet['A'+str(m)].value
if name:
name = name.replace(' ', '')
username = sheet['B'+str(i)].value
username = sheet['B'+str(m)].value
if username:
username = str(username).replace(' ', '')
companyname = sheet['C'+str(i)].value
companyname = sheet['C'+str(m)].value
if companyname:
companyname = companyname.replace(' ', '')
if companyname not in companydict:
return Response({"error":"不存在单位("+companyname+")!请先新建"})
else:
companyobj = Company.objects.get(id=companydict[companyname])
subjects = sheet['d'+str(i)].value
subjects = sheet['d'+str(m)].value
workscope = sheet['e'+str(m)].value
if Consumer.objects.filter(username = username).exists():
consumerdict[username]=i
consumerdict[username]=m
else:
obj = Consumer()
obj.name = name
obj.username = username
obj.company = companyobj
if workscope:
workscope = workscope.replace(' ', '')
try:
workscopeobj = WorkScope.objects.get(name=workscope)
obj.workscope = workscopeobj
except:
pass
obj.save()
if subjects:
subjects_list = subjects.replace(' ','').split(',')
@ -239,7 +250,8 @@ class ConsumerViewSet(ModelViewSet):
queryset = Questioncat.objects.filter(name=i,is_subject=True,is_delete=False)
if queryset.exists():
PaySubject.objects.create(subject=queryset.first(), consumer=obj)
i = i + 1
m = m + 1
return Response(status=status.HTTP_200_OK)
@ -306,4 +318,6 @@ class ConsumerRegister(APIView):
else:
return Response({'error':'验证码错误!'})
else:
return Response({'error':'认证错误!'})
return Response({'error':'认证错误!'})
else:
return Response({'error':'信息不全!'})

View File

@ -3,46 +3,9 @@ from rbac.models import SoftCommonModel, CommonModel
from django.contrib.postgres.fields import JSONField, ArrayField
from question.models import Questioncat, Question
from crm.models import Consumer
from .models_paper import WorkScope, Paper
# Create your models here.
class TestRule(SoftCommonModel):
name = models.CharField(max_length=200, unique=True, verbose_name='名称')
danxuan_count = models.IntegerField(default=0, verbose_name='单选数量')
danxuan_score = models.FloatField(default=0, verbose_name='单选分数')
duoxuan_count = models.IntegerField(default=0, verbose_name='多选数量')
duoxuan_score = models.FloatField(default=0, verbose_name='多选分数')
panduan_count = models.IntegerField(default=0, verbose_name='判断数量')
panduan_score = models.FloatField(default=0, verbose_name='判断分数')
limit = models.IntegerField(default=0, verbose_name='限时(分钟)')
total_score = models.FloatField(default=0, verbose_name='满分')
pass_score = models.FloatField(default=0, verbose_name='及格分数')
class Meta:
verbose_name = '出题规则'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class WorkScope(SoftCommonModel):
name = models.CharField(max_length=200, unique=True, verbose_name='名称')
subject = models.ForeignKey(Questioncat, verbose_name='所属学科', on_delete=models.CASCADE , related_name='workscope_subject')
questioncat = models.ManyToManyField(Questioncat, verbose_name='所选科目')
rule = models.ForeignKey(TestRule, on_delete=models.CASCADE, verbose_name='试卷结构')
class Meta:
verbose_name = '工作类别'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Paper(SoftCommonModel):
name = models.CharField(max_length=200, verbose_name='名称')
class ExamTest(CommonModel):
'''
硬删除

View File

@ -0,0 +1,43 @@
from django.db import models
from rbac.models import SoftCommonModel, CommonModel
from django.contrib.postgres.fields import JSONField, ArrayField
from question.models import Questioncat, Question
# Create your models here.
class TestRule(SoftCommonModel):
name = models.CharField(max_length=200, unique=True, verbose_name='名称')
danxuan_count = models.IntegerField(default=0, verbose_name='单选数量')
danxuan_score = models.FloatField(default=0, verbose_name='单选分数')
duoxuan_count = models.IntegerField(default=0, verbose_name='多选数量')
duoxuan_score = models.FloatField(default=0, verbose_name='多选分数')
panduan_count = models.IntegerField(default=0, verbose_name='判断数量')
panduan_score = models.FloatField(default=0, verbose_name='判断分数')
limit = models.IntegerField(default=0, verbose_name='限时(分钟)')
total_score = models.FloatField(default=0, verbose_name='满分')
pass_score = models.FloatField(default=0, verbose_name='及格分数')
class Meta:
verbose_name = '出题规则'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class WorkScope(SoftCommonModel):
name = models.CharField(max_length=200, unique=True, verbose_name='名称')
subject = models.ForeignKey(Questioncat, verbose_name='所属学科', on_delete=models.CASCADE , related_name='workscope_subject')
questioncat = models.ManyToManyField(Questioncat, verbose_name='所选科目')
rule = models.ForeignKey(TestRule, on_delete=models.CASCADE, verbose_name='试卷结构')
class Meta:
verbose_name = '工作类别'
verbose_name_plural = verbose_name
def __str__(self):
return self.name
class Paper(SoftCommonModel):
name = models.CharField(max_length=200, verbose_name='名称')

View File

@ -1,7 +1,8 @@
from rest_framework import serializers
from question.models import Questioncat
from crm.models import Consumer
from .models import TestRule, ExamTest, AnswerDetail, WorkScope
from .models import ExamTest, AnswerDetail
from .models_paper import TestRule, WorkScope

View File

@ -16,7 +16,8 @@ from utils.custom import CommonPagination
from rbac.permission import RbacPermission
from question.models import Question
from question.serializers import QuestionSerializer
from .models import TestRule, ExamTest, AnswerDetail, WorkScope
from .models import ExamTest, AnswerDetail
from .models_paper import TestRule, WorkScope
from .serializers import TestRuleSerializer, MoniTestSerializer, AnswerDetailSerializer, ExamTestListSerializer, AnswerDetailCreateSerializer, WorkScopeSerializer
from server import settings
from crm.authentication import ConsumerTokenAuthentication