人才页面调试 云员工认证调试

main
lijingyu007 11 months ago
parent 6139a0b6f8
commit e627b8a8f4
  1. 42
      src/api/ability/index.js
  2. 17
      src/api/tester/TesterApply.js
  3. 5
      src/page/common/imageUpload.vue
  4. 157
      src/page/homepage/personability/abilityApply.vue
  5. 83
      src/page/homepage/personability/abilityMore.vue
  6. 58
      src/page/homepage/personability/abilityUser.vue
  7. 68
      src/page/homepage/personability/abilityUserDetail.vue
  8. 2
      src/page/personalpage/home/resume.vue
  9. 4
      src/page/personalpage/home/userUpgrade.vue
  10. 55
      src/page/personalpage/testcrowd/TesterDetail.vue

@ -0,0 +1,42 @@
import request from "../request";
// 查询我的工具列表
export function getCloudList(params) {
return request({
url: '/tester/cert/cloudEmps',
method: 'get',
params
})
}
// 招聘岗位
export function getJobList(params) {
return request({
url: '/job/findAll',
method: 'get',
params,
headers: {
isToken: false
}
})
}
// 岗位详情
export function getJobById(id) {
return request({
url: '/job/detail/' + id,
method: 'get',
headers: {
isToken: false
}
})
}
// 申请岗位/job/apply/{jobId}
export function shenqingJob(id, data) {
return request({
url: '/job/apply/' + id,
method: 'post',
data
})
}

@ -170,4 +170,21 @@ export function couldBookUpdate(data) {
method: 'post', method: 'post',
data data
}) })
}
// 提交审核
export function couldApply(data) {
return request({
url: '/tester/cert/audit',
method: 'post',
data
})
}
// 删除证书
export function delBook(id) {
return request({
url: '/tester/cert/credentials/' + id,
method: 'delete',
})
} }

