main
hcj 7 months ago
parent f10d809d14
commit a83497dbd0
  1. 5
      .env.development
  2. 9
      package.json
  3. BIN
      public/assets/train/whiteQrCode.png
  4. 2
      public/index.html
  5. 6
      src/api/tester/CompanyApply.js
  6. 41
      src/components/levelTag/index.vue
  7. 7
      src/const/text/payRequest.js
  8. 32
      src/page/common/pagecomponent/commonfooter.vue
  9. 4
      src/page/common/pagecomponent/commonfooter_new.vue
  10. 15
      src/page/common/pagecomponent/commonheader.vue
  11. 310
      src/page/homepage/crowdsourcing/crowd.vue
  12. 191
      src/page/homepage/crowdsourcing/crowddetails.vue
  13. 186
      src/page/homepage/crowdsourcing/publishtasks.vue
  14. 336
      src/page/homepage/home/home.vue
  15. 177
      src/page/homepage/home/information/index.vue
  16. 8
      src/page/homepage/index.vue
  17. 32
      src/page/homepage/traininstitute/payRequestDialog.vue
  18. 55
      src/page/homepage/traininstitute/train.vue
  19. 6
      src/page/personalpage/course/index.vue
  20. 4
      src/page/personalpage/course/onLineCourse.vue
  21. 32
      src/page/personalpage/home/resume.vue
  22. 1
      src/page/personalpage/testcrowd/currentcrowd.vue
  23. 2
      src/router/router.js
  24. 56
      src/util/userlevel.js
  25. 73
      vue.config.js

@ -5,8 +5,9 @@ ENV = 'development'
VUE_APP_BASE_API = '/prod-api' 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.159:9999'
# VUE_APP_BASE_TARGET = 'https://www.bjkeyware.com/prod-api'
# VUE_APP_BASE_TARGET = 'http://192.168.0.129:9999' # VUE_APP_BASE_TARGET = 'http://192.168.0.129:9999'
# VUE_APP_BASE_TARGET = 'http://172.16.36.180:9999' # VUE_APP_BASE_TARGET = 'http://172.16.36.180:9999'

