add react-app

main
hcj 3 months ago
parent 2d71c360e9
commit f10d809d14
  1. 3
      .env.development
  2. 4
      .env.production
  3. BIN
      pc_prod.zip
  4. BIN
      pc_test.zip
  5. 187
      public/index.html
  6. 10
      src/api/system/login.js
  7. 22
      src/api/tester/CompanyApply.js
  8. 28
      src/components/myUpload/index.vue
  9. 26
      src/const/dict/commondict.js
  10. 50
      src/page/common/myUpload.vue
  11. 69
      src/page/personalpage/commonheader/personalheader.vue
  12. 97
      src/page/personalpage/course/index.vue
  13. BIN
      src/page/personalpage/home/cloudEmployee.png
  14. BIN
      src/page/personalpage/home/resume.png
  15. 366
      src/page/personalpage/home/resume.vue
  16. 21
      src/page/personalpage/home/stationmessage.vue
  17. 342
      src/page/personalpage/testcrowd/currentcrowd.vue
  18. 112
      src/page/personalpage/testcrowd/myrelease.vue
  19. 14
      src/util/pdfDownLoad.js

@ -5,7 +5,8 @@ ENV = 'development'
VUE_APP_BASE_API = '/prod-api'
VUE_APP_BASE_TARGET = 'http://192.168.0.229:9999'
# VUE_APP_BASE_TARGET = 'http://192.168.0.229:9999'
VUE_APP_BASE_TARGET = 'http://192.168.0.135:9999'
# VUE_APP_BASE_TARGET = 'http://192.168.0.129:9999'
# VUE_APP_BASE_TARGET = 'http://172.16.36.180:9999'

@ -9,6 +9,6 @@ VUE_APP_BASE_API = '/prod-api'
# VUE_APP_BASE_TARGET = 'https://www.keyitest.cn/prod-api'
# VUE_APP_BASE_TARGET = 'http://www.bjkeyware.com/test-api'
VUE_APP_BASE_TARGET = 'https://www.bjkeyware.com/prod-api'
# VUE_APP_BASE_TARGET = 'https://www.bjkeyware.com/prod-api'
# VUE_APP_BASE_TARGET = 'http://192.168.0.229:9999/prod-api'
VUE_APP_BASE_TARGET = 'http://192.168.0.229:9999/prod-api'

Binary file not shown.

Binary file not shown.

@ -1,12 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta content="一站式软件测试云平台, 融合软件测试工具市场, 软件测试SaaS平台, 测试任务众包云平台, 软件测试培训学院, 软件测试人员外包平台,以及软件测试行业动态" name="description">
<meta content="关键测试, lovecode, lovecode.cc, 软件测试, 测试云平台, 测试工具市场, 软件测试SaaS, 测试任务众包, 测试培训, 测试人员外包" name="keywords">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<meta
content="一站式软件测试云平台, 融合软件测试工具市场, 软件测试SaaS平台, 测试任务众包云平台, 软件测试培训学院, 软件测试人员外包平台,以及软件测试行业动态"
name="description"
/>
<meta
content="关键测试, lovecode, lovecode.cc, 软件测试, 测试云平台, 测试工具市场, 软件测试SaaS, 测试任务众包, 测试培训, 测试人员外包"
name="keywords"
/>
<link rel="icon" href="<%= BASE_URL %>favicon.ico" />
<title>小关软测宝</title>
<!-- <script>
var _hmt = _hmt || [];
@ -17,6 +23,11 @@
s.parentNode.insertBefore(hm, s);
})();
</script> -->
<!-- <script
async
defer
src="http://192.168.0.229:8080/api/application/embed?protocol=http&host=192.168.0.229:8080&token=a8d8ba1001652d4c"
></script> -->
<style>
.closeX {
background: #6bc1fa;
@ -32,8 +43,9 @@
display: none;
}
body {
background-color: #FFFFFF!important;
margin:0;padding:0;
background-color: #ffffff !important;
margin: 0;
padding: 0;
}
#loader-wrapper {
position: fixed;
@ -54,7 +66,7 @@
margin: -75px 0 0 -75px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
border-top-color: #fff;
-webkit-animation: spin 2s linear infinite;
-ms-animation: spin 2s linear infinite;
-moz-animation: spin 2s linear infinite;
@ -64,7 +76,7 @@
}
#loader:before {
content: "";
content: '';
position: absolute;
top: 5px;
left: 5px;
@ -72,7 +84,7 @@
bottom: 5px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
border-top-color: #fff;
-webkit-animation: spin 3s linear infinite;
-moz-animation: spin 3s linear infinite;
-o-animation: spin 3s linear infinite;
@ -81,7 +93,7 @@
}
#loader:after {
content: "";
content: '';
position: absolute;
top: 15px;
left: 15px;
@ -89,7 +101,7 @@
bottom: 15px;
border-radius: 50%;
border: 3px solid transparent;
border-top-color: #FFF;
border-top-color: #fff;
-moz-animation: spin 1.5s linear infinite;
-o-animation: spin 1.5s linear infinite;
-ms-animation: spin 1.5s linear infinite;
@ -97,7 +109,6 @@
animation: spin 1.5s linear infinite;
}
@-webkit-keyframes spin {
0% {
-webkit-transform: rotate(0deg);
@ -124,13 +135,12 @@
}
}
#loader-wrapper .loader-section {
position: fixed;
top: 0;
width: 51%;
height: 100%;
background: #7171C6;
background: #7171c6;
z-index: 1000;
-webkit-transform: translateX(0);
-ms-transform: translateX(0);
@ -145,21 +155,20 @@
right: 0;
}
.loaded #loader-wrapper .loader-section.section-left {
-webkit-transform: translateX(-100%);
-ms-transform: translateX(-100%);
transform: translateX(-100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
}
.loaded #loader-wrapper .loader-section.section-right {
-webkit-transform: translateX(100%);
-ms-transform: translateX(100%);
transform: translateX(100%);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1.000);
-webkit-transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
transition: all 0.7s 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
}
.loaded #loader {
@ -187,7 +196,7 @@
#loader-wrapper .load_title {
font-family: 'Open Sans';
color: #FFF;
color: #fff;
font-size: 19px;
width: 100%;
text-align: center;
@ -202,7 +211,7 @@
font-weight: normal;
font-style: italic;
font-size: 13px;
color: #FFF;
color: #fff;
opacity: 0.5;
}
@ -224,23 +233,22 @@
/* ::-webkit-scrollbar-thumb:window-inactive {
background: rgba(255,0,0,0.4);
} */
</style>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?30b6456829dfaf92770afef5b2f7feb2";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
var _hmt = _hmt || []
;(function () {
var hm = document.createElement('script')
hm.src = 'https://hm.baidu.com/hm.js?30b6456829dfaf92770afef5b2f7feb2'
var s = document.getElementsByTagName('script')[0]
s.parentNode.insertBefore(hm, s)
})()
</script>
</head>
<body>
<noscript>
<strong>We're sorry but art doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
<strong
>We're sorry but art doesn't work properly without JavaScript enabled. Please enable it to continue.</strong
>
</noscript>
<div id="app">
<!--循环引入 -->
@ -255,87 +263,94 @@
</div> -->
</div>
<!-- <button type="button" class="btn btn-primary">返回首页</button> -->
<div class="closeX">
x
</div>
<div class="closeX">x</div>
</body>
<script>
function browserVersion() {
var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串
var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器
var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //Edge浏览器
var isFirefox = userAgent.indexOf("Firefox") > -1; //Firefox浏览器
var isOpera = userAgent.indexOf("Opera") > -1 || userAgent.indexOf("OPR") > -1; //Opera浏览器
var isChrome = userAgent.indexOf("Chrome") > -1 && userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Edge") == -1 && userAgent.indexOf("OPR") == -1; //Chrome浏览器
var isSafari = userAgent.indexOf("Safari") > -1 && userAgent.indexOf("Chrome") == -1 && userAgent.indexOf("Edge") == -1 && userAgent.indexOf("OPR") == -1; //Safari浏览器
var userAgent = navigator.userAgent //取得浏览器的userAgent字符串
var isIE = userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1 //判断是否IE<11浏览器
var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1
var isEdge = userAgent.indexOf('Edge') > -1 && !isIE //Edge浏览器
var isFirefox = userAgent.indexOf('Firefox') > -1 //Firefox浏览器
var isOpera = userAgent.indexOf('Opera') > -1 || userAgent.indexOf('OPR') > -1 //Opera浏览器
var isChrome =
userAgent.indexOf('Chrome') > -1 &&
userAgent.indexOf('Safari') > -1 &&
userAgent.indexOf('Edge') == -1 &&
userAgent.indexOf('OPR') == -1 //Chrome浏览器
var isSafari =
userAgent.indexOf('Safari') > -1 &&
userAgent.indexOf('Chrome') == -1 &&
userAgent.indexOf('Edge') == -1 &&
userAgent.indexOf('OPR') == -1 //Safari浏览器
if (isIE) {
var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
reIE.test(userAgent);
var fIEVersion = parseFloat(RegExp["$1"]);
var reIE = new RegExp('MSIE (\\d+\\.\\d+);')
reIE.test(userAgent)
var fIEVersion = parseFloat(RegExp['$1'])
if (fIEVersion == 7) {
return 'IE:7';
return 'IE:7'
} else if (fIEVersion == 8) {
return 'IE:8';
return 'IE:8'
} else if (fIEVersion == 9) {
return 'IE:9';
return 'IE:9'
} else if (fIEVersion == 10) {
return 'IE:10';
return 'IE:10'
} else {
return 'IE:6'; //IE版本<7
return 'IE:6' //IE版本<7
}
} else if (isIE11) {
return 'IE:11';
return 'IE:11'
} else if (isEdge) {
return 'Edge:' + userAgent.split('Edge/')[1].split('.')[0];
return 'Edge:' + userAgent.split('Edge/')[1].split('.')[0]
} else if (isFirefox) {
return 'Firefox:' + userAgent.split('Firefox/')[1].split('.')[0];
return 'Firefox:' + userAgent.split('Firefox/')[1].split('.')[0]
} else if (isOpera) {
return 'Opera:' + userAgent.split('OPR/')[1].split('.')[0];
return 'Opera:' + userAgent.split('OPR/')[1].split('.')[0]
} else if (isChrome) {
return 'Chrome:' + userAgent.split('Chrome/')[1].split('.')[0];
return 'Chrome:' + userAgent.split('Chrome/')[1].split('.')[0]
} else if (isSafari) {
return 'Safari:' + userAgent.split('Version/')[1].split('.')[0];
return 'Safari:' + userAgent.split('Version/')[1].split('.')[0]
} else {
return -1; //不是ie浏览器
return -1 //不是ie浏览器
}
}
(function () {
;(function () {
var limitObj = {
'IE': 20,
'Edge': 12,
'Firefox': 52,
'Opera': 42,
'Chrome': 56,
'Safari': 11
IE: 20,
Edge: 12,
Firefox: 52,
Opera: 42,
Chrome: 56,
Safari: 11
}
var browserVersionStr = browserVersion().split(':');
var name = browserVersionStr[0];
var version = browserVersionStr[1];
if (!limitObj[name] || limitObj[name] && version < limitObj[name]) {
var browserVersionStr = browserVersion().split(':')
var name = browserVersionStr[0]
var version = browserVersionStr[1]
if (!limitObj[name] || (limitObj[name] && version < limitObj[name])) {
// position: absolute;
var div1 = "<div style=' z-index: 999; width: 100%;'>";
var div1 = "<div style=' z-index: 999; width: 100%;'>"
var div2 = "<div style='width: 100%; background-color: #021826;margin:10vh 0'/></div>"
var div3 = "<div style='background:#002B33;width:80vw;height:80vh; margin-left: auto; margin-right: auto; text-align: center;padding:0 30px;'>"
var div3 =
"<div style='background:#002B33;width:80vw;height:80vh; margin-left: auto; margin-right: auto; text-align: center;padding:0 30px;'>"
var p0 = "<p style='padding:100px; opacity:1; filter:Alpha(opacity=100); *zoom:1;'><img src='/err.gif'/></p>"
var p = "<p style='color: #fff; font-size: 26px;text-align:center; margin-left: auto; margin-right: auto; line-height: 36px;'>"
var str1 = "您的IE浏览器已正式退役,微软官已不再维护。<br>";
var str2 = "推荐使用:<a href='https://www.baidu.com/s?ie=UTF-8&wd=%E8%B0%B7%E6%AD%8C%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' style='color: #FF9912; text-decoration: none;'>谷歌</a>," +
var p =
"<p style='color: #fff; font-size: 26px;text-align:center; margin-left: auto; margin-right: auto; line-height: 36px;'>"
var str1 = '您的IE浏览器已正式退役,微软官已不再维护。<br>'
var str2 =
"推荐使用:<a href='https://www.baidu.com/s?ie=UTF-8&wd=%E8%B0%B7%E6%AD%8C%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' style='color: #FF9912; text-decoration: none;'>谷歌</a>," +
"<a href='https://www.baidu.com/s?ie=UTF-8&wd=%E7%81%AB%E7%8B%90%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' style='color: #FF9912; text-decoration: none;'>火狐</a>," +
"<a href='https://www.baidu.com/s?ie=UTF-8&wd=360%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' style='color: #FF9912; text-decoration: none;'>360浏览器</a>," +
"<a href='https://www.baidu.com/s?ie=UTF-8&wd=Edge%E6%B5%8F%E8%A7%88%E5%99%A8' target='_blank' style='color: #FF9912; text-decoration: none;'>Edge浏览器</a>," +
"及其它双核浏览器极速模式";
var div5 = "<div style='position: absolute; z-index: 998; background: #021826; width: 100%;opacity:0.65; filter:Alpha(opacity=60); *zoom:1;'></div>"
document.writeln(div1 + div2+ div3 + p0 + p + str1 + str2 +"</p></div></div>" + div5);
document.execCommand("Stop");
};
}());
'及其它双核浏览器极速模式'
var div5 =
"<div style='position: absolute; z-index: 998; background: #021826; width: 100%;opacity:0.65; filter:Alpha(opacity=60); *zoom:1;'></div>"
document.writeln(div1 + div2 + div3 + p0 + p + str1 + str2 + '</p></div></div>' + div5)
document.execCommand('Stop')
}
})()
</script>
<!-- 客服脚本 -->
<script src='https://w102.ttkefu.com/k/?fid=6F5CCH6' charset=utf-8></script>
<script src="https://w102.ttkefu.com/k/?fid=6F5CCH6" charset="utf-8"></script>
<script src="/assets/close.js"></script>
</html>

