candidate search
This commit is contained in:
parent
0053c1d52e
commit
ec81c5b3e2
|
|
@ -875,75 +875,6 @@
|
|||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@ckeditor/ckeditor5-build-classic": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-build-classic/-/ckeditor5-build-classic-18.0.0.tgz",
|
||||
"integrity": "sha512-7nyaDU5sUSl+7wXPwr0d5bOlO2e0LRQh2iJJCJfAjjuUESwtiBGoFC+Ql5dEht0xlfARoSWQMlkUvGuHOVja7A=="
|
||||
},
|
||||
"@ckeditor/ckeditor5-core": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/@ckeditor/ckeditor5-core/download/@ckeditor/ckeditor5-core-18.0.0.tgz",
|
||||
"integrity": "sha1-71NcvrPEgY1GPkXnhEY/k3vy1js=",
|
||||
"requires": {
|
||||
"@ckeditor/ckeditor5-engine": "^18.0.0",
|
||||
"@ckeditor/ckeditor5-utils": "^18.0.0",
|
||||
"lodash-es": "^4.17.10"
|
||||
}
|
||||
},
|
||||
"@ckeditor/ckeditor5-editor-classic": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/@ckeditor/ckeditor5-editor-classic/download/@ckeditor/ckeditor5-editor-classic-18.0.0.tgz",
|
||||
"integrity": "sha1-YquzsVFShohUzoJJ/8MKRT8k/ek=",
|
||||
"requires": {
|
||||
"@ckeditor/ckeditor5-core": "^18.0.0",
|
||||
"@ckeditor/ckeditor5-engine": "^18.0.0",
|
||||
"@ckeditor/ckeditor5-ui": "^18.0.0",
|
||||
"@ckeditor/ckeditor5-utils": "^18.0.0",
|
||||
"lodash-es": "^4.17.10"
|
||||
}
|
||||
},
|
||||
"@ckeditor/ckeditor5-engine": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/@ckeditor/ckeditor5-engine/download/@ckeditor/ckeditor5-engine-18.0.0.tgz",
|
||||
"integrity": "sha1-iKtK8/zggGuQ/drZjJDRYkFlst4=",
|
||||
"requires": {
|
||||
"@ckeditor/ckeditor5-utils": "^18.0.0",
|
||||
"lodash-es": "^4.17.10"
|
||||
}
|
||||
},
|
||||
"@ckeditor/ckeditor5-ui": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/@ckeditor/ckeditor5-ui/download/@ckeditor/ckeditor5-ui-18.0.0.tgz",
|
||||
"integrity": "sha1-GSlSk6IwAR3tU/5OYgQFppwMsRU=",
|
||||
"requires": {
|
||||
"@ckeditor/ckeditor5-core": "^18.0.0",
|
||||
"@ckeditor/ckeditor5-utils": "^18.0.0",
|
||||
"lodash-es": "^4.17.10"
|
||||
}
|
||||
},
|
||||
"@ckeditor/ckeditor5-upload": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/@ckeditor/ckeditor5-upload/download/@ckeditor/ckeditor5-upload-18.0.0.tgz",
|
||||
"integrity": "sha1-ay1FTh3+rcKQQW7UrkJNGGQktfo=",
|
||||
"requires": {
|
||||
"@ckeditor/ckeditor5-core": "^18.0.0",
|
||||
"@ckeditor/ckeditor5-ui": "^18.0.0",
|
||||
"@ckeditor/ckeditor5-utils": "^18.0.0"
|
||||
}
|
||||
},
|
||||
"@ckeditor/ckeditor5-utils": {
|
||||
"version": "18.0.0",
|
||||
"resolved": "https://registry.npm.taobao.org/@ckeditor/ckeditor5-utils/download/@ckeditor/ckeditor5-utils-18.0.0.tgz",
|
||||
"integrity": "sha1-lc1mYcAA6RV+u3BSoUKp2qNLU4g=",
|
||||
"requires": {
|
||||
"lodash-es": "^4.17.10"
|
||||
}
|
||||
},
|
||||
"@ckeditor/ckeditor5-vue": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-vue/-/ckeditor5-vue-1.0.1.tgz",
|
||||
"integrity": "sha512-4MaQwZ04cWwqYW0732sg2aqx9ILeHIP0LSLKUuLCLR21qYONZPvxY/V/czh1DH99toaL/iwPvEoJtO2ldriPaA=="
|
||||
},
|
||||
"@hapi/address": {
|
||||
"version": "2.1.4",
|
||||
"resolved": "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Faddress%2Fdownload%2F%40hapi%2Faddress-2.1.4.tgz",
|
||||
|
|
@ -3485,12 +3416,11 @@
|
|||
"dev": true
|
||||
},
|
||||
"cfb": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npm.taobao.org/cfb/download/cfb-1.1.3.tgz",
|
||||
"integrity": "sha1-Bd5oFiWcjovDJxOrqQVgjuOF32Y=",
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/cfb/download/cfb-1.2.0.tgz",
|
||||
"integrity": "sha1-ak0IcrUl7WA0nh71H7Swv3Psqag=",
|
||||
"requires": {
|
||||
"adler-32": "~1.2.0",
|
||||
"commander": "^2.16.0",
|
||||
"crc-32": "~1.2.0",
|
||||
"printj": "~1.1.2"
|
||||
}
|
||||
|
|
@ -3577,14 +3507,6 @@
|
|||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"ckeditor4-vue": {
|
||||
"version": "0.2.0",
|
||||
"resolved": "https://registry.npm.taobao.org/ckeditor4-vue/download/ckeditor4-vue-0.2.0.tgz",
|
||||
"integrity": "sha1-blzFN9dsQEm31CPYapeqFBivUQA=",
|
||||
"requires": {
|
||||
"load-script": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"class-utils": {
|
||||
"version": "0.3.6",
|
||||
"resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz",
|
||||
|
|
@ -3735,7 +3657,7 @@
|
|||
"dependencies": {
|
||||
"commander": {
|
||||
"version": "2.14.1",
|
||||
"resolved": "https://registry.npm.taobao.org/commander/download/commander-2.14.1.tgz?cache=0&sync_timestamp=1580710597193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.14.1.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/commander/download/commander-2.14.1.tgz?cache=0&sync_timestamp=1598576046744&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.14.1.tgz",
|
||||
"integrity": "sha1-IjUSPjevjKPGXfRbAm29NXsBuao="
|
||||
}
|
||||
}
|
||||
|
|
@ -3797,7 +3719,8 @@
|
|||
"commander": {
|
||||
"version": "2.20.3",
|
||||
"resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz",
|
||||
"integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM="
|
||||
"integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=",
|
||||
"dev": true
|
||||
},
|
||||
"commondir": {
|
||||
"version": "1.0.1",
|
||||
|
|
@ -9860,11 +9783,6 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"load-script": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz",
|
||||
"integrity": "sha1-BJGTngvuVkPuSUp+PaPSuscMbKQ="
|
||||
},
|
||||
"loader-fs-cache": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npm.taobao.org/loader-fs-cache/download/loader-fs-cache-1.0.2.tgz",
|
||||
|
|
@ -9966,11 +9884,6 @@
|
|||
"integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=",
|
||||
"dev": true
|
||||
},
|
||||
"lodash-es": {
|
||||
"version": "4.17.15",
|
||||
"resolved": "https://registry.npm.taobao.org/lodash-es/download/lodash-es-4.17.15.tgz",
|
||||
"integrity": "sha1-Ib2Wg5NUQS8j16EDQOXqxu5FXXg="
|
||||
},
|
||||
"lodash.defaultsdeep": {
|
||||
"version": "4.6.1",
|
||||
"resolved": "https://registry.npm.taobao.org/lodash.defaultsdeep/download/lodash.defaultsdeep-4.6.1.tgz?cache=0&sync_timestamp=1562718178896&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash.defaultsdeep%2Fdownload%2Flodash.defaultsdeep-4.6.1.tgz",
|
||||
|
|
@ -13930,9 +13843,9 @@
|
|||
"dev": true
|
||||
},
|
||||
"ssf": {
|
||||
"version": "0.10.2",
|
||||
"resolved": "https://registry.npm.taobao.org/ssf/download/ssf-0.10.2.tgz",
|
||||
"integrity": "sha1-ZbK0/N/ZZ7yOg4OkE0kAmJMRWXY=",
|
||||
"version": "0.10.3",
|
||||
"resolved": "https://registry.npm.taobao.org/ssf/download/ssf-0.10.3.tgz?cache=0&sync_timestamp=1593298770773&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssf%2Fdownload%2Fssf-0.10.3.tgz",
|
||||
"integrity": "sha1-jq4fwpyQpVLnkhII+BiS1vd6yys=",
|
||||
"requires": {
|
||||
"frac": "~1.1.2"
|
||||
}
|
||||
|
|
@ -16124,6 +16037,11 @@
|
|||
"string-width": "^1.0.2 || 2"
|
||||
}
|
||||
},
|
||||
"wmf": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npm.taobao.org/wmf/download/wmf-1.0.2.tgz",
|
||||
"integrity": "sha1-fRnWIQcaCMK9xrfmiKnENSmMwto="
|
||||
},
|
||||
"word-wrap": {
|
||||
"version": "1.2.3",
|
||||
"resolved": "https://registry.npm.taobao.org/word-wrap/download/word-wrap-1.2.3.tgz",
|
||||
|
|
@ -16229,22 +16147,23 @@
|
|||
}
|
||||
},
|
||||
"xlsx": {
|
||||
"version": "0.15.5",
|
||||
"resolved": "https://registry.npm.taobao.org/xlsx/download/xlsx-0.15.5.tgz?cache=0&sync_timestamp=1580176264177&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxlsx%2Fdownload%2Fxlsx-0.15.5.tgz",
|
||||
"integrity": "sha1-N9W7gHbeczfluwdps61V0Y1o6uw=",
|
||||
"version": "0.15.6",
|
||||
"resolved": "https://registry.npm.taobao.org/xlsx/download/xlsx-0.15.6.tgz",
|
||||
"integrity": "sha1-Rh+EHW2eoag3XizSRr8jrs4IodU=",
|
||||
"requires": {
|
||||
"adler-32": "~1.2.0",
|
||||
"cfb": "^1.1.3",
|
||||
"cfb": "^1.1.4",
|
||||
"codepage": "~1.14.0",
|
||||
"commander": "~2.17.1",
|
||||
"crc-32": "~1.2.0",
|
||||
"exit-on-epipe": "~1.0.1",
|
||||
"ssf": "~0.10.2"
|
||||
"ssf": "~0.10.3",
|
||||
"wmf": "~1.0.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"commander": {
|
||||
"version": "2.17.1",
|
||||
"resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1580710597193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz",
|
||||
"resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1598576046744&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz",
|
||||
"integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78="
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@
|
|||
"vue-count-to": "^1.0.13",
|
||||
"vue-router": "3.0.6",
|
||||
"vuex": "3.1.0",
|
||||
"xlsx": "^0.15.5"
|
||||
"xlsx": "^0.15.6"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "7.0.0",
|
||||
|
|
|
|||
|
|
@ -7,3 +7,10 @@ export function getBasicCount() {
|
|||
})
|
||||
}
|
||||
|
||||
export function searchCandidates(data) {
|
||||
return request({
|
||||
url: '/analyse/searchcandidates/',
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
|
@ -126,7 +126,7 @@ export const asyncRoutes = [
|
|||
path: 'candidate',
|
||||
name: 'Candidate',
|
||||
component: () => import('@/views/analyse/candidate.vue'),
|
||||
meta: { title: '成绩单查询', icon: '', perms: ['candidate_view'] }
|
||||
meta: { title: '报告单查询', icon: '', perms: ['candidate_search'] }
|
||||
},
|
||||
{
|
||||
path: 'consumerrule',
|
||||
|
|
|
|||
|
|
@ -61,5 +61,12 @@ div:focus {
|
|||
|
||||
// main-container global css
|
||||
.app-container {
|
||||
padding: 20px;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.el-card__body {
|
||||
padding: 6px;
|
||||
}
|
||||
.el-card__header {
|
||||
padding: 6px;
|
||||
}
|
||||
|
|
@ -1,14 +1,101 @@
|
|||
<template>
|
||||
<div class="app-container">
|
||||
|
||||
<el-row :gutter="6">
|
||||
<el-col :xs="24" :md="8">
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>查询报告单</span>
|
||||
</div>
|
||||
<div class="clearfix" style="color:gray">
|
||||
可从excel复制过来,手动输入用回车间隔
|
||||
</div>
|
||||
<el-form
|
||||
ref="elForm"
|
||||
:model="formData"
|
||||
:rules="rules"
|
||||
size="medium"
|
||||
label-width="80px"
|
||||
style="margin-top:2px"
|
||||
label-position="left"
|
||||
|
||||
>
|
||||
<el-row>
|
||||
<el-form-item label="姓名列" prop="names">
|
||||
<el-input
|
||||
v-model="formData.names"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 8, maxRows: 12}"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
<el-row >
|
||||
<el-form-item label="身份证列" prop="numbers">
|
||||
<el-input
|
||||
v-model="formData.numbers"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 8, maxRows: 12}"
|
||||
></el-input>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
<div style="text-align:center">
|
||||
<el-button type="primary" @click="searchB" >开始查询</el-button>
|
||||
</div>
|
||||
</el-form>
|
||||
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :xs="24" :md="16">
|
||||
<el-card class="box-card">
|
||||
<div slot="header" class="clearfix">
|
||||
<span>查询结果</span>
|
||||
</div>
|
||||
<el-button type="primary" @click="exportExcel" >导出结果</el-button>
|
||||
<el-table
|
||||
:data="tableData"
|
||||
border
|
||||
fit
|
||||
highlight-current-row
|
||||
style="margin-top:2px"
|
||||
id="out-table"
|
||||
>
|
||||
|
||||
<el-table-column label="姓名">
|
||||
<template slot-scope="scope">{{ scope.row.name }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="身份证号">
|
||||
<template slot-scope="scope">{{ scope.row.ID_number }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="报告单号">
|
||||
<template slot-scope="scope">
|
||||
<el-link :href="scope.row.url" target="_blank" type="primary">{{ scope.row.report_number }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="获得时间">
|
||||
<template slot-scope="scope">{{ scope.row.issue_date }}</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="报告单网址" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<el-link :href="scope.row.url" target="_blank" type="primary">{{ scope.row.url }}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
</el-card>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { searchCandidates } from "@/api/analyse"
|
||||
import { genTree, deepClone } from "@/utils";
|
||||
import checkPermission from "@/utils/permission";
|
||||
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
|
||||
|
||||
import FileSaver from "file-saver";
|
||||
import XLSX from "xlsx";
|
||||
|
||||
export default {
|
||||
components: { Pagination },
|
||||
|
|
@ -16,7 +103,24 @@ export default {
|
|||
},
|
||||
data() {
|
||||
return {
|
||||
formData:{}
|
||||
formData:{},
|
||||
rules:{
|
||||
names: [
|
||||
{
|
||||
required: true,
|
||||
message: "请填写姓名列",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
numbers: [
|
||||
{
|
||||
required: true,
|
||||
message: "请填写身份证列",
|
||||
trigger: "change",
|
||||
},
|
||||
],
|
||||
},
|
||||
tableData:[]
|
||||
};
|
||||
},
|
||||
computed: {},
|
||||
|
|
@ -27,6 +131,36 @@ export default {
|
|||
|
||||
},
|
||||
methods: {
|
||||
searchB(){
|
||||
const loading = this.$loading({
|
||||
text: '拼命查询中..',
|
||||
});
|
||||
searchCandidates(this.formData).then(res=>{
|
||||
this.tableData = res.data
|
||||
loading.close()
|
||||
|
||||
}).catch(e=>{
|
||||
loading.close()
|
||||
})
|
||||
},
|
||||
exportExcel() {
|
||||
var xlsxParam = { raw: true };//转换成excel时,使用原始的格式
|
||||
var wb = XLSX.utils.table_to_book(document.querySelector("#out-table"),xlsxParam);
|
||||
var wbout = XLSX.write(wb, {
|
||||
bookType: "xlsx",
|
||||
bookSST: true,
|
||||
type: "array"
|
||||
});
|
||||
try {
|
||||
FileSaver.saveAs(
|
||||
new Blob([wbout], { type: "application/octet-stream;charset=utf-8" }),
|
||||
"报告单.xlsx"
|
||||
);
|
||||
} catch (e) {
|
||||
if (typeof console !== "undefined") console.log(e, wbout);
|
||||
}
|
||||
return wbout;
|
||||
}
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -6,5 +6,6 @@ from .views import *
|
|||
|
||||
urlpatterns = [
|
||||
path('basic/', BasicCount.as_view()),
|
||||
path('quota/', Quota.as_view())
|
||||
path('quota/', Quota.as_view()),
|
||||
path('searchcandidates/', SearchCandidates.as_view())
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
from django.shortcuts import render
|
||||
from requests.api import request
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.response import Response
|
||||
|
||||
|
|
@ -7,6 +8,8 @@ from examtest.models import ExamTest
|
|||
from question.models import Question
|
||||
|
||||
import pickle
|
||||
import requests
|
||||
from lxml import etree
|
||||
# Create your views here.
|
||||
|
||||
class BasicCount(APIView):
|
||||
|
|
@ -29,3 +32,48 @@ class Quota(APIView):
|
|||
with open('quota.dat','rb') as f:
|
||||
data = pickle.load(f)
|
||||
return Response(data)
|
||||
|
||||
class SearchCandidates(APIView):
|
||||
perms_map = [
|
||||
{'post': 'candidate_search'}]
|
||||
def post(self, request, *args, **kwargs):
|
||||
names = request.data['names']
|
||||
numbers = request.data['numbers']
|
||||
names_ = names.split('\n')
|
||||
numbers_ = numbers.split('\n')
|
||||
names_l = [i.replace(' ', '') for i in names_ if i!='']
|
||||
numbers_l = [i.replace(' ', '') for i in numbers_ if i!='']
|
||||
candidates = []
|
||||
if len(names_l)>60:
|
||||
return Response({'error':'单次批量查询不允许超过60'})
|
||||
if len(names_l) == len(numbers_l):
|
||||
for i in range(len(names_l)):
|
||||
payload = {'IndexModel[name]': names_l[i], 'IndexModel[identityNumber]': numbers_l[i], 'IndexModel[certNumber]':'', 'IndexModel[candidateNumber]':''}
|
||||
try:
|
||||
r = requests.post('https://fushe.chinansc.cn/open/candidate-list',data=payload, timeout=5)
|
||||
r.raise_for_status()
|
||||
r.close()
|
||||
html = etree.HTML(r.text)
|
||||
results = html.xpath("//table[@class='cert-table']")
|
||||
try:
|
||||
for i in results:
|
||||
url = i.xpath('tr/td/a/@href')
|
||||
name = i.xpath('tr[1]/td[1]/text()')
|
||||
ID_number = i.xpath('tr[1]/td[2]/text()')
|
||||
report_number = i.xpath('tr[2]/td[1]/text()')
|
||||
issue_date = i.xpath('tr[2]/td[2]/text()')
|
||||
jsondata = {
|
||||
'name':name[0],
|
||||
'ID_number':ID_number[0],
|
||||
'report_number':report_number[0],
|
||||
'issue_date':issue_date[0],
|
||||
'url':'https://fushe.chinansc.cn'+ url[0]
|
||||
}
|
||||
candidates.append(jsondata)
|
||||
except:
|
||||
pass
|
||||
except:
|
||||
pass
|
||||
return Response(candidates)
|
||||
else:
|
||||
return Response({'error':'姓名列和身份证列不匹配!'})
|
||||
Binary file not shown.
Loading…
Reference in New Issue