diff --git a/test_client/src/api/candidate.js b/test_client/src/api/candidate.js
index 7847e2d..d5fb260 100644
--- a/test_client/src/api/candidate.js
+++ b/test_client/src/api/candidate.js
@@ -17,6 +17,14 @@ export function createCandidate(data){
})
}
+export function importCertificate(data){
+ return request({
+ url:'/crm/candidate/import/',
+ method: 'post',
+ data
+ })
+}
+
export function updateCandidate(id, data) {
return request({
url: `/crm/candidate/${id}/`,
diff --git a/test_client/src/views/exam/issue.vue b/test_client/src/views/exam/issue.vue
index 978b455..014dff5 100644
--- a/test_client/src/views/exam/issue.vue
+++ b/test_client/src/views/exam/issue.vue
@@ -19,6 +19,23 @@
type="primary"
@click="handleAdd"
>手动创建
+
+ 导入题目前,请下载模板并按格式录入.
+
+ 下载模板
+
+ 上传导入
+
+
+ 批量导入
+
@@ -267,6 +284,7 @@
import {
getCandidateList,
createCandidate,
+ importCertificate,
updateCandidate
} from '@/api/candidate'
import {
@@ -286,6 +304,7 @@ export default {
components: { Pagination },
data() {
return {
+ popovervisible: false,
uploadUrl: process.env.VUE_APP_BASE_API,
upHeaders: upHeaders(),
upUrl: upUrl(),
@@ -326,6 +345,31 @@ export default {
handleAvatarSuccess(res, file) {
this.candidate.photo = res.data.path
},
+ handleUploadSuccess(res, file) {
+ if (res.code == 200) {
+ const loading = this.$loading({ text: "正在导入中..." })
+ importCertificate(res.data).then(response => {
+ loading.close()
+ if (response.code == 200) {
+ this.$message({
+ message: '导入成功',
+ type: 'success'
+ });
+ this.getList(listQuery)
+ } else if (response.code == 206) {
+ this.$message({
+ message: '部分未成功' + response.data,
+ type: 'success'
+ });
+ } else {
+ this.$message.error(response.msg);
+ }
+
+ });
+ } else {
+ this.$message.error("Excel上传失败!");
+ }
+ },
getOpllevelName(value) {
console.log(value, 'value')
const numValue = Number(value)
diff --git a/test_server/crm/views.py b/test_server/crm/views.py
index b6b60d9..0e47e0d 100644
--- a/test_server/crm/views.py
+++ b/test_server/crm/views.py
@@ -795,7 +795,68 @@ class CandidateViewSet(RetrieveModelMixin, ListModelMixin, CreateModelMixin, Upd
queryset = self.queryset.filter(consumer=request.user)
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
+
+ @action(methods=['post'], detail=False, url_path='import', url_name='import_certificate')
+ def import_consumer(self, request):
+ """
+ 导入证书
+ """
+ xlsxpath = request.data['path']
+ fullpath = settings.BASE_DIR + xlsxpath
+ wb = load_workbook(fullpath)
+ sheet = wb.worksheets[0]
+ # 验证文件内容
+ if sheet['a1'].value != '证书号':
+ return Response({"error":"证书号列错误!"})
+ if sheet['b1'].value != '姓名':
+ return Response({"error":"姓名列错误!"})
+ if sheet['c1'].value != '性别':
+ return Response({"error":"性别列错误!"})
+ if sheet['d1'].value != '身份证号':
+ return Response({"error":"身份证号列错误!"})
+ if sheet['e1'].value != '工作类别':
+ return Response({"error":"工作类别列错误!"})
+ if sheet['f1'].value != '职业等级':
+ return Response({"error":"职业等级列错误!"})
+ if sheet['g1'].value != '单位':
+ return Response({"error":"单位列错误!"})
+ if sheet['h1'].value != '发证日期':
+ return Response({"error":"发证日期列错误!"})
+ m = 2
+ while sheet['B'+str(m)].value:
+ number = sheet['A'+str(m)].value
+ if number:
+ number = str(number).replace(' ', '')
+ consumer_name = sheet['B'+str(m)].value
+ if consumer_name:
+ consumer_name = str(consumer_name).replace(' ', '').replace("\n", "")
+ gender = sheet['C'+str(m)].value
+ if gender:
+ gender = str(gender).replace(' ', '').replace("\n", "")
+ ID_number = sheet['D'+str(m)].value
+ if ID_number:
+ ID_number = str(ID_number).replace(' ', '').replace("\n", "")
+ workscope_name = sheet['E'+str(m)].value
+ if workscope_name:
+ workscope_name = str(workscope_name).replace(' ', '').replace("\n", "")
+ opllevel = sheet['F'+str(m)].valueki
+ company_name = sheet['G'+str(m)].value
+ if company_name:
+ company_name = str(company_name).replace(' ', '').replace("\n", "")
+ issue_date = sheet['H'+str(m)].value
+ if issue_date:
+ # 检查时间格式是否为年月日
+ try:
+ issue_date = datetime.strftime(issue_date, '%Y-%m-%d')
+ except ValueError:
+ return Response({"error":"发证日期格式错误!"})
+ obj = Candidate(number=number, consumer_name=consumer_name, gender=gender,issue_date = issue_date, create_admin = self.request.user,
+ ID_number=ID_number, workscope_name=workscope_name, opllevel=opllevel, company_name=company_name)
+ obj.save()
+ m = m + 1
+ return Response(status=status.HTTP_200_OK)
+
class MsgViewSet(CreateModelMixin, ListModelMixin, GenericViewSet):
perms_map = [