@ -11,6 +11,7 @@
"@xkeshi/vue-qrcode": "^1.0.0", "@xkeshi/vue-qrcode": "^1.0.0",
"axios": "^0.18.0", "axios": "^0.18.0",
"babel-polyfill": "^6.26.0", "babel-polyfill": "^6.26.0",
"compression-webpack-plugin": "^5.0.1",
"crypto-js": "^4.2.0", "crypto-js": "^4.2.0",
"element-ui": "^2.15.6", "element-ui": "^2.15.6",
"file-saver": "^2.0.4", "file-saver": "^2.0.4",
@ -37,10 +38,12 @@
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "^3.0.0-rc.5", "@vue/cli-plugin-babel": "^3.0.0-rc.5",
"@vue/cli-service": "^3.0.0-rc.5", "@vue/cli-service": "^3.0.0-rc.5",
"vue-template-compiler": "^2.5.16", "babel-plugin-component": "^1.1.1",
"webpack-bundle-analyzer": "^4.10.2",
"sass": "^1.77.8", "sass": "^1.77.8",
"sass-loader": "^7.1.0" "sass-loader": "^7.1.0",
"uglifyjs-webpack-plugin": "^2.2.0",
"vue-template-compiler": "^2.5.16",
"webpack-bundle-analyzer": "^4.10.2"
}, },
"postcss": { "postcss": {
"plugins": { "plugins": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 900 B

@ -13,7 +13,7 @@
name="keywords" name="keywords"
/> />
<link rel="icon" href="<%= BASE_URL %>favicon.ico" /> <link rel="icon" href="<%= BASE_URL %>favicon.ico" />
<title>小关软测宝</title> <title>北京关键科技股份有限公司-小关软测宝</title>
<!-- <script> <!-- <script>
var _hmt = _hmt || []; var _hmt = _hmt || [];
(function() { (function() {

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

@ -0,0 +1,41 @@
<template>
<span>
<span v-show="level !== 0" :class="`levelTag v${level}`"> V{{ level }}</span>
</span>
</template>
<script>
export default {
props: {
level: Number
},
}
</script>
<style lang="scss" scoped>
.levelTag {
width: 21px;
height: 21px;
padding: 5px;
border-radius: 50%;
color: #FFFFFF;
font-family: PingFang SC;
font-weight: 500;
font-size: 12px;
line-height: 23px;
}
.v1 {
background: linear-gradient(0deg, #29F19C, #02A1F9);
}
.v2 {
background: linear-gradient(0deg, #015EEA, #00C0FA);
}
.v3 {
background: linear-gradient(0deg, #FACC22, #F83600);
}
</style>

@ -0,0 +1,7 @@
export const PAYREQUEST = [
'KMFlow软件产品升级,新架构引领未来(2元一条)',
'航天型号信息化与软件技术交流会(2元一条)',
'如何快速高效的完成接口通讯协议测试(2元一条)',
'如何保障软件测试充分性之逻辑覆盖率统计(2元一条)',
'中国一汽红旗新能源汽车软件质量大会(2元一条)'
]

@ -13,7 +13,7 @@
<!-- <el-link :underline="false" @click="stepurl('http://train.keyitest.cn/')">培训学院</el-link> --> <!-- <el-link :underline="false" @click="stepurl('http://train.keyitest.cn/')">培训学院</el-link> -->
<el-link :underline="false" @click="openurl('/ability')">人才服务</el-link> <el-link :underline="false" @click="openurl('/ability')">人才服务</el-link>
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
<el-link :underline="false" @click="openurl('/college')">培训服务</el-link> <el-link :underline="false" @click="openurl('/college')">公司服务</el-link>
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
<!-- <el-link :underline="false" @click="openurl('/news')">行业动态</el-link> <!-- <el-link :underline="false" @click="openurl('/news')">行业动态</el-link>
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
@ -31,21 +31,16 @@
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
</div> </div>
<div style="display: flex; font-size: 14px; cursor: pointer"> <div style="display: flex; font-size: 14px; cursor: pointer">
<img <img style="width: 100px; height: 100px; margin-top: 40px; margin-right: 35px"
style="width: 100px; height: 100px; margin-top: 40px; margin-right: 35px" src="/assets/homepage/xcx.jpg" alt="" />
src="/assets/homepage/xcx.jpg"
alt=""
/>
<img style="width: 100px; height: 100px; margin-top: 40px" src="/assets/home/erweima.jpg" alt="" /> <img style="width: 100px; height: 100px; margin-top: 40px" src="/assets/home/erweima.jpg" alt="" />
<div <div style="
style="
margin-left: 25px; margin-left: 25px;
color: #bfbfbf; color: #bfbfbf;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
" ">
>
<p>联系我们</p> <p>联系我们</p>
<div style="display: flex; align-items: center; margin: 10px 0"> <div style="display: flex; align-items: center; margin: 10px 0">
<p>咨询热线010-80750213</p> <p>咨询热线010-80750213</p>
@ -59,11 +54,13 @@
<el-divider></el-divider> <el-divider></el-divider>
<div class="bottoaxwa" style="text-align: center; color: #b3b3b3; opacity: 0.7; margin-top: 30px"> <div class="bottoaxwa" style="text-align: center; color: #b3b3b3; opacity: 0.7; margin-top: 30px">
<img src="/assets/home/plice.png" style="width: 20px; height: 20px" alt="" /> <img src="/assets/home/plice.png" style="width: 20px; height: 20px" alt="" />
<a target="_blank" style="margin-right: 10px" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11011402054123" <a target="_blank" style="margin-right: 10px"
>京公网安备11011402054123号</a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11011402054123">京公网安备11011402054123号</a>
>
<a target="_blank" href="https://beian.miit.gov.cn">京ICP备18018633号-3</a> <a target="_blank" href="https://beian.miit.gov.cn">京ICP备18018633号-3</a>
</div> </div>
<div style="text-align: center;margin-top: 5px;margin-bottom: 20px;color: #b3b3b3;opacity: 0.7;">
公司版权所有北京关键科技股份有限公司
</div>
<img class="footer" id="gotoTop" src="/assets/home/gtop.png" alt="" /> <img class="footer" id="gotoTop" src="/assets/home/gtop.png" alt="" />
</div> </div>
</div> </div>
@ -118,27 +115,32 @@ export default {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
.el-link.el-link--default { .el-link.el-link--default {
font-size: 14px; font-size: 14px;
color: #b3b3b3; color: #b3b3b3;
} }
.el-divider { .el-divider {
background-color: #b3b3b3; background-color: #b3b3b3;
margin: 0 20px; margin: 0 20px;
background: #ffffff; background: #ffffff;
opacity: 0.5; opacity: 0.5;
} }
.vider >>> .el-divider--vertical {
.vider>>>.el-divider--vertical {
height: 130px; height: 130px;
background: #ffffff; background: #ffffff;
opacity: 0.23; opacity: 0.23;
margin: 25px 30px; margin: 25px 30px;
} }
.el-divider--horizontal { .el-divider--horizontal {
margin: 0; margin: 0;
background: #ffffff; background: #ffffff;
opacity: 0.23; opacity: 0.23;
} }
.footer { .footer {
position: fixed; position: fixed;
right: 50px; right: 50px;
@ -147,11 +149,13 @@ export default {
height: 50px; */ height: 50px; */
display: none; display: none;
} }
.bottoaxwa { .bottoaxwa {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.bottoaxwa a { .bottoaxwa a {
text-decoration: none; text-decoration: none;
color: #b3b3b3; color: #b3b3b3;

@ -13,7 +13,7 @@
<!-- <el-link :underline="false" @click="stepurl('http://train.keyitest.cn/')">培训学院</el-link> --> <!-- <el-link :underline="false" @click="stepurl('http://train.keyitest.cn/')">培训学院</el-link> -->
<el-link :underline="false" @click="openurl('/ability')">人才服务</el-link> <el-link :underline="false" @click="openurl('/ability')">人才服务</el-link>
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
<el-link :underline="false" @click="openurl('/college')">培训服务</el-link> <el-link :underline="false" @click="openurl('/college')">公司服务</el-link>
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
<!-- <el-link :underline="false" @click="openurl('/news')">行业动态</el-link> <!-- <el-link :underline="false" @click="openurl('/news')">行业动态</el-link>
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
@ -57,6 +57,8 @@
<a target="_blank" style="margin-right: 10px" <a target="_blank" style="margin-right: 10px"
href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11011402054123">京公网安备11011402054123号</a> href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11011402054123">京公网安备11011402054123号</a>
<a target="_blank" href="https://beian.miit.gov.cn">京ICP备18018633号-3</a> <a target="_blank" href="https://beian.miit.gov.cn">京ICP备18018633号-3</a>
<div>公司版权所有北京关键科技股份有限公司</div>
</div> </div>
<img class="footer" id="gotoTop" @click="gotoTop" src="/assets/home/gtop.png" alt="" /> <img class="footer" id="gotoTop" @click="gotoTop" src="/assets/home/gtop.png" alt="" />
</div> </div>

@ -164,6 +164,8 @@ export default {
let activehome = this.menulist.filter(item => item.title == '首页') let activehome = this.menulist.filter(item => item.title == '首页')
activehome[0].highlight = false activehome[0].highlight = false
} }
if (val.path.indexOf('/market') === 0) { if (val.path.indexOf('/market') === 0) {
let activeName = this.menulist.filter(item => item.title == '工具服务') let activeName = this.menulist.filter(item => item.title == '工具服务')
activeName[0].highlight = true activeName[0].highlight = true
@ -173,6 +175,15 @@ export default {
activeName[0].highlight = false activeName[0].highlight = false
} }
if (val.path.indexOf('/information') === 0) {
let activeName = this.menulist.filter(item => item.title == '有偿资讯')
activeName[0].highlight = true
// console.log('',activeName)
} else {
let activeName = this.menulist.filter(item => item.title == '有偿资讯')
activeName[0].highlight = false
}
if (val.path.indexOf('/crowdsourcing') === 0) { if (val.path.indexOf('/crowdsourcing') === 0) {
// console.log('') // console.log('')
@ -193,11 +204,11 @@ export default {
activeNamecrowd[0].highlight = false activeNamecrowd[0].highlight = false
} }
if (val.path.indexOf('/college') === 0) { if (val.path.indexOf('/college') === 0) {
let activecollege = this.menulist.filter(item => item.title == '培训服务') let activecollege = this.menulist.filter(item => item.title == '公司服务')
activecollege[0].highlight = true activecollege[0].highlight = true
// console.log('',activecollege) // console.log('',activecollege)
} else { } else {
let activecollege = this.menulist.filter(item => item.title == '培训服务') let activecollege = this.menulist.filter(item => item.title == '公司服务')
activecollege[0].highlight = false activecollege[0].highlight = false
} }
// if(val.path.indexOf('/news')===0){ // if(val.path.indexOf('/news')===0){

@ -5,32 +5,20 @@
<img class="ijaoricon" src="/assets/home/fbrwicon.png" alt="" /> <img class="ijaoricon" src="/assets/home/fbrwicon.png" alt="" />
发布众包任务 发布众包任务
</div> </div>
<img <img v-if="officialwebsite" style="width: 100%; height: 450px; object-fit: cover" src="/assets/home/zhbao1.png"
v-if="officialwebsite" alt="" />
style="width: 100%; height: 450px; object-fit: cover"
src="/assets/home/zhbao1.png"
alt=""
/>
<div class="topnavbar"> <div class="topnavbar">
<div class="topnavbarcon"> <div class="topnavbarcon">
<div class="topnavbarconit"> <div class="topnavbarconit">
<div class="topnavbarconitL">任务类型</div> <div class="topnavbarconitL">任务类型</div>
<div class="topnavbarconitR"> <div class="topnavbarconitR">
<div <div class="topnavbarconitRit" :class="{ topnavbarconitRitActive: typeName == 'q' }"
class="topnavbarconitRit" @click="taskClick('q')">
:class="{ topnavbarconitRitActive: typeName == 'q' }"
@click="taskClick('q')"
>
全部 全部
</div> </div>
<div <div class="topnavbarconitRit" :class="{ topnavbarconitRitActive: typeName == item.dictValue }"
class="topnavbarconitRit" v-for="(item, key) of tasktypelist" :key="key" @click="taskClick(item.dictValue)">
:class="{ topnavbarconitRitActive: typeName == item.dictValue }"
v-for="(item, key) of tasktypelist"
:key="key"
@click="taskClick(item.dictValue)"
>
{{ item.dictLabel }} {{ item.dictLabel }}
</div> </div>
</div> </div>
@ -38,20 +26,12 @@
<div class="topnavbarconit"> <div class="topnavbarconit">
<div class="topnavbarconitL">金额范围</div> <div class="topnavbarconitL">金额范围</div>
<div class="topnavbarconitR"> <div class="topnavbarconitR">
<div <div class="topnavbarconitRit" :class="{ topnavbarconitRitActive: amountrange == 'q' }"
class="topnavbarconitRit" @click="amoutClick('q')">
:class="{ topnavbarconitRitActive: amountrange == 'q' }"
@click="amoutClick('q')"
>
全部 全部
</div> </div>
<div <div class="topnavbarconitRit" :class="{ topnavbarconitRitActive: amountrange == item.id }"
class="topnavbarconitRit" v-for="(item, key) of paytypelist" :key="key" @click="amoutClick(item.id)">
:class="{ topnavbarconitRitActive: amountrange == item.id }"
v-for="(item, key) of paytypelist"
:key="key"
@click="amoutClick(item.id)"
>
{{ item.name }} {{ item.name }}
</div> </div>
</div> </div>
@ -59,20 +39,12 @@
<div class="topnavbarconit"> <div class="topnavbarconit">
<div class="topnavbarconitL">项目周期</div> <div class="topnavbarconitL">项目周期</div>
<div class="topnavbarconitR"> <div class="topnavbarconitR">
<div <div class="topnavbarconitRit" :class="{ topnavbarconitRitActive: period == 'q' }"
class="topnavbarconitRit" @click="periodClick('q')">
:class="{ topnavbarconitRitActive: period == 'q' }"
@click="periodClick('q')"
>
全部 全部
</div> </div>
<div <div class="topnavbarconitRit" v-for="(item, key) of periodlist" :key="key"
class="topnavbarconitRit" :class="{ topnavbarconitRitActive: period == item.id }" @click="periodClick(item.id)">
v-for="(item, key) of periodlist"
:key="key"
:class="{ topnavbarconitRitActive: period == item.id }"
@click="periodClick(item.id)"
>
{{ item.name }} {{ item.name }}
</div> </div>
</div> </div>
@ -80,20 +52,12 @@
<div class="topnavbarconit"> <div class="topnavbarconit">
<div class="topnavbarconitL">驻场要求</div> <div class="topnavbarconitL">驻场要求</div>
<div class="topnavbarconitR"> <div class="topnavbarconitR">
<div <div :class="{ topnavbarconitRitActive: onsiteType == 'q' }" class="topnavbarconitRit"
:class="{ topnavbarconitRitActive: onsiteType == 'q' }" @click="onsiteTypeClick('q')">
class="topnavbarconitRit"
@click="onsiteTypeClick('q')"
>
全部 全部
</div> </div>
<div <div class="topnavbarconitRit" :class="{ topnavbarconitRitActive: onsiteType == item.id }"
class="topnavbarconitRit" v-for="(item, key) of residentlist" :key="key" @click="onsiteTypeClick(item.id)">
:class="{ topnavbarconitRitActive: onsiteType == item.id }"
v-for="(item, key) of residentlist"
:key="key"
@click="onsiteTypeClick(item.id)"
>
{{ item.name }} {{ item.name }}
</div> </div>
</div> </div>
@ -101,14 +65,8 @@
<div class="topnavbarconit topnavbarconitno"> <div class="topnavbarconit topnavbarconitno">
<div class="topnavbarconitL">地域要求</div> <div class="topnavbarconitL">地域要求</div>
<div class="topnavbarconitR"> <div class="topnavbarconitR">
<v-distpicker <v-distpicker @province="onChangeProvince" @city="onChangeCity" :placeholders="placeholders"
@province="onChangeProvince" :province="province" :city="city" hide-area></v-distpicker>
@city="onChangeCity"
:placeholders="placeholders"
:province="province"
:city="city"
hide-area
></v-distpicker>
</div> </div>
</div> </div>
</div> </div>
@ -124,55 +82,27 @@
</div> </div>
<div :class="officialwebsite ? 'tytool' : 'notytool'"> <div :class="officialwebsite ? 'tytool' : 'notytool'">
<div v-if="listcrowd.length > 0" v-loading="loading" style="width: 100%"> <div v-if="listcrowd.length > 0" v-loading="loading" style="width: 100%">
<div <div v-for="(task, key) of listcrowd" :key="key" class="productbox"
v-for="(task, key) of listcrowd" :style="{ padding: officialwebsite ? '' : '10px 0 5px 18px' }" @click="crowdinform(task.taskId)">
:key="key"
class="productbox"
:style="{ padding: officialwebsite ? '' : '10px 0 5px 18px' }"
@click="crowdinform(task.taskId)"
>
<div style="width: 150px; display: flex; align-items: center"> <div style="width: 150px; display: flex; align-items: center">
<img <img v-if="task.testType.split(',')[0] == 'static'" style="width: 97px; object-fit: contain"
v-if="task.testType.split(',')[0] == 'static'" src="/assets/crowd/jtcs.png" alt="" />
style="width: 97px; object-fit: contain" <img v-else-if="task.testType.split(',')[0] == 'function'"
src="/assets/crowd/jtcs.png" style="width: 97px; object-fit: contain" src="/assets/crowd/gncs.png" alt="" />
alt="" <img v-else-if="task.testType.split(',')[0] == 'performance'"
/> style="width: 97px; object-fit: contain" src="/assets/crowd/xncs.png" alt="" />
<img <img v-else-if="task.testType.split(',')[0] == 'security'"
v-else-if="task.testType.split(',')[0] == 'function'" style="width: 97px; object-fit: contain" src="/assets/crowd/aqcs.png" alt="" />
style="width: 97px; object-fit: contain" <img v-else-if="task.testType.split(',')[0] == 'reliability'"
src="/assets/crowd/gncs.png" style="width: 97px; object-fit: contain" src="/assets/crowd/kkxcs.png" alt="" />
alt="" <img v-else-if="task.testType.split(',')[0] == 'development'"
/> style="width: 97px; object-fit: contain" src="/assets/crowd/ycrw.png" alt="" />
<img
v-else-if="task.testType.split(',')[0] == 'performance'"
style="width: 97px; object-fit: contain"
src="/assets/crowd/xncs.png"
alt=""
/>
<img
v-else-if="task.testType.split(',')[0] == 'security'"
style="width: 97px; object-fit: contain"
src="/assets/crowd/aqcs.png"
alt=""
/>
<img
v-else-if="task.testType.split(',')[0] == 'reliability'"
style="width: 97px; object-fit: contain"
src="/assets/crowd/kkxcs.png"
alt=""
/>
<img
v-else-if="task.testType.split(',')[0] == 'development'"
style="width: 97px; object-fit: contain"
src="/assets/crowd/ycrw.png"
alt=""
/>
<img v-else style="width: 97px; object-fit: contain" src="/assets/crowd/qtcs.png" alt="" /> <img v-else style="width: 97px; object-fit: contain" src="/assets/crowd/qtcs.png" alt="" />
</div> </div>
<div class="taskper"> <div class="taskper">
<div style="display: flex; justify-content: space-between" class="raise"> <div style="display: flex; justify-content: space-between" class="raise">
<p>{{ task.projectName }}</p> <p>{{ task.projectName }} <levelTag :level="task.level"></levelTag>
</p>
<p style="font-weight: bold"> <p style="font-weight: bold">
<span v-if="task.price == 0" style="color: #e93a3a">面议</span> <span v-if="task.price == 0" style="color: #e93a3a">面议</span>
<span v-else style="color: #e93a3a"> {{ task.price }}</span> <span v-else style="color: #e93a3a"> {{ task.price }}</span>
@ -188,10 +118,8 @@
<p>任务工期{{ task.period }}</p> <p>任务工期{{ task.period }}</p>
<p>发布时间 {{ task.createTime.substr(0, 10) }}</p> <p>发布时间 {{ task.createTime.substr(0, 10) }}</p>
<p> <p>
共招<span style="color: #0066eb">{{ task.needPerson }}</span 共招<span style="color: #0066eb">{{ task.needPerson }}</span> / 已报名
> / 已报名 <span style="color: #0066eb">{{ task.companyAppCount + task.personalAppCount }}</span>
<span style="color: #0066eb">{{ task.companyAppCount + task.personalAppCount }}</span
>
<!-- 当前报名人数/计划招募人数<span style="color:#4485ee"> <!-- 当前报名人数/计划招募人数<span style="color:#4485ee">
{{ {{
task.companyAppCount + task.personalAppCount == 20 task.companyAppCount + task.personalAppCount == 20
@ -207,32 +135,20 @@
<div style="display: flex"> <div style="display: flex">
状态 状态
<div class="isBm" v-if="task.processStatus == 0">报名中</div> <div class="isBm" v-if="task.processStatus == 0">报名中</div>
<div <div class="isBm" v-else-if="task.processStatus == 1"
class="isBm" style="background: #f0ebfd; color: #6445fd">
v-else-if="task.processStatus == 1"
style="background: #f0ebfd; color: #6445fd"
>
实施中 实施中
</div> </div>
<div <div class="isBm" v-else-if="task.processStatus == 2"
class="isBm" style="background: #def3fd; color: #1e83f9">
v-else-if="task.processStatus == 2"
style="background: #def3fd; color: #1e83f9"
>
待验收 待验收
</div> </div>
<div <div class="isBm" v-else-if="task.processStatus == 3"
class="isBm" style="background: #fceae3; color: #fe4d40">
v-else-if="task.processStatus == 3"
style="background: #fceae3; color: #fe4d40"
>
待结算 待结算
</div> </div>
<div <div class="isBm" v-else-if="task.processStatus == 4"
class="isBm" style="background: #defdef; color: #12b378">
v-else-if="task.processStatus == 4"
style="background: #defdef; color: #12b378"
>
已完成 已完成
</div> </div>
<!-- <div class="isBmjs" v-else>报名结束</div> --> <!-- <div class="isBmjs" v-else>报名结束</div> -->
@ -251,29 +167,16 @@
<el-empty></el-empty> <el-empty></el-empty>
</div> </div>
<div v-if="officialwebsite && total > 10" style="width: 100%; margin-top: 30px; text-align: center"> <div v-if="officialwebsite && total > 10" style="width: 100%; margin-top: 30px; text-align: center">
<el-pagination <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
background :current-page="currentPage" :page-sizes="[10, 20, 30]" :page-size="pageSize"
@size-change="handleSizeChange" layout="total, sizes, prev, pager, next, jumper" :total="total">
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[10, 20, 30]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
>
</el-pagination> </el-pagination>
</div> </div>
<!-- :page-sizes="[3, 6, 30]" sizes,--> <!-- :page-sizes="[3, 6, 30]" sizes,-->
<div v-if="!officialwebsite && total > 3" style="width: 100%; margin-top: 50px; text-align: center"> <div v-if="!officialwebsite && total > 3" style="width: 100%; margin-top: 50px; text-align: center">
<el-pagination <el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange"
background :current-page="currentPage" :page-size="pageSize" layout="total, prev, pager, next, jumper"
@size-change="handleSizeChange" :total="total">
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-size="pageSize"
layout="total, prev, pager, next, jumper"
:total="total"
>
</el-pagination> </el-pagination>
</div> </div>
</div> </div>
@ -287,6 +190,7 @@ import { onsiteTypelist } from '@/const/dict/commondict'
import CrowdsourceTask from '../../common/CrowdsourceTask' import CrowdsourceTask from '../../common/CrowdsourceTask'
import { findByvalue, findLabelValueByProp } from '@/util/util' import { findByvalue, findLabelValueByProp } from '@/util/util'
import mixin from '@/mixin/index.js' import mixin from '@/mixin/index.js'
import levelTag from '@/components/levelTag/index.vue'
export default { export default {
mixins: [mixin], mixins: [mixin],
data() { data() {
@ -334,7 +238,7 @@ export default {
officialwebsite: true, // officialwebsite: true, //
} }
}, },
components: { CrowdsourceTask }, components: { CrowdsourceTask, levelTag },
computed: { computed: {
...mapGetters(['testtypelist', 'feescopelist', 'token', 'userinform']), ...mapGetters(['testtypelist', 'feescopelist', 'token', 'userinform']),
@ -510,7 +414,7 @@ export default {
// }); // });
this.$confirm('您不是企业用户不能发布众包任务。', '提示', { this.$confirm('您不是企业用户不能发布众包任务。', '提示', {
type: 'warning', type: 'warning',
}).then(() => {}) }).then(() => { })
} else { } else {
this.$router.push('/crowdsourcing/publishtasks') this.$router.push('/crowdsourcing/publishtasks')
// this.$refs.crowdsourceTask.openDialog(); // this.$refs.crowdsourceTask.openDialog();
@ -540,19 +444,23 @@ export default {
margin-top: -3px; margin-top: -3px;
box-shadow: 0px 4px 11px 1px rgba(20, 77, 150, 0.1); box-shadow: 0px 4px 11px 1px rgba(20, 77, 150, 0.1);
} }
.topnavbarcon { .topnavbarcon {
width: 1200px; width: 1200px;
margin: auto; margin: auto;
} }
.topnavbarconit { .topnavbarconit {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 10px 0; padding: 10px 0;
border-bottom: 1px solid #dcdfe6; border-bottom: 1px solid #dcdfe6;
} }
.topnavbarconitno { .topnavbarconitno {
border-bottom: unset; border-bottom: unset;
} }
.topnavbarconitL { .topnavbarconitL {
width: 85px; width: 85px;
font-weight: bold; font-weight: bold;
@ -563,6 +471,7 @@ export default {
margin-right: 30px; margin-right: 30px;
min-width: 85px; min-width: 85px;
} }
.topnavbarconitR { .topnavbarconitR {
flex: 1; flex: 1;
font-weight: 500; font-weight: 500;
@ -572,6 +481,7 @@ export default {
align-items: center; align-items: center;
flex-wrap: wrap; flex-wrap: wrap;
} }
.topnavbarconitRit { .topnavbarconitRit {
margin-bottom: 10px; margin-bottom: 10px;
height: 40px; height: 40px;
@ -582,6 +492,7 @@ export default {
font-size: 14px; font-size: 14px;
cursor: pointer; cursor: pointer;
} }
.topnavbarconitRitActive { .topnavbarconitRitActive {
background: #0066eb; background: #0066eb;
color: #fff; color: #fff;
@ -606,73 +517,91 @@ export default {
align-items: center; align-items: center;
cursor: pointer; cursor: pointer;
} }
.ijaoricon { .ijaoricon {
width: 31px; width: 31px;
height: 31px; height: 31px;
margin-bottom: 7px; margin-bottom: 7px;
} }
.tytool { .tytool {
width: 1200px; width: 1200px;
margin: auto; margin: auto;
padding: 30px 0; padding: 30px 0;
} }
.notytool { .notytool {
/* width:1200px; /* width:1200px;
margin-left:30px; */ margin-left:30px; */
} }
.topnavbar >>> .el-tabs__item.is-top:last-child {
.topnavbar>>>.el-tabs__item.is-top:last-child {
padding-right: 30px; padding-right: 30px;
} }
.topnavbar >>> .el-tabs__item.is-top:last-child {
.topnavbar>>>.el-tabs__item.is-top:last-child {
padding-right: 30px; padding-right: 30px;
} }
.el-tabs >>> .el-tabs__nav-wrap::after {
.el-tabs>>>.el-tabs__nav-wrap::after {
background-color: transparent; background-color: transparent;
} }
.el-tabs >>> .el-tabs__item {
.el-tabs>>>.el-tabs__item {
color: #4d4d4d; color: #4d4d4d;
} }
.el-tabs >>> .el-tabs__active-bar {
.el-tabs>>>.el-tabs__active-bar {
background-color: transparent; background-color: transparent;
} }
.el-tabs >>> .el-tabs__item.is-active {
.el-tabs>>>.el-tabs__item.is-active {
background: #0066eb; background: #0066eb;
color: #fff; color: #fff;
border: none; border: none;
border-radius: 4px; border-radius: 4px;
} }
.topnavbar >>> .el-tabs--top .el-tabs__item.is-top:nth-child(2) {
.topnavbar>>>.el-tabs--top .el-tabs__item.is-top:nth-child(2) {
padding-left: 22px; padding-left: 22px;
} }
.topnavbar >>> .el-tabs--top .el-tabs__item.is-top:nth-child(6) {
.topnavbar>>>.el-tabs--top .el-tabs__item.is-top:nth-child(6) {
padding-right: 18px; padding-right: 18px;
} }
.topnavbar >>> .el-divider--horizontal {
.topnavbar>>>.el-divider--horizontal {
margin: 5px 0 15px 0; margin: 5px 0 15px 0;
/* width:1150px; */ /* width:1150px; */
} }
.pilic { .pilic {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
margin: -15px 0 -5px 0; margin: -15px 0 -5px 0;
} }
.pilic >>> .el-divider--horizontal {
.pilic>>>.el-divider--horizontal {
margin: 0; margin: 0;
width: 1000px; width: 1000px;
} }
/* .piliccomp>>>.el-divider--horizontal{ /* .piliccomp>>>.el-divider--horizontal{
width:1000px; width:1000px;
} */ } */
.topnavbar >>> .el-tabs--top .el-tabs__item.is-top:nth-child(2) { .topnavbar>>>.el-tabs--top .el-tabs__item.is-top:nth-child(2) {
padding-left: 22px; padding-left: 22px;
} }
.topnavbar >>> .el-tabs--top .el-tabs__item.is-top:nth-child(6) {
.topnavbar>>>.el-tabs--top .el-tabs__item.is-top:nth-child(6) {
padding-right: 18px; padding-right: 18px;
} }
.topnavbar >>> .el-divider--horizontal {
.topnavbar>>>.el-divider--horizontal {
margin: -5px 0 5px 0; margin: -5px 0 5px 0;
} }
.typetext { .typetext {
color: #4d4d4d; color: #4d4d4d;
font-weight: bold; font-weight: bold;
@ -684,14 +613,17 @@ export default {
width: 90px; width: 90px;
min-width: 90px; min-width: 90px;
} }
.productbox >>> .el-divider--horizontal {
.productbox>>>.el-divider--horizontal {
margin: 0px; margin: 0px;
} }
.cetype { .cetype {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
flex-wrap: wrap; flex-wrap: wrap;
} }
.productbox { .productbox {
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
@ -705,13 +637,16 @@ export default {
cursor: pointer; cursor: pointer;
transition: all 0.1s linear; transition: all 0.1s linear;
} }
.productbox:hover .raise p:nth-child(1) { .productbox:hover .raise p:nth-child(1) {
color: #0066eb; color: #0066eb;
} }
.productbox:hover { .productbox:hover {
transform: scale(1.01); transform: scale(1.01);
box-shadow: 0px 2px 8px 0px #87898d; box-shadow: 0px 2px 8px 0px #87898d;
} }
.cetype2 { .cetype2 {
font-size: 14px; font-size: 14px;
font-weight: 500; font-weight: 500;
@ -734,22 +669,27 @@ export default {
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.cetype p:nth-child(1), .cetype p:nth-child(1),
.cetype p:nth-child(5) { .cetype p:nth-child(5) {
width: 260px; width: 260px;
} }
.cetype p:nth-child(4), .cetype p:nth-child(4),
.cetype p:nth-child(8) { .cetype p:nth-child(8) {
width: 230px; width: 230px;
} }
.cetype div:nth-child(1), .cetype div:nth-child(1),
.cetype div:nth-child(5) { .cetype div:nth-child(5) {
width: 260px; width: 260px;
} }
.cetype div:nth-child(4), .cetype div:nth-child(4),
.cetype div:nth-child(8) { .cetype div:nth-child(8) {
width: 230px; width: 230px;
} }
.cetype .isBm { .cetype .isBm {
width: 56px !important; width: 56px !important;
height: 24px; height: 24px;
@ -761,6 +701,7 @@ export default {
text-align: center; text-align: center;
margin-top: 0px; margin-top: 0px;
} }
.cetype .isBmjs { .cetype .isBmjs {
width: 69px !important; width: 69px !important;
height: 24px; height: 24px;
@ -772,9 +713,11 @@ export default {
text-align: center; text-align: center;
margin-top: 0px; margin-top: 0px;
} }
.raise :nth-child(1) { .raise :nth-child(1) {
font-weight: bold; font-weight: bold;
} }
.release { .release {
width: 159px; width: 159px;
height: 40px; height: 40px;
@ -789,6 +732,7 @@ export default {
cursor: pointer; cursor: pointer;
/* margin-bottom: 20px; */ /* margin-bottom: 20px; */
} }
/* .crowdtask>>>.el-drawer{ /* .crowdtask>>>.el-drawer{
width:1620px; width:1620px;
padding: 0 20px; padding: 0 20px;
@ -796,36 +740,42 @@ export default {
/* .crowdtask>>>.el-drawer__container{ /* .crowdtask>>>.el-drawer__container{
width:130%; width:130%;
} */ } */
.crowdtask >>> .el-drawer__header { .crowdtask>>>.el-drawer__header {
margin-bottom: 10px; margin-bottom: 10px;
font-weight: bold; font-weight: bold;
color: #0969bd; color: #0969bd;
} }
.crowdtask >>> .el-divider--horizontal {
.crowdtask>>>.el-divider--horizontal {
margin: 1px 0 0px 0; margin: 1px 0 0px 0;
width: 100%; width: 100%;
/* position: fixed; */ /* position: fixed; */
z-index: 99; z-index: 99;
} }
.crowdtask >>> .el-radio {
.crowdtask>>>.el-radio {
margin-bottom: 20px; margin-bottom: 20px;
margin-top: 13px; margin-top: 13px;
} }
.inforbtn >>> .el-button {
.inforbtn>>>.el-button {
width: 90px; width: 90px;
height: 34px; height: 34px;
background: #0066eb; background: #0066eb;
border-radius: 4px; border-radius: 4px;
color: #ffffff; color: #ffffff;
} }
.crowdtask >>> .el-form-item__label {
.crowdtask>>>.el-form-item__label {
color: #333333; color: #333333;
font-weight: bold; font-weight: bold;
/* margin-right:20px */ /* margin-right:20px */
} }
.crowdtask >>> .el-input__inner {
.crowdtask>>>.el-input__inner {
width: 90%; width: 90%;
} }
/* .crowdtask>>>.el-dialog__title{ /* .crowdtask>>>.el-dialog__title{
font-weight:bold; font-weight:bold;
color: #0969bd color: #0969bd
@ -834,36 +784,45 @@ export default {
/* width:1000px; */ /* width:1000px; */
padding: 0 20px; padding: 0 20px;
} }
@media screen and (max-width: 1500px) { @media screen and (max-width: 1500px) {
.productbox { .productbox {
/* width:1100px; */ /* width:1100px; */
padding: 10px 10px 5px 18px !important; padding: 10px 10px 5px 18px !important;
} }
.tytool { .tytool {
width: 1100px; width: 1100px;
margin: 30px auto; margin: 30px auto;
} }
.notytool { .notytool {
width: 1100px; width: 1100px;
margin-left: 30px; margin-left: 30px;
} }
.taskper { .taskper {
width: 900px; width: 900px;
} }
.tytool >>> .el-divider--horizontal {
.tytool>>>.el-divider--horizontal {
margin: 5px 0 15px 0; margin: 5px 0 15px 0;
width: 900px; width: 900px;
} }
.tytool >>> .el-tabs__item {
.tytool>>>.el-tabs__item {
padding: 0 20px !important; padding: 0 20px !important;
} }
} }
.topnavbar >>> .el-tabs__item {
.topnavbar>>>.el-tabs__item {
padding: 0 25px; padding: 0 25px;
} }
.topnavbar >>> .el-tabs__item {
.topnavbar>>>.el-tabs__item {
padding: 0 28px; padding: 0 28px;
} }
.decsbtn { .decsbtn {
width: 1200px; width: 1200px;
margin: auto; margin: auto;
@ -871,6 +830,7 @@ export default {
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
} }
.descbtnitem { .descbtnitem {
width: 100px; width: 100px;
height: 34px; height: 34px;

@ -10,23 +10,21 @@
</div> </div>
<div style="display: flex; justify-content: space-between"> <div style="display: flex; justify-content: space-between">
<div style="width: 850px"> <div style="width: 850px">
<div <div style="
style="
background: #ffffff; background: #ffffff;
box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.1); box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.1);
padding: 15px 0px; padding: 15px 0px;
" ">
>
<div style="padding: 0px 30px"> <div style="padding: 0px 30px">
<div <div style="
style="
display: flex; display: flex;
font-size: 35rpx; font-size: 35rpx;
font-weight: bold; font-weight: bold;
justify-content: space-between; justify-content: space-between;
" ">
> <p style="color: #333333">{{ task.project_name }} <levelTag :level="task.level">
<p style="color: #333333">{{ task.project_name }}</p> </levelTag>
</p>
<p v-if="task.price == 0" style="color: #fd461a">面议</p> <p v-if="task.price == 0" style="color: #fd461a">面议</p>
<p v-else style="color: #fd461a">¥{{ task.price }}</p> <p v-else style="color: #fd461a">¥{{ task.price }}</p>
</div> </div>
@ -36,17 +34,12 @@
<span v-if="task.task_status == 1">竞标成功</span> <span v-if="task.task_status == 1">竞标成功</span>
<span v-if="task.task_status == 2">竞标失败</span> <span v-if="task.task_status == 2">竞标失败</span>
</div> </div>
<div <div v-for="it in findLabelValueByProp(
v-for="it in findLabelValueByProp(
tasktypelist, tasktypelist,
task.test_type, task.test_type,
'dictValue', 'dictValue',
'dictLabel', 'dictLabel',
).split(',')" ).split(',')" :key="it" class="tabone" style="background: #e8eef5; color: #525b65">
:key="it"
class="tabone"
style="background: #e8eef5; color: #525b65"
>
<span>{{ it }}</span> <span>{{ it }}</span>
</div> </div>
<!-- 语言 --> <!-- 语言 -->
@ -87,11 +80,8 @@
需求描述 需求描述
</div> </div>
</div> </div>
<p <p v-if="task.project_desc" v-html="task.project_desc"
v-if="task.project_desc" style="color: #808080; line-height: 23px; font-size: 24rpx; white-space: pre-line"></p>
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> <p v-else style="margin-left: 10px"></p>
<div style="display: flex; align-items: center; width: 150px; margin-top: 30px"> <div style="display: flex; align-items: center; width: 150px; margin-top: 30px">
<div class="dvied"></div> <div class="dvied"></div>
@ -100,17 +90,11 @@
</div> </div>
</div> </div>
<div style="display: flex; align-items: center; margin: 12px 0"> <div style="display: flex; align-items: center; margin: 12px 0">
<img <img style="width: 17px; height: 20px; margin-right: 5px" src="/assets/crowd/upload.png"
style="width: 17px; height: 20px; margin-right: 5px" alt="" />
src="/assets/crowd/upload.png"
alt=""
/>
<!-- <p style="color:#1578ED;font-size: 12px;"></p> --> <!-- <p style="color:#1578ED;font-size: 12px;"></p> -->
<p <p @click="openurl(task.attachment)" v-if="task.attachment"
@click="openurl(task.attachment)" style="color: #1578ed; font-size: 12px; cursor: pointer">
v-if="task.attachment"
style="color: #1578ed; font-size: 12px; cursor: pointer"
>
项目附件 项目附件
</p> </p>
<p v-else style="color: #1578ed; font-size: 12px"></p> <p v-else style="color: #1578ed; font-size: 12px"></p>
@ -119,55 +103,41 @@
</div> </div>
<div style="width: 100%; height: 1px; background-color: #ebebeb; margin: 14px 0 19px 0"></div> <div style="width: 100%; height: 1px; background-color: #ebebeb; margin: 14px 0 19px 0"></div>
<div style="display: flex; justify-content: end" v-if="task.task_status == 0"> <div style="display: flex; justify-content: end" v-if="task.task_status == 0">
<div <div v-if="demtype == 1" class="tabone"
v-if="demtype == 1" style="margin-right: 30px; width: 85px; cursor: pointer; background: #909399">
class="tabone"
style="margin-right: 30px; width: 85px; cursor: pointer; background: #909399"
>
已竞标 已竞标
</div> </div>
<div <div v-else @click="applyfor" class="tabone"
v-else style="margin-right: 30px; width: 85px; cursor: pointer">
@click="applyfor"
class="tabone"
style="margin-right: 30px; width: 85px; cursor: pointer"
>
竞标报名 竞标报名
</div> </div>
</div> </div>
<div style="display: flex; justify-content: end" v-else> <div style="display: flex; justify-content: end" v-else>
<div <div class="tabone"
class="tabone" style="margin-right: 30px; width: 85px; cursor: pointer; background: #909399">
style="margin-right: 30px; width: 85px; cursor: pointer; background: #909399"
>
报名结束 报名结束
</div> </div>
</div> </div>
</div> </div>
<div <div v-if="userprogramme && userprogramme.period" style="
v-if="userprogramme && userprogramme.period"
style="
background: #ffffff; background: #ffffff;
box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.1); box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.1);
padding: 15px 0px; padding: 15px 0px;
margin-top: 16px; margin-top: 16px;
" ">
>
<div style="font-weight: bold; color: #333333; font-size: 17px; margin-left: 30px"> <div style="font-weight: bold; color: #333333; font-size: 17px; margin-left: 30px">
竞标方案 竞标方案
</div> </div>
<div style="width: 100%; height: 1px; background-color: #ebebeb; margin: 14px 0 19px 0"></div> <div style="width: 100%; height: 1px; background-color: #ebebeb; margin: 14px 0 19px 0"></div>
<div <div style="
style="
font-size: 14px; font-size: 14px;
text-align: left; text-align: left;
color: #333333; color: #333333;
margin: 20px 0px; margin: 20px 0px;
line-height: 25px; line-height: 25px;
padding-left: 30px; padding-left: 30px;
" ">
>
<p>竞标日期{{ userprogramme.apply_time.slice(0, 10) }}</p> <p>竞标日期{{ userprogramme.apply_time.slice(0, 10) }}</p>
<p>竞标工期{{ userprogramme.period ? userprogramme.period + '天' : '无' }}</p> <p>竞标工期{{ userprogramme.period ? userprogramme.period + '天' : '无' }}</p>
<p> <p>
@ -175,24 +145,18 @@
</p> </p>
<p> <p>
竞标附件 竞标附件
<span <span @click="openurl(userprogramme.attachment)" v-if="userprogramme.attachment"
@click="openurl(userprogramme.attachment)" style="color: #1578ed; cursor: pointer">项目附件</span>
v-if="userprogramme.attachment"
style="color: #1578ed; cursor: pointer"
>项目附件</span
>
<span v-else style="margin-left: -3px"></span> <span v-else style="margin-left: -3px"></span>
</p> </p>
</div> </div>
</div> </div>
<div <div style="
style="
background: #ffffff; background: #ffffff;
box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.1); box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.1);
padding: 15px 0px; padding: 15px 0px;
margin-top: 16px; margin-top: 16px;
" ">
>
<div style="font-weight: bold; color: #333333; font-size: 17px; margin-left: 30px"> <div style="font-weight: bold; color: #333333; font-size: 17px; margin-left: 30px">
报名列表 报名列表
</div> </div>
@ -214,21 +178,16 @@
</div> </div>
</div> </div>
<div> <div>
<div <div style="
style="
width: 330px; width: 330px;
background: #ffffff; background: #ffffff;
box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.1); box-shadow: 0px 2px 8px 0px rgba(54, 61, 67, 0.1);
padding: 15px 0px; padding: 15px 0px;
text-align: center; text-align: center;
" ">
>
<div style="width: 76px; height: 76px; margin: 20px auto" @click="openCompanyReview"> <div style="width: 76px; height: 76px; margin: 20px auto" @click="openCompanyReview">
<img <img style="width: 76px; object-fit: contain; height: 76px"
style="width: 76px; object-fit: contain; height: 76px" :src="task.avatar ? task.avatar : '/assets/home/defaultAva.jpg'" alt="" />
:src="task.avatar ? task.avatar : '/assets/home/defaultAva.jpg'"
alt=""
/>
</div> </div>
<p style="margin: -5px 0; font-size: 20px; color: #1a1a1a; font-weight: bold"> <p style="margin: -5px 0; font-size: 20px; color: #1a1a1a; font-weight: bold">
{{ task.company_name }} {{ task.company_name }}
@ -242,16 +201,13 @@
<el-rate v-model="task.commentsStar" disabled></el-rate> <el-rate v-model="task.commentsStar" disabled></el-rate>
</div> </div>
</template> </template>
<div <div v-else style="
v-else
style="
font-weight: 500; font-weight: 500;
font-size: 16px; font-size: 16px;
color: #666666; color: #666666;
text-align: center; text-align: center;
margin-top: 20px; margin-top: 20px;
" ">
>
暂无评分 暂无评分
</div> </div>
@ -280,48 +236,23 @@
</div> </div>
</div> </div>
</div> </div>
<el-dialog <el-dialog :title="diatitle" :visible.sync="paydiaopen" width="650px" :close-on-click-modal="false"
:title="diatitle" append-to-body class="paydialog">
:visible.sync="paydiaopen" <el-form :model="biddingobj" label-width="100px" ref="biddingobj" :rules="rules" class="demo-ruleForm"
width="650px" style="margin-top: 20px">
:close-on-click-modal="false"
append-to-body
class="paydialog"
>
<el-form
:model="biddingobj"
label-width="100px"
ref="biddingobj"
:rules="rules"
class="demo-ruleForm"
style="margin-top: 20px"
>
<el-form-item label="预算周期" prop="period"> <el-form-item label="预算周期" prop="period">
<el-input v-model="biddingobj.period" max="1000" style="width: 90%" placeholder="请输入预算周期"> <el-input v-model="biddingobj.period" max="1000" style="width: 90%" placeholder="请输入预算周期">
<i slot="suffix" style="font-style: normal; margin-right: 10px"></i> <i slot="suffix" style="font-style: normal; margin-right: 10px"></i>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="竞标优势" prop="competitionEdge"> <el-form-item label="竞标优势" prop="competitionEdge">
<el-input <el-input maxlength="2800" :row="6" show-word-limit type="textarea"
maxlength="2800" v-model="biddingobj.competitionEdge" placeholder="请输入竞标优势" style="width: 90%"></el-input>
:row="6"
show-word-limit
type="textarea"
v-model="biddingobj.competitionEdge"
placeholder="请输入竞标优势"
style="width: 90%"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="竞标附件"> <el-form-item label="竞标附件">
<div style="text-align: left"> <div style="text-align: left">
<nonimage-upload <nonimage-upload v-model="biddingobj.attachment" imageType="pdf|doc|docx|zip|rar"
v-model="biddingobj.attachment" :serverAddr="materialServerAddr" fileName="实施结果" :limit="1" @setImgPath="setImgPath" />
imageType="pdf|doc|docx|zip|rar"
:serverAddr="materialServerAddr"
fileName="实施结果"
:limit="1"
@setImgPath="setImgPath"
/>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
@ -355,7 +286,9 @@ import NonimageUpload from '@/page/common/NonimageUpload'
import mixin from '@/mixin/index.js' import mixin from '@/mixin/index.js'
import companyReviewVue from '@/page/common/companyReview.vue' import companyReviewVue from '@/page/common/companyReview.vue'
import levelTag from '@/components/levelTag/index.vue'
import { gettesterId } from '@/api/tester/CompanyApply' import { gettesterId } from '@/api/tester/CompanyApply'
import { getLevel } from '../../../util/userlevel'
export default { export default {
props: ['mydetails'], props: ['mydetails'],
mixins: [mixin], mixins: [mixin],
@ -398,6 +331,7 @@ export default {
components: { components: {
NonimageUpload, NonimageUpload,
companyReviewVue, companyReviewVue,
levelTag
}, },
computed: { computed: {
...mapGetters(['testtypelist', 'feescopelist', 'userinform', 'userId', 'token']), ...mapGetters(['testtypelist', 'feescopelist', 'userinform', 'userId', 'token']),
@ -495,7 +429,12 @@ export default {
}, },
// //
applyfor() { applyfor() {
if (!this.token) { getInfo().then(res => {
const { level, _ } = getLevel(res.user.growthValue)
if (this.task.level && this.task.level > level) {
this.$message.warning("当前等级不满足竞标资格,去看看其他任务吧")
return
} else if (!this.token) {
this.$confirm('您未登录,请您先去登录', '提示', { this.$confirm('您未登录,请您先去登录', '提示', {
confirmButtonText: '确定', confirmButtonText: '确定',
cancelButtonText: '取消', cancelButtonText: '取消',
@ -534,6 +473,8 @@ export default {
} }
}) })
} }
})
}, },
// //
resultFn() { resultFn() {
@ -639,6 +580,7 @@ export default {
text-indent: 2em; text-indent: 2em;
cursor: pointer; cursor: pointer;
} }
.tabone { .tabone {
padding: 0px 10px; padding: 0px 10px;
color: #ffffff; color: #ffffff;
@ -651,6 +593,7 @@ export default {
height: 28px; height: 28px;
font-size: 14px; font-size: 14px;
} }
.tabone1 { .tabone1 {
background: #fcf0e6; background: #fcf0e6;
border-radius: 4px; border-radius: 4px;
@ -658,11 +601,13 @@ export default {
font-size: 14px; font-size: 14px;
color: #554c42; color: #554c42;
} }
.dvied { .dvied {
width: 4px; width: 4px;
height: 18px; height: 18px;
background: #0066eb; background: #0066eb;
} }
.release { .release {
width: 159px; width: 159px;
height: 40px; height: 40px;
@ -677,6 +622,7 @@ export default {
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;
} }
.crofinf { .crofinf {
font-weight: bold; font-weight: bold;
color: #333333; color: #333333;
@ -684,6 +630,7 @@ export default {
/* position:absolute; */ /* position:absolute; */
margin: 0px 6px -18px 0px; margin: 0px 6px -18px 0px;
} }
.taskname { .taskname {
background: #f4f5fa; background: #f4f5fa;
padding: 10px 20px; padding: 10px 20px;
@ -693,53 +640,63 @@ export default {
height: 20px; height: 20px;
font-size: 14px; font-size: 14px;
} }
.taskname p:nth-child(1) { .taskname p:nth-child(1) {
width: 85px; width: 85px;
} }
.crowdbig { .crowdbig {
width: 1200px; width: 1200px;
margin: 0px auto; margin: 0px auto;
padding: 30px 0; padding: 30px 0;
} }
.mycrowdbig { .mycrowdbig {
width: 1200px; width: 1200px;
margin: 0px auto; margin: 0px auto;
padding: 30px 0; padding: 30px 0;
} }
@media screen and (max-width: 1500px) { @media screen and (max-width: 1500px) {
.crowdbig { .crowdbig {
width: 1200px; width: 1200px;
margin: 0px auto; margin: 0px auto;
padding: 30px 0; padding: 30px 0;
} }
.mycrowdbig { .mycrowdbig {
width: 1000px; width: 1000px;
margin: 0px auto; margin: 0px auto;
padding: 30px 0; padding: 30px 0;
} }
} }
@media screen and (min-width: 1500px) and (max-width: 1560px) { @media screen and (min-width: 1500px) and (max-width: 1560px) {
.crowdbig { .crowdbig {
width: 1200px; width: 1200px;
margin: 0px auto; margin: 0px auto;
padding: 30px 0; padding: 30px 0;
} }
.mycrowdbig { .mycrowdbig {
width: 1100px; width: 1100px;
margin: 0px auto; margin: 0px auto;
padding: 30px 0; padding: 30px 0;
} }
} }
.signst { .signst {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
margin: 10px; margin: 10px;
} }
.signst .success1 { .signst .success1 {
width: 88px; width: 88px;
height: 26px; height: 26px;
} }
.signst .success { .signst .success {
width: 88px; width: 88px;
height: 26px; height: 26px;
@ -752,19 +709,23 @@ export default {
font-size: 14px; font-size: 14px;
color: #ffffff; color: #ffffff;
} }
.signst .success img { .signst .success img {
width: 12px; width: 12px;
height: 12px; height: 12px;
} }
.signst img { .signst img {
width: 40px; width: 40px;
height: 40px; height: 40px;
border-radius: 50%; border-radius: 50%;
} }
.signst p { .signst p {
font-size: 11px; font-size: 11px;
margin-top: 5px; margin-top: 5px;
} }
.facj { .facj {
display: flex; display: flex;
width: 220px; width: 220px;
@ -772,6 +733,7 @@ export default {
justify-content: space-between; justify-content: space-between;
cursor: pointer; cursor: pointer;
} }
.facj div { .facj div {
width: 100px; width: 100px;
height: 34px; height: 34px;
@ -782,7 +744,8 @@ export default {
line-height: 34px; line-height: 34px;
text-align: center; text-align: center;
} }
.ratebox >>> .el-rate__icon {
.ratebox>>>.el-rate__icon {
font-size: 30px !important; font-size: 30px !important;
} }
</style> </style>

@ -28,24 +28,16 @@
>{{ item.name }}</el-radio >{{ item.name }}</el-radio
> >
</el-radio-group> --> </el-radio-group> -->
<CheckBox <CheckBox v-model="taskform.testType" :checkList="tasktypelist"
v-model="taskform.testType" :fieldName="['dictLabel', 'dictValue']" />
:checkList="tasktypelist"
:fieldName="['dictLabel', 'dictValue']"
/>
</el-form-item> </el-form-item>
<el-form-item label="语言" prop="language"> <el-form-item label="语言" prop="language">
<!-- <el-input v-model="taskform.language" placeholder="请输入测试项目名称"></el-input> --> <!-- <el-input v-model="taskform.language" placeholder="请输入测试项目名称"></el-input> -->
<el-select <el-select v-model="taskform.language" multiple placeholder="请选择语言" filterable
v-model="taskform.language" allow-create style="width: 726px">
multiple <el-option v-for="it in languageList" :key="it.dictCode" :label="it.dictLabel"
placeholder="请选择语言" :value="it.dictLabel"></el-option>
filterable
allow-create
style="width: 726px"
>
<el-option v-for="it in languageList" :key="it.dictCode" :label="it.dictLabel" :value="it.dictLabel"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
@ -55,29 +47,18 @@
<el-form-item label="需要人数" prop="needPerson"> <el-form-item label="需要人数" prop="needPerson">
<el-input v-model.number="taskform.needPerson" placeholder="请输入需要人数"> <el-input v-model.number="taskform.needPerson" placeholder="请输入需要人数">
<i slot="suffix" style="font-style: normal; margin-right: 10px"></i></el-input <i slot="suffix" style="font-style: normal; margin-right: 10px"></i></el-input>
>
</el-form-item> </el-form-item>
<el-form-item label="任务简介" prop="projectDesc" class="deidy"> <el-form-item label="任务简介" prop="projectDesc" class="deidy">
<quill-editor <quill-editor class="ql-editor" v-model="editContent" ref="myQuillEditor"
class="ql-editor" :options="editorOption" @blur="onEditorBlur($event)" @focus="onEditorFocus($event)"
v-model="editContent" @change="onEditorChange($event)">
ref="myQuillEditor"
:options="editorOption"
@blur="onEditorBlur($event)"
@focus="onEditorFocus($event)"
@change="onEditorChange($event)"
>
</quill-editor> </quill-editor>
</el-form-item> </el-form-item>
<el-form-item label="预计总工期" prop="period"> <el-form-item label="预计总工期" prop="period">
<div style="display: flex; justify-content: space-between"> <div style="display: flex; justify-content: space-between">
<el-input <el-input v-model="taskform.period" placeholder="您期望多长时间完成" class="timelong">
v-model="taskform.period"
placeholder="您期望多长时间完成"
class="timelong"
>
<!-- <el-select <!-- <el-select
v-model="select" v-model="select"
slot="append" slot="append"
@ -91,10 +72,7 @@
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="有效天数"> <el-form-item label="有效天数">
<el-input <el-input v-model.number="taskform.validDays" placeholder="发布后在有效天数内可报名 ,不输入则视为长期有效">
v-model.number="taskform.validDays"
placeholder="发布后在有效天数内可报名 ,不输入则视为长期有效"
>
<i slot="suffix" style="font-style: normal; margin-right: 10px"></i> <i slot="suffix" style="font-style: normal; margin-right: 10px"></i>
</el-input> </el-input>
</el-form-item> </el-form-item>
@ -103,22 +81,15 @@
<el-input v-model="taskform.price" placeholder="您计划支付多少费用完成任务"> <el-input v-model="taskform.price" placeholder="您计划支付多少费用完成任务">
<i slot="suffix" style="font-style: normal; margin-right: 10px"></i> <i slot="suffix" style="font-style: normal; margin-right: 10px"></i>
</el-input> </el-input>
<el-checkbox @change="checkChange" v-model="mianyicheck" style="margin-left: 20px" <el-checkbox @change="checkChange" v-model="mianyicheck"
>面议</el-checkbox style="margin-left: 20px">面议</el-checkbox>
>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="附件文档" prop="attachment"> <el-form-item label="附件文档" prop="attachment">
<multi-upload <multi-upload v-model="taskform.attachment" :fileType="fileType"
v-model="taskform.attachment" :serverAddr="materialServerAddr" @setImgPath="setImgPath" fileName="附件上传" :limit="3"
:fileType="fileType" ref="myuploadzu" />
:serverAddr="materialServerAddr"
@setImgPath="setImgPath"
fileName="附件上传"
:limit="3"
ref="myuploadzu"
/>
</el-form-item> </el-form-item>
<!-- 要求 --> <!-- 要求 -->
@ -137,15 +108,18 @@
<p>城市要求</p> <p>城市要求</p>
<br /> <br />
<el-input v-model="taskform.area" v-show="false"></el-input> <el-input v-model="taskform.area" v-show="false"></el-input>
<v-distpicker <v-distpicker @province="onChangeProvince" @city="onChangeCity"
@province="onChangeProvince" :placeholders="placeholders" :province="province" :city="city"
@city="onChangeCity" hide-area></v-distpicker>
:placeholders="placeholders"
:province="province"
:city="city"
hide-area
></v-distpicker>
</div> </div>
<el-form-item label="竞标用户等级要求" prop="level">
<!-- <el-input v-model="taskform.language" placeholder="请输入测试项目名称"></el-input> -->
<el-select v-model="taskform.level" placeholder="请选择等级" clearable filterable
allow-create style="width: 726px"">
<el-option v-for=" (le, index) in levelList" :key="index" :label="le"
:value="index"></el-option>
</el-select>
</el-form-item>
<div class="titletwo">联系方式</div> <div class="titletwo">联系方式</div>
<!-- 联系方式 --> <!-- 联系方式 -->
<div> <div>
@ -366,6 +340,7 @@ export default {
contactTel: '', contactTel: '',
remark: '', remark: '',
needPerson: null, needPerson: null,
level: ''
}, },
placeholders: { placeholders: {
province: '--- 省 ----', province: '--- 省 ----',
@ -426,7 +401,8 @@ export default {
basetarget: process.env.VUE_APP_BASE_TARGET, basetarget: process.env.VUE_APP_BASE_TARGET,
// //
mianyicheck: false, mianyicheck: false,
languageList: [] languageList: [],
levelList: ['无门槛', '一级', '二级', '三级']
} }
}, },
filters: { filters: {
@ -446,10 +422,13 @@ export default {
}) })
// console.log('taskform.attachment',this.taskform.attachment) // console.log('taskform.attachment',this.taskform.attachment)
let applyId = this.$route.query.applyId let applyId = this.$route.query.applyId
if (applyId) { if (applyId) {
getApply(applyId).then((response) => { getApply(applyId).then((response) => {
// console.log('',response.data) // console.log('',response.data)
let task = response.data let task = response.data
console.log(task);
if (task != null) { if (task != null) {
// this.taskform = task; // this.taskform = task;
let { let {
@ -561,6 +540,8 @@ export default {
}, },
// //
tasksubmit(payload) { tasksubmit(payload) {
console.log(this.taskform);
// return
// this.$router.push("/console/myrelease?tabtype=1") // this.$router.push("/console/myrelease?tabtype=1")
this.$refs['taskform'].validate((valid) => { this.$refs['taskform'].validate((valid) => {
if (this.province != '' && this.city != '') { if (this.province != '' && this.city != '') {
@ -593,6 +574,7 @@ export default {
projectDesc: this.taskform.projectDesc, projectDesc: this.taskform.projectDesc,
attachment, attachment,
techNeed: this.taskform.techNeed, techNeed: this.taskform.techNeed,
level: this.taskform.level,
validDays: this.taskform.validDays, validDays: this.taskform.validDays,
period: this.taskform.period, period: this.taskform.period,
price: this.taskform.price, price: this.taskform.price,
@ -654,8 +636,8 @@ export default {
onEditorReady(editor) { onEditorReady(editor) {
// //
}, },
onEditorBlur() {}, // onEditorBlur() { }, //
onEditorFocus() {}, // onEditorFocus() { }, //
// //
onEditorChange() { onEditorChange() {
this.taskform.projectDesc = this.escapeStringHTML(this.editContent) this.taskform.projectDesc = this.escapeStringHTML(this.editContent)
@ -687,26 +669,32 @@ export default {
} }
</script> </script>
<style scoped> <style scoped>
.crowdtask >>> .el-form-item { .crowdtask>>>.el-form-item {
margin-bottom: 10px; margin-bottom: 10px;
} }
.timelong >>> .el-input-group__append {
.timelong>>>.el-input-group__append {
width: 36px !important; width: 36px !important;
} }
.crowdtask >>> .quill-editor {
.crowdtask>>>.quill-editor {
padding: 0 !important; padding: 0 !important;
margin-top: 10px !important; margin-top: 10px !important;
} }
.notytool { .notytool {
margin-left: 50px; margin-left: 50px;
} }
.crowdtask >>> .quill-editor /deep/ .ql-container {
.crowdtask>>>.quill-editor /deep/ .ql-container {
padding: 40px 0 0 80px; padding: 40px 0 0 80px;
min-height: 490px; min-height: 490px;
} }
.crowdtask >>> .ql-container {
.crowdtask>>>.ql-container {
min-height: 200px; min-height: 200px;
} }
.titletwo { .titletwo {
height: 40px; height: 40px;
background: #f7f7f7; background: #f7f7f7;
@ -719,31 +707,37 @@ export default {
font-size: 17px; font-size: 17px;
color: #000000; color: #000000;
} }
.tytool { .tytool {
width: 1200px; width: 1200px;
margin: 30px auto; margin: 30px auto;
} }
.dvied { .dvied {
width: 4px; width: 4px;
height: 18px; height: 18px;
background: #0066eb; background: #0066eb;
} }
.conbg { .conbg {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
margin-top: 27px; margin-top: 27px;
width: 1200px; width: 1200px;
} }
.crowdtask { .crowdtask {
padding: 20px 0px; padding: 20px 0px;
width: 808px; width: 808px;
} }
.crowdtask >>> .el-form-item__label {
.crowdtask>>>.el-form-item__label {
color: #000000; color: #000000;
font-weight: bold; font-weight: bold;
font-size: 18px; font-size: 18px;
} }
.tes_type >>> .el-radio.is-bordered.is-checked {
.tes_type>>>.el-radio.is-bordered.is-checked {
width: 110px; width: 110px;
height: 34px; height: 34px;
background: #ecf3fd; background: #ecf3fd;
@ -752,10 +746,12 @@ export default {
margin-right: 20px; margin-right: 20px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.tes_type >>> .el-radio.is-bordered + .el-radio.is-bordered {
.tes_type>>>.el-radio.is-bordered+.el-radio.is-bordered {
margin-left: 0px; margin-left: 0px;
} }
.tes_type >>> .el-radio.is-bordered {
.tes_type>>>.el-radio.is-bordered {
width: 110px; width: 110px;
height: 34px; height: 34px;
border-radius: 2px; border-radius: 2px;
@ -765,24 +761,30 @@ export default {
margin-right: 20px; margin-right: 20px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.tes_type >>> .el-radio__label {
.tes_type>>>.el-radio__label {
font-size: 15px; font-size: 15px;
padding-left: 0px; padding-left: 0px;
} }
.el-radio.is-bordered { .el-radio.is-bordered {
padding: 0; padding: 0;
} }
.tes_type >>> .el-radio__inner {
.tes_type>>>.el-radio__inner {
display: none; display: none;
} }
.deidy >>> .el-form-item__label {
.deidy>>>.el-form-item__label {
margin-bottom: -32px; margin-bottom: -32px;
} }
.deidy >>> .el-form-item__label:before {
.deidy>>>.el-form-item__label:before {
content: '*'; content: '*';
color: #f56c6c; color: #f56c6c;
margin-right: 4px; margin-right: 4px;
} }
.perfect { .perfect {
width: 100%; width: 100%;
height: 46px; height: 46px;
@ -793,7 +795,8 @@ export default {
line-height: 46px; line-height: 46px;
text-align: center; text-align: center;
} }
.inforbtn >>> .el-button {
.inforbtn>>>.el-button {
width: 284px; width: 284px;
height: 44px; height: 44px;
background: #0066eb; background: #0066eb;
@ -801,19 +804,23 @@ export default {
color: #ffffff; color: #ffffff;
font-size: 15px; font-size: 15px;
} }
.morecla >>> .el-form-item {
.morecla>>>.el-form-item {
display: flex; display: flex;
} }
.morecla >>> .el-form-item__label {
.morecla>>>.el-form-item__label {
color: #333333; color: #333333;
font-weight: 600; font-weight: 600;
font-size: 16px; font-size: 16px;
text-align: left; text-align: left;
width: 120px; width: 120px;
} }
.divwrap { .divwrap {
margin-bottom: 20px; margin-bottom: 20px;
} }
.divwrap p { .divwrap p {
color: #000000; color: #000000;
font-size: 18px; font-size: 18px;
@ -830,29 +837,36 @@ export default {
/* */ /* */
/* margin-left: -15px; */ /* margin-left: -15px; */
} }
.ql-snow .ql-tooltip[data-mode='link']::before { .ql-snow .ql-tooltip[data-mode='link']::before {
content: '请输入链接地址:'; content: '请输入链接地址:';
} }
.ql-snow .ql-tooltip.ql-editing a.ql-action::after { .ql-snow .ql-tooltip.ql-editing a.ql-action::after {
border-right: 0px; border-right: 0px;
content: '保存'; content: '保存';
padding-right: 0px; padding-right: 0px;
} }
.ql-snow .ql-tooltip[data-mode='video']::before { .ql-snow .ql-tooltip[data-mode='video']::before {
content: '请输入视频地址:'; content: '请输入视频地址:';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label::before, .ql-snow .ql-picker.ql-size .ql-picker-label::before,
.ql-snow .ql-picker.ql-size .ql-picker-item::before { .ql-snow .ql-picker.ql-size .ql-picker-item::before {
content: '14px'; content: '14px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='small']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='small']::before {
content: '10px'; content: '10px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='large']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='large']::before {
content: '18px'; content: '18px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='huge']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='huge']::before {
content: '32px'; content: '32px';
@ -862,26 +876,32 @@ export default {
.ql-snow .ql-picker.ql-header .ql-picker-item::before { .ql-snow .ql-picker.ql-header .ql-picker-item::before {
content: '文本'; content: '文本';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='1']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before {
content: '标题1'; content: '标题1';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='2']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before {
content: '标题2'; content: '标题2';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='3']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='3']::before {
content: '标题3'; content: '标题3';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='4']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='4']::before {
content: '标题4'; content: '标题4';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='5']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='5']::before {
content: '标题5'; content: '标题5';
} }
.ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before, .ql-snow .ql-picker.ql-header .ql-picker-label[data-value='6']::before,
.ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before { .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='6']::before {
content: '标题6'; content: '标题6';
@ -891,77 +911,95 @@ export default {
.ql-snow .ql-picker.ql-font .ql-picker-item::before { .ql-snow .ql-picker.ql-font .ql-picker-item::before {
content: '默认'; content: '默认';
} }
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='SimSun']::before, .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='SimSun']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='SimSun']::before { .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='SimSun']::before {
content: '宋体'; content: '宋体';
} }
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='Microsoft-YaHei']::before, .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='Microsoft-YaHei']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='Microsoft-YaHei']::before { .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='Microsoft-YaHei']::before {
content: '微软雅黑'; content: '微软雅黑';
} }
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='KaiTi']::before, .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='KaiTi']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='KaiTi']::before { .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='KaiTi']::before {
content: '楷体'; content: '楷体';
} }
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='FangSong']::before, .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='FangSong']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='FangSong']::before { .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='FangSong']::before {
content: '仿宋'; content: '仿宋';
} }
.ql-snow .ql-picker.ql-font .ql-picker-label[data-value='SimHei']::before, .ql-snow .ql-picker.ql-font .ql-picker-label[data-value='SimHei']::before,
.ql-snow .ql-picker.ql-font .ql-picker-item[data-value='SimHei']::before { .ql-snow .ql-picker.ql-font .ql-picker-item[data-value='SimHei']::before {
content: '黑体'; content: '黑体';
} }
.ql-toolbar.ql-snow + .ql-container.ql-snow {
.ql-toolbar.ql-snow+.ql-container.ql-snow {
border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px; border-bottom-right-radius: 5px;
border: 1px solid #ebebeb; border: 1px solid #ebebeb;
} }
.ql-toolbar.ql-snow { .ql-toolbar.ql-snow {
border-top-left-radius: 5px; border-top-left-radius: 5px;
border-top-right-radius: 5px; border-top-right-radius: 5px;
border: 1px solid #ebebeb; border: 1px solid #ebebeb;
} }
.ql-snow .ql-stroke, .ql-snow .ql-stroke,
.ql-snow .ql-picker { .ql-snow .ql-picker {
/* color: #999; /* color: #999;
stroke: #999; */ stroke: #999; */
} }
.ql-snow .ql-fill, .ql-snow .ql-fill,
.ql-snow .ql-stroke.ql-fill { .ql-snow .ql-stroke.ql-fill {
/* fill: #999; */ /* fill: #999; */
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='12px']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='12px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='12px']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='12px']::before {
content: '12px'; content: '12px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='14px']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='14px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='14px']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='14px']::before {
content: '14px'; content: '14px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='16px']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='16px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='16px']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='16px']::before {
content: '16px'; content: '16px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='20px']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='20px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='20px']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='20px']::before {
content: '20px'; content: '20px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='24px']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='24px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='24px']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='24px']::before {
content: '24px'; content: '24px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='28px']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='28px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='28px']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='28px']::before {
content: '28px'; content: '28px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='32px']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='32px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='32px']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='32px']::before {
content: '32px'; content: '32px';
} }
.ql-snow .ql-picker.ql-size .ql-picker-label[data-value='36px']::before, .ql-snow .ql-picker.ql-size .ql-picker-label[data-value='36px']::before,
.ql-snow .ql-picker.ql-size .ql-picker-item[data-value='36px']::before { .ql-snow .ql-picker.ql-size .ql-picker-item[data-value='36px']::before {
content: '36px'; content: '36px';
} }
.ql-container { .ql-container {
font-size: 14px; font-size: 14px;
} }

@ -5,14 +5,8 @@
<el-carousel-item v-for="item in indexbanner" :key="item.imgurl" style="position: relative"> <el-carousel-item v-for="item in indexbanner" :key="item.imgurl" style="position: relative">
<el-col :span="24"> <el-col :span="24">
<!-- <el-button type="primary" class="lunbobtn">测试</el-button> --> <!-- <el-button type="primary" class="lunbobtn">测试</el-button> -->
<img <img ref="bannerHeight" :src="item.imgurl" alt=""
ref="bannerHeight" style="width: 100%; height: 500px; object-fit: cover; cursor: pointer" @click="jumpurl(item)" />
:src="item.imgurl"
alt=""
style="width: 100%; height: 500px; object-fit: cover; cursor: pointer"
@click="jumpurl(item)"
/>
</el-col> </el-col>
</el-carousel-item> </el-carousel-item>
</el-carousel> </el-carousel>
@ -29,28 +23,21 @@
专业的测试工具全方位服务软件质量 专业的测试工具全方位服务软件质量
</div> </div>
<div style="display: flex; justify-content: space-between; flex-wrap: wrap; margin-bottom: 30px"> <div style="display: flex; justify-content: space-between; flex-wrap: wrap; margin-bottom: 30px">
<div <div class="newbiwfbg" v-for="tool of toolslist.slice(0, 3)" :key="tool.name"
class="newbiwfbg" @click="goodsdetails(tool.toolId)" v-loading="toolload">
v-for="tool of toolslist.slice(0, 3)"
:key="tool.name"
@click="goodsdetails(tool.toolId)"
v-loading="toolload"
>
<div class="biwfbg"> <div class="biwfbg">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<!-- <img :src="tool.imgUrl" alt="" /> --> <!-- <img :src="tool.imgUrl" alt="" /> -->
<div style="font-size: 18px; color: #000; margin-right: 7px; font-weight: bold"> <div style="font-size: 18px; color: #000; margin-right: 7px; font-weight: bold">
{{ tool.name }} {{ tool.name }}
</div> </div>
<div <div style="
style="
padding: 2px 3px; padding: 2px 3px;
border: 1px solid #0066eb; border: 1px solid #0066eb;
border-radius: 3px; border-radius: 3px;
font-size: 14px; font-size: 14px;
color: #0066eb; color: #0066eb;
" ">
>
{{ tool.deliverType }} {{ tool.deliverType }}
</div> </div>
</div> </div>
@ -65,28 +52,21 @@
<div class="arrow"></div> <div class="arrow"></div>
</div> </div>
</div> </div>
<div <div class="newbiwfbg2" v-for="tool of toolslist.slice(3, 6)" :key="tool.name"
class="newbiwfbg2" @click="goodsdetails(tool.toolId)" v-loading="toolload">
v-for="tool of toolslist.slice(3, 6)"
:key="tool.name"
@click="goodsdetails(tool.toolId)"
v-loading="toolload"
>
<div class="biwfbg"> <div class="biwfbg">
<div style="display: flex; align-items: center"> <div style="display: flex; align-items: center">
<!-- <img :src="tool.imgUrl" alt="" /> --> <!-- <img :src="tool.imgUrl" alt="" /> -->
<div style="font-size: 18px; color: #000; margin-right: 7px; font-weight: bold"> <div style="font-size: 18px; color: #000; margin-right: 7px; font-weight: bold">
{{ tool.name }} {{ tool.name }}
</div> </div>
<div <div style="
style="
padding: 2px 3px; padding: 2px 3px;
border: 1px solid #0066eb; border: 1px solid #0066eb;
border-radius: 3px; border-radius: 3px;
font-size: 14px; font-size: 14px;
color: #0066eb; color: #0066eb;
" ">
>
{{ tool.deliverType }} {{ tool.deliverType }}
</div> </div>
</div> </div>
@ -133,62 +113,35 @@
</div> </div>
</div> --> </div> -->
<div class="bggukright"> <div class="bggukright">
<div <div v-for="task of listcrowd" :key="task.taskId" v-loading="crowdload"
v-for="task of listcrowd"
:key="task.taskId"
v-loading="crowdload"
style="width: 100%; padding: 10px 30px 10px 18px" style="width: 100%; padding: 10px 30px 10px 18px"
class="productbox taskboxTransform marginbotta" class="productbox taskboxTransform marginbotta" @click="crowdinform(task.taskId)">
@click="crowdinform(task.taskId)"
>
<div style="width: 170px; display: flex; align-items: center"> <div style="width: 170px; display: flex; align-items: center">
<img <img v-if="task.testType.split(',')[0] == 'static'"
v-if="task.testType.split(',')[0] == 'static'"
style="width: 106px; object-fit: contain; height: 106px" style="width: 106px; object-fit: contain; height: 106px"
src="/assets/crowd/jtcs.png" src="/assets/crowd/jtcs.png" alt="" />
alt="" <img v-else-if="task.testType.split(',')[0] == 'function'"
/>
<img
v-else-if="task.testType.split(',')[0] == 'function'"
style="width: 106px; object-fit: contain; height: 106px" style="width: 106px; object-fit: contain; height: 106px"
src="/assets/crowd/gncs.png" src="/assets/crowd/gncs.png" alt="" />
alt="" <img v-else-if="task.testType.split(',')[0] == 'performance'"
/>
<img
v-else-if="task.testType.split(',')[0] == 'performance'"
style="width: 106px; object-fit: contain; height: 106px" style="width: 106px; object-fit: contain; height: 106px"
src="/assets/crowd/xncs.png" src="/assets/crowd/xncs.png" alt="" />
alt="" <img v-else-if="task.testType.split(',')[0] == 'security'"
/>
<img
v-else-if="task.testType.split(',')[0] == 'security'"
style="width: 106px; object-fit: contain; height: 106px" style="width: 106px; object-fit: contain; height: 106px"
src="/assets/crowd/aqcs.png" src="/assets/crowd/aqcs.png" alt="" />
alt="" <img v-else-if="task.testType.split(',')[0] == 'reliability'"
/>
<img
v-else-if="task.testType.split(',')[0] == 'reliability'"
style="width: 106px; object-fit: contain; height: 106px" style="width: 106px; object-fit: contain; height: 106px"
src="/assets/crowd/kkxcs.png" src="/assets/crowd/kkxcs.png" alt="" />
alt="" <img v-else-if="task.testType.split(',')[0] == 'development'"
/>
<img
v-else-if="task.testType.split(',')[0] == 'development'"
style="width: 106px; object-fit: contain; height: 106px" style="width: 106px; object-fit: contain; height: 106px"
src="/assets/crowd/ycrw.png" src="/assets/crowd/ycrw.png" alt="" />
alt="" <img v-else style="width: 106px; object-fit: contain; height: 106px"
/> src="/assets/crowd/qtcs.png" alt="" />
<img
v-else
style="width: 106px; object-fit: contain; height: 106px"
src="/assets/crowd/qtcs.png"
alt=""
/>
</div> </div>
<div style="width: 980px"> <div style="width: 980px">
<div style="display: flex; justify-content: space-between" class="raise"> <div style="display: flex; justify-content: space-between" class="raise">
<p style="font-size: 18px; margin: 10px 0; font-weight: bold; color: #1a1a1a"> <p style="font-size: 18px; margin: 10px 0; font-weight: bold; color: #1a1a1a">
{{ task.projectName }} {{ task.projectName }} <levelTag :level="task.level"></levelTag>
</p> </p>
<p style="font-size: 16px; color: #e93a3a; font-weight: bold; margin: 10px 0"> <p style="font-size: 16px; color: #e93a3a; font-weight: bold; margin: 10px 0">
<span style="font-size: 13px"> </span>{{ task.price }} <span style="font-size: 13px"> </span>{{ task.price }}
@ -230,12 +183,10 @@
<p>任务工期{{ task.period }}</p> <p>任务工期{{ task.period }}</p>
<p>发布时间 {{ task.createTime.substr(0, 10) }}</p> <p>发布时间 {{ task.createTime.substr(0, 10) }}</p>
<p> <p>
共招<span style="color: #0066eb">{{ task.needPerson }}</span 共招<span style="color: #0066eb">{{ task.needPerson }}</span> / 已报名
> / 已报名
<span style="color: #0066eb">{{ <span style="color: #0066eb">{{
task.companyAppCount + task.personalAppCount task.companyAppCount + task.personalAppCount
}}</span }}</span>
>
<!-- 当前报名人数/计划招募人数<span style="color:#4485ee"> <!-- 当前报名人数/计划招募人数<span style="color:#4485ee">
{{ {{
task.companyAppCount + task.personalAppCount == 20 task.companyAppCount + task.personalAppCount == 20
@ -253,10 +204,14 @@
<!-- <div class="isBm" v-if="task.taskStatus == 0">报名中</div> <!-- <div class="isBm" v-if="task.taskStatus == 0">报名中</div>
<div class="isBmjs" v-else>报名结束</div> --> <div class="isBmjs" v-else>报名结束</div> -->
<div class="isBm" v-if="task.processStatus == 0">报名中</div> <div class="isBm" v-if="task.processStatus == 0">报名中</div>
<div class="isBm" v-else-if="task.processStatus == 1" style="background: #F0EBFD; color: #6445FD">实施中</div> <div class="isBm" v-else-if="task.processStatus == 1"
<div class="isBm" v-else-if="task.processStatus == 2" style="background: #DEF3FD; color: #1E83F9">待验收</div> style="background: #F0EBFD; color: #6445FD">实施中</div>
<div class="isBm" v-else-if="task.processStatus == 3" style="background: #fceae3; color: #fe4d40">待结算</div> <div class="isBm" v-else-if="task.processStatus == 2"
<div class="isBm" v-else-if="task.processStatus == 4" style="background: #DEFDEF; color: #12B378">已完成</div> style="background: #DEF3FD; color: #1E83F9">待验收</div>
<div class="isBm" v-else-if="task.processStatus == 3"
style="background: #fceae3; color: #fe4d40">待结算</div>
<div class="isBm" v-else-if="task.processStatus == 4"
style="background: #DEFDEF; color: #12B378">已完成</div>
</div> </div>
</div> </div>
</div> </div>
@ -278,22 +233,16 @@
</div> </div>
<div style="display: flex; justify-content: space-between; flex-wrap: wrap; align-items: center"> <div style="display: flex; justify-content: space-between; flex-wrap: wrap; align-items: center">
<div class="statictosol"> <div class="statictosol">
<img <img style="width: 68px; height: 36px; position: absolute; top: 0; left: 0"
style="width: 68px; height: 36px; position: absolute; top: 0; left: 0" src="/assets/ability/rem.png" alt="" />
src="/assets/ability/rem.png"
alt=""
/>
<div class="solimgbox"><img src="/assets/ability/cs.png" alt="" /></div> <div class="solimgbox"><img src="/assets/ability/cs.png" alt="" /></div>
<p class="solcontp">测试工程师</p> <p class="solcontp">测试工程师</p>
<!-- <p style="color:#808080;font-size:16px;margin:-5px 0 30px 0">测试工程师人才派遣</p> --> <!-- <p style="color:#808080;font-size:16px;margin:-5px 0 30px 0">测试工程师人才派遣</p> -->
</div> </div>
<div class="statictosol"> <div class="statictosol">
<img <img style="width: 68px; height: 36px; position: absolute; top: 0; left: 0"
style="width: 68px; height: 36px; position: absolute; top: 0; left: 0" src="/assets/ability/rem.png" alt="" />
src="/assets/ability/rem.png"
alt=""
/>
<div class="solimgbox"><img src="/assets/ability/java.png" alt="" /></div> <div class="solimgbox"><img src="/assets/ability/java.png" alt="" /></div>
<p class="solcontp">JAVA开发工程师</p> <p class="solcontp">JAVA开发工程师</p>
@ -354,11 +303,8 @@
</div> </div>
<div class="xiaoqibox"> <div class="xiaoqibox">
<div <div @mouseenter="xqmouseEnter(1)" :class="{ isActice: xqval == 1 }"
@mouseenter="xqmouseEnter(1)" class="xiaoqiboxitem xiaoqiboxitem1">
:class="{ isActice: xqval == 1 }"
class="xiaoqiboxitem xiaoqiboxitem1"
>
<div class="xiaoqiboxitemtop"> <div class="xiaoqiboxitemtop">
<img class="xiaoqiboxitemtopsmall" src="/assets/xq/img_1.png" alt="" /> <img class="xiaoqiboxitemtopsmall" src="/assets/xq/img_1.png" alt="" />
</div> </div>
@ -374,11 +320,8 @@
</div> </div>
<img class="itemlogo" src="/assets/xq/logo_1.png" /> <img class="itemlogo" src="/assets/xq/logo_1.png" />
</div> </div>
<div <div @mouseenter="xqmouseEnter(2)" :class="{ isActice: xqval == 2 }"
@mouseenter="xqmouseEnter(2)" class="xiaoqiboxitem xiaoqiboxitem2">
:class="{ isActice: xqval == 2 }"
class="xiaoqiboxitem xiaoqiboxitem2"
>
<div class="xiaoqiboxitemtop"> <div class="xiaoqiboxitemtop">
<img class="xiaoqiboxitemtopsmall" src="/assets/xq/img_2.png" alt="" /> <img class="xiaoqiboxitemtopsmall" src="/assets/xq/img_2.png" alt="" />
</div> </div>
@ -394,11 +337,8 @@
</div> </div>
<img class="itemlogo" src="/assets/xq/logo_2.png" /> <img class="itemlogo" src="/assets/xq/logo_2.png" />
</div> </div>
<div <div @mouseenter="xqmouseEnter(3)" :class="{ isActice: xqval == 3 }"
@mouseenter="xqmouseEnter(3)" class="xiaoqiboxitem xiaoqiboxitem3">
:class="{ isActice: xqval == 3 }"
class="xiaoqiboxitem xiaoqiboxitem3"
>
<div class="xiaoqiboxitemtop"> <div class="xiaoqiboxitemtop">
<img class="xiaoqiboxitemtopsmall" src="/assets/xq/img_3.png" alt="" /> <img class="xiaoqiboxitemtopsmall" src="/assets/xq/img_3.png" alt="" />
</div> </div>
@ -414,11 +354,8 @@
</div> </div>
<img class="itemlogo" src="/assets/xq/logo_3.png" /> <img class="itemlogo" src="/assets/xq/logo_3.png" />
</div> </div>
<div <div @mouseenter="xqmouseEnter(4)" :class="{ isActice: xqval == 4 }"
@mouseenter="xqmouseEnter(4)" class="xiaoqiboxitem xiaoqiboxitem4">
:class="{ isActice: xqval == 4 }"
class="xiaoqiboxitem xiaoqiboxitem4"
>
<div class="xiaoqiboxitemtop"> <div class="xiaoqiboxitemtop">
<img class="xiaoqiboxitemtopsmall" src="/assets/xq/img_4.png" alt="" /> <img class="xiaoqiboxitemtopsmall" src="/assets/xq/img_4.png" alt="" />
</div> </div>
@ -518,17 +455,14 @@
</div> </div>
</div> </div>
<!-- 注册 --> <!-- 注册 -->
<div <div class="baschool" style="
class="baschool"
style="
background-image: url('/assets/homepage/tuve.png'); background-image: url('/assets/homepage/tuve.png');
height: 220px; height: 220px;
margin-top: 60px; margin-top: 60px;
text-align: center; text-align: center;
color: #ffffff; color: #ffffff;
padding-bottom: 0px; padding-bottom: 0px;
" ">
>
<p style="font-size: 28px; font-weight: bold; margin-bottom: 10px">选软件测试就上关键科技云平台</p> <p style="font-size: 28px; font-weight: bold; margin-bottom: 10px">选软件测试就上关键科技云平台</p>
<p style="font-size: 15px">为众多企业提供软件测试服务立即注册免费试用体验软件测试服务</p> <p style="font-size: 15px">为众多企业提供软件测试服务立即注册免费试用体验软件测试服务</p>
<div class="facj" style="margin: 30px auto; width: 100px"> <div class="facj" style="margin: 30px auto; width: 100px">
@ -540,6 +474,7 @@
<script> <script>
import store from '@/store' import store from '@/store'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import levelTag from '@/components/levelTag/index.vue'
import { listTools } from '@/api/toolInfo/market' // import { listTools } from '@/api/toolInfo/market' //
import { import {
crowdlist, crowdlist,
@ -552,7 +487,9 @@ import mixin from '@/mixin/index.js'
export default { export default {
mixins: [mixin], mixins: [mixin],
components: {
levelTag
},
data() { data() {
return { return {
bannerHeight: '500', bannerHeight: '500',
@ -744,21 +681,26 @@ export default {
top: 52%; top: 52%;
left: 30%; left: 30%;
} }
.wheelplanting { .wheelplanting {
z-index: 0; z-index: 0;
position: relative; position: relative;
} }
.el-carousel--horizontal { .el-carousel--horizontal {
overflow: hidden; overflow: hidden;
} }
.wheelplanting >>> .el-carousel__indicators--horizontal {
.wheelplanting>>>.el-carousel__indicators--horizontal {
bottom: 60px; bottom: 60px;
} }
.wheelplanting >>> .el-carousel__button {
.wheelplanting>>>.el-carousel__button {
width: 44px; width: 44px;
height: 5px; height: 5px;
border-radius: 2px 2px 2px 3px; border-radius: 2px 2px 2px 3px;
} }
.bluebg { .bluebg {
/* background: linear-gradient(45deg, #2978EE, #0066EB); */ /* background: linear-gradient(45deg, #2978EE, #0066EB); */
width: 280px; width: 280px;
@ -772,9 +714,11 @@ export default {
justify-content: space-around; justify-content: space-around;
/* line-height: 150px; */ /* line-height: 150px; */
} }
.el-divider--horizontal { .el-divider--horizontal {
margin: 15px 0; margin: 15px 0;
} }
.whitebg { .whitebg {
background: #ffffff; background: #ffffff;
width: 280px; width: 280px;
@ -790,62 +734,83 @@ export default {
cursor: pointer; cursor: pointer;
font-size: 14px; font-size: 14px;
} }
.animove { .animove {
position: relative; position: relative;
animation-name: mymove; animation-name: mymove;
animation-duration: 1s; animation-duration: 1s;
-webkit-animation-name: mymove; -webkit-animation-name: mymove;
-webkit-animation-duration: 1s; /* Safari 和 Chrome */ -webkit-animation-duration: 1s;
/* Safari 和 Chrome */
} }
@keyframes mymove { @keyframes mymove {
from { from {
left: -300px; left: -300px;
} }
to { to {
left: 0px; left: 0px;
} }
} }
@-webkit-keyframes mymove /* Safari and Chrome */ {
@-webkit-keyframes mymove
/* Safari and Chrome */
{
from { from {
left: -300px; left: -300px;
} }
to { to {
left: 0px; left: 0px;
} }
} }
.testtools { .testtools {
position: relative; position: relative;
animation-name: movetop; animation-name: movetop;
animation-duration: 2s; animation-duration: 2s;
-webkit-animation-name: movetop; -webkit-animation-name: movetop;
-webkit-animation-duration: 2s; /* Safari 和 Chrome */ -webkit-animation-duration: 2s;
/* Safari 和 Chrome */
} }
@keyframes movetop { @keyframes movetop {
from { from {
top: 1000px; top: 1000px;
} }
to { to {
top: 0px; top: 0px;
} }
} }
@-webkit-keyframes movetop /* Safari and Chrome */ {
@-webkit-keyframes movetop
/* Safari and Chrome */
{
from { from {
top: 1000px; top: 1000px;
} }
to { to {
top: 0px; top: 0px;
} }
} }
.newbiwfbg { .newbiwfbg {
height: 255px; height: 255px;
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
} }
.newbiwfbg2 { .newbiwfbg2 {
height: 255px; height: 255px;
display: flex; display: flex;
align-items: flex-start; align-items: flex-start;
} }
.biwfbg { .biwfbg {
width: 320px; width: 320px;
height: 175px; height: 175px;
@ -858,10 +823,12 @@ export default {
transition: all 0.2s linear; transition: all 0.2s linear;
overflow: hidden; overflow: hidden;
} }
.bottoncon { .bottoncon {
opacity: 1; opacity: 1;
transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out;
} }
.arrow { .arrow {
width: 80px; width: 80px;
height: 30px; height: 30px;
@ -879,15 +846,17 @@ export default {
/* transform: translateY(-20px); */ /* transform: translateY(-20px); */
height: 200px; height: 200px;
} }
.biwfbg:hover .bottoncon { .biwfbg:hover .bottoncon {
opacity: 0; opacity: 0;
} }
.biwfbg:hover .arrow { .biwfbg:hover .arrow {
opacity: 1; opacity: 1;
transform: translateY(-20px); transform: translateY(-20px);
} }
.whitebg >>> .el-button { .whitebg>>>.el-button {
margin-top: 20px; margin-top: 20px;
/* margin-left:57px; */ /* margin-left:57px; */
width: 140px; width: 140px;
@ -899,6 +868,7 @@ export default {
border-radius: 6px; border-radius: 6px;
/* line-height:40px; */ /* line-height:40px; */
} }
.productbox { .productbox {
/* width: 1200px; */ /* width: 1200px; */
/* height: 110px; */ /* height: 110px; */
@ -911,13 +881,16 @@ export default {
/* box-shadow: 0px 5px 26px 2px rgba(39, 86, 143, 0.08); */ /* box-shadow: 0px 5px 26px 2px rgba(39, 86, 143, 0.08); */
border-radius: 6px; border-radius: 6px;
} }
.raise p:nth-child(1) { .raise p:nth-child(1) {
font-weight: bold; font-weight: bold;
color: #1a1a1a; color: #1a1a1a;
} }
.productbox:hover .raise p:nth-child(1) { .productbox:hover .raise p:nth-child(1) {
color: #0066eb; color: #0066eb;
} }
/* .productbox:hover { /* .productbox:hover {
transform: scale(1.03); transform: scale(1.03);
transition: 1s; transition: 1s;
@ -926,29 +899,36 @@ export default {
.taskboxTransform { .taskboxTransform {
transition: all 0.2s linear; transition: all 0.2s linear;
} }
.taskboxTransform:hover { .taskboxTransform:hover {
/* transform: translate3d(0, 0, 2px); */ /* transform: translate3d(0, 0, 2px); */
box-shadow: 0px 5px 26px 2px rgba(39, 86, 143, 0.08); box-shadow: 0px 5px 26px 2px rgba(39, 86, 143, 0.08);
transform: scale(1.03); transform: scale(1.03);
} }
.rapidhatching { .rapidhatching {
cursor: pointer; cursor: pointer;
color: #1a1a1a; color: #1a1a1a;
font-size: 15px; font-size: 15px;
} }
.rapidhatching:hover p { .rapidhatching:hover p {
color: #0066eb; color: #0066eb;
} }
.rapidhatching img{
.rapidhatching img {
width: 125px; width: 125px;
height: 170px; height: 170px;
} }
.cetype { .cetype {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
flex-wrap: wrap; flex-wrap: wrap;
} }
.cetype p, .cetype div {
.cetype p,
.cetype div {
width: 200px; width: 200px;
font-size: 14px; font-size: 14px;
margin: 10px 0; margin: 10px 0;
@ -958,22 +938,27 @@ export default {
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.cetype p:nth-child(1), .cetype p:nth-child(1),
.cetype p:nth-child(5) { .cetype p:nth-child(5) {
width: 260px; width: 260px;
} }
.cetype p:nth-child(4), .cetype p:nth-child(4),
.cetype p:nth-child(8) { .cetype p:nth-child(8) {
width: 230px; width: 230px;
} }
.cetype div:nth-child(1), .cetype div:nth-child(1),
.cetype div:nth-child(5) { .cetype div:nth-child(5) {
width: 260px; width: 260px;
} }
.cetype div:nth-child(4), .cetype div:nth-child(4),
.cetype div:nth-child(8) { .cetype div:nth-child(8) {
width: 230px; width: 230px;
} }
.cetype .isBm { .cetype .isBm {
width: 56px !important; width: 56px !important;
height: 24px; height: 24px;
@ -985,6 +970,7 @@ export default {
text-align: center; text-align: center;
margin-top: 0px; margin-top: 0px;
} }
.cetype .isBmjs { .cetype .isBmjs {
width: 69px !important; width: 69px !important;
height: 24px; height: 24px;
@ -997,30 +983,35 @@ export default {
margin-top: 0px; margin-top: 0px;
} }
.productbox >>> .el-divider--horizontal { .productbox>>>.el-divider--horizontal {
margin: 8px; margin: 8px;
} }
.traintext { .traintext {
margin-top: 70px; margin-top: 70px;
display: inline-block; display: inline-block;
cursor: pointer; cursor: pointer;
} }
.traintext p:nth-child(1) { .traintext p:nth-child(1) {
font-size: 19px; font-size: 19px;
font-weight: 400; font-weight: 400;
color: #ffffff; color: #ffffff;
} }
.traintext p:nth-child(2) { .traintext p:nth-child(2) {
font-size: 68px; font-size: 68px;
font-weight: bold; font-weight: bold;
color: #ffffff; color: #ffffff;
margin: 25px 0; margin: 25px 0;
} }
.traintext p:nth-child(3) { .traintext p:nth-child(3) {
font-size: 19px; font-size: 19px;
font-weight: 400; font-weight: 400;
color: #ffffff; color: #ffffff;
} }
.opennow { .opennow {
width: 186px; width: 186px;
height: 48px; height: 48px;
@ -1033,15 +1024,18 @@ export default {
line-height: 48px; line-height: 48px;
text-align: center; text-align: center;
} }
.traintext img { .traintext img {
margin-top: -300px; margin-top: -300px;
margin-bottom: -5px; margin-bottom: -5px;
} }
.cooppic { .cooppic {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
flex-wrap: wrap; flex-wrap: wrap;
} }
.cooppic img { .cooppic img {
margin: 0 20px 30px 0; margin: 0 20px 30px 0;
opacity: 0.5; opacity: 0.5;
@ -1052,9 +1046,11 @@ export default {
/* transition: all 0.25s ease 0s; /* transition: all 0.25s ease 0s;
transform: translate3d(-1942px, 0px, 0px); */ transform: translate3d(-1942px, 0px, 0px); */
} }
.cooppic img:hover { .cooppic img:hover {
opacity: 1; opacity: 1;
} }
.windin { .windin {
/* width:250px; */ /* width:250px; */
/* height:330px; */ /* height:330px; */
@ -1067,75 +1063,92 @@ export default {
display: inline-block; display: inline-block;
cursor: pointer; cursor: pointer;
} }
.windin :nth-child(2) { .windin :nth-child(2) {
font-size: 16px; font-size: 16px;
font-weight: bold; font-weight: bold;
color: #1a1a1a; color: #1a1a1a;
} }
.windin:hover :nth-child(2) { .windin:hover :nth-child(2) {
color: #0066eb; color: #0066eb;
} }
.windin :nth-child(n + 3) { .windin :nth-child(n + 3) {
font-size: 14px; font-size: 14px;
} }
.windin >>> .el-divider--horizontal {
.windin>>>.el-divider--horizontal {
width: 32px; width: 32px;
height: 2px; height: 2px;
background: #0066eb; background: #0066eb;
border-radius: 1px; border-radius: 1px;
} }
.wingool >>> .el-carousel__container {
.wingool>>>.el-carousel__container {
width: 1200px; width: 1200px;
margin-left: 50px; margin-left: 50px;
} }
.wingool >>> .el-carousel__item--card {
.wingool>>>.el-carousel__item--card {
width: 280px; width: 280px;
/* height:400px; */ /* height:400px; */
} }
.wingool >>> .el-carousel__item,
.wingool>>>.el-carousel__item,
.el-carousel__mask { .el-carousel__mask {
left: 100px; left: 100px;
} }
.wingool >>> .el-carousel__button {
.wingool>>>.el-carousel__button {
border-radius: 50%; border-radius: 50%;
width: 12px; width: 12px;
height: 12px; height: 12px;
background: #cccccc; background: #cccccc;
} }
.wingool >>> .el-carousel__indicators--outside button {
.wingool>>>.el-carousel__indicators--outside button {
opacity: 1; opacity: 1;
} }
.wingool >>> .el-carousel__indicator.is-active button {
.wingool>>>.el-carousel__indicator.is-active button {
background: #0066eb; background: #0066eb;
} }
.wingool >>> .el-carousel__indicators--outside {
.wingool>>>.el-carousel__indicators--outside {
margin-bottom: 30px; margin-bottom: 30px;
} }
.software { .software {
display: flex; display: flex;
align-items: center; align-items: center;
color: #666666; color: #666666;
/* margin: 0 20px; */ /* margin: 0 20px; */
} }
.productboxptibox { .productboxptibox {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
} }
.productboxpti { .productboxpti {
font-weight: 800; font-weight: 800;
font-size: 18px; font-size: 18px;
color: #1a1a1a; color: #1a1a1a;
margin-bottom: 8px; margin-bottom: 8px;
} }
.productboxpinfo { .productboxpinfo {
font-weight: 500; font-weight: 500;
font-size: 16px; font-size: 16px;
color: #666666; color: #666666;
} }
.software img { .software img {
margin-right: 20px; margin-right: 20px;
} }
.titlesty { .titlesty {
margin: 50px 0; margin: 50px 0;
display: flex; display: flex;
@ -1143,15 +1156,18 @@ export default {
justify-content: center; justify-content: center;
cursor: pointer; cursor: pointer;
} }
.titlesty img{
.titlesty img {
width: 120px; width: 120px;
} }
.titlesty p { .titlesty p {
font-size: 32px; font-size: 32px;
color: #1a1a1a; color: #1a1a1a;
font-weight: bold; font-weight: bold;
margin: 0 15px; margin: 0 15px;
} }
.bgguk { .bgguk {
height: 623px; height: 623px;
width: 250px; width: 250px;
@ -1159,14 +1175,17 @@ export default {
background-size: 100%; background-size: 100%;
background-repeat: no-repeat; background-repeat: no-repeat;
} }
.bggukright { .bggukright {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
/* justify-content: space-between; */ /* justify-content: space-between; */
} }
.marginbotta { .marginbotta {
margin-bottom: 9px; margin-bottom: 9px;
} }
.facj { .facj {
display: flex; display: flex;
width: 220px; width: 220px;
@ -1174,6 +1193,7 @@ export default {
justify-content: center; justify-content: center;
cursor: pointer; cursor: pointer;
} }
.facj div { .facj div {
width: 100px; width: 100px;
height: 34px; height: 34px;
@ -1184,6 +1204,7 @@ export default {
line-height: 34px; line-height: 34px;
text-align: center; text-align: center;
} }
.statictosol { .statictosol {
position: relative; position: relative;
width: 280px; width: 280px;
@ -1197,6 +1218,7 @@ export default {
margin-bottom: 24px; margin-bottom: 24px;
transition: all 0.2s linear; transition: all 0.2s linear;
} }
.statictosol:hover { .statictosol:hover {
transform: translateY(-15px); transform: translateY(-15px);
} }
@ -1207,6 +1229,7 @@ export default {
align-items: center; align-items: center;
justify-content: center; justify-content: center;
} }
.solcontp { .solcontp {
width: 100%; width: 100%;
height: 87px; height: 87px;
@ -1219,10 +1242,12 @@ export default {
font-size: 18px; font-size: 18px;
color: #1a1a1a; color: #1a1a1a;
} }
.statictosol img { .statictosol img {
width: 90px; width: 90px;
height: 90px; height: 90px;
} }
.baschool { .baschool {
margin: 0 auto; margin: 0 auto;
height: 625px; height: 625px;
@ -1232,6 +1257,7 @@ export default {
background-repeat: no-repeat; background-repeat: no-repeat;
padding: 1px 0 30px 0; padding: 1px 0 30px 0;
} }
.xake { .xake {
width: 524px; width: 524px;
height: 400px; height: 400px;
@ -1239,6 +1265,7 @@ export default {
background-size: 100%; background-size: 100%;
background-repeat: no-repeat; background-repeat: no-repeat;
} }
.tobgim { .tobgim {
width: 206px; width: 206px;
height: 266px; height: 266px;
@ -1247,6 +1274,7 @@ export default {
background-repeat: no-repeat; background-repeat: no-repeat;
padding-top: 30px; padding-top: 30px;
} }
.uanb { .uanb {
width: 480px !important; width: 480px !important;
height: 280px; height: 280px;
@ -1257,6 +1285,7 @@ export default {
box-shadow: 0px 4px 34px 6px rgba(14, 97, 205, 0.1); box-shadow: 0px 4px 34px 6px rgba(14, 97, 205, 0.1);
box-sizing: border-box; box-sizing: border-box;
} }
.fasjs { .fasjs {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@ -1265,15 +1294,18 @@ export default {
width: 693px; width: 693px;
/* margin-left: 20px; */ /* margin-left: 20px; */
} }
.fasjs img { .fasjs img {
width: 221px; width: 221px;
height: 63px; height: 63px;
transition: all 0.2s linear; transition: all 0.2s linear;
box-shadow: 0px 4px 34px 6px rgba(14, 97, 205, 0.1); box-shadow: 0px 4px 34px 6px rgba(14, 97, 205, 0.1);
} }
.fasjs img:hover { .fasjs img:hover {
transform: scale(1.05); transform: scale(1.05);
} }
/* 手风琴 */ /* 手风琴 */
.xiaoqibox { .xiaoqibox {
width: 100%; width: 100%;
@ -1282,27 +1314,35 @@ export default {
height: 400px; height: 400px;
overflow: hidden; overflow: hidden;
} }
.xiaoqiboxitem1 { .xiaoqiboxitem1 {
background: url('/assets/xq/big_1.png') 100% 100% no-repeat; background: url('/assets/xq/big_1.png') 100% 100% no-repeat;
} }
.xiaoqiboxitem1 .xiaoqiboxitembottom { .xiaoqiboxitem1 .xiaoqiboxitembottom {
background: url('/assets/xq/small_1.png') 100% 100% no-repeat; background: url('/assets/xq/small_1.png') 100% 100% no-repeat;
} }
.xiaoqiboxitem2 { .xiaoqiboxitem2 {
background: url('/assets/xq/big_2.png') 100% 100% no-repeat; background: url('/assets/xq/big_2.png') 100% 100% no-repeat;
} }
.xiaoqiboxitem2 .xiaoqiboxitembottom { .xiaoqiboxitem2 .xiaoqiboxitembottom {
background: url('/assets/xq/small_2.png') 100% 100% no-repeat; background: url('/assets/xq/small_2.png') 100% 100% no-repeat;
} }
.xiaoqiboxitem3 { .xiaoqiboxitem3 {
background: url('/assets/xq/big_3.png') 100% 100% no-repeat; background: url('/assets/xq/big_3.png') 100% 100% no-repeat;
} }
.xiaoqiboxitem3 .xiaoqiboxitembottom { .xiaoqiboxitem3 .xiaoqiboxitembottom {
background: url('/assets/xq/small_3.png') 100% 100% no-repeat; background: url('/assets/xq/small_3.png') 100% 100% no-repeat;
} }
.xiaoqiboxitem4 { .xiaoqiboxitem4 {
background: url('/assets/xq/big_4.png') 100% 100% no-repeat; background: url('/assets/xq/big_4.png') 100% 100% no-repeat;
} }
.xiaoqiboxitem4 .xiaoqiboxitembottom { .xiaoqiboxitem4 .xiaoqiboxitembottom {
background: url('/assets/xq/small_4.png') 100% 100% no-repeat; background: url('/assets/xq/small_4.png') 100% 100% no-repeat;
} }
@ -1317,15 +1357,18 @@ export default {
position: relative; position: relative;
border-radius: 5px; border-radius: 5px;
} }
.xiaoqiboxitemtop { .xiaoqiboxitemtop {
width: 100%; width: 100%;
height: 140px; height: 140px;
} }
.xiaoqiboxitemtopsmall { .xiaoqiboxitemtopsmall {
width: 100%; width: 100%;
height: 100%; height: 100%;
transition: all 0.2s linear; transition: all 0.2s linear;
} }
.xiaoqiboxitembottom { .xiaoqiboxitembottom {
flex: 1; flex: 1;
width: 100%; width: 100%;
@ -1336,17 +1379,20 @@ export default {
flex-direction: column; flex-direction: column;
justify-content: space-between; justify-content: space-between;
} }
.textcontenttitle { .textcontenttitle {
font-weight: bold; font-weight: bold;
font-size: 19px; font-size: 19px;
color: #ffffff; color: #ffffff;
margin-bottom: 24px; margin-bottom: 24px;
} }
.textcontentcon { .textcontentcon {
font-weight: 500; font-weight: 500;
font-size: 14px; font-size: 14px;
color: #ededed; color: #ededed;
} }
.itemlogo { .itemlogo {
position: absolute; position: absolute;
bottom: 30px; bottom: 30px;
@ -1355,11 +1401,13 @@ export default {
height: 34px; height: 34px;
transition: all 0.2s linear; transition: all 0.2s linear;
} }
.textcontentbtn { .textcontentbtn {
width: 100%; width: 100%;
display: flex; display: flex;
opacity: 0; opacity: 0;
} }
.textcontentbtnleft { .textcontentbtnleft {
width: 150px; width: 150px;
height: 34px; height: 34px;
@ -1371,6 +1419,7 @@ export default {
margin-right: 15px; margin-right: 15px;
cursor: pointer; cursor: pointer;
} }
.textcontentbtnright { .textcontentbtnright {
width: 150px; width: 150px;
height: 34px; height: 34px;
@ -1381,47 +1430,60 @@ export default {
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;
} }
.isActice { .isActice {
transition: all 0.2s linear; transition: all 0.2s linear;
} }
.isActice { .isActice {
width: 524px; width: 524px;
} }
.isActice .xiaoqiboxitemtop { .isActice .xiaoqiboxitemtop {
height: 102px; height: 102px;
border: 1px solid rgba(242, 242, 242, 0.3); border: 1px solid rgba(242, 242, 242, 0.3);
} }
.isActice .xiaoqiboxitemtopsmall { .isActice .xiaoqiboxitemtopsmall {
opacity: 0; opacity: 0;
} }
.isActice .xiaoqiboxitembottom { .isActice .xiaoqiboxitembottom {
background: unset; background: unset;
} }
.isActice .itemlogo { .isActice .itemlogo {
left: 30px; left: 30px;
top: 30px; top: 30px;
width: 228px; width: 228px;
height: 46px; height: 46px;
} }
.isActice .textcontentbtn { .isActice .textcontentbtn {
opacity: 1; opacity: 1;
} }
.isActice .textcontenttitle { .isActice .textcontenttitle {
font-size: 22px; font-size: 22px;
} }
.isActice .textcontentcon { .isActice .textcontentcon {
font-size: 15px; font-size: 15px;
} }
/* 按钮变色 */ /* 按钮变色 */
.bluebtn:hover { .bluebtn:hover {
background: #2a83f7 !important; background: #2a83f7 !important;
} }
.whitebtn:hover { .whitebtn:hover {
background: #ecf5ff !important; background: #ecf5ff !important;
} }
.textcontentbtnleft:hover { .textcontentbtnleft:hover {
background: #2a83f7 !important; background: #2a83f7 !important;
} }
.textcontentbtnright:hover { .textcontentbtnright:hover {
background: #ecf5ff !important; background: #ecf5ff !important;
} }

@ -0,0 +1,177 @@
<template>
<div>
<div class="model_title">
<div class="model_title_top">
<img src="/assets/homepage/rihhj.png" alt="" />
<p>有偿资讯专区</p>
<img src="/assets/homepage/lesftt.png" alt="" />
</div>
<div class="model_title_text">注册会员购买资讯</div>
</div>
<div class="moedel1_content payRequestWrap">
<div class="payRequest">
<div v-for="(item, index) in PAYREQUEST" :key="index"
:class="((index % 2) != 0) ? 'payRequestItem payRequestItemOdd' : 'payRequestItem'">
<div>{{ item }}</div>
<div class="payReqBtn" @click="payForClick">购买资讯</div>
</div>
</div>
</div>
<!-- <payRequestDialog ref="payRequestDialog"></payRequestDialog> -->
<div class="maskdialogS" style="text-align: center" v-if="payReqDialog">
<div class="maskdialogSClose" @click="payReqDialog = false">×</div>
<div style="height: 60px">
</div>
<img width="150px" src="/assets/train/whiteQrCode.png" alt="">
<div style="text-align: center;margin: 10px 0;">请使用支付宝或微信扫描付款</div>
</div>
</div>
</template>
<script>
import { PAYREQUEST } from '@/const/text/payRequest';
export default {
data() {
return {
PAYREQUEST: PAYREQUEST,
payReqDialog: false
}
},
methods: {
payForClick() {
// this.$refs.payRequestDialog.dialogVisible = true
this.payReqDialog = true
},
}
}
</script>
<style lang="scss" scoped>
.model_title {
margin-top: 50px;
margin-bottom: 50px;
display: flex;
flex-direction: column;
align-items: center;
}
.model_title_top {
display: flex;
justify-content: center;
align-items: center;
}
.model_title_top p {
font-weight: bold !important;
font-size: 32px !important;
color: #1a1a1a;
margin: 0 15px;
}
.model_title_top2 {
display: flex;
justify-content: center;
align-items: center;
margin: 15px 0;
}
.model_title_top2 p {
font-weight: bold !important;
font-size: 25px !important;
color: #1a1a1a;
margin: 0 13px 0 15px;
}
.model_title_img {
width: 526px;
height: 28px;
}
.model_title_text {
font-weight: 500;
font-size: 16px;
color: #595959;
margin-top: 20px;
}
.moedel1_content {
margin: 0 auto;
width: 100%;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
align-content: space-between;
height: 310px;
box-sizing: border-box;
}
.payRequestWrap {
margin-bottom: 50px;
width: 1200px;
height: 381px;
padding: 25px;
background: #FFFFFF;
box-shadow: 0px 4px 34px 6px rgba(14, 97, 205, 0.1);
border-radius: 6px;
}
.moedel1_content .payRequest {
width: 100%;
/* // height: 381px; */
border-radius: 4px;
border: 1px solid #EDEDED;
display: flex;
flex-direction: column;
justify-content: space-around;
}
.payRequestItem {
font-weight: 500;
font-size: 15px;
color: #1A1A1A;
line-height: 60px;
border-radius: 4px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 20px;
height: 66px;
}
.payReqBtn {
width: 113px;
height: 36px;
line-height: 36px;
background: linear-gradient(90deg, #5EA6FD, #1A81F9);
border-radius: 4px;
text-align: center;
font-family: PingFang SC;
font-size: 15px;
color: #FFFFFF;
cursor: pointer;
}
.maskdialogS {
width: 592px;
/* height: 503px; */
background: #ffffff;
box-shadow: 0px 4px 21px 4px rgba(19, 106, 189, 0.15);
z-index: 2000;
position: fixed;
top: 45%;
left: 50%;
transform: translate(-50%, -50%);
padding-bottom: 10px;
}
.maskdialogSClose {
position: absolute;
top: 15px;
right: 30px;
font-weight: 400;
font-size: 25px;
color: #858994;
cursor: pointer;
}
</style>

@ -13,18 +13,18 @@ export default {
return { return {
menulist: [ menulist: [
{ title: '首页', link: '/', highlight: false, isline: true }, { title: '首页', link: '/', highlight: false, isline: true },
{ title: '有偿资讯', link: '/information', highlight: false, isline: true },
{ title: '工具服务', link: '/market', highlight: false, isline: false }, { title: '工具服务', link: '/market', highlight: false, isline: false },
{ title: '众包服务', link: '/crowdsourcing', highlight: false, isline: true }, { title: '众包服务', link: '/crowdsourcing', highlight: false, isline: true },
{ title: '人才服务', link: '/ability', highlight: false, isline: true }, { title: '人才服务', link: '/ability', highlight: false, isline: true },
{ title: '培训服务', link: '/college', highlight: false, isline: true }, { title: '公司服务', link: '/college', highlight: false, isline: true },
{ title: '关于我们', link: '/about', highlight: false, isline: true }, { title: '关于我们', link: '/about', highlight: false, isline: true },
], ],
} }
}, },
components: { pheader: commonheader, pfooter: commonfooter }, components: { pheader: commonheader, pfooter: commonfooter },
mounted() {}, mounted() { },
methods: {}, methods: {},
} }
</script> </script>
<style scoped> <style scoped></style>
</style>

@ -0,0 +1,32 @@
<template>
<el-dialog class="payDialog" title="" v-if="dialogVisible" :visible.sync="dialogVisible" width="width">
<div style="text-align: center;">
<img src="" alt="">
<div>请使用支付宝或微信扫描付款</div>
</div>
<!-- <div slot="footer">
<el-button @click="dialogVisible = false"> </el-button>
<el-button type="primary" @click="dialogVisible = false"> </el-button>
</div> -->
</el-dialog>
</template>
<script>
export default {
data() {
return {
dialogVisible: false
}
},
methods: {
}
}
</script>
<style>
/* .payDialog {
width: 892px;
margin: 0 auto;
} */
</style>

@ -34,6 +34,7 @@
<!-- <img src="/assets/newtrain/peixun2.png" class="bannertop" alt="" /> --> <!-- <img src="/assets/newtrain/peixun2.png" class="bannertop" alt="" /> -->
<!-- 模块1-软件可靠性 --> <!-- 模块1-软件可靠性 -->
<div class="model1 container"> <div class="model1 container">
<div class="model_title"> <div class="model_title">
<div class="model_title_top"> <div class="model_title_top">
<img src="/assets/homepage/rihhj.png" alt="" /> <img src="/assets/homepage/rihhj.png" alt="" />
@ -479,9 +480,13 @@ import {
getTeacherForm getTeacherForm
} from '@/api/train/index.js' } from '@/api/train/index.js'
import { mapGetters, mapState } from 'vuex' import { mapGetters, mapState } from 'vuex'
import { getCodeUserLogin } from '@/api/system/login' import { getCodeUserLogin } from '@/api/system/login'
import index from '@xkeshi/vue-qrcode';
// import payRequestDialog from './payRequestDialog.vue';
export default { export default {
components: {
// payRequestDialog
},
data() { data() {
// //
var validateId = (rule, value, callback) => { var validateId = (rule, value, callback) => {
@ -521,6 +526,7 @@ export default {
timerScroll: null, timerScroll: null,
activeVal: 0, activeVal: 0,
calltext: '', calltext: '',
payReqDialog: false,
timetext: '', timetext: '',
inpDisable: false, inpDisable: false,
teacherShow: true, teacherShow: true,
@ -959,6 +965,8 @@ export default {
goteacher() { goteacher() {
this.$router.push('/college/teacherDetail') this.$router.push('/college/teacherDetail')
}, },
/**付费咨询弹窗 */
async teacherTrainShow() { async teacherTrainShow() {
const res = await getTeacherForm() const res = await getTeacherForm()
if (res.msg === 'success') { if (res.msg === 'success') {
@ -1286,7 +1294,7 @@ export default {
trainClassId: this.classInfo.classId, trainClassId: this.classInfo.classId,
classType: this.classInfo.classType, classType: this.classInfo.classType,
userId: this.userId, userId: this.userId,
sex:this.formjj.sex sex: this.formjj.sex
} }
console.log(data) console.log(data)
await postBaomingNoToken(data).then((res) => { await postBaomingNoToken(data).then((res) => {
@ -1528,8 +1536,9 @@ export default {
.rowboxi { .rowboxi {
display: flex; display: flex;
align-items: center; align-items: center;
.el-select{
width:100% .el-select {
width: 100%
} }
} }
@ -1623,6 +1632,44 @@ export default {
box-sizing: border-box; box-sizing: border-box;
} }
.payRequestWrap {
width: 1200px;
height: 381px;
padding: 25px;
background: #FFFFFF;
box-shadow: 0px 4px 34px 6px rgba(14, 97, 205, 0.1);
border-radius: 6px;
}
.moedel1_content .payRequest {
width: 100%;
// height: 381px;
border-radius: 4px;
border: 1px solid #EDEDED;
display: flex;
flex-direction: column;
justify-content: space-around;
}
.payRequestItem {
font-weight: 500;
font-size: 15px;
color: #1A1A1A;
line-height: 60px;
border-radius: 4px;
display: flex;
justify-content: space-between;
align-items: center;
padding: 0 20px;
height: 66px;
}
.payRequestItemOdd {
background-color: #F3F5FB;
}
.moedel1_contentitem { .moedel1_contentitem {
width: 280px; width: 280px;
height: 280px; height: 280px;

@ -16,13 +16,13 @@
<div class="courseTime"> <div class="courseTime">
<div>上课时间: {{ course.courseTime }}</div> <div>上课时间: {{ course.courseTime }}</div>
<div class="sourceWrap" v-show="course.content"> <div class="sourceWrap">
<div class="sourceWrap" v-if="course.attachments.length"> <div class="sourceWrap" v-if="course.attachments.length">
<div v-for="(item, index) in course.attachments" :key="index"> <div v-for="(item, index) in course.attachments" :key="index">
<div @click="download(item)">{{ item.fileName }}</div> <div @click="download(item)">{{ item.fileName }}</div>
</div> </div>
</div> </div>
<div @click="homeWork(course)">查看课后作业</div> <div @click="homeWork(course)" v-show="course.homework">查看课后作业</div>
</div> </div>
</div> </div>
</div> </div>
@ -173,7 +173,7 @@ export default {
this.homeWorkVisible = true this.homeWorkVisible = true
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.myQuillEditor.quill.enable(false) this.$refs.myQuillEditor.quill.enable(false)
this.editContent = course.content this.editContent = course.homework
}) })
}, },
download(params) { download(params) {

@ -8,7 +8,8 @@
<div class="courseTime">授课内容{{ courseCon.courseContent }}</div> <div class="courseTime">授课内容{{ courseCon.courseContent }}</div>
<div class="onLineBtnCoup"> <div class="onLineBtnCoup">
<div v-if="startLeran" class="payLearn" type="primary" @click="toLearn">开始学习</div> <div v-if="startLeran" class="payLearn" type="primary" @click="toLearn">开始学习</div>
<div v-if="!startLeran" @click="toPay" class="payLearn" type="primary">付费学习 {{ courseCon.amount }}</div> <div v-if="!startLeran" @click="toPay" class="payLearn" type="primary">付费学习 {{
courseCon.amount }}</div>
<div v-if="!startLeran" @click="toInpWord" class="inpPass" type="text">输入口令学习</div> <div v-if="!startLeran" @click="toInpWord" class="inpPass" type="text">输入口令学习</div>
</div> </div>
<el-dialog :title="title" :visible.sync="dialogVisible" width="450px" class="onlineDialog" @close="closed"> <el-dialog :title="title" :visible.sync="dialogVisible" width="450px" class="onlineDialog" @close="closed">
@ -137,6 +138,7 @@ export default {
this.orderSearch = setInterval(() => { this.orderSearch = setInterval(() => {
searchOrderStatus({ reqsn: res.data.reqsn }).then(res => { searchOrderStatus({ reqsn: res.data.reqsn }).then(res => {
if (res) { if (res) {
clearInterval(this.orderSearch) clearInterval(this.orderSearch)
this.orderSearch = null this.orderSearch = null
this.$message.success('支付成功') this.$message.success('支付成功')

@ -16,8 +16,9 @@
</div> </div>
</div> </div>
<div v-if="userinform.testerStatus != '2'" <div v-if="userinform.testerStatus != '2'"
style="margin-left: 30px;margin-top: 10px;color: #666666;font-size: 14px;" @click="toRegCloud"> style="margin-left: 30px;margin-top: 10px;color: #666666;font-size: 14px;">
友情提示入驻成为云员工简历才能被企业主浏览到哦<span style="color: #0066EB;cursor: pointer;">点此去入驻</span></div> 友情提示入驻成为云员工简历才能被企业主浏览到哦<span @click="toRegCloud" style="color: #0066EB;cursor: pointer;">点此去入驻</span>
</div>
<div class="contentBig" v-if="tabPosition == 'online'"> <div class="contentBig" v-if="tabPosition == 'online'">
<div class="contentBox"> <div class="contentBox">
<div class="active4"> <div class="active4">
@ -237,8 +238,8 @@
</div> </div>
</div> </div>
<div class="attResume" v-if="tabPosition == 'att'"> <div class="attResume" v-if="tabPosition == 'att'">
<div v-if="Object.keys(myResume).length" class="personResume"> <div v-if="myResume.length" class="personResume">
<div style="cursor: pointer;" @click="previewResume">{{ myResume.fileName }}</div> <div style="cursor: pointer;" @click="previewResume">{{ myResume[0].fileName }}</div>
<div style="color: #F69102;margin-left: 100px;cursor: pointer;" @click="downLoadResume">下载</div> <div style="color: #F69102;margin-left: 100px;cursor: pointer;" @click="downLoadResume">下载</div>
<div style="color: #FC3333;cursor: pointer;" @click="toDeleteResume">删除</div> <div style="color: #FC3333;cursor: pointer;" @click="toDeleteResume">删除</div>
</div> </div>
@ -274,7 +275,6 @@ import {
couldBookUpdate, couldBookUpdate,
couldApply, couldApply,
delBook, delBook,
} from '@/api/tester/TesterApply' } from '@/api/tester/TesterApply'
import downPdf from '../../../util/pdfDownLoad' import downPdf from '../../../util/pdfDownLoad'
@ -386,9 +386,13 @@ export default {
methods: { methods: {
// //
getMyResume() { getMyResume() {
console.log('1');
getResume(this.userId).then(res => { getResume(this.userId).then(res => {
if (res.code == 200 && res.data) { if (res.code == 200) {
this.myResume = res.data this.myResume = res.rows
console.log(this.myResume);
} else { } else {
this.myResume = {} this.myResume = {}
} }
@ -685,10 +689,10 @@ export default {
}) })
}, },
previewResume() { previewResume() {
window.open(this.baseUrl + this.myResume.filePath) window.open(this.baseUrl + this.myResume[0].filePath)
}, },
downLoadResume() { downLoadResume() {
downPdf(this.baseUrl + this.myResume.filePath, this.myResume.fileName) downPdf(this.baseUrl + this.myResume[0].filePath, this.myResume[0].fileName)
}, },
toDeleteResume() { toDeleteResume() {
this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', { this.$confirm('此操作将永久删除该文件, 是否继续?', '提示', {
@ -696,7 +700,7 @@ export default {
cancelButtonText: '取消', cancelButtonText: '取消',
type: 'warning' type: 'warning'
}).then(() => { }).then(() => {
deleteResume(this.userId).then(res => { deleteResume(this.myResume[0].fileId).then(res => {
if (res.code == 200) { if (res.code == 200) {
this.$message.success(res.msg) this.$message.success(res.msg)
this.getMyResume() this.getMyResume()
@ -786,8 +790,14 @@ export default {
const data = { const data = {
filePath: item.filePath, filePath: item.filePath,
fileName: name, fileName: name,
userId: this.userId entityId: this.userId,
fileId: ''
}
if (this.myResume.length) {
data.fileId = this.myResume[0].fileId || ''
} }
console.log(data);
const res = await attachmentResume(data) const res = await attachmentResume(data)
if (res.code == 200) { if (res.code == 200) {
this.getMyResume() this.getMyResume()

@ -272,6 +272,7 @@
style="padding: 0 12px">验收不通过</el-tag> style="padding: 0 12px">验收不通过</el-tag>
<el-tag v-else type="danger" effect="dark" size="small" <el-tag v-else type="danger" effect="dark" size="small"
style="padding: 0 12px">竞标失败</el-tag> style="padding: 0 12px">竞标失败</el-tag>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="工作成果" v-if="userinform.companyStatus == 2" align="center" prop=""> <el-table-column label="工作成果" v-if="userinform.companyStatus == 2" align="center" prop="">

@ -16,6 +16,7 @@ const crowd = () => import('@/page/homepage/crowdsourcing/crowd.vue')
const crowddetails = () => import('@/page/homepage/crowdsourcing/crowddetails.vue') const crowddetails = () => import('@/page/homepage/crowdsourcing/crowddetails.vue')
const userhome = () => import('@/page/homepage/crowdsourcing/userhome.vue') const userhome = () => import('@/page/homepage/crowdsourcing/userhome.vue')
const publishtasks = () => import('@/page/homepage/crowdsourcing/publishtasks.vue') const publishtasks = () => import('@/page/homepage/crowdsourcing/publishtasks.vue')
const information = () => import('@/page/homepage/home/information/index.vue')
const train = () => import('@/page/homepage/traininstitute/train.vue') const train = () => import('@/page/homepage/traininstitute/train.vue')
const teacherSign = () => import('@/page/homepage/traininstitute/teacherSign.vue') const teacherSign = () => import('@/page/homepage/traininstitute/teacherSign.vue')
const teacherDetail = () => import('@/page/homepage/traininstitute/teacherDetail.vue') const teacherDetail = () => import('@/page/homepage/traininstitute/teacherDetail.vue')
@ -74,6 +75,7 @@ const router = new Router({
{ path: '/', component: home, name: 'home' }, { path: '/', component: home, name: 'home' },
{ path: 'login', component: login, name: 'login' }, { path: 'login', component: login, name: 'login' },
{ path: 'market', component: toolmarker, name: 'market' }, { path: 'market', component: toolmarker, name: 'market' },
{ path: 'information', component: information, name: 'information' },
{ path: 'market/tooldetails', component: tooldetails }, { path: 'market/tooldetails', component: tooldetails },
{ path: 'crowdsourcing', component: crowd, name: 'crowd' }, { path: 'crowdsourcing', component: crowd, name: 'crowd' },
{ path: 'crowdsourcing/crowddetails', component: crowddetails }, { path: 'crowdsourcing/crowddetails', component: crowddetails },

@ -0,0 +1,56 @@
/* 使if else
* 若等级规则增加给scoreStrategies数组添加对象即可 所有和等级相关的都会随之更改
* 食用方式
* const { level, equity} = getLevel(score)
* level:等级 equity:权益
*/
export const scoreStrategies = [
{ minScore: 5000, level: '4' },
{ minScore: 2000, level: '3' },
{ minScore: 500, level: '2' },
{ minScore: 100, level: '1' },
{ minScore: 0, level: '0' }
]
export const gradeEquity = function (level) {
return `${level * 1 === 0 ? '无门槛' : 'V' + level}`
}
export function getLevel(score) {
for (let i = 0; i < scoreStrategies.length; i++) {
if (score >= scoreStrategies[i].minScore) {
return {
level: scoreStrategies[i].level,
equity: gradeEquity(`${scoreStrategies[i].level}`)
}
}
}
console.error(`score=${score},无法确定等级`)
return '无法确定等级'
/*
strategyV1: function (score) {
return score >= 0 && score <= 600 ? "V1" : null;
},
strategyV2: function (score) {
return score >= 0 && score <= 600 ? "V1" : null;
},
strategyV3: function (score) {
return score >= 0 && score <= 600 ? "V1" : null;
},
strategyV4: function (score) {
return score >= 0 && score <= 600 ? "V1" : null;
},
};
*/
// const levelMap = {};
// for (let strategy in scoreStrategies) {
// const level = scoreStrategies(strategy)(score);
// if (level) {
// return level;
// }
// }
// console.error(`score=${score},无法确定等级`);
// return "无法确定等级";
}

@ -1,5 +1,8 @@
const webpack = require('webpack') const webpack = require('webpack')
const path = require('path') const path = require('path')
// const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const CompressionWebpackPlugin = require('compression-webpack-plugin')
// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; // const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
/** /**
* 配置参考: * 配置参考:
@ -12,6 +15,7 @@ const path = require('path')
// const url = 'http:// 172.16.36.67:9999/';//线下地址 // const url = 'http:// 172.16.36.67:9999/';//线下地址
// //
// const port = process.env.port || process.env.npm_config_port || 80 // 端口 // const port = process.env.port || process.env.npm_config_port || 80 // 端口
const isProduction = process.env.NODE_ENV === 'production'
module.exports = { module.exports = {
// const port = process.env.port || process.env.npm_config_port || 80 // 端口 // const port = process.env.port || process.env.npm_config_port || 80 // 端口
@ -32,7 +36,7 @@ module.exports = {
} }
} }
}, },
disableHostCheck: true, disableHostCheck: true
// before (app, server) { // before (app, server) {
// app.get(/.*.(js)$/, (req, res, next) => { // app.get(/.*.(js)$/, (req, res, next) => {
// req.url = req.url + '.gz' // req.url = req.url + '.gz'
@ -42,20 +46,27 @@ module.exports = {
// } // }
}, },
configureWebpack: { configureWebpack: {
resolve:{ resolve: {
alias:{ alias: {
'@':path.resolve(__dirname,'src') '@': path.resolve(__dirname, 'src')
} }
}, },
plugins: [ plugins: [
// //
new webpack.ProvidePlugin({ new webpack.ProvidePlugin({
'window.Quill': 'quill/dist/quill.js', 'window.Quill': 'quill/dist/quill.js',
'Quill': 'quill/dist/quill.js' Quill: 'quill/dist/quill.js'
}), }),
// new BundleAnalyzerPlugin() // new BundleAnalyzerPlugin()
], new CompressionWebpackPlugin({
filename: '[path].gz[query]',
algorithm: 'gzip',
// test: /\.js$|\.html$|\.json$|\.css/,
test: /\.js$|\.json$|\.css/,
threshold: 10240, // 只有大小大于该值的资源会被处理
minRatio: 0.8 // 只有压缩率小于这个值的资源才会被处理
})
]
}, },
css: { css: {
loaderOptions: { loaderOptions: {
@ -67,29 +78,57 @@ module.exports = {
lintOnSave: true, lintOnSave: true,
productionSourceMap: false, productionSourceMap: false,
chainWebpack: config => { chainWebpack: config => {
config.plugin('provide').use(webpack.ProvidePlugin, [{ config.plugin('provide').use(webpack.ProvidePlugin, [
{
$: 'jquery', $: 'jquery',
jquery: 'jquery', jquery: 'jquery',
jQuery: 'jquery', jQuery: 'jquery',
'window.jQuery': 'jquery' 'window.jQuery': 'jquery'
}]) }
])
// xss攻击 // xss攻击
config.module config.module
.rule("vue") .rule('vue')
.use("vue-loader") .use('vue-loader')
.loader("vue-loader") .loader('vue-loader')
.tap(options => { .tap(options => {
options.compilerOptions.directives = { options.compilerOptions.directives = {
html(node, directiveMeta) { html(node, directiveMeta) {
(node.props || (node.props = [])).push({ ;(node.props || (node.props = [])).push({
name: "innerHTML", name: 'innerHTML',
value: `Xss(_s(${directiveMeta.value}))` value: `Xss(_s(${directiveMeta.value}))`
}); })
}
} }
}; return options
return options;
}) })
// config.module
// .rule('images')
// .use('image-webpack-loader')
// .loader('image-webpack-loader')
// .options({
// bypassOnDebug: true
// })
// .end()
config.when(isProduction, config => {
config.plugin('UglifyJsPlugin').use('uglifyjs-webpack-plugin', [
{
uglifyOptions: {
output: {
comments: false // 去掉注释
}, },
warnings: false,
compress: {
drop_console: true,
drop_debugger: false,
pure_funcs: ['console.log'] //移除console
}
}
}
])
})
}
// baseUrl: "/",//二级目录 // baseUrl: "/",//二级目录
// chainWebpack: config => { // chainWebpack: config => {
// // 忽略的打包文件 // // 忽略的打包文件

Loading…
Cancel
Save