@ -1,5 +1,4 @@
import request from "../request";
import request from '../request'
// 账户登录方法
export function login(username, password, code, uuid) {
@ -20,12 +19,15 @@ export function login(username, password, code, uuid) {
export function nameLogin(username, password) {
const data = {
username,
password,
password
}
return request({
url: '/nameLogin',
method: 'post',
data: data
data: data,
headers: {
isToken: false
}
})
}

@ -153,3 +153,25 @@ export function skilldis() {
}
})
}
// 简历附件上传
export function attachmentResume(data) {
return request({
url: '/tester/cert/admin/uploadResume/upload',
method: 'post',
data
})
}
export function getResume(id) {
return request({
url: '/tester/cert/admin/getResume/' + id,
method: 'get'
})
}
// 简历删除
export function deleteResume(id) {
return request({
url: '/tester/cert/admin/deleteResume/' + id,
method: 'delete'
})
}

@ -15,6 +15,13 @@ export default {
name: ''
};
},
props: {
fileType: Array,
reciveFile: {
default: false,
type: Boolean
}
},
computed: {
...mapGetters(['token']),
headers() {
@ -35,17 +42,28 @@ export default {
// return this.$confirm(` ${file.name}`);
},
successUpload(response) {
console.log(response);
if (this.reciveFile) {
return
}
this.$emit('upload', response, this.name)
},
beforeAvatarUpload(file, fileList) {
this.name = file.name
const filetype = file.name.slice(file.name.lastIndexOf('.', file.name.length))
console.log(filetype);
const isType = ['.doc', '.docx','.pdf'].some(item => { return item == filetype })
console.log(isType);
let typeArr
if (this.fileType) {
typeArr = this.fileType
} else {
typeArr = ['.doc', '.docx', '.pdf']
}
const isType = typeArr.some(item => { return item == filetype })
if (!isType) {
this.$message.error('只能上传doc、docx、pdf格式文件!');
this.$message.error(`只能上传${typeArr.toString()}格式文件!`);
return false
}
if (this.reciveFile) {
this.$emit('upload', file, this.name)
return false
}
}

@ -2,14 +2,14 @@
export const applicantlist = [
{ label: '个人测试者', value: '0' },
{ label: '认证测试公司', value: '1' },
{label: '个人测试者/认证测试公司', value: '2'},
];
{ label: '个人测试者/认证测试公司', value: '2' }
]
//驻场要求
export const onsiteTypelist = [
{ label: '无需驻场', value: '0' },
{ label: '偶尔驻场', value: '1' },
{label: '定期驻场', value: '2'},
];
{ label: '定期驻场', value: '2' }
]
//任务状态
export const processStatuslist = [
{ label: '竞标中', value: 0 },
@ -20,16 +20,16 @@ export const processStatuslist =[
// {label: '确认完成', value:3},
{ label: '待付款', value: 3 },
{ label: '已完成', value: 4 },
// {label: '没有应竞标者,过期下架', value:4},
// {label: '未指定竞标人,过期下架', value:5},
// {label: '未上传结果,过期下架', value:6},
// {label: '未确认实施结果,过期下架', value:7},
{label: '实施结果不合格', value:8},
{ label: '没有应竞标者,过期下架', value: 4 },
{ label: '未指定竞标人,过期下架', value: 5 },
{ label: '未上传结果,过期下架', value: 6 },
{ label: '未确认实施结果,过期下架', value: 7 },
{ label: '实施结果不合格', value: 8 }
]
// 培训班ID
export const trainClassIdMap = {
'0':'校企合作班',
'1':'线下培训进阶班',
'2':'可靠性人才培训班',
'3':'师资培训班'
0: '校企合作班',
1: '线下培训进阶班',
2: '可靠性人才培训班',
3: '师资培训班'
}

@ -1,29 +1,11 @@
<template>
<div class="uploadpic">
<el-upload
ref="upload"
:action="imgAction"
:headers="headers"
:file-list="fileList"
:before-upload="imgBeforeUpload"
:list-type="listtype"
:on-preview="handlePreview"
:limit="limit"
:class="objClass"
:auto-upload="true"
:on-remove="handelDelete"
:on-error="handleError"
:on-success="handleSuccess"
:on-exceed="handleExceed"
multiple
>
<template v-if="fileName == '步骤照片' || fileName == '文档' || fileName == '附件上传'">
<el-button
size="small"
type="primary"
>点击上传</el-button
>
<el-upload ref="upload" :action="imgAction" :headers="headers" :file-list="fileList"
:before-upload="imgBeforeUpload" :list-type="listtype" :on-preview="handlePreview" :limit="limit"
:class="objClass" :auto-upload="true" :on-remove="handelDelete" :on-error="handleError"
:on-success="handleSuccess" :on-exceed="handleExceed" multiple>
<template v-if="fileName == '步骤照片' || fileName == '文档' || fileName == '附件上传' || fileName == '附件简历'">
<el-button size="small" type="primary">{{ fileName == '附件简历' ? '上传附件简历' : '点击上传' }}</el-button>
<span slot="tip" class="el-upload__tip" style="margin-left:10px">最多上传{{ limit }}个文件</span>
</template>
@ -39,11 +21,7 @@
<div v-if="imageVisible && fileName != '文档'">
<div v-if="fileName != '附件上传'">
<el-image-viewer
:on-close="closeViewer"
:url-list="[dialogImageUrl]"
z-index="5000"
/>
<el-image-viewer :on-close="closeViewer" :url-list="[dialogImageUrl]" z-index="5000" />
</div>
</div>
</div>
@ -170,6 +148,7 @@ export default {
},
//
handlePreview(file) {
if (this.fileName == '附件简历') { return }
this.imageVisible = true
this.dialogImageUrl = file.url
},
@ -244,22 +223,28 @@ export default {
background-color: transparent;
border: 1px dashed #34b2ed;
}
.uploadpic>>>.el-upload--picture-card i {
color: #34b2ed;
}
.el-upload__tip {
/* color: #34b2ed; */
}
.uploadpic>>>.el-upload-list__item-name {
color: #34b2ed;
/* width:135px; */
/* width: 80px; */
}
.uploadpic>>>.el-upload-list {
/* width: 200px; */
width: 300px;
margin: 0 auto;
/* margin-left:20px; */
}
.uploadpic>>>.el-button {
background: #0066eb;
color: #ffffff;
@ -271,6 +256,7 @@ export default {
border-radius: 3px;
border: 1px solid transparent;
}
.picetucard {
border: 1px dashed #34b2ed;
width: 148px;
@ -279,14 +265,17 @@ export default {
text-align: center;
border-radius: 6px;
}
.picetucard i {
color: #34b2ed;
width: 28px;
height: 28px;
}
.uploadpic>>>.el-upload-list__item-name [class^='el-icon'] {
color: #34b2ed;
}
/*当upLoadShow为true时,启用如下样式,即上传框的样式,若为false则不启用该样式*/
.uploadpic>>>.upLoadShow .el-upload {
/* width: 148px;
@ -300,6 +289,7 @@ export default {
height: 148px;
line-height: 146px;
}
/*当upLoadHide为true时,启用如下样式,即上传框的样式,若为false则不启用该样式*/
.uploadpic>>>.upLoadHide .el-upload {
display: none;
@ -310,9 +300,11 @@ export default {
height: 33px;
line-height: 33px;
}
.uploadpic>>>.el-progress__text {
color: #67c23a;
}
/* .uploadpic>>>.el-upload .el-upload--text{
height: 50px;
line-height: 1px;

@ -1,15 +1,13 @@
<template>
<div class="bgback">
<div class="headbg">
<div
style="
<div style="
margin: 10px 50px 10px 10px;
display: flex;
justify-content: space-between;
height: 50px;
align-items: center;
"
>
">
<div style="width: 430px; display: flex; justify-content: space-between; align-items: center">
<!-- <img @click="tishou" style="cursor:pointer;height:45px;object-fit:contain" src="/assets/loginreg/logo.png" alt=""> -->
<p @click="tishou" style="font-weight: bold; color: #262626; cursor: pointer; font-size: 20px">
@ -21,18 +19,10 @@
<el-radio-button :label="true">收起</el-radio-button>
</el-radio-group> -->
<!-- <p @click='opencollapse' style="cursor:pointer" >展开收齐</p> -->
<svg
@click="opencollapse"
:class="{ 'is-active': isCollapse }"
class="hamburger"
viewBox="0 0 1024 1024"
xmlns="http://www.w3.org/2000/svg"
width="64"
height="64"
>
<svg @click="opencollapse" :class="{ 'is-active': isCollapse }" class="hamburger"
viewBox="0 0 1024 1024" xmlns="http://www.w3.org/2000/svg" width="64" height="64">
<path
d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z"
/>
d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z" />
</svg>
<el-breadcrumb separator="/" style="width: 180px">
<el-breadcrumb-item v-for="(item, key) of breadcrumblist" :key="key">{{
@ -46,33 +36,22 @@
<div style="display: flex; justify-content: space-between; align-items: center; font-size: 14px">
<div class="permissions" @click="mypermissions('message')">
<el-badge
:value="messageCount"
:max="100"
:hidden="messageCount == 0"
:class="messageCount > 0 ? 'baggeitem' : 'baggeitemda'"
>
<el-badge :value="messageCount" :max="100" :hidden="messageCount == 0"
:class="messageCount > 0 ? 'baggeitem' : 'baggeitemda'">
<img style="margin-right: 5px" src="/assets/home/xiaoxi.png" alt="" />
</el-badge>
<p style="margin-left: 5px">站内消息</p>
</div>
<el-dropdown
class="avatar-container right-menu-item hover-effect"
trigger="click"
placement="bottom"
>
<el-dropdown class="avatar-container right-menu-item hover-effect" trigger="click"
placement="bottom">
<div class="avatar-wrapper">
<img
style="
<img style="
width: 54px;
height: 54px;
margin: 13px 0 5px 0px;
cursor: pointer;
border-radius: 50%;
"
:src="userinform.avatar"
alt=""
/>
" :src="userinform.avatar" alt="" />
<!-- <i style="margin-bottom:10px" class="el-icon-caret-bottom"/> -->
</div>
<el-dropdown-menu slot="dropdown">
@ -87,15 +66,8 @@
</div>
<div style="display: flex; justify-content: space-between">
<div style="width: 225px; position: fixed; margin-top: 70px">
<el-menu
:default-active="currentactive"
class="el-menu-vertical-demo"
:collapse="isCollapse"
router
unique-opened
text-color="#000000"
active-text-color="#0066EB"
>
<el-menu :default-active="currentactive" class="el-menu-vertical-demo" :collapse="isCollapse" router
unique-opened text-color="#000000" active-text-color="#0066EB">
<!-- 企业用户--新菜单 -->
<template v-if="userinform.companyStatus == 2">
<el-submenu index="7">
@ -169,7 +141,8 @@
<span slot="title">个人中心</span>
</template>
<el-menu-item-group>
<el-menu-item index="/console/resume" v-if="userinform.testerStatus == 2">
<!-- // v-if="userinform.testerStatus == 2" -->
<el-menu-item index="/console/resume">
<span>个人简历</span>
</el-menu-item>
<el-menu-item index="/console/profile">
@ -387,6 +360,7 @@ export default {
width: 100vw;
height: 100vh;
}
.headbg {
/* width:1200px;
margin:0 auto; */
@ -401,6 +375,7 @@ export default {
background-color: #ffffff;
box-shadow: 0px 1px 8px 0px rgba(0, 0, 0, 0.11);
}
.permissions {
display: flex;
align-items: center;
@ -408,44 +383,54 @@ export default {
margin-right: 20px;
cursor: pointer;
}
.avatar-wrapper img:hover {
opacity: 0.5;
/* transition: 0.3s; */
}
.el-menu-vertical-demo:not(.el-menu--collapse) {
width: 100%;
min-height: 400px;
height: 95vh;
}
.hamburger {
display: inline-block;
vertical-align: middle;
width: 20px;
height: 20px;
}
.hamburger.is-active {
transform: rotate(180deg);
}
.el-menu--collapse {
height: 92vh;
}
.content-wrapper {
padding: 100px 20px 0 249px;
box-sizing: border-box;
width: 100vw;
/* background:#666666!important */
}
.baggeitem {
margin-top: 5px;
margin-right: 15px;
}
.baggeitemda {
margin-top: 5px;
/* margin-right:10px; */
}
.el-dropdown-menu__item {
padding: 0 20px !important;
}
.el-dropdown-menu {
top: 56px !important;
}

@ -15,11 +15,15 @@
</div>
<div class="courseTime">
<div>上课时间: {{ course.courseTime }}</div>
<div class="sourceWrap" v-show="course.content">
<div class="sourceWrap" v-if="course.attachments.length">
<div v-for="(item, index) in course.attachments" :key="index">
<div @click="download(item)">{{ item.fileName }}</div>
</div>
</div>
<div @click="homeWork(course)">查看课后作业</div>
</div>
</div>
</div>
</div>
@ -37,6 +41,14 @@
type="primary" @click="copy(currentCourse.url)">复制</el-button>
</div>
</el-dialog>
<el-dialog title="课后作业" :visible.sync="homeWorkVisible" class="freeDialog" width="910px">
<el-divider></el-divider>
<div class="homeWork">
<quill-editor v-model="editContent" ref="myQuillEditor" :options="editorOption"
@blur="onEditorBlur($event)" @focus="onEditorFocus($event)" @change="onEditorChange($event)">
</quill-editor>
</div>
</el-dialog>
<pagination v-show="total > 0" :total="total" :page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize" @pagination="init" />
</div>
@ -46,15 +58,40 @@
import { getCourse } from '@/api/train/index.js'
import Pagination from "@/components/Pagination";
import copyText from '../../../util/cpoyText';
import { quillEditor } from 'vue-quill-editor' //
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
//
import Quill from 'quill'
// import { ImageExtend } from 'quill-image-extend-module'
// import {ImageResize} from 'quill-image-resize-module';
// import { ImageDrop } from 'quill-image-drop-module'
// Quill.register('modules/imageDrop', ImageDrop)
// Quill.register('modules/imageResize', ImageResize);
//
const fontSizeStyle = Quill.import('attributors/style/size') // style
fontSizeStyle.whitelist = ['12px', '14px', '16px', '18px', '20px', '24px', '28px', '32px', '36px']
Quill.register(fontSizeStyle, true)
// //
const Font = Quill.import('attributors/style/font') // style
const fonts = ['SimSun', 'SimHei', 'Microsoft-YaHei', 'KaiTi', 'FangSong']
Font.whitelist = fonts //
Quill.register(Font, true)
const AlignStyle = Quill.import('attributors/style/align')
AlignStyle.whitelist = ['right', 'center', 'justify']
Quill.register(AlignStyle, true)
// Quill.register('modules/ImageExtend', ImageExtend)
// //
const toolbarOptions = []
export default {
created() {
this.classType = this.$route.query.classType
this.init()
},
components: {
Pagination
},
computed: {
toLearnShow() {
return (course) => {
@ -84,9 +121,37 @@ export default {
classType: '',
currentCourse: {},
dialogVisible: false,
homeWorkVisible: false,
base: process.env.VUE_APP_BASE_API,
editorOption: {
placeholder: '请在这里输入',
modules: {
toolbar: {
container: toolbarOptions,
},
//
// imageDrop: true,
// imageResize: {
// displayStyles: {
// backgroundColor: 'black',
// border: 'none',
// color: 'white'
// },
// modules: ['Resize', 'DisplaySize', 'Toolbar']
// },
},
},
editContent: ''
}
},
components: {
quillEditor, Pagination
},
mounted() {
// this.$refs.myQuillEditor.quill.enable(true);
},
methods: {
async init() {
const id = this.$route.query.id
@ -96,6 +161,21 @@ export default {
this.courseList = res.rows
}
},
onEditorBlur() { }, //
onEditorFocus(v) {
}, //
//
onEditorChange() {
// this.taskform.projectDesc = this.escapeStringHTML(this.editContent)
// console.log('',this.taskform.projectDesc)
},
homeWork(course) {
this.homeWorkVisible = true
this.$nextTick(() => {
this.$refs.myQuillEditor.quill.enable(false)
this.editContent = course.content
})
},
download(params) {
const url = params.filePath
if (url) {
@ -116,7 +196,6 @@ export default {
}
},
toLearn(course, toggle) {
return
if (this.classType != 4) {
return
}
@ -252,4 +331,14 @@ export default {
font-size: 14px;
color: #0066eb;
}
.ql-editor {
min-height: 250px;
max-height: 500px;
border-top: 1px solid #ccc;
}
.homeWork .ql-toolbar {
display: none;
}
</style>

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

@ -3,9 +3,22 @@
<div class="userAbility">
<div class="toptttt">
<img src="/assets/ability/metop.png" style="width: 24px; height: 28px; margin-right: 15px" alt="" />
云员工个人简历
个人简历
</div>
<div class="contentBig">
<div class="resumeToggle">
<el-radio-group v-model="tabPosition" style="margin: 30px 0px 0px 30px;">
<el-radio-button label="online">在线简历</el-radio-button>
<el-radio-button label="att">附件</el-radio-button>
</el-radio-group>
<div style="width: 135px;height: 135px;position: absolute;right: 400px;top: 50px;"
v-if="userinform.testerStatus == '2'">
<img src="./cloudEmployee.png" alt="">
</div>
</div>
<div v-if="userinform.testerStatus != '2'"
style="margin-left: 30px;margin-top: 10px;color: #666666;font-size: 14px;" @click="toRegCloud">
友情提示入驻成为云员工简历才能被企业主浏览到哦<span style="color: #0066EB;cursor: pointer;">点此去入驻</span></div>
<div class="contentBig" v-if="tabPosition == 'online'">
<div class="contentBox">
<div class="active4">
<!-- 个人简介 -->
@ -25,45 +38,29 @@
</div>
<el-form-item label="所在城市" prop="city">
<el-input v-model="userForm.city" v-show="false"></el-input>
<v-distpicker
@province="onChangeProvince"
@city="onChangeCity"
:placeholders="placeholders"
:province="province"
:city="city"
hide-area
></v-distpicker>
<v-distpicker @province="onChangeProvince" @city="onChangeCity"
:placeholders="placeholders" :province="province" :city="city"
hide-area></v-distpicker>
</el-form-item>
<el-form-item label="技能方向" prop="testSkills">
<!-- <el-input
v-model="userForm.testSkills"
placeholder="请输入技能,如:测试工程师"
></el-input> -->
<el-select
v-model="userForm.testSkills"
placeholder="请选择技能方向"
:disabled="active == 6 ? true : false"
@change="testSkillChange"
>
<el-option v-for="it in testskillList" :key="it.dictCode" :label="it.dictLabel" :value="it.dictLabel"> </el-option>
<el-select v-model="userForm.testSkills" placeholder="请选择技能方向"
:disabled="active == 6 ? true : false" @change="testSkillChange">
<el-option v-for="it in testskillList" :key="it.dictCode" :label="it.dictLabel"
:value="it.dictLabel"> </el-option>
<el-option label="其他" value="其他"> </el-option>
</el-select>
<br />
<el-input
style="margin-top: 10px"
v-show="userForm.testSkills == '其他'"
v-model="testSkillValue"
placeholder="请输入技能方向,如:测试工程师"
:disabled="active == 6 ? true : false"
></el-input>
<el-input style="margin-top: 10px" v-show="userForm.testSkills == '其他'"
v-model="testSkillValue" placeholder="请输入技能方向,如:测试工程师"
:disabled="active == 6 ? true : false"></el-input>
</el-form-item>
<el-form-item label="个人优势" prop="personalAdvantage">
<el-input
type="textarea"
:rows="5"
v-model="userForm.personalAdvantage"
placeholder="请输入个人优势"
></el-input>
<el-input type="textarea" :rows="5" v-model="userForm.personalAdvantage"
placeholder="请输入个人优势"></el-input>
</el-form-item>
</el-form>
<div class="delWork">
@ -84,22 +81,14 @@
</el-form-item>
<div class="flexbox">
<el-form-item label="在职时间: " prop="startTime">
<el-date-picker
value-format="yyyy-MM"
v-model="it.startTime"
type="month"
placeholder="开始时间"
>
<el-date-picker value-format="yyyy-MM" v-model="it.startTime" type="month"
placeholder="开始时间">
</el-date-picker>
</el-form-item>
<span style="color: #bfbfbf; margin: -27px 15px 0 15px">-</span>
<el-form-item prop="endTime" class="endtime">
<el-date-picker
value-format="yyyy-MM"
v-model="it.endTime"
type="month"
placeholder="结束时间"
>
<el-date-picker value-format="yyyy-MM" v-model="it.endTime" type="month"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
</div>
@ -107,23 +96,16 @@
<el-input v-model="it.title" placeholder="请输入职位名称"></el-input>
</el-form-item>
<el-form-item label="工作内容: " prop="intro">
<el-input
type="textarea"
v-model="it.intro"
:rows="5"
placeholder="请输入工作内容"
></el-input>
<el-input type="textarea" v-model="it.intro" :rows="5"
placeholder="请输入工作内容"></el-input>
</el-form-item>
</el-form>
<div class="delWork">
<div v-if="!it.caseId" class="saveWork" @click="saveWork(index)">保存</div>
<div v-else class="saveWork" @click="updateWork(index)">修改</div>
<img
src="/assets/ability/delicon.png"
style="width: 14px; height: 16px; margin-right: 5px"
alt=""
@click="delWork(index)"
/>
<img src="/assets/ability/delicon.png"
style="width: 14px; height: 16px; margin-right: 5px" alt=""
@click="delWork(index)" />
<span @click="delWork(index)">删除</span>
</div>
</div>
@ -142,22 +124,14 @@
</el-form-item>
<div class="flexbox">
<el-form-item label="项目时间: " prop="startTime">
<el-date-picker
value-format="yyyy-MM"
v-model="it.startTime"
type="month"
placeholder="开始时间"
>
<el-date-picker value-format="yyyy-MM" v-model="it.startTime" type="month"
placeholder="开始时间">
</el-date-picker>
</el-form-item>
<span style="color: #bfbfbf; margin: -27px 15px 0 15px">-</span>
<el-form-item prop="endTime" class="endtime">
<el-date-picker
value-format="yyyy-MM"
v-model="it.endTime"
type="month"
placeholder="结束时间"
>
<el-date-picker value-format="yyyy-MM" v-model="it.endTime" type="month"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
</div>
@ -168,23 +142,16 @@
<el-input v-model="it.applyTech" placeholder="请输入应用技术"></el-input>
</el-form-item>
<el-form-item label="工作内容" prop="intro">
<el-input
:rows="5"
type="textarea"
v-model="it.intro"
placeholder="请输入工作内容"
></el-input>
<el-input :rows="5" type="textarea" v-model="it.intro"
placeholder="请输入工作内容"></el-input>
</el-form-item>
</el-form>
<div class="delWork">
<div v-if="!it.caseId" class="saveWork" @click="saveProject(index)">保存</div>
<div v-else class="saveWork" @click="updateProject(index)">修改</div>
<img
src="/assets/ability/delicon.png"
style="width: 14px; height: 16px; margin-right: 5px"
alt=""
@click="delProject(index)"
/>
<img src="/assets/ability/delicon.png"
style="width: 14px; height: 16px; margin-right: 5px" alt=""
@click="delProject(index)" />
<span @click="delProject(index)">删除</span>
</div>
</div>
@ -198,32 +165,22 @@
资格证书
</div>
<div class="workIt" v-for="(it, index) in certificateList" :key="index">
<el-form
:rules="certificateRules"
:model="it"
label-width="80px"
:ref="'certificateRef' + index"
>
<el-form :rules="certificateRules" :model="it" label-width="80px"
:ref="'certificateRef' + index">
<el-form-item label="证书名称" prop="credentialsName">
<el-input v-model="it.credentialsName" placeholder="请输入证书名称"></el-input>
</el-form-item>
<el-form-item prop="url">
<imageUpload
v-model="it.url"
fileName="publicize"
:limit="1"
:ref="'myupload' + index"
/>
<imageUpload v-model="it.url" fileName="publicize" :limit="1"
:ref="'myupload' + index" />
</el-form-item>
</el-form>
<div class="delWork">
<div v-if="!it.fileId" class="saveWork" @click="saveCertificate(index)">保存</div>
<div v-else class="saveWork" @click="updateCertificate(index)">修改</div>
<img
src="/assets/ability/delicon.png"
<img src="/assets/ability/delicon.png"
style="width: 14px; height: 16px; margin-right: 5px"
@click="delCertificate(index)"
/>
@click="delCertificate(index)" />
<span @click="delCertificate(index)">删除</span>
</div>
</div>
@ -236,33 +193,21 @@
教育经历
</div>
<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-input v-model="it.name" placeholder="请输入学校名称"></el-input>
</el-form-item>
<div class="flexbox">
<el-form-item label="在校时间: " prop="startTime">
<el-date-picker
value-format="yyyy-MM"
v-model="it.startTime"
type="month"
placeholder="开始时间"
>
<el-date-picker value-format="yyyy-MM" v-model="it.startTime" type="month"
placeholder="开始时间">
</el-date-picker>
</el-form-item>
<span style="color: #bfbfbf; margin: -27px 15px 0 15px">-</span>
<el-form-item prop="endTime" class="endtime">
<el-date-picker
value-format="yyyy-MM"
v-model="it.endTime"
type="month"
placeholder="结束时间"
>
<el-date-picker value-format="yyyy-MM" v-model="it.endTime" type="month"
placeholder="结束时间">
</el-date-picker>
</el-form-item>
</div>
@ -281,12 +226,9 @@
<div class="delWork">
<div v-if="!it.caseId" class="saveWork" @click="saveEducation(index)">保存</div>
<div v-else class="saveWork" @click="updateEducation(index)">修改</div>
<img
src="/assets/ability/delicon.png"
style="width: 14px; height: 16px; margin-right: 5px"
alt=""
@click="delEducation(index)"
/>
<img src="/assets/ability/delicon.png"
style="width: 14px; height: 16px; margin-right: 5px" alt=""
@click="delEducation(index)" />
<span @click="delEducation(index)">删除</span>
</div>
</div>
@ -294,6 +236,24 @@
</div>
</div>
</div>
<div class="attResume" v-if="tabPosition == 'att'">
<div v-if="Object.keys(myResume).length" class="personResume">
<div style="cursor: pointer;" @click="previewResume">{{ myResume.fileName }}</div>
<div style="color: #F69102;margin-left: 100px;cursor: pointer;" @click="downLoadResume">下载</div>
<div style="color: #FC3333;cursor: pointer;" @click="toDeleteResume">删除</div>
</div>
<div v-else>
<div>
<img src="./resume.png" alt="">
</div>
<div style="margin: 10px 0;">暂无附件简历请上传<span style="color: #F6482B;">pdf格式</span></div>
</div>
<myUpload :fileType="['.pdf']" @upload="attachmentUpload">
<el-button v-if="!Object.keys(myResume).length" icon="el-icon-upload2"
type="primary">上传附件简历</el-button>
<el-button v-else icon="el-icon-refresh-right" type="primary">更新附件简历</el-button>
</myUpload>
</div>
</div>
<!-- <div class="bottomBtn">保存并发布</div> -->
</div>
@ -302,7 +262,8 @@
<script>
import { mapGetters } from 'vuex'
import imageUpload from '@/page/common/imageUpload'
import { gettesterId, addtesterApply, updatetesterApply, skilldis } from '@/api/tester/CompanyApply'
import myUpload from '@/components/myUpload'
import { gettesterId, addtesterApply, updatetesterApply, skilldis, attachmentResume, getResume, deleteResume } from '@/api/tester/CompanyApply'
import {
getCloudAll,
couldInfoAdd,
@ -313,17 +274,22 @@ import {
couldBookUpdate,
couldApply,
delBook,
} from '@/api/tester/TesterApply'
import downPdf from '../../../util/pdfDownLoad'
export default {
components: { imageUpload },
components: { imageUpload, myUpload },
data() {
return {
baseUrl: process.env.VUE_APP_BASE_API,
myResume: {},
testskillList: [],
testSkillValue: '',
active: 0,
//
certifform: {},
tabPosition: 'online',
certifRules: {
name: [
{ required: true, message: '真实姓名不能为空', trigger: 'blur' },
@ -415,8 +381,19 @@ export default {
skilldis().then(res => {
this.testskillList = res.data
})
this.getMyResume()
},
methods: {
//
getMyResume() {
getResume(this.userId).then(res => {
if (res.code == 200 && res.data) {
this.myResume = res.data
} else {
this.myResume = {}
}
})
},
testSkillChange(e) {
this.testSkillValue = ''
},
@ -475,6 +452,9 @@ export default {
}
})
},
toRegCloud() {
this.$router.push('/ability/apply')
},
applyBegin() {
this.$refs['certifform'].validate((valid) => {
if (valid) {
@ -704,6 +684,27 @@ export default {
}
})
},
previewResume() {
window.open(this.baseUrl + this.myResume.filePath)
},
downLoadResume() {
downPdf(this.baseUrl + this.myResume.filePath, this.myResume.fileName)
},
toDeleteResume() {
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
deleteResume(this.userId).then(res => {
if (res.code == 200) {
this.$message.success(res.msg)
this.getMyResume()
}
})
})
},
//
addEducation() {
this.educationList.push({})
@ -777,6 +778,22 @@ export default {
this.city = ''
}
},
async attachmentUpload(item, name) {
console.log(item);
console.log(name);
const data = {
filePath: item.filePath,
fileName: name,
userId: this.userId
}
const res = await attachmentResume(data)
if (res.code == 200) {
this.getMyResume()
}
// console.log(res);
}
},
}
</script>
@ -787,10 +804,12 @@ export default {
padding-bottom: 40px;
overflow: hidden;
}
.container {
width: 1200px;
margin: auto;
}
.topTitle {
font-weight: bold;
font-size: 32px;
@ -799,17 +818,20 @@ export default {
align-items: center;
margin: 40px auto;
}
.colra {
background: linear-gradient(-90deg, #fa2c3f 0%, #792bf9 100%);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.stepBoxBtn {
display: flex;
align-items: center;
justify-content: center;
margin: 30px 0;
}
.backBtn {
width: 130px;
height: 40px;
@ -823,6 +845,7 @@ export default {
color: #0066eb;
cursor: pointer;
}
.nextBtn {
width: 130px;
height: 40px;
@ -835,18 +858,51 @@ export default {
color: #ffffff;
cursor: pointer;
}
.contentBig {
.contentBig,
.attResume {
background: #ffffff;
padding: 40px;
box-sizing: border-box;
}
.personResume {
display: flex;
align-items: center;
margin-bottom: 10px;
padding: 0 5px;
/* width: 308px; */
height: 35px;
background: #F0F4FA;
border-radius: 4px;
font-family: PingFang SC;
font-weight: 500;
font-size: 16px;
color: #0066EB;
}
.personResume>* {
margin: 10px 5px;
}
.attResume {
height: 600px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
}
.stepBox {
margin: 30px auto;
border-bottom: 2px dashed #ebebeb;
}
.stepBox>>>.el-steps {
flex: 1;
}
.stepBox>>>.el-step__icon {
width: 60px;
height: 60px;
@ -859,33 +915,40 @@ export default {
background: #f2f3f7;
height: 3px;
}
/* 已完成 */
.stepBox>>>.el-step__head.is-finish {
color: #f2f3f7;
border-color: unset;
}
.stepBox>>>.el-step__title.is-finish {
font-weight: 500;
font-size: 15px;
color: #666666;
}
.stepBox>>>.el-step__title.is-wait {
font-weight: 500;
font-size: 15px;
color: #666666;
}
.stepBox>>>.el-step__title.is-process {
font-weight: 500;
font-size: 15px;
color: #0066eb;
}
/* 当前 */
.stepBox>>>.el-step__head.is-process .el-step__icon {
background: #0066eb !important;
}
.workIt>>>.distpicker-address-wrapper label select {
width: 247px !important;
}
.addWork {
width: 150px;
height: 40px;
@ -898,6 +961,7 @@ export default {
text-align: center;
margin-bottom: 30px;
}
.delWork {
position: absolute;
top: 20px;
@ -910,6 +974,7 @@ export default {
font-size: 14px;
color: #fd4747;
}
.saveWork {
margin-right: 30px;
cursor: pointer;
@ -917,6 +982,7 @@ export default {
font-size: 14px;
color: #23ca7d;
}
.workIt {
border-radius: 4px;
border: 1px solid #f2f2f2;
@ -925,15 +991,19 @@ export default {
box-sizing: border-box;
position: relative;
}
.workIt>>>.el-input {
width: 500px;
}
.workIt>>>.el-date-editor {
width: 231px;
}
.workIt>>>.el-textarea__inner {
width: 500px;
}
.activeTitle {
display: flex;
align-items: center;
@ -942,12 +1012,14 @@ export default {
color: #000000;
margin-bottom: 30px;
}
.activeTitLine {
width: 5px;
height: 17px;
background: #0066eb;
margin-right: 10px;
}
.applytip {
font-weight: 500;
font-size: 14px;
@ -955,6 +1027,7 @@ export default {
margin-bottom: 30px;
margin-top: -10px;
}
.applySuccess {
display: flex;
align-items: center;
@ -962,11 +1035,13 @@ export default {
font-size: 18px;
color: #23ca7d;
}
.applySuccess img {
width: 27px;
height: 27px;
margin-right: 10px;
}
.applyIng {
width: 275px;
height: 50px;
@ -980,6 +1055,7 @@ export default {
justify-content: center;
margin: 40px auto;
}
.applySuccessAll {
width: 275px;
height: 50px;
@ -993,6 +1069,7 @@ export default {
justify-content: center;
margin: 40px auto;
}
.applyFail {
width: 275px;
height: 50px;
@ -1006,23 +1083,28 @@ export default {
justify-content: center;
margin: 40px auto;
}
.flexbox {
display: flex;
align-items: center;
}
.endtime>>>.el-form-item__content {
margin-left: 0px !important;
}
.userAbility {
overflow: hidden;
background: #ffffff;
box-shadow: 0px 1px 12px 0px rgba(17, 19, 21, 0.06);
}
.contentBig {
background: #ffffff;
padding: 40px 123px;
box-sizing: border-box;
}
.toptttt {
height: 78px;
background: #f0f4fa;
@ -1038,6 +1120,7 @@ export default {
width: 347px !important;
font-size: 14px;
}
.addWork {
width: 150px;
height: 40px;
@ -1050,6 +1133,7 @@ export default {
text-align: center;
margin-bottom: 30px;
}
.delWork {
position: absolute;
top: 20px;
@ -1062,6 +1146,7 @@ export default {
font-size: 14px;
color: #fd4747;
}
.workIt {
border-radius: 4px;
border: 1px solid #f2f2f2;
@ -1070,15 +1155,19 @@ export default {
box-sizing: border-box;
position: relative;
}
.workIt>>>.el-input {
width: 700px;
}
.workIt>>>.el-date-editor {
width: 330px;
}
.workIt>>>.el-textarea__inner {
width: 700px;
}
.activeTitle {
display: flex;
align-items: center;
@ -1087,12 +1176,14 @@ export default {
color: #000000;
margin-bottom: 30px;
}
.activeTitLine {
width: 5px;
height: 17px;
background: #0066eb;
margin-right: 10px;
}
.applytip {
font-weight: 500;
font-size: 14px;
@ -1100,6 +1191,7 @@ export default {
margin-bottom: 30px;
margin-top: -10px;
}
.applySuccess {
display: flex;
align-items: center;
@ -1107,30 +1199,62 @@ export default {
font-size: 18px;
color: #23ca7d;
}
.applySuccess img {
width: 27px;
height: 27px;
margin-right: 10px;
}
.userAbility>>>.el-upload--picture-card {
width: 700px;
height: 190px;
line-height: 190px;
}
.userAbility>>>.el-upload-list__item {
width: 700px !important;
height: 190px !important;
line-height: 190px !important;
}
.userAbility>>>.el-upload-list__item-status-label {
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
.attResume>>>.el-upload--picture-card {
width: 300px;
height: 90px;
line-height: 90px;
}
.attResume>>>.el-upload-list__item {
width: 300px !important;
height: 90px !important;
line-height: 90px !important;
}
.attResume>>>.el-upload-list__item-status-label {
display: flex !important;
align-items: center !important;
justify-content: center !important;
}
.flexbox {
display: flex;
align-items: center;
}
.resumeToggle {
display: flex;
justify-content: space-between;
align-items: center;
padding-right: 490px;
position: relative;
}
.bottomBtn {
overflow: hidden;
width: 250px;

@ -4,6 +4,7 @@
<div class="dvied"></div>
<div style="font-weight: bold;color: #333333;font-size: 18px;margin-left:10px">站内消息</div>
</div>
<div style="background: #FFFFFF;border-radius: 4px;">
<div style="" class="messsagenum">
<el-radio-group v-model="mesage" @change="showDataTypeChage" fill='#0066EB'>
@ -22,18 +23,16 @@
</el-radio-group>
<el-table v-loading='loading' :data="messagelist">
<el-table-column label="序号" align="center" type="index" />
<el-table-column label="标题内容" header-align="center" key="message" prop="message" :show-overflow-tooltip="true"/>
<el-table-column label="标题内容" header-align="center" key="message" prop="message"
:show-overflow-tooltip="true" />
<el-table-column label="消息类型" key="title" prop="title" width="200" :show-overflow-tooltip="true" />
<el-table-column label="发送时间" key="sendTime" prop="sendTime" width="200" :show-overflow-tooltip="true"/>
<el-table-column label="发送时间" key="sendTime" prop="sendTime" width="200"
:show-overflow-tooltip="true" />
</el-table>
<!-- @size-change="handleSizeChange" -->
<div v-if="total > 10" style='width:100%;margin-top:30px;text-align: center;'>
<el-pagination background
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-size="queryParams.pageSize"
layout="total, prev, pager, next, jumper"
:total="total">
<el-pagination background @current-change="handleCurrentChange" :current-page="currentPage"
:page-size="queryParams.pageSize" layout="total, prev, pager, next, jumper" :total="total">
</el-pagination>
</div>
</div>
@ -114,29 +113,35 @@
height: 18px;
background: #0066EB;
}
.messsagenum>>>.el-radio-button__inner {
background: #ebebed;
border: none;
margin-right: 20px;
/* font-weight:bold; */
}
.messsagenum>>>.el-radio-button:first-child .el-radio-button__inner {
border-radius: 0;
}
.messsagenum>>>.el-radio-button:last-child .el-radio-button__inner {
border-radius: 0;
}
.messsagenum>>>.el-table th {
background-color: #F7F7F7;
color: #666666;
/* text-align:left; */
}
.messsagenum>>>.el-table td {
/* text-align:center; */
background-color: #FFFFFF;
height: 60px;
color: #333333;
}
.messsagenum>>>.el-table--border th {
border-right: #F7F7F7
}

@ -30,32 +30,24 @@
<template v-if="crowdtype == 'myApply'">
<div
v-for="it in findLabelValueByProp(
<div v-for="it in findLabelValueByProp(
tasktypelist,
task.testType,
'dictValue',
'dictLabel',
).split(',')"
:key="it"
class="tabone"
style="width: 75px; background: #e8eef5; color: #525b65"
>
).split(',')" :key="it" class="tabone"
style="width: 75px; background: #e8eef5; color: #525b65">
<span>{{ it }}</span>
</div>
</template>
<template v-else>
<div
v-for="it in findLabelValueByProp(
<div v-for="it in findLabelValueByProp(
tasktypelist,
task.test_type,
'dictValue',
'dictLabel',
).split(',')"
:key="it"
class="tabone"
style="width: 75px; background: #e8eef5; color: #525b65"
>
).split(',')" :key="it" class="tabone"
style="width: 75px; background: #e8eef5; color: #525b65">
<span>{{ it }}</span>
</div>
</template>
@ -117,41 +109,30 @@
</div>
</div>
<div v-if="crowdtype == 'myApply'">
<p
v-if="task.projectDesc"
v-html="task.projectDesc"
style="color: #808080; line-height: 23px; font-size: 24rpx; white-space: pre-line"
></p>
<p v-if="task.projectDesc" v-html="task.projectDesc"
style="color: #808080; line-height: 23px; font-size: 24rpx; white-space: pre-line"></p>
<p v-else style="margin-left: 10px"></p>
</div>
<div v-else>
<p
v-if="task.project_desc"
v-html="task.project_desc"
style="color: #808080; line-height: 23px; font-size: 24rpx; white-space: pre-line"
></p>
<p v-if="task.project_desc" v-html="task.project_desc"
style="color: #808080; line-height: 23px; font-size: 24rpx; white-space: pre-line"></p>
<p v-else style="margin-left: 10px"></p>
</div>
<div
v-if="crowdtype != 'competitive'"
style="display: flex; align-items: center; width: 150px; margin-top: 30px"
>
<div v-if="crowdtype != 'competitive'"
style="display: flex; align-items: center; width: 150px; margin-top: 30px">
<div class="dvied"></div>
<div style="font-weight: bold; color: #333333; font-size: 17px; margin-left: 10px">
联系方式
</div>
</div>
<div
v-if="crowdtype != 'competitive'"
style="
<div v-if="crowdtype != 'competitive'" style="
display: flex;
align-items: center;
color: #808080;
font-size: 24rpx;
margin: 36rpx 25rpx 0 25rpx;
"
>
">
<p v-if="crowdtype == 'myApply'" style="margin-bottom: 10px">
<span v-if="task && task.contactName">联系人{{ task.contactName }}</span>
</p>
@ -173,74 +154,52 @@
</div>
<template v-if="task.attachment">
<div
style="display: flex; align-items: center; margin: 12px 0"
v-for="(it, index) in task.attachmentArr"
:key="it"
>
<img
style="width: 17px; height: 20px; margin-right: 5px"
src="/assets/crowd/upload.png"
alt=""
/>
<div style="display: flex; align-items: center; margin: 12px 0"
v-for="(it, index) in task.attachmentArr" :key="it">
<img style="width: 17px; height: 20px; margin-right: 5px" src="/assets/crowd/upload.png"
alt="" />
<p @click="openurl(it)" style="color: #1578ed; font-size: 12px; cursor: pointer">
项目附件{{ index + 1 }}
</p>
</div>
</template>
<div v-else style="display: flex; align-items: center; margin: 12px 0">
<img
style="width: 17px; height: 20px; margin-right: 5px"
src="/assets/crowd/upload.png"
alt=""
/>
<img style="width: 17px; height: 20px; margin-right: 5px" src="/assets/crowd/upload.png"
alt="" />
<p style="color: #1578ed; font-size: 12px"></p>
</div>
</div>
</div>
<div
v-if="crowdtype == 'competitive'"
style="
<div v-if="crowdtype == 'competitive'" style="
background: #ffffff;
box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.1);
padding: 15px 30px;
margin: 20px 0;
"
>
">
<!-- <div class="dvied"></div> -->
<div style="font-weight: bold; color: #333333; font-size: 18px; margin: 0px">竞标方案</div>
<div
v-if="userprogramme && userprogramme.period"
style="font-size: 14px; text-align: left; color: #333333; margin: 20px 0px; line-height: 25px"
>
<div v-if="userprogramme && userprogramme.period"
style="font-size: 14px; text-align: left; color: #333333; margin: 20px 0px; line-height: 25px">
<p>竞标日期{{ userprogramme.apply_time.slice(0, 10) }}</p>
<p>竞标工期{{ userprogramme.period ? userprogramme.period + '天' : '无' }}</p>
<p>竞标优势{{ userprogramme.competition_edge ? userprogramme.competition_edge : '无' }}</p>
<p>
竞标附件
<span
@click="openurl(userprogramme.attachment)"
v-if="userprogramme.attachment"
style="color: #1578ed; cursor: pointer"
>项目附件</span
>
<span @click="openurl(userprogramme.attachment)" v-if="userprogramme.attachment"
style="color: #1578ed; cursor: pointer">项目附件</span>
<span v-else style="margin-left: -3px"></span>
</p>
</div>
</div>
<div
v-if="crowdtype == 'myPublish' || crowdtype == 'competitive'"
class="crowdnum"
style="
<div v-if="crowdtype == 'myPublish' || crowdtype == 'competitive'" class="crowdnum" style="
background: #ffffff;
box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.1);
padding: 15px 30px;
margin-top: 25px;
"
>
<el-divider v-if="task.processStatus == 0 || task.processStatus == 1" content-position="left"
><h3>任务提醒</h3></el-divider
>
">
<el-divider v-if="task.processStatus == 0 || task.processStatus == 1" content-position="left">
<h3>任务提醒</h3>
</el-divider>
<el-form label-width="150px" class="demo-ruleForm" label-position="left" style="margin-top: 10px">
<el-row v-if="task.processStatus == 0">
<el-col :span="24">
@ -260,13 +219,14 @@
<div style="display: flex; align-items: center; margin: -10px 0; position: relative">
<!-- <div class="dvied"></div> -->
<div style="font-weight: bold; color: #333333; font-size: 18px">竞标者名单</div>
<div
class="choseUserBtn"
@click="choseUser"
v-if="task.process_status == 0 && userinform.companyStatus == 2"
>
<div class="choseUserBtn" @click="choseUser"
v-if="task.process_status == 0 && userinform.companyStatus == 2">
选中竞标用户
</div>
<div class="downAttResume" @click="downLoadAtt"
v-if="task.process_status == 0 && userinform.companyStatus == 2">
批量下载附件简历
</div>
</div>
<el-table v-loading="loading" :data="applicantdataList" border style="width: 100%; margin-top: 30px">
<el-table-column label="序号" align="center" type="index" width="60"></el-table-column>
@ -298,70 +258,30 @@
scope.row.status == 0 ? '竞标中' : scope.row.status == 1 ? '竞标成功' : '竞标失败'
}}</el-tag
> -->
<el-tag
v-if="scope.row.status == 0"
type="warning"
effect="dark"
size="small"
style="padding: 0 12px"
>竞标中</el-tag
>
<el-tag v-else-if="scope.row.status == 1" effect="dark" size="small" style="padding: 0 12px"
>实施中</el-tag
>
<el-tag
v-else-if="scope.row.status == 3"
effect="dark"
size="small"
style="padding: 0 12px; background: #11b7ed; border-color: #11b7ed"
>待验收</el-tag
>
<el-tag
v-else-if="scope.row.status == 4"
effect="dark"
size="small"
style="padding: 0 12px"
type="warning"
>待付款</el-tag
>
<el-tag
v-else-if="scope.row.status == 5"
type="success"
effect="dark"
size="small"
style="padding: 0 12px"
>已完成</el-tag
>
<el-tag
v-else-if="scope.row.status == 6"
type="danger"
effect="dark"
size="small"
style="padding: 0 12px"
>验收不通过</el-tag
>
<el-tag v-else type="danger" effect="dark" size="small" style="padding: 0 12px"
>竞标失败</el-tag
>
<el-tag v-if="scope.row.status == 0" type="warning" effect="dark" size="small"
style="padding: 0 12px">竞标中</el-tag>
<el-tag v-else-if="scope.row.status == 1" effect="dark" size="small"
style="padding: 0 12px">实施中</el-tag>
<el-tag v-else-if="scope.row.status == 3" effect="dark" size="small"
style="padding: 0 12px; background: #11b7ed; border-color: #11b7ed">待验收</el-tag>
<el-tag v-else-if="scope.row.status == 4" effect="dark" size="small" style="padding: 0 12px"
type="warning">待付款</el-tag>
<el-tag v-else-if="scope.row.status == 5" type="success" effect="dark" size="small"
style="padding: 0 12px">已完成</el-tag>
<el-tag v-else-if="scope.row.status == 6" type="danger" effect="dark" size="small"
style="padding: 0 12px">验收不通过</el-tag>
<el-tag v-else type="danger" effect="dark" size="small"
style="padding: 0 12px">竞标失败</el-tag>
</template>
</el-table-column>
<el-table-column label="工作成果" v-if="userinform.companyStatus == 2" align="center" prop="">
<template slot-scope="scope">
<el-button
v-if="scope.row.result_attach"
type="text"
@click="download(scope.row.result_attach)"
>点击下载</el-button
>
<el-button v-if="scope.row.result_attach" type="text"
@click="download(scope.row.result_attach)">点击下载</el-button>
</template>
</el-table-column>
<el-table-column
label="操作"
align="center"
class-name="small-padding fixed-width"
width="260"
v-if="userinform.companyStatus == 2"
>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="260"
v-if="userinform.companyStatus == 2">
<template slot-scope="scope">
<!-- <el-button
v-if="scope.row.user_id == userId || userinform.companyStatus == 2"
@ -383,66 +303,37 @@
选中
</el-button> -->
<el-checkbox v-if="scope.row.status == 0" v-model="scope.row.isFlag">选中</el-checkbox>
<el-button
v-else-if="scope.row.status == 3 || scope.row.status == 1"
type="text"
@click="goFinnal(scope.row)"
>任务结项</el-button
>
<el-button v-else-if="scope.row.status == 4" type="text" @click="goPay(scope.row)"
>支付佣金</el-button
>
<span v-else-if="scope.row.status == 5 && scope.row.reward"
>交易完成({{ scope.row.reward }})</span
>
<el-button
v-else-if="scope.row.status == 6"
style="color: #fe5555"
type="text"
@click="goNoPass(scope.row)"
>验收不通过</el-button
>
<el-button v-else-if="scope.row.status == 3 || scope.row.status == 1" type="text"
@click="goFinnal(scope.row)">任务结项</el-button>
<el-button v-else-if="scope.row.status == 4" type="text"
@click="goPay(scope.row)">支付佣金</el-button>
<span v-else-if="scope.row.status == 5 && scope.row.reward">交易完成({{ scope.row.reward
}})</span>
<el-button v-else-if="scope.row.status == 6" style="color: #fe5555" type="text"
@click="goNoPass(scope.row)">验收不通过</el-button>
<!-- is_comment 0未评价 1已评价 -->
<el-button
v-if="scope.row.status == 5 && scope.row.p_comment == 0"
@click="goreview(scope.row)"
type="text"
style="margin-left: 10px"
>去评价</el-button
>
<el-button v-if="scope.row.status == 5 && scope.row.p_comment == 0"
@click="goreview(scope.row)" type="text" style="margin-left: 10px">去评价</el-button>
</template>
</el-table-column>
</el-table>
<div v-if="total > 10" style="width: 100%; margin-top: 30px; text-align: right">
<el-pagination
background
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-size="pageSize"
layout="total, prev, pager, next, jumper"
:total="total"
>
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
:current-page="currentPage" :page-size="pageSize" layout="total, prev, pager, next, jumper"
:total="total">
</el-pagination>
</div>
<tester-detail
ref="testerDetail"
:crowdtype="crowdtype"
:status="task.processStatus"
:taskId="task.taskId"
@closeDialog="closeDialog"
></tester-detail>
<tester-detail ref="testerDetail" :crowdtype="crowdtype" :status="task.processStatus"
:taskId="task.taskId" @closeDialog="closeDialog"></tester-detail>
</div>
<!-- 审核不通过信息 -->
<div v-if="crowdtype == 'myApply' && task.status != 0">
<div
style="
<div style="
background: #ffffff;
box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.1);
padding: 15px 30px;
margin-top: 25px;
"
>
">
<div style="display: flex; align-items: center; width: 150px; margin-top: 20px">
<div class="dvied"></div>
<div style="font-weight: bold; color: #333333; font-size: 18px; margin-left: 10px">
@ -454,25 +345,12 @@
<div class="taskd">
<p>审核状态</p>
<p>
<el-tag
v-if="task.status == 0"
type="primary"
effect="dark"
size="small"
style="width: 68px; padding-left: 12px; padding-right: 12px; cursor: pointer"
>待审核</el-tag
>
<el-tag
v-else-if="task.status == 1"
type="success"
effect="dark"
size="small"
style="cursor: pointer"
>审核通过</el-tag
>
<el-tag v-else type="danger" effect="dark" size="small" style="cursor: pointer"
>审核不通过</el-tag
>
<el-tag v-if="task.status == 0" type="primary" effect="dark" size="small"
style="width: 68px; padding-left: 12px; padding-right: 12px; cursor: pointer">待审核</el-tag>
<el-tag v-else-if="task.status == 1" type="success" effect="dark" size="small"
style="cursor: pointer">审核通过</el-tag>
<el-tag v-else type="danger" effect="dark" size="small"
style="cursor: pointer">审核不通过</el-tag>
</p>
</div>
<div class="taskd">
@ -489,9 +367,9 @@
</div>
</div>
<div v-if="crowdtype == 'myClaim'">
<el-divider v-if="task.processStatus == 0 || task.processStatus == 1" content-position="left"
><h3>任务提醒</h3></el-divider
>
<el-divider v-if="task.processStatus == 0 || task.processStatus == 1" content-position="left">
<h3>任务提醒</h3>
</el-divider>
<el-form label-width="150px" class="demo-ruleForm" label-position="left">
<el-row v-if="task.processStatus == 0">
<el-col :span="24">
@ -508,7 +386,9 @@
</el-col>
</el-row>
</el-form>
<el-divider content-position="left"><h3>发布者信息</h3></el-divider>
<el-divider content-position="left">
<h3>发布者信息</h3>
</el-divider>
<el-form>
<el-form-item label="公司名称" v-if="company.name != null">
{{ company.name }}
@ -525,13 +405,8 @@
</el-form>
</div>
<div style="width: 90%; display: inline-block; text-align: center; margin-top: 30px">
<el-button
type="primary"
v-if="crowdtype == 'myApply' && task.status == 2"
@click="publishTask"
class="btn-yellow"
>修改并重新发布</el-button
>
<el-button type="primary" v-if="crowdtype == 'myApply' && task.status == 2" @click="publishTask"
class="btn-yellow">修改并重新发布</el-button>
</div>
</div>
<!-- v-show="task.status ==1" -->
@ -562,10 +437,12 @@ import reviewDialogVue from '@/page/common/reviewDialog.vue'
import acceptanceVue from '@/page/common/acceptance.vue'
import payDialog from '@/page/common/payDialog.vue'
import noPassDialog from '@/page/common/noPassDialog.vue'
import downPdf from '../../../util/pdfDownLoad'
export default {
mixins: [mixin],
data() {
return {
baseUrl: process.env.VUE_APP_BASE_API,
resultOpen: false,
loading: false,
crowdtype: '', //
@ -678,6 +555,16 @@ export default {
})
}
},
downLoadAtt() {
const choseList = this.applicantdataList.filter((it) => it.isFlag)
if (choseList.length > 0) {
choseList.forEach(item => {
if (item.file_path) {
downPdf(this.baseUrl + item.file_path, item.nick_name + '附件简历.pdf')
}
})
}
},
//
download(url) {
window.location.href = url
@ -779,6 +666,24 @@ export default {
top: 0;
right: 0;
width: 105px;
height: 30px;
/* background: #2286fa; */
border: 1px solid #2286FA;
color: #2286FA;
border-radius: 4px;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
font-weight: 500;
font-size: 14px;
}
.downAttResume {
position: absolute;
top: 0;
right: 120px;
width: 140px;
height: 32px;
background: #2286fa;
border-radius: 4px;
@ -790,14 +695,17 @@ export default {
font-weight: 500;
font-size: 14px;
}
.crowdnum>>>.el-checkbox__label {
padding-left: 3px;
}
.dvied {
width: 4px;
height: 18px;
background: #0066eb;
}
.backbtn>>>.el-button {
width: 80px;
height: 36px;
@ -806,32 +714,39 @@ export default {
line-height: 35px;
padding: 0 15px;
}
.crowdnum>>>.el-divider--horizontal {
margin: 13px 0;
}
.taskd {
color: #4d4d4d;
display: flex;
align-items: center;
}
.taskd p {
margin: 0;
text-align: left;
font-size: 14px;
}
.taskd p:nth-child(1) {
font-weight: bold;
width: 100px;
}
.taskd p:nth-child(2) {
width: 220px;
}
.crowdnum>>>.el-table th {
background-color: #f7f7f7;
color: #0e0c0c;
text-align: center;
border: none;
}
.crowdnum>>>.el-table td {
/* text-align:center; */
background-color: #ffffff;
@ -839,16 +754,20 @@ export default {
color: #666666;
border: none;
}
.crowdnum>>>.el-table--border th {
border-right: #f7f7f7;
}
.crowdnum>>>.el-table--border,
.el-table--group {
border: none;
}
.crowdnum>>>.el-table th.el-table__cell.is-leaf {
border-bottom: none;
}
.tabone {
/* padding:3px; */
padding: 0px 10px;
@ -862,6 +781,7 @@ export default {
height: 28px;
font-size: 14px;
}
.tabone1 {
background: #fcf0e6;
border-radius: 4px;

@ -55,7 +55,8 @@
</el-radio-button>
审核页 <crowdsource-audit ref="crowdsourceAudit" @closeDialog="closeDialog" ></crowdsource-audit>
</el-radio-group> -->
<el-form v-if="crowdmol=='allTask'" :model="queryParams" ref="queryForm" :inline="true" label-width="68px" class="baseinfo" style="margin-top:30px">
<el-form v-if="crowdmol == 'allTask'" :model="queryParams" ref="queryForm" :inline="true"
label-width="68px" class="baseinfo" style="margin-top:30px">
<el-form-item label="任务状态" prop="processStatus">
<el-select v-model="queryParams.processStatus">
<el-option label="请选择" value="">请选择</el-option>
@ -66,7 +67,8 @@
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="small" @click="showDataTypeChage('allTask')">搜索</el-button>
<el-button type="primary" icon="el-icon-search" size="small"
@click="showDataTypeChage('allTask')">搜索</el-button>
<el-button style="background: #F2A51A;" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
@ -76,25 +78,31 @@
{{ scope.$index + 1 }}
</template>
</el-table-column>
<el-table-column label="任务ID" v-if="crowdmol=='allTask'" width="90" align="center" key="taskId" prop="taskId"/>
<el-table-column label="任务ID" v-if="crowdmol == 'allTask'" width="90" align="center" key="taskId"
prop="taskId" />
<el-table-column label="发布时间" align="center" key="createTime" prop="createTime">
<template slot-scope="scope">
<span v-if="scope.row.createTime">{{ parseTime(scope.row.createTime).toString().split(" ")[0]}}</span>
<span v-if="scope.row.createTime">{{ parseTime(scope.row.createTime).toString().
split(" ")[0] }}</span>
</template>
</el-table-column>
<el-table-column label="项目名称" align="center" key="projectName" prop="projectName" :show-overflow-tooltip="true" width="260px"/>
<el-table-column label="项目名称" align="center" key="projectName" prop="projectName"
:show-overflow-tooltip="true" width="260px" />
<el-table-column label="金额" align="center" key="price" prop="price" :show-overflow-tooltip="true">
<template slot-scope="scope">
<span v-if="scope.row.price == 0">面议</span>
<span v-else>{{ scope.row.price }}</span>
</template>
</el-table-column>
<el-table-column label="任务类型" align="center" key="testType" prop="testType" :show-overflow-tooltip="true">
<el-table-column label="任务类型" align="center" key="testType" prop="testType"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{findLabelValueByProp(tasktypelist,scope.row.testType,'dictValue', 'dictLabel')}}</span>
<span>{{ findLabelValueByProp(tasktypelist, scope.row.testType, 'dictValue',
'dictLabel') }}</span>
</template>
</el-table-column>
<el-table-column label="项目工期" align="center" key="period" prop="period" :show-overflow-tooltip="true">
<el-table-column label="项目工期" align="center" key="period" prop="period"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{ scope.row.period }}</span>
</template>
@ -105,26 +113,36 @@
<span v-if="scope.row.expireTime">{{ parseTime(scope.row.expireTime).toString().split(" ")[0]}}</span>
</template>
</el-table-column> -->
<el-table-column v-if="crowdmol =='myPublish'" label="任务状态" align="center" key="3" prop="processStatus" :show-overflow-tooltip="true" width="180px">
<el-table-column v-if="crowdmol == 'myPublish'" label="任务状态" align="center" key="3"
prop="processStatus" :show-overflow-tooltip="true" width="180px">
<template slot-scope="scope">
<p v-if="scope.row.processStatus" style="margin:0" class="tagcls">
<el-tag :color="scope.row.processStatus==2?'#fc5c1d':''" :type="scope.row.processStatus==0?'warning':scope.row.processStatus==1?'primary':scope.row.processStatus==3?'danger':'success'" effect="dark"
:style="scope.row.processStatus==2?'border:1px solid #fc5c1d;cursor:pointer':'cursor:pointer'">{{findByvalue(processStatuslist,parseInt(scope.row.processStatus))}}</el-tag>
<el-tag :color="scope.row.processStatus == 2 ? '#fc5c1d' : ''"
:type="scope.row.processStatus == 0 ? 'warning' : scope.row.processStatus == 1 ? 'primary' : scope.row.processStatus == 3 ? 'danger' : 'success'"
effect="dark"
:style="scope.row.processStatus == 2 ? 'border:1px solid #fc5c1d;cursor:pointer' : 'cursor:pointer'">
{{ findByvalue(processStatuslist, parseInt(scope.row.processStatus)) }}</el-tag>
</p>
<p v-else>
暂无
</p>
</template>
</el-table-column>
<el-table-column v-if="crowdmol!='myPublish'" label="状态" align="center" key="1" prop="status" :show-overflow-tooltip="true">
<el-table-column v-if="crowdmol != 'myPublish'" label="状态" align="center" key="1" prop="status"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<el-tag v-if="scope.row.status == 0" type="primary" effect="dark" style="width:68px;padding-left: 12px;padding-right: 12px;cursor:pointer">待审核</el-tag>
<el-tag v-else-if="scope.row.status == 1" type="success" effect="dark" style="cursor:pointer">审核通过</el-tag>
<el-tag v-else-if="scope.row.status == 2" type="danger" effect="dark" style="cursor:pointer">审核不通过</el-tag>
<el-tag v-else-if="scope.row.status == 3" type="info" effect="dark" style="cursor:pointer">草稿</el-tag>
<el-tag v-if="scope.row.status == 0" type="primary" effect="dark"
style="width:68px;padding-left: 12px;padding-right: 12px;cursor:pointer">待审核</el-tag>
<el-tag v-else-if="scope.row.status == 1" type="success" effect="dark"
style="cursor:pointer">审核通过</el-tag>
<el-tag v-else-if="scope.row.status == 2" type="danger" effect="dark"
style="cursor:pointer">审核不通过</el-tag>
<el-tag v-else-if="scope.row.status == 3" type="info" effect="dark"
style="cursor:pointer">草稿</el-tag>
</template>
</el-table-column>
<el-table-column v-if="crowdmol !='myApply'" label="竞标者总数" align="center" key="appCount" :show-overflow-tooltip="true">
<el-table-column v-if="crowdmol != 'myApply'" label="竞标者总数" align="center" key="appCount"
:show-overflow-tooltip="true">
<template slot-scope="scope">
<span>{{ scope.row.personalAppCount + scope.row.companyAppCount }}</span>
</template>
@ -139,15 +157,21 @@
v-if="(crowdmol == 'myApply' && scope.row.status == 3) || ((crowdmol == 'myPublish') && (scope.row.processStatus == 5 || scope.row.processStatus == 6 || scope.row.processStatus == 7))"
@click="publishTask(scope.row)">去编辑
</el-button>
<router-link v-if="crowdmol=='myApply' && scope.row.status!=3" :to="{path:'/console/currentcrowd',query:{id:scope.row.applyId,type:crowdmol}}" class="link-type">
<router-link v-if="crowdmol == 'myApply' && scope.row.status != 3"
:to="{ path: '/console/currentcrowd', query: { id: scope.row.applyId, type: crowdmol } }"
class="link-type">
<el-button size="mini" type="text" icon="el-icon-key">查看详情
</el-button>
</router-link>
<router-link v-if="crowdmol=='myPublish' || crowdmol=='myClaim'" :to="{path:'/console/currentcrowd',query:{id:scope.row.taskId,type:crowdmol}}" class="link-type">
<router-link v-if="crowdmol == 'myPublish' || crowdmol == 'myClaim'"
:to="{ path: '/console/currentcrowd', query: { id: scope.row.taskId, type: crowdmol } }"
class="link-type">
<el-button size="mini" type="text" icon="el-icon-key">查看详情
</el-button>
</router-link>
<router-link v-if="crowdmol=='tobeExpired' || crowdmol=='allTask'" :to="{path:'/console/currentcrowd',query:{id:scope.row.applyId,type:crowdmol}}" class="link-type">
<router-link v-if="crowdmol == 'tobeExpired' || crowdmol == 'allTask'"
:to="{ path: '/console/currentcrowd', query: { id: scope.row.applyId, type: crowdmol } }"
class="link-type">
<el-button size="mini" type="text" icon="el-icon-key">查看详情
</el-button>
</router-link>
@ -155,24 +179,26 @@
验收实施结果
</el-button> -->
<!-- 多人 -->
<el-button @click="goDetail(scope.row.taskId)" v-if="crowdmol=='myPublish' && scope.row.processStatus == 4 && scope.row.needPerson > 1&& scope.row.needPerson != scope.row.commentCount" size="mini" type="text" style="margin-left:10px">去评价
<el-button @click="goDetail(scope.row.taskId)"
v-if="crowdmol == 'myPublish' && scope.row.processStatus == 4 && scope.row.needPerson > 1 && scope.row.needPerson != scope.row.commentCount"
size="mini" type="text" style="margin-left:10px">去评价
</el-button>
<!-- 单人 -->
<el-button @click="oneReview(scope.row.taskId)" v-if="crowdmol=='myPublish' && scope.row.processStatus == 4 && scope.row.needPerson == 1 && scope.row.needPerson != scope.row.commentCount" size="mini" type="text" style="margin-left:10px">去评价
<el-button @click="oneReview(scope.row.taskId)"
v-if="crowdmol == 'myPublish' && scope.row.processStatus == 4 && scope.row.needPerson == 1 && scope.row.needPerson != scope.row.commentCount"
size="mini" type="text" style="margin-left:10px">去评价
</el-button>
</template>
</el-table-column>
</el-table>
<!-- :current-page="currentPage" -->
<div v-if="total > 10" style='width:100%;margin-top:30px;text-align: center;'>
<el-pagination background
@current-change="handleCurrentChange"
:page-size="queryParams.pageSize"
layout="total, prev, pager, next, jumper"
:total="total">
<el-pagination background @current-change="handleCurrentChange" :page-size="queryParams.pageSize"
layout="total, prev, pager, next, jumper" :total="total">
</el-pagination>
</div>
<el-dialog title="验收实施结果" :visible.sync="resultOpen" width="600px" :close-on-click-modal="false" append-to-body class="tooldialog" @close="resultOpen = false">
<el-dialog title="验收实施结果" :visible.sync="resultOpen" width="600px" :close-on-click-modal="false"
append-to-body class="tooldialog" @close="resultOpen = false">
<el-divider style="margin-bottom:10px"></el-divider>
<!--<div style="display:flex;margin-left:30px;">
<p style="font-weight:bold;margin-right:20px;color:#333333;">工具名称</p>
@ -183,8 +209,10 @@
<p>{{currentTaskName}}</p>
</div> -->
<div v-if="currenttsk&&currenttsk.resultAttach" style="text-align:left;margin-top:20px" @click="downloadFile()">
<el-button icon='el-icon-download' style="background: #0066EB;color:#FFFFFF">下载实施结果查看</el-button>
<div v-if="currenttsk && currenttsk.resultAttach" style="text-align:left;margin-top:20px"
@click="downloadFile()">
<el-button icon='el-icon-download'
style="background: #0066EB;color:#FFFFFF">下载实施结果查看</el-button>
</div>
<div style="display: flex;margin-top: 20px;align-items: center;">
<p style="margin-right:10px">验收是否通过</p>
@ -199,7 +227,8 @@
</el-dialog>
</div>
</div>
<crowdsource-task v-show="(crowdmol=='myApply' || crowdmol=='myPublish') && task != null" ref="crowdsourceTask"></crowdsource-task>
<crowdsource-task v-show="(crowdmol == 'myApply' || crowdmol == 'myPublish') && task != null"
ref="crowdsourceTask"></crowdsource-task>
<!-- <crowdsource-task v-show="crowdmol=='myApply' && task != null" ref="crowdsourceTask"></crowdsource-task> -->
<reviewDialogVue ref="reviewDialogVuer" @refresh="refreshFn" />
</div>
@ -456,11 +485,13 @@
text-align: center;
cursor: pointer;
}
.dvied {
width: 4px;
height: 18px;
background: #0066EB;
}
.crowdnum>>>.el-radio-button__inner {
background: #ebebed;
border: none;
@ -470,26 +501,32 @@
align-items: center;
/* font-weight:bold; */
}
.crowdnum>>>.el-radio-button:first-child .el-radio-button__inner {
border-radius: 0;
}
.crowdnum>>>.el-radio-button:last-child .el-radio-button__inner {
border-radius: 0;
}
.crowdnum>>>.el-table th {
background-color: #F7F7F7;
color: #666666;
text-align: center;
}
.crowdnum>>>.el-table td {
/* text-align:center; */
background-color: #FFFFFF;
height: 60px;
color: #333333;
}
.crowdnum>>>.el-table--border th {
border-right: #F7F7F7
}
.baseinfo>>>.el-button {
width: 90px;
height: 30px;
@ -500,45 +537,56 @@
margin-top: 5px;
line-height: 9px;
}
.tooldialog>>>.el-divider--horizontal {
margin: -20px 0 10px 0;
}
.tooldialog>>>.el-dialog__title {
font-weight: bold;
color: #0969bd
}
.tagcls>>>.el-tag--small {
width: 65px;
}
.el-tag {
width:80px!important;
/* width: 80px !important; */
}
.crowdnum>>>.el-tabs--border-card {
background: transparent;
border: none;
box-shadow: none;
}
.crowdnum>>>.el-tabs--border-card>.el-tabs__header .el-tabs__item {
border: none;
color: #1A1A1A;
}
.crowdnum>>>.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active {
color: #0066EB;
/* font-size: 16px; */
}
.crowdnum>>>.el-tabs--border-card>.el-tabs__content {
padding: 0 0;
overflow: unset;
}
.crowdnum>>>.el-tabs--border-card>.el-tabs__header {
border: none;
background-color: #F7F7F7;
/* color:#1A1A1A */
}
.crowdnum>>>.el-tabs__item {
height: 45px;
line-height: 45px;
}
.crowdnum {
position: relative;
}

@ -1,11 +1,13 @@
function downPdf(val) {
fetch(val).then(respose => {
function downPdf(val, fileName) {
fetch(val)
.then(respose => {
return respose.blob()
}).then(blob => {
console.log(val);
})
.then(blob => {
console.log(val)
const url = URL.createObjectURL(blob)
const a = document.createElement("a")
const name = val.substr(val.lastIndexOf('/') + 1, val.length)
const a = document.createElement('a')
const name = fileName ? fileName : val.substr(val.lastIndexOf('/') + 1, val.length)
a.href = url
a.download = name
a.click()

Loading…
Cancel
Save