Commit ad65a90d by 严立

供应商注册增加竞价承诺书

供应商开票增加自取项目
parent f7bf6d7d
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0"> <meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>发建信招标采购平台</title> <title>建信招标采购平台</title>
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
......
...@@ -3732,6 +3732,11 @@ ...@@ -3732,6 +3732,11 @@
"randomfill": "^1.0.3" "randomfill": "^1.0.3"
} }
}, },
"crypto-js": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.0.0.tgz",
"integrity": "sha512-bzHZN8Pn+gS7DQA6n+iUmBfl0hO5DJq++QP3U6uTucDtk/0iGpXd/Gg7CGR0p8tJhofJyaKoWBuJI4eAO00BBg=="
},
"css-color-names": { "css-color-names": {
"version": "0.0.4", "version": "0.0.4",
"resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
}, },
"dependencies": { "dependencies": {
"babel-preset-es2015": "^6.24.1", "babel-preset-es2015": "^6.24.1",
"crypto-js": "^4.0.0",
"miment": "0.0.9", "miment": "0.0.9",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-router": "^3.3.4" "vue-router": "^3.3.4"
......

231 KB | W: | H:

226 KB | W: | H:

src/assets/about.png
src/assets/about.png
src/assets/about.png
src/assets/about.png
  • 2-up
  • Swipe
  • Onion skin

74.5 KB | W: | H:

90.4 KB | W: | H:

src/assets/bg-01.png
src/assets/bg-01.png
src/assets/bg-01.png
src/assets/bg-01.png
  • 2-up
  • Swipe
  • Onion skin

274 KB | W: | H:

272 KB | W: | H:

src/assets/home-banner.png
src/assets/home-banner.png
src/assets/home-banner.png
src/assets/home-banner.png
  • 2-up
  • Swipe
  • Onion skin

2.65 KB | W: | H:

2.64 KB | W: | H:

src/assets/pay00.png
src/assets/pay00.png
src/assets/pay00.png
src/assets/pay00.png
  • 2-up
  • Swipe
  • Onion skin

2.64 KB | W: | H:

2.65 KB | W: | H:

src/assets/pay01.png
src/assets/pay01.png
src/assets/pay01.png
src/assets/pay01.png
  • 2-up
  • Swipe
  • Onion skin
let output = { let output = {
// 开发路径 // 开发路径
// base: 'http://bid-server.meiqicloud.com/', base: 'http://bid-server.meiqicloud.com/',
// resources: 'http://bid-web.meiqicloud.com/', resources: 'http://bid-web.meiqicloud.com/',
// agentSignIn: 'http://bid-vue.meiqicloud.com/' agentSignIn: 'http://bid-vue.meiqicloud.com/'
// 测试环境 // 测试环境
// base: '/Api/', // base: '/Api/',
...@@ -10,9 +10,9 @@ let output = { ...@@ -10,9 +10,9 @@ let output = {
// agentSignIn: 'http://bid-vue.meiqicloud.com/' // agentSignIn: 'http://bid-vue.meiqicloud.com/'
// 正式环境 // 正式环境
base: '/Api/', // base: '/Api/',
resources: 'https://www.fjbidding.com', // resources: 'https://www.fjbidding.com',
agentSignIn: 'https://www.fjbidding.com/admin/' // agentSignIn: 'https://www.fjbidding.com/admin/'
} }
output.uploadFile = output.base + 'bid/common/webupload/upload' output.uploadFile = output.base + 'bid/common/webupload/upload'
......
...@@ -128,6 +128,7 @@ ...@@ -128,6 +128,7 @@
componentProgress: { componentProgress: {
handler: function (funcNewValue, funcOldValue) { handler: function (funcNewValue, funcOldValue) {
if (JSON.stringify(funcNewValue) !== '{}') { if (JSON.stringify(funcNewValue) !== '{}') {
console.log('mark', funcNewValue)
this.setProgressTime(funcNewValue) this.setProgressTime(funcNewValue)
this.setOperate(funcNewValue) this.setOperate(funcNewValue)
} }
......
...@@ -63,16 +63,22 @@ ...@@ -63,16 +63,22 @@
</div> </div>
<div class="detail-content orders-bills"> <div class="detail-content orders-bills">
<el-form ref="form" :model="formBills" :rules="rule" label-width="160px"> <el-form ref="form" :model="formBills" :rules="rule" label-width="160px">
<el-form-item label="发票领取方式:" prop="name">
<el-radio-group v-model="formBills.receiveType">
<el-radio label="0">寄送</el-radio>
<el-radio label="1">自取</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="收件人:" prop="name"> <el-form-item label="收件人:" prop="name">
<el-input v-model="formBills.name" maxlength="30" placeholder="请输入姓名"></el-input> <el-input v-model="formBills.name" maxlength="30" placeholder="请输入姓名"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="收件人电话:" prop="phone"> <el-form-item label="收件人电话:" prop="phone">
<el-input v-model="formBills.phone" maxlength="20" placeholder="请输入电话"></el-input> <el-input v-model="formBills.phone" maxlength="20" placeholder="请输入电话"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="收件地址:" prop="area"> <el-form-item v-if="formBills.receiveType === '0'" label="收件地址:" prop="area">
<currencyArea @change="onAreaChange"></currencyArea> <currencyArea @change="onAreaChange"></currencyArea>
</el-form-item> </el-form-item>
<el-form-item label="" prop="area"> <el-form-item v-if="formBills.receiveType === '0'" label="" prop="area">
<el-input v-model="formBills.area" maxlength="100" placeholder="请输入详细地址"></el-input> <el-input v-model="formBills.area" maxlength="100" placeholder="请输入详细地址"></el-input>
</el-form-item> </el-form-item>
<el-form-item class="form-button row"> <el-form-item class="form-button row">
...@@ -150,6 +156,7 @@ ...@@ -150,6 +156,7 @@
created: function () { created: function () {
this.initKey() this.initKey()
this.resetForm()
this.queryBillsInfo() this.queryBillsInfo()
}, },
...@@ -179,6 +186,7 @@ ...@@ -179,6 +186,7 @@
'area': '', 'area': '',
'areaArray': [], 'areaArray': [],
'type': '', 'type': '',
'receiveType': '0'
} }
}, },
...@@ -230,7 +238,8 @@ ...@@ -230,7 +238,8 @@
'phone': this.formBills.phone, 'phone': this.formBills.phone,
'area': this.formBills.areaArray.join('/'), 'area': this.formBills.areaArray.join('/'),
'address': this.formBills.area, 'address': this.formBills.area,
'invoiceType': '' 'invoiceType': '',
'receiveType': this.formBills.receiveType
} }
for (let i = 0, len = this.companyInvoice.length; i < len; i++) { for (let i = 0, len = this.companyInvoice.length; i < len; i++) {
......
...@@ -78,6 +78,17 @@ ...@@ -78,6 +78,17 @@
<span>支付类别:</span> <span>支付类别:</span>
<span>线上支付</span> <span>线上支付</span>
</div> </div>
<div class="row align-s">
<span>支付方式:</span>
<div class="pay-way-select row align-c">
<el-radio v-model="payway" label="0" border>
<img src="../../assets/pay00.png" alt="">
</el-radio>
<el-radio v-model="payway" label="1" border>
<img src="../../assets/pay01.png" alt="">
</el-radio>
</div>
</div>
</div> </div>
<div v-if="componentProject.isPackage" class="detail-contract"> <div v-if="componentProject.isPackage" class="detail-contract">
...@@ -94,6 +105,17 @@ ...@@ -94,6 +105,17 @@
<span>支付类别:</span> <span>支付类别:</span>
<span>线上支付</span> <span>线上支付</span>
</div> </div>
<div class="row align-s">
<span>支付方式:</span>
<div class="pay-way-select row align-c">
<el-radio v-model="payway" label="0" border>
<img src="../../assets/pay00.png" alt="">
</el-radio>
<el-radio v-model="payway" label="1" border>
<img src="../../assets/pay01.png" alt="">
</el-radio>
</div>
</div>
</div> </div>
</div> </div>
...@@ -107,31 +129,17 @@ ...@@ -107,31 +129,17 @@
</div> </div>
<div class="submit row con-c"> <div class="submit row con-c">
<button class="global-cursor" @click="onSelectPay()">确认报名</button> <button class="global-cursor" @click="onPay()">确认报名</button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<el-dialog title="" :visible.sync="winDialog" :lock-scroll="false" width="600px" :close-on-click-modal="false" @close="onCloseDialog()"> <el-dialog title="" :visible.sync="winDialog" :lock-scroll="false" width="600px" :close-on-click-modal="false" @close="onCloseDialog()">
<div class="pay row con-c align-s">
<!-- <el-radio v-model="payway" class="pay-way row align-c" :class="payway === '1' ? 'pay-way-active' : ''" label="1" @change="onChangeRadio">
<img src="../../assets/pay00.png" alt="">
</el-radio>
<el-radio v-model="payway" class="pay-way row align-c" :class="payway === '2' ? 'pay-way-active' : ''" label="0" @change="onChangeRadio">
<img src="../../assets/pay01.png" alt="">
</el-radio> -->
<div class="pay-way row align-c">
<img src="../../assets/pay01.png" alt="">
</div>
</div>
<div class="pay-code row con-c"> <div class="pay-code row con-c">
<img :src="'data:image/png;base64,' + payCode[Number(payway)]" alt=""> <img :src="'data:image/png;base64,' + payCode[Number(payway)]" alt="">
</div> </div>
<span slot="footer" class="dialog-footer"> <span slot="footer" class="dialog-footer"></span>
<!-- <el-button type="primary" @click="onSubmit()">确认支付</el-button> -->
</span>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
...@@ -178,7 +186,8 @@ ...@@ -178,7 +186,8 @@
}, },
destroyed: function () { destroyed: function () {
clearInterval(this.payTimer) console.log('destroyed')
clearInterval(this.payTimer)
}, },
methods: { methods: {
...@@ -194,9 +203,32 @@ ...@@ -194,9 +203,32 @@
this.redirectPath() this.redirectPath()
} }
}, },
/**
* 确认报名
* @function
* @param {object} funcDetails
* @returns
*/
onPay: function () {
if (this.componentProject.isPackage && this.contractSelection.total === 0) {
this.buyContract()
return
}
if (!this.componentProject.isPackage && this.componentContract[0].budget === 0) {
this.buyContract()
return
}
clearInterval(this.payTimer)
this.queryPayCode()
},
queryPayCode: function () { queryPayCode: function () {
console.log('payway', this.payCode[Number(this.payway)])
if (this.payCode[Number(this.payway)]) { if (this.payCode[Number(this.payway)]) {
this.winDialog = true
clearInterval(this.payTimer) clearInterval(this.payTimer)
this.queryPayState() this.queryPayState()
return return
...@@ -228,6 +260,7 @@ ...@@ -228,6 +260,7 @@
iRequest.request(iHost.base + 'bid/order/doPay', funcParam, 'json', 'post') iRequest.request(iHost.base + 'bid/order/doPay', funcParam, 'json', 'post')
.then((funcResponse) => { .then((funcResponse) => {
this.winDialog = true
this.$set(this.payId, Number(this.payway), funcResponse.orderId) this.$set(this.payId, Number(this.payway), funcResponse.orderId)
this.$set(this.payCode, Number(this.payway), funcResponse.code) this.$set(this.payCode, Number(this.payway), funcResponse.code)
this.$set(this.payNumber, Number(this.payway), funcResponse.payId) this.$set(this.payNumber, Number(this.payway), funcResponse.payId)
...@@ -275,6 +308,13 @@ ...@@ -275,6 +308,13 @@
}) })
}, 2000) }, 2000)
}, },
/**
* 添加购买合同
* @function
* @param {object} funcDetails
* @returns
*/
buyContract: function () { buyContract: function () {
let funcParam = {} let funcParam = {}
// 没有合同 // 没有合同
...@@ -339,32 +379,14 @@ ...@@ -339,32 +379,14 @@
} }
}, },
onSelectPay: function () { /**
if (this.componentProject.isPackage && this.contractSelection.total === 0) { * 关闭支付窗口
this.buyContract() * @function
return * @returns
} */
if (!this.componentProject.isPackage && this.componentContract[0].budget === 0) {
this.buyContract()
return
}
this.winDialog = true
clearInterval(this.payTimer)
this.queryPayCode()
},
onSubmit: function () {
},
onCloseDialog: function () { onCloseDialog: function () {
clearInterval(this.payTimer) clearInterval(this.payTimer)
}, },
onChangeRadio: function (funcRadio) {
this.payway = funcRadio
this.queryPayCode()
},
} }
} }
</script> </script>
...@@ -377,6 +399,22 @@ ...@@ -377,6 +399,22 @@
background: @colorWhite; background: @colorWhite;
box-shadow:0px 0px 20px 0px rgba(41,41,41,0.05); box-shadow:0px 0px 20px 0px rgba(41,41,41,0.05);
.pay-way-select {
img {
height: 38px;
}
.el-radio {
display: flex;
flex-direction: row;
align-items: center;
width: 200px;
height: 42px;
margin: 0;
padding: 0 0 0 8px;
}
}
.pay { .pay {
.pay-way { .pay-way {
margin: 0 10px 20px 10px; margin: 0 10px 20px 10px;
...@@ -431,7 +469,7 @@ ...@@ -431,7 +469,7 @@
margin-bottom: 24px; margin-bottom: 24px;
border-bottom: 1px #F2F2F2 solid; border-bottom: 1px #F2F2F2 solid;
span { > span {
font-size: @fontSize04; font-size: @fontSize04;
} }
} }
...@@ -460,14 +498,14 @@ ...@@ -460,14 +498,14 @@
> div { > div {
height: 36px; height: 36px;
span:nth-child(1) { > span:nth-child(1) {
min-width: 160px; min-width: 160px;
margin-right: 10px; margin-right: 10px;
text-align: right; text-align: right;
font-size: @fontSize02; font-size: @fontSize02;
} }
span:nth-child(2) { > span:nth-child(2) {
text-align: left; text-align: left;
font-size: @fontSize01; font-size: @fontSize01;
} }
...@@ -480,14 +518,14 @@ ...@@ -480,14 +518,14 @@
> div { > div {
margin-top: 40px; margin-top: 40px;
span:nth-child(1) { > span:nth-child(1) {
min-width: 160px; min-width: 160px;
margin-right: 10px; margin-right: 10px;
text-align: right; text-align: right;
font-size: @fontSize02; font-size: @fontSize02;
} }
span:nth-child(2) { > span:nth-child(2) {
text-align: left; text-align: left;
font-size: @fontSize01; font-size: @fontSize01;
} }
......
...@@ -382,8 +382,6 @@ let output = function (thisVue, id, type, isPreview) { ...@@ -382,8 +382,6 @@ let output = function (thisVue, id, type, isPreview) {
'isPackage': funcResponse.containPackage === '0' ? false : true, 'isPackage': funcResponse.containPackage === '0' ? false : true,
} }
thisVue.$store.commit('componentProject', funcProject) thisVue.$store.commit('componentProject', funcProject)
let funcRawData let funcRawData
if (funcProject.isPackage) { if (funcProject.isPackage) {
...@@ -424,8 +422,8 @@ let output = function (thisVue, id, type, isPreview) { ...@@ -424,8 +422,8 @@ let output = function (thisVue, id, type, isPreview) {
'quantity': '', 'quantity': '',
'budget': funcRawData.price, 'budget': funcRawData.price,
'timeClose': '', 'timeClose': '',
'fileName': funcRawData.tenderFile.name, 'fileName': funcRawData.tenderFile ? funcRawData.tenderFile.name : '',
'fileUrl': funcRawData.tenderFile.url 'fileUrl': funcRawData.tenderFile ? funcRawData.tenderFile.url : ''
}] }]
} }
thisVue.$store.commit('componentContract', funcPackage) thisVue.$store.commit('componentContract', funcPackage)
......
...@@ -119,9 +119,9 @@ ...@@ -119,9 +119,9 @@
<!-- 此处 input 是为了模拟校验而设置的隐藏组件 --> <!-- 此处 input 是为了模拟校验而设置的隐藏组件 -->
<el-input class="global-none" v-model="formRegister.skillSelect"></el-input> <el-input class="global-none" v-model="formRegister.skillSelect"></el-input>
<div class="col"> <div class="col">
<div class="row" v-for="index of skillQuantity" :key="index"> <div class="row register-info-skill" v-for="index of skillQuantity" :key="index">
<currencySkill :identity="index - 1" @change="(item) => { onSkillChange(index - 1, item) }"></currencySkill> <el-cascader v-model="formRegister.skillId[index - 1]" :options="skillOption" :props="{ checkStrictly: true }" @change="(value) => onSkillSelect(index, value)"></el-cascader>
<button v-if="index !== 5" class="global-cursor register-info-skill-select" @click.prevent="onSkillInsert"> <button v-if="index !== 5" class="global-cursor register-info-skill-select" @click.prevent="(onSkillInsert())">
<i class="el-icon-plus"></i> <i class="el-icon-plus"></i>
</button> </button>
</div> </div>
...@@ -267,21 +267,21 @@ ...@@ -267,21 +267,21 @@
import iCurrencyMap from '@/components/currency-map.vue' import iCurrencyMap from '@/components/currency-map.vue'
import iCurrencyArea from '@/components/currency-area.vue' import iCurrencyArea from '@/components/currency-area.vue'
import iCurrencySkill from '@/components/currency-skill.vue'
export default { export default {
components: { components: {
currencyMap: iCurrencyMap, currencyMap: iCurrencyMap,
currencyArea: iCurrencyArea, currencyArea: iCurrencyArea,
currencySkill: iCurrencySkill
}, },
data: function () { data: function () {
return { return {
state: 1, state: 1,
progress: ['基础信息', '职称上传', '最高学历', '设置密码', '完成注册'], progress: ['基础信息', '职称上传', '最高学历', '设置密码', '完成注册'],
skillOption: [],
skillQuantity: 1, skillQuantity: 1,
skillQuantityMax: 5, skillQuantityMax: 5,
formRegister: {}, formRegister: {},
...@@ -434,7 +434,7 @@ ...@@ -434,7 +434,7 @@
// 职称信息 // 职称信息
skillSelect: '', skillSelect: '',
skillId: [], skillId: [[], [], [], [], []],
skillImage: '', skillImage: '',
// 学历信息 // 学历信息
...@@ -450,14 +450,14 @@ ...@@ -450,14 +450,14 @@
// 重置区域选择数据 // 重置区域选择数据
this.$store.commit('areaSelection', []) this.$store.commit('areaSelection', [])
this.$store.commit('selectionSkill', [])
}, },
init: function () { init: function () {
console.log('init')
iRequest.request(iHost.base + 'bid/common/getApiProjectTypeOptions', {}, 'json', 'get') iRequest.request(iHost.base + 'bid/common/getApiProjectTypeOptions', {}, 'json', 'get')
.then((funcResponse) => { .then((funcResponse) => {
this.$store.commit('dictionarySkill', funcResponse) this.$store.commit('dictionarySkill', funcResponse)
this.skillOption = funcResponse
console.log(funcResponse)
}) })
}, },
...@@ -781,9 +781,8 @@ ...@@ -781,9 +781,8 @@
* @param {array } funcSelectId - ['id01', 'id02', 'id03', 'id04', '' ] * @param {array } funcSelectId - ['id01', 'id02', 'id03', 'id04', '' ]
* @returns * @returns
*/ */
onSkillChange: function (funcIndex, funcSelectId) { onSkillSelect: function (funcLevel, funcValue) {
this.formRegister.skillSelect = 'skillSelect' this.formRegister.skillSelect = 'skillSelect'
this.formRegister.skillId[funcIndex] = funcSelectId
}, },
/** /**
...@@ -793,10 +792,7 @@ ...@@ -793,10 +792,7 @@
*/ */
onSkillInsert: function () { onSkillInsert: function () {
if (this.skillQuantity < 5) { if (this.skillQuantity < 5) {
this.skillQuantity = this.skillQuantity + 1 this.skillQuantity = this.skillQuantity + 1
let funcSelectionSkill = this.$store.getters.selectionSkill
funcSelectionSkill.push([0, 0, 0, 0, 0])
this.$store.commit('selectionSkill', funcSelectionSkill)
} }
}, },
...@@ -1041,11 +1037,20 @@ ...@@ -1041,11 +1037,20 @@
.register-info { .register-info {
width: 640px; width: 640px;
.register-info-skill > .el-cascader {
min-width: 580px;
margin: 0 10px 10px 0;
}
.register-info-skill-select { .register-info-skill-select {
width: 40px; width: 40px;
height: 40px; height: 40px;
border: 1px @colorGrey80 solid; border: 1px #dcdfe6 solid;
background: #FFFFFF; background: #FFFFFF;
i {
color: #606266;
}
} }
.el-form { .el-form {
......
...@@ -82,6 +82,44 @@ ...@@ -82,6 +82,44 @@
<el-form-item label=""> <el-form-item label="">
<span>复印件需盖有公司印章,大小不超过5MB</span> <span>复印件需盖有公司印章,大小不超过5MB</span>
</el-form-item> </el-form-item>
<el-form-item label="是否参与网上竞价:" prop="isQuote">
<div>
<el-radio-group v-model="formRegister.isQuote">
<el-radio label="0"></el-radio>
<el-radio label="1"></el-radio>
</el-radio-group>
</div>
</el-form-item>
<el-form-item v-if="formRegister.isQuote === '1'" label="上传竞价承诺书:" prop="quoteImage">
<!-- 此处 input 是为了模拟校验而设置的隐藏组件 -->
<el-input class="global-none" v-model="formRegister.quoteImage"></el-input>
<el-upload :class="uploadOption.license.image.length > 0 ? 'upload-none' : ''"
ref="uploadLicense"
list-type="picture-card"
:auto-upload="false"
:limit="1"
:file-list="uploadOption.quote.image"
:action="uploadOption.quote.url"
:data="uploadOption.quote.params"
:on-preview="onUploadPreviewFile"
:on-remove="(file, fileList) => { onUploadRemove('quote', file, fileList) }"
:on-change="(file, fileList) => { onUploadChange('quote', file, fileList) }"
:on-success="(respons, file, fileList) => { onUploadSuccess('quote', respons, file, fileList) }"
:on-error="(error) => { onUploadFail('quote', error) }"
>
<div class="col">
<i class="el-icon-plus"></i>
<span>点击上传网上竞价承诺书</span>
</div>
</el-upload>
</el-form-item>
<el-form-item v-if="formRegister.isQuote === '1'" label="">
<span>(请查看</span>
<span class="global-color-red">网上竞价须知</span>
<span>,并下载</span>
<span class="global-cursor global-color-red" @click="onLoadStatement">网上竞价承诺书</span>
<span>,签名盖章后扫描上传,大小不超过5MB)</span>
</el-form-item>
<el-form-item class="register-info-button row con-c"> <el-form-item class="register-info-button row con-c">
<el-button type="primary" @click.prevent="onPrevious()">上一步</el-button> <el-button type="primary" @click.prevent="onPrevious()">上一步</el-button>
<el-button type="primary" @click.prevent="onNext()">下一步</el-button> <el-button type="primary" @click.prevent="onNext()">下一步</el-button>
...@@ -219,6 +257,7 @@ ...@@ -219,6 +257,7 @@
// 证照上传 // 证照上传
licenseImage: '', licenseImage: '',
quoteImage: '',
// 税务信息 // 税务信息
companyTax: '', companyTax: '',
...@@ -250,6 +289,14 @@ ...@@ -250,6 +289,14 @@
}, },
image: [] image: []
}, },
quote: {
url: iHost.uploadFile,
params: {
'file': '',
'uploadPath': 'register/supplier/license/',
},
image: []
},
}, },
// 文件上传组件配置 // 文件上传组件配置
uploadFileOption: { uploadFileOption: {
...@@ -308,6 +355,9 @@ ...@@ -308,6 +355,9 @@
licenseImage: [ licenseImage: [
{ required: true, message: '请上传营业执照', trigger: 'blur' } { required: true, message: '请上传营业执照', trigger: 'blur' }
], ],
quoteImage: [
{ required: true, message: '请上传网上竞价承诺书', trigger: 'blur' }
],
companyTax: [ companyTax: [
{ required: true, message: '请选择税务资质', trigger: 'blur' } { required: true, message: '请选择税务资质', trigger: 'blur' }
], ],
...@@ -383,6 +433,8 @@ ...@@ -383,6 +433,8 @@
// 证照上传 // 证照上传
licenseImage: '', licenseImage: '',
quoteImage: '',
isQuote: '0',
// 税务信息 // 税务信息
companyTax: '', companyTax: '',
...@@ -655,6 +707,8 @@ ...@@ -655,6 +707,8 @@
'emailCode': this.formRegister.emailCode, 'emailCode': this.formRegister.emailCode,
'license': this.uploadOption.license.image[0].url, 'license': this.uploadOption.license.image[0].url,
'bidStatement': this.uploadOption.quote.image[0].url,
'isJoinBid': this.formRegister.isQuote,
'taxType': this.formRegister.companyTax, 'taxType': this.formRegister.companyTax,
'phone': this.formRegister.companyPhone, 'phone': this.formRegister.companyPhone,
...@@ -690,6 +744,16 @@ ...@@ -690,6 +744,16 @@
}, },
/** /**
* 下载申明
* @function
* @returns
*/
onLoadStatement: function () {
console.log('onLoadStatement')
window.location.href = '../../static/quote.zip'
},
/**
* 返回首页 * 返回首页
* @function * @function
* @returns * @returns
......
...@@ -44,6 +44,8 @@ ...@@ -44,6 +44,8 @@
</template> </template>
<script> <script>
import iCryptoJs from 'crypto-js'
import iHost from '@/common/js/host.js' import iHost from '@/common/js/host.js'
import iRule from '@/common/js/rule/rule.js' import iRule from '@/common/js/rule/rule.js'
import iRequest from '@/common/js/request/request.js' import iRequest from '@/common/js/request/request.js'
...@@ -229,6 +231,23 @@ ...@@ -229,6 +231,23 @@
}, },
/** /**
* 密码加密
* @function
* @param {number} value - 加密字段
* @param {array } key
* @returns
*/
encryptByDES: function (value, key) {
if(value == '') return '';
var keyHex = iCryptoJs.enc.Utf8.parse(key);
var encrypted = iCryptoJs.DES.encrypt(value, keyHex, {
mode: iCryptoJs.mode.ECB,
padding: iCryptoJs.pad.Pkcs7
})
return encrypted.toString()
},
/**
* 登录 * 登录
* @function * @function
* @param {number} funcIndex - 组件索引 * @param {number} funcIndex - 组件索引
...@@ -240,10 +259,11 @@ ...@@ -240,10 +259,11 @@
if (funcValid) { if (funcValid) {
let funcParam = { let funcParam = {
'loginName': this.info.phone, 'loginName': this.info.phone,
'password': this.info.password, 'password': this.encryptByDES(this.info.password, 'bidkey11'),
'userType': this.info.identity, 'userType': this.info.identity,
'vCode': this.info.code 'vCode': this.info.code
} }
iRequest.request(iHost.base + 'bid/zLogin/login', funcParam, 'json', 'post', { isToken: false }) iRequest.request(iHost.base + 'bid/zLogin/login', funcParam, 'json', 'post', { isToken: false })
.then((funcResponse) => { .then((funcResponse) => {
localStorage.clear() localStorage.clear()
......
...@@ -139,9 +139,9 @@ ...@@ -139,9 +139,9 @@
<!-- 此处 input 是为了模拟校验而设置的隐藏组件 --> <!-- 此处 input 是为了模拟校验而设置的隐藏组件 -->
<el-input class="global-none" v-model="formRegister.skillSelect"></el-input> <el-input class="global-none" v-model="formRegister.skillSelect"></el-input>
<div class="col"> <div class="col">
<div class="row" v-for="index of skillQuantity" :key="index"> <div class="row register-info-skill" v-for="index of skillQuantity" :key="index">
<currencySkill :identity="index - 1" @change="(item) => { onSkillChange(index - 1, item) }"></currencySkill> <el-cascader v-model="formRegister.skillId[index - 1]" :options="skillOption" :props="{ checkStrictly: true }" @change="(value) => onSkillSelect(index, value)"></el-cascader>
<button v-if="index !== 5" class="global-cursor register-info-skill-select" @click.prevent="onSkillInsert"> <button v-if="index !== 5" class="global-cursor register-info-skill-select" @click.prevent="onSkillInsert()">
<i class="el-icon-plus"></i> <i class="el-icon-plus"></i>
</button> </button>
</div> </div>
...@@ -200,13 +200,11 @@ ...@@ -200,13 +200,11 @@
import iCurrencyMap from '@/components/currency-map.vue' import iCurrencyMap from '@/components/currency-map.vue'
import iCurrencyArea from '@/components/currency-area.vue' import iCurrencyArea from '@/components/currency-area.vue'
import iCurrencySkill from '@/components/currency-skill.vue'
export default { export default {
components: { components: {
currencyMap: iCurrencyMap, currencyMap: iCurrencyMap,
currencyArea: iCurrencyArea, currencyArea: iCurrencyArea,
currencySkill: iCurrencySkill
}, },
data: function () { data: function () {
return { return {
...@@ -214,6 +212,7 @@ ...@@ -214,6 +212,7 @@
skillAll: [], skillAll: [],
skillSelectionIndex: [], skillSelectionIndex: [],
skillOption: [],
skillQuantity: 1, skillQuantity: 1,
skillQuantityMax: 5, skillQuantityMax: 5,
uploadFileUrl: '', uploadFileUrl: '',
...@@ -365,7 +364,6 @@ ...@@ -365,7 +364,6 @@
// 设置区域标识 // 设置区域标识
this.formRegister.areaArray = funcResponse.area.split(',') this.formRegister.areaArray = funcResponse.area.split(',')
this.$store.commit('areaSelection', this.formRegister.areaArray) this.$store.commit('areaSelection', this.formRegister.areaArray)
console.log(JSON.stringify(this.formRegister.areaArray))
let funImageUrl let funImageUrl
// 设置入库声明图片 // 设置入库声明图片
...@@ -431,8 +429,7 @@ ...@@ -431,8 +429,7 @@
let funcSkillDictionary = iRequest.request(iHost.base + 'bid/common/getApiProjectTypeOptions', {}, 'json', 'get') let funcSkillDictionary = iRequest.request(iHost.base + 'bid/common/getApiProjectTypeOptions', {}, 'json', 'get')
.then((funcResponse) => { .then((funcResponse) => {
this.skillAll = funcResponse this.skillOption = funcResponse
if (!this.$store.state.dictionarySkill.length) this.$store.commit('dictionarySkill', this.skillAll)
}) })
Promise.all([ funcInfo, funcSkillDictionary ]) Promise.all([ funcInfo, funcSkillDictionary ])
...@@ -466,7 +463,7 @@ ...@@ -466,7 +463,7 @@
// 职称信息 // 职称信息
skillSelect: '', skillSelect: '',
skillId: [], skillId: [[], [], [], [], []],
skillImage: '', skillImage: '',
// 学历信息 // 学历信息
...@@ -625,6 +622,7 @@ ...@@ -625,6 +622,7 @@
this.formRegister.areaArray = funcArea this.formRegister.areaArray = funcArea
this.$store.commit('areaSelection', funcArea) this.$store.commit('areaSelection', funcArea)
}, },
/** /**
* 专业选择组件选择事件 * 专业选择组件选择事件
* @function * @function
...@@ -632,9 +630,8 @@ ...@@ -632,9 +630,8 @@
* @param {array } funcSelectId - ['id01', 'id02', 'id03', 'id04', '' ] * @param {array } funcSelectId - ['id01', 'id02', 'id03', 'id04', '' ]
* @returns * @returns
*/ */
onSkillChange: function (funcIndex, funcSelectId) { onSkillSelect: function (funcLevel, funcValue) {
this.formRegister.skillSelect = 'skillSelect' this.formRegister.skillSelect = 'skillSelect'
this.formRegister.skillId[funcIndex] = funcSelectId
}, },
/** /**
...@@ -644,10 +641,7 @@ ...@@ -644,10 +641,7 @@
*/ */
onSkillInsert: function () { onSkillInsert: function () {
if (this.skillQuantity < 5) { if (this.skillQuantity < 5) {
this.skillQuantity = this.skillQuantity + 1 this.skillQuantity = this.skillQuantity + 1
let funcSelectionSkill = this.$store.getters.selectionSkill
funcSelectionSkill.push([0, 0, 0, 0, 0])
this.$store.commit('selectionSkill', funcSelectionSkill)
} }
}, },
...@@ -844,11 +838,22 @@ ...@@ -844,11 +838,22 @@
.detail-content { .detail-content {
width: 720px; width: 720px;
margin: 20px 0; margin: 20px 0;
.register-info-skill > .el-cascader {
min-width: 390px;
margin: 0 10px 10px 0;
}
.register-info-skill-select { .register-info-skill-select {
width: 40px; width: 40px;
height: 40px; height: 40px;
border: 1px @colorGrey80 solid; border: 1px #dcdfe6 solid;
background: #FFFFFF; background: #FFFFFF;
i {
color: #606266;
}
} }
.el-form { .el-form {
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
<!-- 项目进度 - 采购 --> <!-- 项目进度 - 采购 -->
<div class="supplier-operation"> <div class="supplier-operation">
<!-- 测试代码 -->
<!-- <button @click="onChange()">修改</button> --> <!-- <button @click="onChange()">修改</button> -->
<button v-if="formRegister.examineState !== 0" @click="onChange()">修改</button> <button v-if="formRegister.examineState !== 0" @click="onChange()">修改</button>
<button @click="onChangeRecord()">变更记录</button> <button @click="onChangeRecord()">变更记录</button>
......
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment