Django项目:CRM(客户关系管理系统)--79--69PerfectCRM实现CRM业务流程(bpm)学生讲师分页
1 # student_views.py 2 # ————————60PerfectCRM实现CRM学生上课记录———————— 3 from django.shortcuts import render #页面返回 4 from crm import models #数据库 5 from django.contrib.auth.decorators import login_required # 登陆后页面才能访问 6 7 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 8 from bpm.bpm_auxiliary.pagination import Page #分页 9 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 10 11 #学生报名的课程 12 @login_required # 登陆后页面才能访问 13 def student_course(request): 14 if request.user.stu_account: 15 enrollmentlist=request.user.stu_account.enrollment_set.all()#根据账号表关联的ID获取06学员报名信息表 16 17 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 18 page = Page(request.GET.get('p', 1), len(enrollmentlist)) #当前页数 默认为1 #总数量 19 enrollmentlist = enrollmentlist[page.start:page.end] # 切片取当前页的数据 20 page_str = page.page_str('/bpm/student_course/') #总页数 传入url 21 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 22 23 return render(request, 'bpm_student/student_course.html', locals()) 24 25 #学生上课记录列表 26 @login_required # 登陆后页面才能访问 27 def studyrecords(request,enroll_obj_id): 28 enroll_obj=models.Enrollment.objects.get(id=enroll_obj_id)#根据ID获取06学员报名信息表 29 studyrecordlist=enroll_obj.studyrecord_set.all()#根据06学员报名信息表的ID获取09学习纪录 30 31 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 32 page = Page(request.GET.get('p', 1), len(studyrecordlist)) #当前页数 默认为1 #总数量 33 studyrecordlist = studyrecordlist[page.start:page.end] # 切片取当前页的数据 34 page_str = page.page_str('/bpm/studyrecords/%s/'%enroll_obj_id) #总页数 传入url 35 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 36 37 return render(request,'bpm_student/studyrecords.html',locals()) 38 39 # ————————60PerfectCRM实现CRM学生上课记录———————— 40 41 # ————————61PerfectCRM实现CRM学生上传作业———————— 42 from django.contrib.auth.decorators import login_required #登陆才能访问 43 from PerfectCRM import settings #静态配置文件 #作业上传 # 上传路径 44 import os,json,time #系统操作 45 from django.shortcuts import HttpResponse #页面返回 46 from django.shortcuts import redirect #页面返回 47 #作业详情 48 @login_required#登陆才能访问 49 def homework_detail(request,enroll_obj_id,studyrecord_id): 50 studyrecord_obj=models.StudyRecord.objects.get(id=studyrecord_id)#取学习记录 对象 51 enroll_obj=models.Enrollment.objects.get(id=enroll_obj_id)#取班级对象 52 53 # 作业根目录 班级ID 上课记录ID 学习记录ID 54 homework_path="{base_dir}/{class_id}/{course_record_id}/{studyercord_id}/".format( 55 base_dir=settings.HOMEWORK_DATA, #静态配置文件 56 class_id=studyrecord_obj.student.enrolled_class_id,#09学习纪录#学生名字#所报班级ID号 57 course_record_id=studyrecord_obj.course_record_id,#09学习纪录#每节课上课纪录表 58 studyercord_id=studyrecord_obj.id##09学习纪录 59 ) 60 print('homework_path路径:',studyrecord_obj.student.enrolled_class_id,studyrecord_obj.course_record_id,studyrecord_obj.id) 61 62 if os.path.exists(homework_path):#判断目录是否存在 63 file_lists = [] # 已经上传的文件列表 64 for file_name in os.listdir( homework_path ): 65 f_path = '%s/%s' % (homework_path, file_name) # 文件名字 66 modify_time = time.strftime( "%Y-%m-%d %H:%M:%S", time.gmtime( os.stat( f_path ).st_mtime ) ) # 文件上传时间 67 file_lists.append( [file_name, os.stat( f_path ).st_size, modify_time] ) # 添加到文件列表#文件名字#文件大小文件上传时间 68 69 70 if request.method=="POST":#上传 71 ret=False 72 data=request.POST.get('data') #ajax 73 if data:#如果有删除动作 74 del_f_path="%s/%s"%(homework_path,data)#文件路径 75 print('删除文件,路径:',del_f_path) 76 os.remove(del_f_path) #删除 77 ret=True 78 return HttpResponse(json.dumps(ret))#ret=False 79 if request.is_ajax(): # ajax上传图片 #异步提交 80 print("POST",request.POST) 81 if not os.path.isdir( homework_path ): # 没有目录 #isdir返回true,如果路径名是指现有的目录。 82 os.makedirs( homework_path, exist_ok=True ) # 创建目录 83 for k,v in request.FILES.items():#上传的文件 84 with open('%s/%s'%(homework_path,v.name),'wb') as f:#chunk 写入文件 85 for chunk in v.chunks(): #循环写文件 86 f.write(chunk) 87 return HttpResponse( json.dumps( {"status": 0, 'mag': "上传完成!", 'file_lists': file_lists} ) ) # 上传文件返回 88 89 if request.method=="POST":#上传 90 link = request.POST.get( 'link' ) # 让页面POST提交的值,在页面GET后仍然存在显示 91 if link: 92 homework_link=models.StudyRecord.objects.filter( id=studyrecord_id ).update(homework_link=link) 93 return redirect('/bpm/homework_detail/%s/%s/' %(enroll_obj_id,studyrecord_id) )#跳转到enrollment_rejection 94 return render(request,'bpm_student/homework_detail.html',locals()) 95 # ————————61PerfectCRM实现CRM学生上传作业————————
1 {#student_course.html#} 2 {## ————————60PerfectCRM实现CRM学生上课记录————————#} 3 {% extends 'bpm_master/bpm_sample.html' %} 4 {% load bpm_tags %} 5 {% block right-container-content %} {#自定义内容开始 右边页面内容#} 6 <div class="panel-default"> 7 <div class="panel-body"> 8 <h4>当前用户: {{ request.user }} | 学员名字:{{ request.user.stu_account.name }} | 9 学员QQ:{{ request.user.stu_account }}</h4> 10 <ol class="breadcrumb"> 11 <li><a href="/bpm/student_course/">我的课程</a></li> 12 </ol> 13 <table class="table table-striped table-responsive"> 14 <thead> 15 <tr> 16 <th>校区班级</th> 17 <th>班级类型</th> 18 <th>课程进度</th> 19 <th>课程成绩</th> 20 <th>开课日期</th> 21 <th>结业日期</th> 22 </tr> 23 </thead> 24 25 26 <tbody> 27 {% for enroll_obj in enrollmentlist %} 28 <tr> 29 <td>{{ enroll_obj.enrolled_class }}</td> 30 {#校区班级#} 31 <td>{{ enroll_obj.enrolled_class.get_class_type_display }}</td> 32 {#班级类型#} 33 <td> 34 <a href="{% url 'studyrecords' enroll_obj.id %}">已上: {{ enroll_obj.enrolled_class.courserecord_set.all.count }}节</a> 35 </td> 36 {#课程进度#} 37 <td> 38 {% get_score enroll_obj request.user.stu_account as score_data %}{{ score_data.score__sum }}</td> 39 {#课程成绩#} 40 <td>{{ enroll_obj.enrolled_class.start_date }}</td> 41 {#开课日期#} 42 <td>{{ enroll_obj.enrolled_class.end_date }}</td> 43 {#结业日期#} 44 </tr> 45 {% endfor %} 46 </tbody> 47 </table> 48 49 {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} 50 {% include 'bpm_components/page_str.html' %} 51 {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} 52 53 </div> 54 </div> 55 {% endblock %} 56 {## ————————60PerfectCRM实现CRM学生上课记录————————#}
1 {#studyrecords.html#} 2 {## ————————60PerfectCRM实现CRM学生上课记录————————#} 3 {% extends 'bpm_master/bpm_sample.html' %} 4 {% load bpm_tags %} 5 {% block right-container-content %} {#自定义内容开始 右边页面内容#} 6 <div class="panel-default"> 7 <div class="panel-body"> 8 <h4>当前用户: {{ request.user }} | 学员名字:{{ request.user.stu_account.name }} | 9 学员QQ:{{ request.user.stu_account }}</h4> 10 <ol class="breadcrumb"> 11 <li><a href="/bpm/student_course/">我的课程</a></li> 12 <li><a href="/bpm/studyrecords/{{ enroll_obj.id }}/">{{ enroll_obj.enrolled_class }}</a></li> 13 </ol> 14 15 <table class="table table-striped table-responsive "> 16 <thead> 17 <tr> 18 <th>课程节次</th> 19 <th>签到状态</th> 20 <th>本节作业</th> 21 <th>本节成绩</th> 22 <th>本节讲师</th> 23 <th>上课日期</th> 24 <th>本节大纲</th> 25 <th>作业标题</th> 26 <th>作业要求</th> 27 </tr> 28 </thead> 29 30 31 <tbody> 32 {% for studyrecord in studyrecordlist %} 33 <tr> 34 <td>{{ studyrecord.course_record.day_num }}</td> 35 {#课程节次#} 36 <td>{{ studyrecord.get_attendance_display }}</td> 37 {#签到状态#} 38 <td> 39 <a href="{% url 'homework_detail' enroll_obj.id studyrecord.id %}"> 40 {{ studyrecord.course_record.has_homework }} 41 </a> 42 </td> 43 {#本节作业#} 44 <td>{{ studyrecord.get_score_display }}</td> 45 {#本节成绩#} 46 <td>{{ studyrecord.course_record.teacher }}</td> 47 {#本节讲师#} 48 <td>{{ studyrecord.course_record.date }}</td> 49 {#上课日期#} 50 <td> 51 <pre style="width: 240px;height: 60px">{{ studyrecord.course_record.outline }}</pre> 52 {#本节大纲#} 53 </td> 54 <td> 55 <pre style="width: 240px;height: 60px">{{ studyrecord.course_record.homework_title }}</pre> 56 {#作业标题#} 57 </td> 58 <td> 59 <pre style="width: 240px;height: 60px">{{ studyrecord.course_record.homework_content }}</pre> 60 {#作业要求#} 61 </td> 62 </tr> 63 {% endfor %} 64 </tbody> 65 </table> 66 67 {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} 68 {% include 'bpm_components/page_str.html' %} 69 {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} 70 71 </div> 72 </div> 73 {% endblock %} 74 {## ————————60PerfectCRM实现CRM学生上课记录————————#}
1 # teacher_views.py 2 # ————————62PerfectCRM实现CRM讲师讲课记录———————— 3 from django.contrib.auth.decorators import login_required # 登陆后页面才能访问 4 from django.shortcuts import render #页面返回 5 6 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 7 from bpm.bpm_auxiliary.pagination import Page #分页 8 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 9 10 # 讲师班级 11 @login_required # 登陆后页面才能访问 12 def teacher_class(request): 13 # user_id=request.user.id #当前登陆的ID 14 # classlist=models.UserProfile.objects.get(id=user_id).classlist_set.all()#讲师所教班级 15 classes_obj = request.user.classlist_set.all() # 根据 登陆的ID 获取02班级表 16 17 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 18 page = Page(request.GET.get('p', 1), len(classes_obj)) #当前页数 默认为1 #总数量 19 classes_obj = classes_obj[page.start:page.end] # 切片取当前页的数据 20 page_str = page.page_str('/bpm/teacher_class/') #总页数 传入url 21 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 22 23 return render( request, 'bpm_teacher/teacher_class.html', locals() ) 24 25 # 讲师班级课节详情 26 @login_required # 登陆后页面才能访问 27 def teacher_class_detail(request, class_id): 28 # user_id=request.user.id #当前登陆的ID 29 # classes_obj=models.UserProfile.objects.get(id=user_id).classlist_set.get(id=class_id)#所选的班级 30 classes_obj = request.user.classlist_set.get( id=class_id ) # 根据 登陆的ID 获取02班级表 31 courserecordlist = classes_obj.courserecord_set.all() # 根据 02班级表的ID 获取09学习纪录 32 33 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 34 page = Page( request.GET.get( 'p', 1 ), len( courserecordlist ) ) # 当前页数 默认为1 #总数量 35 courserecordlist = courserecordlist[page.start:page.end] # 切片取当前页的数据 36 page_str = page.page_str('/bpm/teacher_class_detail/%s/'%class_id) #总页数 传入url 37 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 38 39 return render( request, 'bpm_teacher/teacher_classes_detail.html', locals() ) 40 # ————————62PerfectCRM实现CRM讲师讲课记录———————— 41 42 # ————————63PerfectCRM实现CRM讲师下载作业———————— 43 from PerfectCRM import settings # 系统配置 44 import os # 系统操作 45 # 本节课的学员 46 @login_required # 登陆后页面才能访问 47 def teacher_lesson_detail(request, class_id, courserecord_id): 48 # classes_obj=models.UserProfile.objects.get(id=request.user.id).classlist_set.get(id=class_id)#所选的班级 49 classes_obj = request.user.classlist_set.get( id=class_id ) # 根据 登陆的ID 获取02班级表 50 courserecordlist = classes_obj.courserecord_set.get( id=courserecord_id ) # 根据 前端的ID 获取08每节课上课纪录表 51 52 # studyrecord_list=models.CourseRecord.objects.get(id=courserecord_id).studyrecord_set.all()#取本节课所有学员 53 studyrecord_list = courserecordlist.studyrecord_set.all() # 根据08每节课上课纪录表 #获取09学习纪录 #取本节课所有学员 54 55 for i in studyrecord_list: # 循环本节课所有学员 交作业的状态 56 studyrecord_id = i.id # 获取本节课所有学员的ID 57 if studyrecord_id: # 有获取到ID 58 HOMEWORK_path = '%s/%s/%s/%s/' % (settings.HOMEWORK_DATA, class_id, courserecord_id, studyrecord_id) # 作业目录 59 if os.path.exists( HOMEWORK_path ): # 判断目录是否存在 60 try:#防止后台误删文件 61 file_list = os.listdir( HOMEWORK_path ) # 取目录 下的文件 62 isfile = os.path.isfile( '%s%s' % (HOMEWORK_path, file_list[0]) ) # 判断是不是文件 63 studyrecord_list.filter( id=studyrecord_id ).update( delivery=isfile ) # 更新交付作业状态 64 except: 65 studyrecord_list.filter( id=studyrecord_id ).update( delivery=False ) # file_list 出错# 更新交付作业状态 66 else: 67 studyrecord_list.filter( id=studyrecord_id ).update( delivery=False )# 更新交付作业状态 68 69 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 70 page = Page( request.GET.get( 'p', 1 ), len( studyrecord_list ) ) # 当前页数 默认为1 #总数量 71 studyrecord_list = studyrecord_list[page.start:page.end] # 切片取当前页的数据 72 page_str = page.page_str('/bpm/teacher_lesson_detail/%s/%s/'%(class_id,courserecord_id)) # 总页数 传入url 73 # ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页———————— 74 75 return render( request, 'bpm_teacher/teacher_lesson_detail.html', locals() ) 76 77 from django.http import StreamingHttpResponse #页面返回 78 from crm import models #数据库 79 from django.shortcuts import redirect #页面返回 80 # 学员作业下载 81 @login_required # 登陆后页面才能访问 82 def howk_down(request, class_id, courserecord_id, studyrecord_id): 83 HOMEWORK_path = '%s/%s/%s/%s/' % (settings.HOMEWORK_DATA, class_id, courserecord_id, studyrecord_id) # 作业目录 84 print( '下载作业目录:', HOMEWORK_path ) 85 86 def file_iterator(file_path, chunk_size=512): # 获取文件 #chunk_size每次读取的大小 #文件迭代器 87 with open( file_path, 'rb', ) as f: # 循环打开 文件#以二进制读模式打开 88 while True: # 如果有文件 89 byte = f.read( chunk_size ) # read读最多大小字节,作为字节返回。#获取文件大小 90 if byte: 91 yield byte # 返回 yield 后的值作为第一次迭代的返回值. 循环下一次,再返回,直到没有可以返回的。 92 else: 93 break # 没有字节就中止 94 95 if os.path.exists( HOMEWORK_path ): # 判断目录是否存在 96 try:#防止后台误删文件 97 file_list = os.listdir( HOMEWORK_path ) # 取目录 下的文件 98 print( '文件名:', file_list, type( file_list ) ) 99 file_path = '%s%s' % (HOMEWORK_path, file_list[0]) # 下载文件路径 100 print( '下载文件路径:', file_path ) 101 response = StreamingHttpResponse( file_iterator( file_path ) ) # StreamingHttpResponse是将文件内容进行流式传输 102 response['Content-Type'] = 'application/octet-stream' # 文件类型 #应用程序/octet-stream.*( 二进制流,不知道下载文件类型) 103 file_name = 'attachment;filename=%s' % file_list[0] # 文件名字# 支持中文 104 response['Content-Disposition'] = file_name.encode() # 支持中文#编码默认encoding='utf-8' 105 return response # 返回下载 请求的内容 106 except: 107 models.StudyRecord.objects.get( id=studyrecord_id ).update( delivery=False ) # 更新交付作业状态 # file_list 出错 108 return redirect( '/bpm/teacher_lesson_detail/%s/%s/' % (class_id, courserecord_id) ) # 返回##本节课的学员 109 # ————————63PerfectCRM实现CRM讲师下载作业————————
1 {#teacher_class.html#} 2 {## ————————62PerfectCRM实现CRM讲师讲课记录————————#} 3 {% extends 'bpm_master/bpm_sample.html' %} 4 {% block right-container-content %} {#自定义内容开始 右边页面内容#} 5 <div class="panel-default"> 6 <div class="panel-body"> 7 <h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} | 8 讲师QQ:{{ request.user.stu_account }}</h4> 9 <ol class="breadcrumb"> 10 <li><a href="/bpm/teacher_class/">我的班级</a></li> 11 </ol> 12 <table class="table table-striped table-responsive"> 13 <thead> 14 <tr> 15 <th><a target="_blank" href="/king_admin/crm/classlist/add/">校区班级</a></th> 16 <th>班级类型</th> 17 <th><a target="_blank" href="/king_admin/crm/courserecord/add/">课程进度</a></th> 18 <th><a target="_blank" href="/king_admin/crm/customer/">学员数量</a></th> 19 <th>开课日期</th> 20 <th>结业日期</th> 21 </tr> 22 </thead> 23 <tbody> 24 {% for class in classes_obj %} 25 <tr> 26 <td> 27 {## ————————64PerfectCRM实现CRM课程排名详情————————#} 28 <a href="{% url 'coursetop_details' class.id %}"> 29 {## ————————64PerfectCRM实现CRM课程排名详情————————#} 30 {{ class }} 31 </a> 32 </td> 33 <td>{{ class.get_class_type_display }}</td> 34 <td> 35 <a href="{% url 'teacher_class_detail' class.id %}"> 36 已上: {{ class.courserecord_set.all.count }}节 37 </a> 38 </td> 39 <td>{{ class.enrollment_set.select_related.count }}</td> 40 <td>{{ class.start_date }}</td> 41 <td>{{ class.end_date }}</td> 42 </tr> 43 {% endfor %} 44 </tbody> 45 </table> 46 47 {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} 48 {% include 'bpm_components/page_str.html' %} 49 {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} 50 51 </div> 52 </div> 53 {% endblock %} 54 {## ————————62PerfectCRM实现CRM讲师讲课记录————————#}
1 {#teacher_classes_detail.html#} 2 {## ————————62PerfectCRM实现CRM讲师讲课记录————————#} 3 {% extends 'bpm_master/bpm_sample.html' %} 4 {% block right-container-content %} {#自定义内容开始 右边页面内容#} 5 <div class="panel-default"> 6 <div class="panel-default"> 7 <div class="panel-body"> 8 <h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} | 9 讲师QQ:{{ request.user.stu_account }} </h4> 10 <ol class="breadcrumb"> 11 <li><a href="/bpm/teacher_class/">我的班级</a></li> 12 <li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li> 13 </ol> 14 <table class="table table-striped table-responsive "> 15 <thead> 16 <tr> 17 <th><a target="_blank" href="/king_admin/crm/courserecord/add/">课程节次</a></th> 18 <th>签到状态</th> 19 <th>本节作业</th> 20 <th>上课日期</th> 21 <th>本节大纲</th> 22 <th>作业标题</th> 23 <th>作业要求</th> 24 </tr> 25 </thead> 26 27 28 <tbody> 29 {% for courserecord in courserecordlist %} 30 <tr> 31 <td><a target="_blank" 32 href="/king_admin/crm/courserecord/{{ courserecord.id }}/change/">第 {{ courserecord.day_num }}节</a> 33 </td> 34 {#课程节次#} 35 <td> 36 <a target="_blank" 37 href="/king_admin/crm/studyrecord/?course_record={{ courserecord.id }} ">点名/成绩</a> 38 </td> 39 {#签到状态#} 40 <td> 41 {## ————————63PerfectCRM实现CRM讲师下载作业————————#} 42 <a href="{% url 'teacher_lesson_detail' class_id courserecord.id %}"> 43 {## ————————63PerfectCRM实现CRM讲师下载作业————————#} 44 {{ courserecord.has_homework }} 45 </a> 46 </td> 47 {#本节作业#} 48 <td> {{ courserecord.date }}</td> 49 {#上课日期#} 50 <td> 51 <pre style="width: 240px;height: 60px">{{ courserecord.outline }} </pre> 52 </td> 53 {#本节大纲#} 54 <td> 55 <pre style="width: 240px;height: 60px">{{ courserecord.homework_title }}</pre> 56 </td> 57 {#作业标题#} 58 <td> 59 <pre style="width: 240px;height: 60px">{{ courserecord.homework_content }} </pre> 60 </td> 61 {#作业要求#} 62 </tr> 63 {% endfor %} 64 </tbody> 65 </table> 66 67 {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} 68 {% include 'bpm_components/page_str.html' %} 69 {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} 70 71 </div> 72 </div> 73 </div> 74 {% endblock %} 75 {## ————————62PerfectCRM实现CRM讲师讲课记录————————#}
1 {#teacher_lesson_detail.html#} 2 {## ————————63PerfectCRM实现CRM讲师下载作业————————#} 3 {% extends 'bpm_master/bpm_sample.html' %} 4 {% block right-container-content %} {#自定义内容开始 右边页面内容#} 5 <div class="panel-default"> 6 <div class="panel-default"> 7 <div class="panel-body"> 8 <h4>当前用户: {{ request.user }} | 讲师名字:{{ request.user.stu_account.name }} | 9 讲师QQ:{{ request.user.stu_account }} </h4> 10 <ol class="breadcrumb"> 11 <li><a href="/bpm/teacher_class/">我的班级</a></li> 12 <li><a href="{% url 'teacher_class_detail' classes_obj.id %}">{{ classes_obj }}</a></li> 13 <li> 14 <a href="{% url 'teacher_lesson_detail' classes_obj.id courserecordlist.id %}">第{{ courserecordlist.day_num }}节</a> 15 </li> 16 </ol> 17 <li> 18 <a target="_blank" 19 href="/king_admin/crm/courserecord/{{ courserecordlist.id }}/change/">作业标题:</a> 20 <pre>{{ courserecordlist.homework_title }}</pre> 21 </li> 22 <li> 23 <a target="_blank" 24 href="/king_admin/crm/courserecord/{{ courserecordlist.id }}/change/">作业要求:</a> 25 <pre>{{ courserecordlist.homework_content }}</pre> 26 </li> 27 28 29 <table class="table table-striped table-responsive"> 30 <thead> 31 <tr> 32 <th>学员ID</th> 33 <th>学员姓名</th> 34 <th> 35 <a target="_blank" href="/king_admin/crm/studyrecord/?course_record={{ courserecord_id }} ">签到状态</a> 36 </th> 37 <th> 作业链接</th> 38 <th> 39 {% if courserecordlist.has_homework %} 40 <a href="{% url 'teacher_lesson_detail' classes_obj.id courserecordlist.id %}">学员作业(多刷) </a> 41 {% else %} 42 <a style="color: #ff1900" target="_blank" 43 href="/king_admin/crm/courserecord/{{ courserecordlist.id }}/change/">创建新作业</a> 44 {% endif %} 45 </th> 46 <th> 47 {% if courserecordlist.has_homework %} 48 <a href="{% url 'teacher_lesson_detail' classes_obj.id courserecordlist.id %}">批改作业 </a> 49 {% else %} 50 没有作业 51 {% endif %} 52 </th> 53 </tr> 54 </thead> 55 56 57 <tbody> 58 {% for studyrecrd in studyrecord_list %} 59 <tr> 60 <td>{{ studyrecrd.student.id }}</td> 61 {#学员ID#} 62 <td>{{ studyrecrd.student.customer.name }}</td> 63 {#学员姓名#} 64 <td>{{ studyrecrd.get_attendance_display }}</td> 65 {#签到状态#} 66 <td> 67 <pre style="width: 240px;height: 60px">{{ studyrecrd.homework_link }}</pre> 68 </td> 69 {#作业链接#} 70 <td> 71 {% if studyrecrd.delivery %} 72 <a href="{% url 'howk_down' classes_obj.id studyrecrd.course_record_id studyrecrd.id %}">下载作业</a> 73 {% endif %}{#学员作业#} 74 </td> 75 <td> 76 {% if studyrecrd.course_record.has_homework %} 77 {% if studyrecrd.score == 0 %} 78 <a target="_blank" 79 href="/king_admin/crm/studyrecord/{{ studyrecrd.id }}/change/" 80 style="color: #ff1600">未批改</a> 81 {% else %} 82 <a target="_blank" 83 href="/king_admin/crm/studyrecord/{{ studyrecrd.id }}/change/" 84 style="color: #0014ff">{{ studyrecrd.get_score_display }}</a> 85 {% endif %} 86 {% endif %}{#批改作业#} 87 </td> 88 </tr> 89 {% endfor %} 90 </tbody> 91 </table> 92 93 {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} 94 {% include 'bpm_components/page_str.html' %} 95 {## ————————69PerfectCRM实现CRM业务流程(bpm)学生讲师分页————————#} 96 97 </div> 98 </div> 99 </div> 100 {% endblock %} 101 {## ————————63PerfectCRM实现CRM讲师下载作业————————#}
您的资助是我最大的动力!
金额随意,欢迎来赏!
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的
因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【颜言】!