main
hcj 3 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. 261
      src/page/homepage/crowdsourcing/crowddetails.vue
  13. 192
      src/page/homepage/crowdsourcing/publishtasks.vue
  14. 338
      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. 67
      src/page/homepage/traininstitute/train.vue
  19. 2
      src/page/personalpage/commonheader/personalheader.vue
  20. 6
      src/page/personalpage/course/index.vue
  21. 4
      src/page/personalpage/course/onLineCourse.vue
  22. 32
      src/page/personalpage/home/resume.vue
  23. 1
      src/page/personalpage/testcrowd/currentcrowd.vue
  24. 2
      src/router/router.js
  25. 56
      src/util/userlevel.js
  26. 89
      vue.config.js

@ -5,8 +5,9 @@ ENV = 'development'
VUE_APP_BASE_API = '/prod-api'
# VUE_APP_BASE_TARGET = 'http://192.168.0.229:9999'
VUE_APP_BASE_TARGET = 'http://192.168.0.135:9999'
VUE_APP_BASE_TARGET = 'http://192.168.0.229: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://172.16.36.180:9999'

@ -11,6 +11,7 @@
"@xkeshi/vue-qrcode": "^1.0.0",
"axios": "^0.18.0",
"babel-polyfill": "^6.26.0",
"compression-webpack-plugin": "^5.0.1",
"crypto-js": "^4.2.0",
"element-ui": "^2.15.6",
"file-saver": "^2.0.4",
@ -37,10 +38,12 @@
"devDependencies": {
"@vue/cli-plugin-babel": "^3.0.0-rc.5",
"@vue/cli-service": "^3.0.0-rc.5",
"vue-template-compiler": "^2.5.16",
"webpack-bundle-analyzer": "^4.10.2",
"babel-plugin-component": "^1.1.1",
"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": {
"plugins": {

Binary file not shown.

After

Width:  |  Height:  |  Size: 900 B

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

@ -157,21 +157,21 @@ export function skilldis() {
// 简历附件上传
export function attachmentResume(data) {
return request({
url: '/tester/cert/admin/uploadResume/upload',
url: '/tester/cert/attResume',
method: 'post',
data
})
}
export function getResume(id) {
return request({
url: '/tester/cert/admin/getResume/' + id,
url: '/tester/cert/attResume/' + id,
method: 'get'
})
}
// 简历删除
export function deleteResume(id) {
return request({
url: '/tester/cert/admin/deleteResume/' + id,
url: '/tester/cert/attResume/' + id,
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="openurl('/ability')">人才服务</el-link>
<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-link :underline="false" @click="openurl('/news')">行业动态</el-link>
<el-divider direction="vertical"></el-divider>
@ -31,21 +31,16 @@
<el-divider direction="vertical"></el-divider>
</div>
<div style="display: flex; font-size: 14px; cursor: pointer">
<img
style="width: 100px; height: 100px; margin-top: 40px; margin-right: 35px"
src="/assets/homepage/xcx.jpg"
alt=""
/>
<img style="width: 100px; height: 100px; margin-top: 40px; margin-right: 35px"
src="/assets/homepage/xcx.jpg" alt="" />
<img style="width: 100px; height: 100px; margin-top: 40px" src="/assets/home/erweima.jpg" alt="" />
<div
style="
<div style="
margin-left: 25px;
color: #bfbfbf;
display: flex;
flex-direction: column;
justify-content: center;
"
>
">
<p>联系我们</p>
<div style="display: flex; align-items: center; margin: 10px 0">
<p>咨询热线010-80750213</p>
@ -59,11 +54,13 @@
<el-divider></el-divider>
<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="" />
<a target="_blank" style="margin-right: 10px" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11011402054123"
>京公网安备11011402054123号</a
>
<a target="_blank" style="margin-right: 10px"
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>
</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="" />
</div>
</div>
@ -118,27 +115,32 @@ export default {
margin: 0;
padding: 0;
}
.el-link.el-link--default {
font-size: 14px;
color: #b3b3b3;
}
.el-divider {
background-color: #b3b3b3;
margin: 0 20px;
background: #ffffff;
opacity: 0.5;
}
.vider >>> .el-divider--vertical {
.vider>>>.el-divider--vertical {
height: 130px;
background: #ffffff;
opacity: 0.23;
margin: 25px 30px;
}
.el-divider--horizontal {
margin: 0;
background: #ffffff;
opacity: 0.23;
}
.footer {
position: fixed;
right: 50px;
@ -147,11 +149,13 @@ export default {
height: 50px; */
display: none;
}
.bottoaxwa {
display: flex;
align-items: center;
justify-content: center;
}
.bottoaxwa a {
text-decoration: none;
color: #b3b3b3;

@ -13,7 +13,7 @@
<!-- <el-link :underline="false" @click="stepurl('http://train.keyitest.cn/')">培训学院</el-link> -->
<el-link :underline="false" @click="openurl('/ability')">人才服务</el-link>
<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-link :underline="false" @click="openurl('/news')">行业动态</el-link>
<el-divider direction="vertical"></el-divider>
@ -57,6 +57,8 @@
<a target="_blank" style="margin-right: 10px"
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>
<div>公司版权所有北京关键科技股份有限公司</div>
</div>
<img class="footer" id="gotoTop" @click="gotoTop" src="/assets/home/gtop.png" alt="" />
</div>

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

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

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

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

File diff suppressed because it is too large Load Diff

@ -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 {
menulist: [
{ title: '首页', link: '/', highlight: false, isline: true },
{ title: '有偿资讯', link: '/information', highlight: false, isline: true },
{ title: '工具服务', link: '/market', highlight: false, isline: false },
{ title: '众包服务', link: '/crowdsourcing', 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 },
],
}
},
components: { pheader: commonheader, pfooter: commonfooter },
mounted() {},
mounted() { },
methods: {},
}
</script>
<style scoped>
</style>
<style scoped></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="" /> -->
<!-- 模块1-软件可靠性 -->
<div class="model1 container">
<div class="model_title">
<div class="model_title_top">
<img src="/assets/homepage/rihhj.png" alt="" />
@ -392,12 +393,12 @@
</el-form-item>
<el-form-item label="" prop="sex">
<div class="rowboxi">
<span class="rowboxis">*</span>
<el-select v-model="form.sex" placeholder="请选择您的性别">
<el-option v-for="item in sexOptions" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
<span class="rowboxis">*</span>
<el-select v-model="form.sex" placeholder="请选择您的性别">
<el-option v-for="item in sexOptions" :key="item.value" :label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
</el-form-item>
@ -479,9 +480,13 @@ import {
getTeacherForm
} from '@/api/train/index.js'
import { mapGetters, mapState } from 'vuex'
import { getCodeUserLogin } from '@/api/system/login'
import index from '@xkeshi/vue-qrcode';
// import payRequestDialog from './payRequestDialog.vue';
export default {
components: {
// payRequestDialog
},
data() {
//
var validateId = (rule, value, callback) => {
@ -521,6 +526,7 @@ export default {
timerScroll: null,
activeVal: 0,
calltext: '',
payReqDialog: false,
timetext: '',
inpDisable: false,
teacherShow: true,
@ -959,6 +965,8 @@ export default {
goteacher() {
this.$router.push('/college/teacherDetail')
},
/**付费咨询弹窗 */
async teacherTrainShow() {
const res = await getTeacherForm()
if (res.msg === 'success') {
@ -1286,7 +1294,7 @@ export default {
trainClassId: this.classInfo.classId,
classType: this.classInfo.classType,
userId: this.userId,
sex:this.formjj.sex
sex: this.formjj.sex
}
console.log(data)
await postBaomingNoToken(data).then((res) => {
@ -1528,8 +1536,9 @@ export default {
.rowboxi {
display: flex;
align-items: center;
.el-select{
width:100%
.el-select {
width: 100%
}
}
@ -1623,6 +1632,44 @@ export default {
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 {
width: 280px;
height: 280px;

@ -27,7 +27,7 @@
<el-breadcrumb separator="/" style="width: 180px">
<el-breadcrumb-item v-for="(item, key) of breadcrumblist" :key="key">{{
item.name
}}</el-breadcrumb-item>
}}</el-breadcrumb-item>
<!-- <el-breadcrumb-item><a href="/"> :to="{ path: item.path }"活动管理</a></el-breadcrumb-item>
<el-breadcrumb-item>活动列表</el-breadcrumb-item>
<el-breadcrumb-item>活动详情</el-breadcrumb-item> -->

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

@ -8,7 +8,8 @@
<div class="courseTime">授课内容{{ courseCon.courseContent }}</div>
<div class="onLineBtnCoup">
<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>
<el-dialog :title="title" :visible.sync="dialogVisible" width="450px" class="onlineDialog" @close="closed">
@ -137,6 +138,7 @@ export default {
this.orderSearch = setInterval(() => {
searchOrderStatus({ reqsn: res.data.reqsn }).then(res => {
if (res) {
clearInterval(this.orderSearch)
this.orderSearch = null
this.$message.success('支付成功')

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

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

@ -16,6 +16,7 @@ const crowd = () => import('@/page/homepage/crowdsourcing/crowd.vue')
const crowddetails = () => import('@/page/homepage/crowdsourcing/crowddetails.vue')
const userhome = () => import('@/page/homepage/crowdsourcing/userhome.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 teacherSign = () => import('@/page/homepage/traininstitute/teacherSign.vue')
const teacherDetail = () => import('@/page/homepage/traininstitute/teacherDetail.vue')
@ -74,6 +75,7 @@ const router = new Router({
{ path: '/', component: home, name: 'home' },
{ path: 'login', component: login, name: 'login' },
{ path: 'market', component: toolmarker, name: 'market' },
{ path: 'information', component: information, name: 'information' },
{ path: 'market/tooldetails', component: tooldetails },
{ path: 'crowdsourcing', component: crowd, name: 'crowd' },
{ 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 path = require('path')
// const UglifyJsPlugin = require('uglifyjs-webpack-plugin')
const CompressionWebpackPlugin = require('compression-webpack-plugin')
// const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
/**
* 配置参考:
@ -10,8 +13,9 @@ const path = require('path')
// const url = 'http://test.lovecode.cc:9999/';//线上地址
// const url = 'http://192.168.1.105:9999/';//线下地址
// const url = 'http:// 172.16.36.67:9999/';//线下地址
//
//
// const port = process.env.port || process.env.npm_config_port || 80 // 端口
const isProduction = process.env.NODE_ENV === 'production'
module.exports = {
// const port = process.env.port || process.env.npm_config_port || 80 // 端口
@ -32,7 +36,7 @@ module.exports = {
}
}
},
disableHostCheck: true,
disableHostCheck: true
// before (app, server) {
// app.get(/.*.(js)$/, (req, res, next) => {
// req.url = req.url + '.gz'
@ -42,20 +46,27 @@ module.exports = {
// }
},
configureWebpack: {
resolve:{
alias:{
'@':path.resolve(__dirname,'src')
resolve: {
alias: {
'@': path.resolve(__dirname, 'src')
}
},
plugins: [
//
//
new webpack.ProvidePlugin({
'window.Quill': 'quill/dist/quill.js',
'Quill': 'quill/dist/quill.js'
Quill: 'quill/dist/quill.js'
}),
// 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: {
loaderOptions: {
@ -67,29 +78,57 @@ module.exports = {
lintOnSave: true,
productionSourceMap: false,
chainWebpack: config => {
config.plugin('provide').use(webpack.ProvidePlugin, [{
$: 'jquery',
jquery: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery'
}])
config.plugin('provide').use(webpack.ProvidePlugin, [
{
$: 'jquery',
jquery: 'jquery',
jQuery: 'jquery',
'window.jQuery': 'jquery'
}
])
// xss攻击
config.module
.rule("vue")
.use("vue-loader")
.loader("vue-loader")
.rule('vue')
.use('vue-loader')
.loader('vue-loader')
.tap(options => {
options.compilerOptions.directives = {
html(node, directiveMeta) {
(node.props || (node.props = [])).push({
name: "innerHTML",
;(node.props || (node.props = [])).push({
name: 'innerHTML',
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: "/",//二级目录
// chainWebpack: config => {
// // 忽略的打包文件
@ -107,7 +146,7 @@ module.exports = {
// // pathRewrite: {
// // '^/Resource': '/Resource'
// // }
// // },
// // },
// '/': {
// target: url,
// ws: true,

Loading…
Cancel
Save