@ -15,6 +15,7 @@
:file-list="fileList" :file-list="fileList"
:on-preview="handlePictureCardPreview" :on-preview="handlePictureCardPreview"
:class="{ hide: this.fileList.length >= this.limit }" :class="{ hide: this.fileList.length >= this.limit }"
:disabled="isDisabled"
> >
<i class="el-icon-plus"></i> <i class="el-icon-plus"></i>
</el-upload> </el-upload>
@ -61,6 +62,10 @@ export default {
type: Boolean, type: Boolean,
default: true, default: true,
}, },
isDisabled: {
type: Boolean,
default: false,
}
}, },
data() { data() {
return { return {

@ -91,7 +91,7 @@
<div class="nextBtn" v-else @click="next">下一步</div> <div class="nextBtn" v-else @click="next">下一步</div>
</div> </div>
</div> </div>
<div class="contentBox"> <div class="contentBox" v-show="!userForm.status">
<div class="active1" v-show="active == 0"> <div class="active1" v-show="active == 0">
<div class="activeTitle"> <div class="activeTitle">
<div class="activeTitLine"></div> <div class="activeTitLine"></div>
@ -131,7 +131,11 @@
<div class="workIt" v-for="(it, index) in workList" :key="index"> <div class="workIt" v-for="(it, index) in workList" :key="index">
<el-form :rules="workRules" :model="it" label-width="90px" :ref="'workRef' + index"> <el-form :rules="workRules" :model="it" label-width="90px" :ref="'workRef' + index">
<el-form-item label="公司名称: " prop="name"> <el-form-item label="公司名称: " prop="name">
<el-input v-model="it.name" placeholder="请输入公司名称"></el-input> <el-input
v-model="it.name"
placeholder="请输入公司名称"
:disabled="active == 6 ? true : false"
></el-input>
</el-form-item> </el-form-item>
<div class="flexbox"> <div class="flexbox">
<el-form-item label="在职时间: " prop="startTime"> <el-form-item label="在职时间: " prop="startTime">
@ -140,6 +144,7 @@
v-model="it.startTime" v-model="it.startTime"
type="month" type="month"
placeholder="开始时间" placeholder="开始时间"
:disabled="active == 6 ? true : false"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
@ -150,12 +155,17 @@
v-model="it.endTime" v-model="it.endTime"
type="month" type="month"
placeholder="结束时间" placeholder="结束时间"
:disabled="active == 6 ? true : false"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</div> </div>
<el-form-item label="职位名称: " prop="title"> <el-form-item label="职位名称: " prop="title">
<el-input v-model="it.title" placeholder="请输入职位名称"></el-input> <el-input
v-model="it.title"
placeholder="请输入职位名称"
:disabled="active == 6 ? true : false"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="工作内容: " prop="intro"> <el-form-item label="工作内容: " prop="intro">
<el-input <el-input
@ -163,6 +173,7 @@
v-model="it.intro" v-model="it.intro"
:rows="5" :rows="5"
placeholder="请输入工作内容" placeholder="请输入工作内容"
:disabled="active == 6 ? true : false"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -189,7 +200,11 @@
<div class="workIt" v-for="(it, index) in projectList" :key="index"> <div class="workIt" v-for="(it, index) in projectList" :key="index">
<el-form :rules="projectRules" :model="it" label-width="90px" :ref="'projectRef' + index"> <el-form :rules="projectRules" :model="it" label-width="90px" :ref="'projectRef' + index">
<el-form-item label="项目名称" prop="name"> <el-form-item label="项目名称" prop="name">
<el-input v-model="it.name" placeholder="请输入项目名称"></el-input> <el-input
v-model="it.name"
placeholder="请输入项目名称"
:disabled="active == 6 ? true : false"
></el-input>
</el-form-item> </el-form-item>
<div class="flexbox"> <div class="flexbox">
<el-form-item label="项目时间: " prop="startTime"> <el-form-item label="项目时间: " prop="startTime">
@ -198,6 +213,7 @@
v-model="it.startTime" v-model="it.startTime"
type="month" type="month"
placeholder="开始时间" placeholder="开始时间"
:disabled="active == 6 ? true : false"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
@ -208,15 +224,24 @@
v-model="it.endTime" v-model="it.endTime"
type="month" type="month"
placeholder="结束时间" placeholder="结束时间"
:disabled="active == 6 ? true : false"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</div> </div>
<el-form-item label="担任角色" prop="title"> <el-form-item label="担任角色" prop="title">
<el-input v-model="it.title" placeholder="请输入担任角色"></el-input> <el-input
v-model="it.title"
placeholder="请输入担任角色"
:disabled="active == 6 ? true : false"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="应用技术" prop="applyTech"> <el-form-item label="应用技术" prop="applyTech">
<el-input v-model="it.applyTech" placeholder="请输入应用技术"></el-input> <el-input
v-model="it.applyTech"
placeholder="请输入应用技术"
:disabled="active == 6 ? true : false"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="工作内容" prop="intro"> <el-form-item label="工作内容" prop="intro">
<el-input <el-input
@ -224,6 +249,7 @@
type="textarea" type="textarea"
v-model="it.intro" v-model="it.intro"
placeholder="请输入工作内容" placeholder="请输入工作内容"
:disabled="active == 6 ? true : false"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -258,12 +284,14 @@
:province="province" :province="province"
:city="city" :city="city"
hide-area hide-area
:disabled="active == 6 ? true : false"
></v-distpicker> ></v-distpicker>
</el-form-item> </el-form-item>
<el-form-item label="技能方向" prop="testSkills"> <el-form-item label="技能方向" prop="testSkills">
<el-input <el-input
v-model="userForm.testSkills" v-model="userForm.testSkills"
placeholder="请输入技能,如:测试工程师" placeholder="请输入技能,如:测试工程师"
:disabled="active == 6 ? true : false"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item label="个人优势" prop="personalAdvantage"> <el-form-item label="个人优势" prop="personalAdvantage">
@ -272,6 +300,7 @@
:rows="5" :rows="5"
v-model="userForm.personalAdvantage" v-model="userForm.personalAdvantage"
placeholder="请输入个人优势" placeholder="请输入个人优势"
:disabled="active == 6 ? true : false"
></el-input> ></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -294,7 +323,11 @@
:ref="'certificateRef' + index" :ref="'certificateRef' + index"
> >
<el-form-item label="证书名称" prop="credentialsName"> <el-form-item label="证书名称" prop="credentialsName">
<el-input v-model="it.credentialsName" placeholder="请输入证书名称"></el-input> <el-input
v-model="it.credentialsName"
placeholder="请输入证书名称"
:disabled="active == 6 ? true : false"
></el-input>
</el-form-item> </el-form-item>
<el-form-item prop="url"> <el-form-item prop="url">
<imageUpload <imageUpload
@ -302,6 +335,7 @@
fileName="publicize" fileName="publicize"
:limit="1" :limit="1"
:ref="'myupload' + index" :ref="'myupload' + index"
:isDisabled="active == 4 ? false : true"
/> />
</el-form-item> </el-form-item>
</el-form> </el-form>
@ -327,7 +361,11 @@
<div class="workIt" v-for="(it, index) in educationList" :key="index"> <div class="workIt" v-for="(it, index) in educationList" :key="index">
<el-form :rules="educationRules" :model="it" label-width="90px" :ref="'educationRef' + index"> <el-form :rules="educationRules" :model="it" label-width="90px" :ref="'educationRef' + index">
<el-form-item label="学校名称" prop="name"> <el-form-item label="学校名称" prop="name">
<el-input v-model="it.name" placeholder="请输入学校名称"></el-input> <el-input
v-model="it.name"
placeholder="请输入学校名称"
:disabled="active == 6 ? true : false"
></el-input>
</el-form-item> </el-form-item>
<div class="flexbox"> <div class="flexbox">
<el-form-item label="在校时间: " prop="startTime"> <el-form-item label="在校时间: " prop="startTime">
@ -336,6 +374,7 @@
v-model="it.startTime" v-model="it.startTime"
type="month" type="month"
placeholder="开始时间" placeholder="开始时间"
:disabled="active == 6 ? true : false"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
@ -346,12 +385,17 @@
v-model="it.endTime" v-model="it.endTime"
type="month" type="month"
placeholder="结束时间" placeholder="结束时间"
:disabled="active == 6 ? true : false"
> >
</el-date-picker> </el-date-picker>
</el-form-item> </el-form-item>
</div> </div>
<el-form-item label="学历" prop="education"> <el-form-item label="学历" prop="education">
<el-select v-model="it.education" placeholder="请选择学历"> <el-select
v-model="it.education"
placeholder="请选择学历"
:disabled="active == 6 ? true : false"
>
<el-option label="专科" value="专科"> </el-option> <el-option label="专科" value="专科"> </el-option>
<el-option label="本科" value="本科"> </el-option> <el-option label="本科" value="本科"> </el-option>
<el-option label="硕士研究生" value="硕士研究生"> </el-option> <el-option label="硕士研究生" value="硕士研究生"> </el-option>
@ -359,7 +403,11 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="专业名称" prop="major"> <el-form-item label="专业名称" prop="major">
<el-input v-model="it.major" placeholder="请输入专业名称"></el-input> <el-input
v-model="it.major"
placeholder="请输入专业名称"
:disabled="active == 6 ? true : false"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div v-if="active == 5" class="delWork"> <div v-if="active == 5" class="delWork">
@ -378,15 +426,19 @@
</div> </div>
<!-- <div class="active7" v-if="active == 6"> <!-- <div class="active7" v-if="active == 6">
</div> --> </div> -->
<!-- <div class="applyIng">提交成功等待审核</div> </div>
<div class="contentBox" v-show="userForm.status == 1">
<div class="applyIng">提交成功等待审核</div>
</div>
<div class="applyFail" v-show="userForm.status == 3">
<img src="/assets/ability/applyFail.png" alt="" />
审核不通过
</div>
<div class="contentBox" v-show="userForm.status == 2">
<div class="applySuccessAll"> <div class="applySuccessAll">
<img src="/assets/ability/applysuccess.png" alt="" /> <img src="/assets/ability/applysuccess.png" alt="" />
审核通过 审核通过
</div> </div>
<div class="applyFail">
<img src="/assets/ability/applyFail.png" alt="" />
审核不通过
</div> -->
</div> </div>
</div> </div>
</div> </div>
@ -395,7 +447,17 @@
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import imageUpload from '@/page/common/imageUpload' import imageUpload from '@/page/common/imageUpload'
import { gettesterId, addtesterApply, updatetesterApply } from '@/api/tester/CompanyApply' import { gettesterId, addtesterApply, updatetesterApply } from '@/api/tester/CompanyApply'
import { getCloudAll, couldInfoAdd, couldInfoUpdate, couldInfoDelete, couldUserInfoAdd, couldBookAdd, couldBookUpdate } from '@/api/tester/TesterApply' import {
getCloudAll,
couldInfoAdd,
couldInfoUpdate,
couldInfoDelete,
couldUserInfoAdd,
couldBookAdd,
couldBookUpdate,
couldApply,
delBook
} from '@/api/tester/TesterApply'
export default { export default {
components: { imageUpload }, components: { imageUpload },
@ -427,7 +489,7 @@ export default {
], ],
}, },
// //
workList: [{}], workList: [],
workRules: { workRules: {
name: [{ required: true, message: '请输入公司名称', trigger: 'blur' }], name: [{ required: true, message: '请输入公司名称', trigger: 'blur' }],
startTime: [{ required: true, message: '请输入开始时间', trigger: 'blur' }], startTime: [{ required: true, message: '请输入开始时间', trigger: 'blur' }],
@ -463,7 +525,7 @@ export default {
materialServerAddr: '', materialServerAddr: '',
certificateList: [{}], certificateList: [{}],
certificateRules: { certificateRules: {
credentialsName: [{ required: true, message: '请输入证书名称', trigger: 'blur' }], // credentialsName: [{ required: true, message: '', trigger: 'blur' }],
url: [{ required: true, message: '请上传证书', trigger: 'blur' }], url: [{ required: true, message: '请上传证书', trigger: 'blur' }],
}, },
// //
@ -494,10 +556,18 @@ export default {
this.getCloudAllList() this.getCloudAllList()
}, },
methods: { methods: {
//
saveInfo() {
if (this.userForm.status == 1) return this.$message.warning('正在审核,请勿重复提交')
if (this.userForm.status == 2) return this.$message.warning('审核已通过,请勿重复提交')
couldApply().then((res) => {
this.$message.success('提交审核成功')
this.getCloudAllList()
})
},
// //
getCloudAllList() { getCloudAllList() {
getCloudAll().then((res) => { getCloudAll().then((res) => {
console.log(res)
// //
this.projectList = res.experience.filter((it) => it.type == 0) this.projectList = res.experience.filter((it) => it.type == 0)
if (!this.projectList.length) { if (!this.projectList.length) {
@ -505,7 +575,7 @@ export default {
} }
this.workList = res.experience.filter((it) => it.type == 1) this.workList = res.experience.filter((it) => it.type == 1)
if (!this.workList.length) { if (!this.workList.length) {
this.workList = [{}] this.workList = []
} }
this.educationList = res.experience.filter((it) => it.type == 2) this.educationList = res.experience.filter((it) => it.type == 2)
if (!this.educationList.length) { if (!this.educationList.length) {
@ -516,12 +586,21 @@ export default {
this.province = this.userForm.city.split('-')[0] this.province = this.userForm.city.split('-')[0]
this.city = this.userForm.city.split('-')[1] this.city = this.userForm.city.split('-')[1]
// 1 2 0
if (res.personalInfo.status === 0) {
} else if (res.personalInfo.status === 1) {
this.active = 6
} else if (res.personalInfo.status === 2) {
this.active = 6
} else {
}
// //
this.certificateList = res.credentials.map(it => { this.certificateList = res.credentials.map((it) => {
return { return {
url: it.fileUrl, url: it.fileUrl,
credentialsName: it.fileName, credentialsName: it.fileName,
fileId: it.fileId fileId: it.fileId,
} }
}) })
if (!this.certificateList.length) { if (!this.certificateList.length) {
@ -573,6 +652,7 @@ export default {
}, },
// //
back() { back() {
if (this.userForm.status == 1 || this.userForm.status == 2) return
if (this.active == 0) return if (this.active == 0) return
this.active-- this.active--
}, },
@ -630,7 +710,6 @@ export default {
this.getCloudAllList() this.getCloudAllList()
}) })
} else { } else {
if (this.workList.length == 1) return this.$message.warning('最少有一项')
this.workList.splice(i, 1) this.workList.splice(i, 1)
this.$message({ this.$message({
type: 'success', type: 'success',
@ -715,9 +794,9 @@ export default {
this.$refs[`certificateRef${i}`][0].validate((valid) => { this.$refs[`certificateRef${i}`][0].validate((valid) => {
if (valid) { if (valid) {
const data = { const data = {
credentialsList: [JSON.parse(JSON.stringify(this.certificateList[i]))] credentialsList: [JSON.parse(JSON.stringify(this.certificateList[i]))],
} }
data.credentialsList[0].url = data.credentialsList[0].url.replace(/.*\/profile/, '/profile'); data.credentialsList[0].url = data.credentialsList[0].url.replace(/.*\/profile/, '/profile')
couldBookAdd(data).then((res) => { couldBookAdd(data).then((res) => {
this.$message.success('资格证书保存成功') this.$message.success('资格证书保存成功')
this.getCloudAllList() this.getCloudAllList()
@ -730,10 +809,10 @@ export default {
this.$refs[`certificateRef${i}`][0].validate((valid) => { this.$refs[`certificateRef${i}`][0].validate((valid) => {
if (valid) { if (valid) {
const data = { const data = {
credentialsList: JSON.parse(JSON.stringify(this.certificateList)) credentialsList: JSON.parse(JSON.stringify(this.certificateList)),
} }
data.credentialsList.forEach(it => { data.credentialsList.forEach((it) => {
it.url = it.url.replace(/.*\/profile/, '/profile'); it.url = it.url.replace(/.*\/profile/, '/profile')
}) })
couldBookUpdate(data).then((res) => { couldBookUpdate(data).then((res) => {
this.$message.success('资格证书修改成功') this.$message.success('资格证书修改成功')
@ -744,8 +823,26 @@ export default {
}, },
// //
delCertificate(i) { delCertificate(i) {
if (this.certificateList.length == 1) return this.$message.warning('最少有一项') this.$confirm('此操作将永久删除, 是否继续?', '提示', {
this.certificateList.splice(i, 1) confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
if (this.certificateList[i].fileId) {
delBook(this.certificateList[i].fileId).then((res) => {
this.$message.success('资格证书删除成功')
this.getCloudAllList()
})
} else {
this.certificateList.splice(i, 1)
this.$message({
type: 'success',
message: '删除成功!',
})
}
})
}, },
// //
addEducation() { addEducation() {

@ -2,30 +2,31 @@
<div class="userAbility"> <div class="userAbility">
<img class="banner" src="/assets/ability/applybanner.png" /> <img class="banner" src="/assets/ability/applybanner.png" />
<div class="searchBox container"> <div class="searchBox container">
<el-input v-model="searchVal" placeholder="请输入关键字,如:测试工程师"></el-input> <el-input v-model="queryParams.keyword" clearable placeholder="请输入关键字,如:测试工程师"></el-input>
<div class="searchbtn">搜索</div> <div class="searchbtn" @click="searchFn">搜索</div>
</div> </div>
<div class="contentBox container"> <div class="contentBox container">
<div class="jianliboxitem" v-for="it in peopleList" :key="it.url"> <div class="jianliboxitem" v-for="it in peopleList" :key="it.url">
<div class="jlboxtop"> <div class="jlboxtop">
<img class="jlboxtopimg" :src="it.url" alt="" /> <img class="jlboxtopimg" :src="it.avatar" alt="" />
<div class="jlboxtoptit">{{ it.name }}</div> <div class="jlboxtoptit">{{ it.name }}</div>
<div class="jlboxtopzc">{{ it.zhicheng }}</div> <div class="jlboxtopzc">{{ it.testSkills }}</div>
<div class="jlboxtopcon">{{ it.zhicheng }}</div> <div class="jlboxtopcon">{{ it.personalAdvantage }}</div>
</div> </div>
<div class="jlboxbottom"> <div class="jlboxbottom">
<div class="jlboxbottoml jlboxbottomlbor"> <div class="jlboxbottoml jlboxbottomlbor">
<img class="jlboxbottomlimg" src="/assets/ability/daxue.png" alt="" /> <img class="jlboxbottomlimg" src="/assets/ability/daxue.png" alt="" />
{{ it.school }} <span class="textaaa" :title="it.college">{{ it.college }}</span>
</div> </div>
<div class="jlboxbottoml"> <div class="jlboxbottoml">
<img class="jlboxbottomlimg" src="/assets/ability/zhuanye.png" alt="" /> <img class="jlboxbottomlimg" src="/assets/ability/zhuanye.png" alt="" />
{{ it.maj }} <span class="textaaa" :title="it.major">{{ it.major }}</span>
</div> </div>
</div> </div>
<div class="addressBox"> <div class="addressBox">
<img src="/assets/ability/posion.png" alt=""> <img src="/assets/ability/posion.png" alt="" />
西安</div> {{ it.city && it.city.split('-')[1] }}
</div>
</div> </div>
</div> </div>
<div class="pavan container"> <div class="pavan container">
@ -34,7 +35,7 @@
@size-change="handleSizeChange" @size-change="handleSizeChange"
@current-change="handleCurrentChange" @current-change="handleCurrentChange"
:current-page="queryParams.pageNum" :current-page="queryParams.pageNum"
:page-sizes="[10, 20, 30, 50]" :page-sizes="[12, 20, 32, 40]"
:page-size="queryParams.pageSize" :page-size="queryParams.pageSize"
layout="total, sizes, prev, pager, next, jumper" layout="total, sizes, prev, pager, next, jumper"
:total="total" :total="total"
@ -45,58 +46,44 @@
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { getCloudList } from '@/api/ability'
export default { export default {
data() { data() {
return { return {
searchVal: '', peopleList: [],
peopleList: [
{
url: '/assets/ability/people1.png',
name: '杨**',
zhicheng: 'JAVA后端研发工程师',
school: '河南科技大学',
maj: '软件工程专业',
},
{
url: '/assets/ability/people2.png',
name: '赵**',
zhicheng: 'Web全栈开发工程师',
school: '西安科技大学',
maj: '软件工程专业',
},
{
url: '/assets/ability/people3.png',
name: '杨**',
zhicheng: 'JAVA研发工程师',
school: '阜阳师范大学',
maj: '软件工程专业',
},
{
url: '/assets/ability/people4.png',
name: '王**',
zhicheng: '嵌入式工程师',
school: '西安科技大学',
maj: '软件工程专业',
},
],
total: 0, total: 0,
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 12,
keyword: '',
}, },
} }
}, },
mounted() {}, mounted() {},
created() {
this.getList()
},
computed: { computed: {
...mapGetters(['userinform', 'token']), ...mapGetters(['userinform', 'token']),
}, },
methods: { methods: {
getList() {
getCloudList(this.queryParams).then((res) => {
this.total = res.total
this.peopleList = res.rows
})
},
handleSizeChange(val) { handleSizeChange(val) {
console.log(`每页 ${val}`) this.queryParams.pageSize = val
this.getList()
}, },
handleCurrentChange(val) { handleCurrentChange(val) {
console.log(`当前页: ${val}`) this.queryParams.pageNum = val
this.getList()
},
searchFn() {
this.getList()
}, },
}, },
} }
@ -197,9 +184,11 @@ export default {
margin: 15px 0; margin: 15px 0;
} }
.jlboxtopzc { .jlboxtopzc {
width: 90%;
font-weight: 500; font-weight: 500;
font-size: 16px; font-size: 16px;
color: #333333; color: #333333;
text-align: center;
} }
.jlboxtopcon { .jlboxtopcon {
margin-top: 15px; margin-top: 15px;
@ -230,6 +219,12 @@ export default {
font-size: 15px; font-size: 15px;
color: #737373; color: #737373;
} }
.textaaa {
max-width: 90px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.jlboxbottomlbor { .jlboxbottomlbor {
box-sizing: border-box; box-sizing: border-box;
border-right: 1px solid #e6e6e6; border-right: 1px solid #e6e6e6;

@ -9,7 +9,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="content"> <div class="content container">
<div class="titlePeo" style="margin-top: 60px; margin-bottom: 50px"> <div class="titlePeo" style="margin-top: 60px; margin-bottom: 50px">
<div class="titletopt"> <div class="titletopt">
<img src="/assets/homepage/rihhj.png" alt="" /> <img src="/assets/homepage/rihhj.png" alt="" />
@ -18,21 +18,20 @@
</div> </div>
</div> </div>
<div class="itemBox"> <div class="itemBox">
<div class="itemb" v-for="it in 3" :key="it" @click="dodetail"> <div class="itemb" v-for="it in jobList" :key="it.jobId" @click="dodetail(it)">
<div class="itembT"> <div class="itembT">
<div class="itembTT"> <div class="itembTT">
<div class="itembTTL">嵌入式软件测试工程师(偶尔出差)</div> <div class="itembTTL">{{ it.title }}</div>
<div class="itembTTR">6-10K</div> <div class="itembTTR">{{ it.emolument }}</div>
</div> </div>
<div class="itembTB"> <div class="itembTB">
<div class="itembTBit">北京</div> <div class="itembTBit">{{ it.city }}</div>
<div class="itembTBit">1-3年经验</div> <div class="itembTBit">{{ it.experience }}</div>
<div class="itembTBit">本科</div> <div class="itembTBit">{{ it.education }}</div>
<div class="itembTBit">嵌入式</div>
</div> </div>
</div> </div>
<div class="itembB"> <div class="itembB">
<div class="itembBL">北京关键科技股份有限公司</div> <div class="itembBL">{{ it.company }}</div>
<div class="itembBR">计算机软件</div> <div class="itembBR">计算机软件</div>
</div> </div>
</div> </div>
@ -56,10 +55,12 @@
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { getJobList } from '@/api/ability'
export default { export default {
data() { data() {
return { return {
total: 0, total: 0,
jobList: [],
queryParams: { queryParams: {
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 10,
@ -69,20 +70,47 @@ export default {
mounted() {}, mounted() {},
beforeDestroy() {}, beforeDestroy() {},
computed: { computed: {
...mapGetters(['userinform', 'token']), ...mapGetters(['token']),
},
created() {
this.getList()
}, },
methods: { methods: {
getList() {
getJobList(this.queryParams).then((res) => {
this.total = res.total
this.jobList = res.rows
})
},
handleSizeChange(val) { handleSizeChange(val) {
console.log(`每页 ${val}`) this.queryParams.pageSize = val
this.getList()
}, },
handleCurrentChange(val) { handleCurrentChange(val) {
console.log(`当前页: ${val}`) this.queryParams.pageNum = val
this.getList()
}, },
dodetail() { dodetail(it) {
this.$router.push('/ability/detail') this.$router.push({
path: '/ability/detail',
query: {
id: it.jobId,
},
})
}, },
//
goRuzhu() { goRuzhu() {
this.$router.push('/ability/apply') if (!this.token) {
this.$confirm('您未登录,请您先去登录', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
this.$router.push('/login?type=log')
})
} else {
this.$router.push('/ability/apply')
}
}, },
}, },
} }

@ -4,32 +4,32 @@
<div class="container topbox"> <div class="container topbox">
<div class="topboxL"> <div class="topboxL">
<div class="topboxLT"> <div class="topboxLT">
嵌入式软件测试工程师 {{ jonInfo.title }}
<span>6-10K</span> <span>{{ jonInfo.emolument }}</span>
</div> </div>
<div class="topboxLM"> <div class="topboxLM">
<div class="topboxLMit"> <div class="topboxLMit">
<img src="/assets/ability/userd1.png" alt="" /> <img src="/assets/ability/userd1.png" alt="" />
北京 {{ jonInfo.city }}
</div> </div>
<div class="topboxLMit"> <div class="topboxLMit">
<img src="/assets/ability/userd2.png" alt="" /> <img src="/assets/ability/userd2.png" alt="" />
1-3 {{ jonInfo.experience }}
</div> </div>
<div class="topboxLMit"> <div class="topboxLMit">
<img src="/assets/ability/userd3.png" alt="" /> <img src="/assets/ability/userd3.png" alt="" />
本科 {{ jonInfo.education }}
</div> </div>
<div class="topboxLMit"> <div class="topboxLMit">
<img src="/assets/ability/userd4.png" alt="" /> <img src="/assets/ability/userd4.png" alt="" />
2 {{ jonInfo.personCount }}
</div> </div>
<div class="topboxLMit"> <div class="topboxLMit">
<img src="/assets/ability/userd5.png" alt="" /> <img src="/assets/ability/userd5.png" alt="" />
全职 {{ jonInfo.jobType == 1 ? '兼职' : '全职' }}
</div> </div>
</div> </div>
<div class="topboxLB">申请职位</div> <div class="topboxLB" @click="sqJob">申请职位</div>
</div> </div>
<div class="topboxR"> <div class="topboxR">
<div class="topboxRT"> <div class="topboxRT">
@ -38,21 +38,25 @@
<div class="topboxRTIT">餐补</div> <div class="topboxRTIT">餐补</div>
<div class="topboxRTIT">带薪年假</div> <div class="topboxRTIT">带薪年假</div>
</div> </div>
<div class="topboxRB">北京关键科技股份有限公司</div> <div class="topboxRB">{{ jonInfo.company }}</div>
</div> </div>
</div> </div>
</div> </div>
<div class="content container"> <div class="content container">
<div class="contentTitle">职位描述</div> <div class="contentTitle">职位描述</div>
<div class="contentCon" v-html="jonInfo.jobDesc"></div>
<div class="skill"> <div class="contentTitle">工作地点</div>
<div class="contentCon">{{ jonInfo.city }}</div>
<div class="contentTitle">入职企业</div>
<div class="contentCon">{{ jonInfo.company }}</div>
<!-- <div class="skill">
<div class="skillit">C++test</div> <div class="skillit">C++test</div>
<div class="skillit">Testbed</div> <div class="skillit">Testbed</div>
<div class="skillit">loadrunner</div> <div class="skillit">loadrunner</div>
<div class="skillit">jmeter</div> <div class="skillit">jmeter</div>
<div class="skillit">C++</div> <div class="skillit">C++</div>
</div> </div> -->
<div class="contentCon"> <!-- <div class="contentCon">
岗位要求 <br /> 岗位要求 <br />
1.本科及以上学历计算机相关专业毕业 <br />2.对测试工作有兴趣能够接受出差 1.本科及以上学历计算机相关专业毕业 <br />2.对测试工作有兴趣能够接受出差
</div> </div>
@ -69,25 +73,49 @@
2.负责通用软件文档审查功能测试性能测试兼容性易用性可靠性信息安全性维护性可移植性测试完成测试文档和测试报告编写<br /> 2.负责通用软件文档审查功能测试性能测试兼容性易用性可靠性信息安全性维护性可移植性测试完成测试文档和测试报告编写<br />
3.完成内部测试和第三方软件测评 3.完成内部测试和第三方软件测评
</div> </div>
<div class="contentTitle">工作地点</div> -->
<div class="contentCon">北京市昌平区国电投中央园区</div>
<div class="contentTitle">入职企业</div>
<div class="contentCon">北京关键科技股份有限公司</div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import { getJobById, shenqingJob } from '@/api/ability'
export default { export default {
data() { data() {
return {} return {
jonInfo: {},
}
}, },
mounted() {}, mounted() {},
beforeDestroy() {}, beforeDestroy() {},
computed: { computed: {
...mapGetters(['userinform', 'token']), ...mapGetters(['userId', 'token']),
},
created() {
this.getDetail()
},
methods: {
getDetail() {
getJobById(this.$route.query.id).then((res) => {
this.jonInfo = res.data
})
},
sqJob() {
if (!this.token) {
this.$confirm('您未登录,请您先去登录', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
this.$router.push('/login?type=log')
})
} else {
shenqingJob(this.jonInfo.jobId, {userId: this.userId}).then(res => {
this.$message.success('职位申请成功')
})
}
},
}, },
methods: {},
} }
</script> </script>

@ -277,7 +277,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="bottomBtn">保存并发布</div> <!-- <div class="bottomBtn">保存并发布</div> -->
</div> </div>
</template> </template>

@ -155,7 +155,7 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="contactName"> <el-form-item prop="contactName">
<el-input placeholder="请输入您的姓名" v-model="companyForm.contactName"> <el-input placeholder="请输入法人姓名" v-model="companyForm.contactName">
<img <img
slot="prefix" slot="prefix"
src="/assets/personal/comicon2.png" src="/assets/personal/comicon2.png"
@ -270,7 +270,7 @@ export default {
companyForm: {}, companyForm: {},
companyRules: { companyRules: {
name: [{ required: true, message: '企业名称不能为空', trigger: 'blur' }], name: [{ required: true, message: '企业名称不能为空', trigger: 'blur' }],
contactName: [{ required: true, message: '姓名不能为空', trigger: 'blur' }], contactName: [{ required: true, message: '法人姓名不能为空', trigger: 'blur' }],
businessLicenseUrl: [{ required: true, message: '营业执照不能为空', trigger: 'blur' }], businessLicenseUrl: [{ required: true, message: '营业执照不能为空', trigger: 'blur' }],
}, },
certificationCom: false, certificationCom: false,

@ -206,10 +206,8 @@
</template> </template>
<script> <script>
import { getUserDetail } from '@/api/system/user.js' import { getdetesterId } from '@/api/tester/CompanyApply'
import { assignTester } from '@/api/crowdsource/crowdsource' import { getMyreviewListNoToken } from '@/api/review/myreview.js'
import { gettesterId, getdetesterId, getresume, getproject } from '@/api/tester/CompanyApply'
import { getMyreviewList, getMyreviewListNoToken } from '@/api/review/myreview.js'
export default { export default {
name: 'TesterDetail', name: 'TesterDetail',
props: { props: {
@ -237,9 +235,7 @@ export default {
methods: { methods: {
async viewDetail(row, taskId) { async viewDetail(row, taskId) {
this.userId = row.user_id this.userId = row.user_id
// this.taskId = row.taskId;
this.open = true this.open = true
// this.loading = true;
getdetesterId(this.userId, taskId).then((res) => { getdetesterId(this.userId, taskId).then((res) => {
this.testerdata = res.data this.testerdata = res.data
this.projectlist = res.projectCase this.projectlist = res.projectCase
@ -249,58 +245,17 @@ export default {
const res = await getMyreviewListNoToken(this.userId) const res = await getMyreviewListNoToken(this.userId)
this.viewList = res.rows this.viewList = res.rows
//
// getresume(userId).then(res=>{
// this.resumedata=res;
// })
// getproject(userId).then(res=>{
// this.projectlist=res
// })
// getUserDetail(userId).then(response => {
// this.user = response.user;
// if (response.company != null)
// this.company = response.company;
// if (response.tester != null)
// this.tester = response.tester;
// if (response.fileList != null) {
// this.fileList = response.fileList;
// }
// this.loading = false;
// })
}, },
openurl(url) { openurl(url) {
this.$message.success('下载成功') this.$message.success('下载成功')
window.location.href = url window.location.href = url
}, },
assign() {
this.$confirm('确认要将众包任务指定给该测试者吗?').then(() => {
let param = {}
param.testerId = this.userId
param.taskId = this.taskId
assignTester(param).then((response) => {
this.cancel(true)
})
})
},
cancel(isFresh) {
this.open = false
this.$emit('closeDialog', isFresh)
},
downloadFile(fileUrl) {
const loading = this.$loading({
lock: true,
text: '正在下载,请稍后...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)',
})
downloadFast(fileUrl, loading)
},
// //
handleClose(done) { handleClose(done) {
this.open = false this.open = false
// this.$confirm('').then(_ => {
// done();
// }).catch(_ => {});
}, },
}, },
created() {}, created() {},

Loading…
Cancel
Save