Commit ad65a90d by 严立

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

供应商开票增加自取项目
parent f7bf6d7d
......@@ -3,7 +3,7 @@
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>发建信招标采购平台</title>
<title>建信招标采购平台</title>
</head>
<body>
<div id="app"></div>
......
......@@ -3732,6 +3732,11 @@
"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": {
"version": "0.0.4",
"resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
......
......@@ -11,6 +11,7 @@
},
"dependencies": {
"babel-preset-es2015": "^6.24.1",
"crypto-js": "^4.0.0",
"miment": "0.0.9",
"vue": "^2.6.11",
"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 = {
// 开发路径
// base: 'http://bid-server.meiqicloud.com/',
// resources: 'http://bid-web.meiqicloud.com/',
// agentSignIn: 'http://bid-vue.meiqicloud.com/'
base: 'http://bid-server.meiqicloud.com/',
resources: 'http://bid-web.meiqicloud.com/',
agentSignIn: 'http://bid-vue.meiqicloud.com/'
// 测试环境
// base: '/Api/',
......@@ -10,9 +10,9 @@ let output = {
// agentSignIn: 'http://bid-vue.meiqicloud.com/'
// 正式环境
base: '/Api/',
resources: 'https://www.fjbidding.com',
agentSignIn: 'https://www.fjbidding.com/admin/'
// base: '/Api/',
// resources: 'https://www.fjbidding.com',
// agentSignIn: 'https://www.fjbidding.com/admin/'
}
output.uploadFile = output.base + 'bid/common/webupload/upload'
......
......@@ -128,6 +128,7 @@
componentProgress: {
handler: function (funcNewValue, funcOldValue) {
if (JSON.stringify(funcNewValue) !== '{}') {
console.log('mark', funcNewValue)
this.setProgressTime(funcNewValue)
this.setOperate(funcNewValue)
}
......
......@@ -63,16 +63,22 @@
</div>
<div class="detail-content orders-bills">
<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-input v-model="formBills.name" maxlength="30" placeholder="请输入姓名"></el-input>
</el-form-item>
<el-form-item label="收件人电话:" prop="phone">
<el-input v-model="formBills.phone" maxlength="20" placeholder="请输入电话"></el-input>
</el-form-item>
<el-form-item label="收件地址:" prop="area">
<el-form-item v-if="formBills.receiveType === '0'" label="收件地址:" prop="area">
<currencyArea @change="onAreaChange"></currencyArea>
</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-form-item>
<el-form-item class="form-button row">
......@@ -150,6 +156,7 @@
created: function () {
this.initKey()
this.resetForm()
this.queryBillsInfo()
},
......@@ -179,6 +186,7 @@
'area': '',
'areaArray': [],
'type': '',
'receiveType': '0'
}
},
......@@ -230,7 +238,8 @@
'phone': this.formBills.phone,
'area': this.formBills.areaArray.join('/'),
'address': this.formBills.area,
'invoiceType': ''
'invoiceType': '',
'receiveType': this.formBills.receiveType
}
for (let i = 0, len = this.companyInvoice.length; i < len; i++) {
......
......@@ -78,6 +78,17 @@
<span>支付类别:</span>
<span>线上支付</span>
</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 v-if="componentProject.isPackage" class="detail-contract">
......@@ -94,6 +105,17 @@
<span>支付类别:</span>
<span>线上支付</span>
</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>
......@@ -107,31 +129,17 @@
</div>
<div class="submit row con-c">
<button class="global-cursor" @click="onSelectPay()">确认报名</button>
<button class="global-cursor" @click="onPay()">确认报名</button>
</div>
</div>
</div>
</div>
<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">
<img :src="'data:image/png;base64,' + payCode[Number(payway)]" alt="">
</div>
<span slot="footer" class="dialog-footer">
<!-- <el-button type="primary" @click="onSubmit()">确认支付</el-button> -->
</span>
<span slot="footer" class="dialog-footer"></span>
</el-dialog>
</div>
</template>
......@@ -178,7 +186,8 @@
},
destroyed: function () {
clearInterval(this.payTimer)
console.log('destroyed')
clearInterval(this.payTimer)
},
methods: {
......@@ -194,9 +203,32 @@
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 () {
console.log('payway', this.payCode[Number(this.payway)])
if (this.payCode[Number(this.payway)]) {
this.winDialog = true
clearInterval(this.payTimer)
this.queryPayState()
return
......@@ -228,6 +260,7 @@
iRequest.request(iHost.base + 'bid/order/doPay', funcParam, 'json', 'post')
.then((funcResponse) => {
this.winDialog = true
this.$set(this.payId, Number(this.payway), funcResponse.orderId)
this.$set(this.payCode, Number(this.payway), funcResponse.code)
this.$set(this.payNumber, Number(this.payway), funcResponse.payId)
......@@ -275,6 +308,13 @@
})
}, 2000)
},
/**
* 添加购买合同
* @function
* @param {object} funcDetails
* @returns
*/
buyContract: function () {
let funcParam = {}
// 没有合同
......@@ -339,32 +379,14 @@
}
},
onSelectPay: function () {
if (this.componentProject.isPackage && this.contractSelection.total === 0) {
this.buyContract()
return
}
if (!this.componentProject.isPackage && this.componentContract[0].budget === 0) {
this.buyContract()
return
}
this.winDialog = true
clearInterval(this.payTimer)
this.queryPayCode()
},
onSubmit: function () {
},
/**
* 关闭支付窗口
* @function
* @returns
*/
onCloseDialog: function () {
clearInterval(this.payTimer)
},
onChangeRadio: function (funcRadio) {
this.payway = funcRadio
this.queryPayCode()
},
}
}
</script>
......@@ -377,6 +399,22 @@
background: @colorWhite;
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-way {
margin: 0 10px 20px 10px;
......@@ -431,7 +469,7 @@
margin-bottom: 24px;
border-bottom: 1px #F2F2F2 solid;
span {
> span {
font-size: @fontSize04;
}
}
......@@ -460,14 +498,14 @@
> div {
height: 36px;
span:nth-child(1) {
> span:nth-child(1) {
min-width: 160px;
margin-right: 10px;
text-align: right;
font-size: @fontSize02;
}
span:nth-child(2) {
> span:nth-child(2) {
text-align: left;
font-size: @fontSize01;
}
......@@ -480,14 +518,14 @@
> div {
margin-top: 40px;
span:nth-child(1) {
> span:nth-child(1) {
min-width: 160px;
margin-right: 10px;
text-align: right;
font-size: @fontSize02;
}
span:nth-child(2) {
> span:nth-child(2) {
text-align: left;
font-size: @fontSize01;
}
......
......@@ -382,8 +382,6 @@ let output = function (thisVue, id, type, isPreview) {
'isPackage': funcResponse.containPackage === '0' ? false : true,
}
thisVue.$store.commit('componentProject', funcProject)
let funcRawData
if (funcProject.isPackage) {
......@@ -424,8 +422,8 @@ let output = function (thisVue, id, type, isPreview) {
'quantity': '',
'budget': funcRawData.price,
'timeClose': '',
'fileName': funcRawData.tenderFile.name,
'fileUrl': funcRawData.tenderFile.url
'fileName': funcRawData.tenderFile ? funcRawData.tenderFile.name : '',
'fileUrl': funcRawData.tenderFile ? funcRawData.tenderFile.url : ''
}]
}
thisVue.$store.commit('componentContract', funcPackage)
......
......@@ -119,9 +119,9 @@
<!-- 此处 input 是为了模拟校验而设置的隐藏组件 -->
<el-input class="global-none" v-model="formRegister.skillSelect"></el-input>
<div class="col">
<div class="row" v-for="index of skillQuantity" :key="index">
<currencySkill :identity="index - 1" @change="(item) => { onSkillChange(index - 1, item) }"></currencySkill>
<button v-if="index !== 5" class="global-cursor register-info-skill-select" @click.prevent="onSkillInsert">
<div class="row register-info-skill" v-for="index of skillQuantity" :key="index">
<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())">
<i class="el-icon-plus"></i>
</button>
</div>
......@@ -267,21 +267,21 @@
import iCurrencyMap from '@/components/currency-map.vue'
import iCurrencyArea from '@/components/currency-area.vue'
import iCurrencySkill from '@/components/currency-skill.vue'
export default {
components: {
currencyMap: iCurrencyMap,
currencyArea: iCurrencyArea,
currencySkill: iCurrencySkill
},
data: function () {
return {
state: 1,
progress: ['基础信息', '职称上传', '最高学历', '设置密码', '完成注册'],
skillOption: [],
skillQuantity: 1,
skillQuantityMax: 5,
formRegister: {},
......@@ -434,7 +434,7 @@
// 职称信息
skillSelect: '',
skillId: [],
skillId: [[], [], [], [], []],
skillImage: '',
// 学历信息
......@@ -450,14 +450,14 @@
// 重置区域选择数据
this.$store.commit('areaSelection', [])
this.$store.commit('selectionSkill', [])
},
init: function () {
console.log('init')
iRequest.request(iHost.base + 'bid/common/getApiProjectTypeOptions', {}, 'json', 'get')
.then((funcResponse) => {
this.$store.commit('dictionarySkill', funcResponse)
this.skillOption = funcResponse
console.log(funcResponse)
})
},
......@@ -781,9 +781,8 @@
* @param {array } funcSelectId - ['id01', 'id02', 'id03', 'id04', '' ]
* @returns
*/
onSkillChange: function (funcIndex, funcSelectId) {
onSkillSelect: function (funcLevel, funcValue) {
this.formRegister.skillSelect = 'skillSelect'
this.formRegister.skillId[funcIndex] = funcSelectId
},
/**
......@@ -793,10 +792,7 @@
*/
onSkillInsert: function () {
if (this.skillQuantity < 5) {
this.skillQuantity = this.skillQuantity + 1
let funcSelectionSkill = this.$store.getters.selectionSkill
funcSelectionSkill.push([0, 0, 0, 0, 0])
this.$store.commit('selectionSkill', funcSelectionSkill)
this.skillQuantity = this.skillQuantity + 1
}
},
......@@ -1041,11 +1037,20 @@
.register-info {
width: 640px;
.register-info-skill > .el-cascader {
min-width: 580px;
margin: 0 10px 10px 0;
}
.register-info-skill-select {
width: 40px;
height: 40px;
border: 1px @colorGrey80 solid;
border: 1px #dcdfe6 solid;
background: #FFFFFF;
i {
color: #606266;
}
}
.el-form {
......
......@@ -82,6 +82,44 @@
<el-form-item label="">
<span>复印件需盖有公司印章,大小不超过5MB</span>
</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-button type="primary" @click.prevent="onPrevious()">上一步</el-button>
<el-button type="primary" @click.prevent="onNext()">下一步</el-button>
......@@ -219,6 +257,7 @@
// 证照上传
licenseImage: '',
quoteImage: '',
// 税务信息
companyTax: '',
......@@ -250,6 +289,14 @@
},
image: []
},
quote: {
url: iHost.uploadFile,
params: {
'file': '',
'uploadPath': 'register/supplier/license/',
},
image: []
},
},
// 文件上传组件配置
uploadFileOption: {
......@@ -308,6 +355,9 @@
licenseImage: [
{ required: true, message: '请上传营业执照', trigger: 'blur' }
],
quoteImage: [
{ required: true, message: '请上传网上竞价承诺书', trigger: 'blur' }
],
companyTax: [
{ required: true, message: '请选择税务资质', trigger: 'blur' }
],
......@@ -383,6 +433,8 @@
// 证照上传
licenseImage: '',
quoteImage: '',
isQuote: '0',
// 税务信息
companyTax: '',
......@@ -655,6 +707,8 @@
'emailCode': this.formRegister.emailCode,
'license': this.uploadOption.license.image[0].url,
'bidStatement': this.uploadOption.quote.image[0].url,
'isJoinBid': this.formRegister.isQuote,
'taxType': this.formRegister.companyTax,
'phone': this.formRegister.companyPhone,
......@@ -690,6 +744,16 @@
},
/**
* 下载申明
* @function
* @returns
*/
onLoadStatement: function () {
console.log('onLoadStatement')
window.location.href = '../../static/quote.zip'
},
/**
* 返回首页
* @function
* @returns
......
......@@ -44,6 +44,8 @@
</template>
<script>
import iCryptoJs from 'crypto-js'
import iHost from '@/common/js/host.js'
import iRule from '@/common/js/rule/rule.js'
import iRequest from '@/common/js/request/request.js'
......@@ -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
* @param {number} funcIndex - 组件索引
......@@ -240,10 +259,11 @@
if (funcValid) {
let funcParam = {
'loginName': this.info.phone,
'password': this.info.password,
'password': this.encryptByDES(this.info.password, 'bidkey11'),
'userType': this.info.identity,
'vCode': this.info.code
}
iRequest.request(iHost.base + 'bid/zLogin/login', funcParam, 'json', 'post', { isToken: false })
.then((funcResponse) => {
localStorage.clear()
......
......@@ -139,9 +139,9 @@
<!-- 此处 input 是为了模拟校验而设置的隐藏组件 -->
<el-input class="global-none" v-model="formRegister.skillSelect"></el-input>
<div class="col">
<div class="row" v-for="index of skillQuantity" :key="index">
<currencySkill :identity="index - 1" @change="(item) => { onSkillChange(index - 1, item) }"></currencySkill>
<button v-if="index !== 5" class="global-cursor register-info-skill-select" @click.prevent="onSkillInsert">
<div class="row register-info-skill" v-for="index of skillQuantity" :key="index">
<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()">
<i class="el-icon-plus"></i>
</button>
</div>
......@@ -200,13 +200,11 @@
import iCurrencyMap from '@/components/currency-map.vue'
import iCurrencyArea from '@/components/currency-area.vue'
import iCurrencySkill from '@/components/currency-skill.vue'
export default {
components: {
currencyMap: iCurrencyMap,
currencyArea: iCurrencyArea,
currencySkill: iCurrencySkill
},
data: function () {
return {
......@@ -214,6 +212,7 @@
skillAll: [],
skillSelectionIndex: [],
skillOption: [],
skillQuantity: 1,
skillQuantityMax: 5,
uploadFileUrl: '',
......@@ -365,7 +364,6 @@
// 设置区域标识
this.formRegister.areaArray = funcResponse.area.split(',')
this.$store.commit('areaSelection', this.formRegister.areaArray)
console.log(JSON.stringify(this.formRegister.areaArray))
let funImageUrl
// 设置入库声明图片
......@@ -431,8 +429,7 @@
let funcSkillDictionary = iRequest.request(iHost.base + 'bid/common/getApiProjectTypeOptions', {}, 'json', 'get')
.then((funcResponse) => {
this.skillAll = funcResponse
if (!this.$store.state.dictionarySkill.length) this.$store.commit('dictionarySkill', this.skillAll)
this.skillOption = funcResponse
})
Promise.all([ funcInfo, funcSkillDictionary ])
......@@ -466,7 +463,7 @@
// 职称信息
skillSelect: '',
skillId: [],
skillId: [[], [], [], [], []],
skillImage: '',
// 学历信息
......@@ -625,6 +622,7 @@
this.formRegister.areaArray = funcArea
this.$store.commit('areaSelection', funcArea)
},
/**
* 专业选择组件选择事件
* @function
......@@ -632,9 +630,8 @@
* @param {array } funcSelectId - ['id01', 'id02', 'id03', 'id04', '' ]
* @returns
*/
onSkillChange: function (funcIndex, funcSelectId) {
onSkillSelect: function (funcLevel, funcValue) {
this.formRegister.skillSelect = 'skillSelect'
this.formRegister.skillId[funcIndex] = funcSelectId
},
/**
......@@ -644,10 +641,7 @@
*/
onSkillInsert: function () {
if (this.skillQuantity < 5) {
this.skillQuantity = this.skillQuantity + 1
let funcSelectionSkill = this.$store.getters.selectionSkill
funcSelectionSkill.push([0, 0, 0, 0, 0])
this.$store.commit('selectionSkill', funcSelectionSkill)
this.skillQuantity = this.skillQuantity + 1
}
},
......@@ -844,11 +838,22 @@
.detail-content {
width: 720px;
margin: 20px 0;
.register-info-skill > .el-cascader {
min-width: 390px;
margin: 0 10px 10px 0;
}
.register-info-skill-select {
width: 40px;
height: 40px;
border: 1px @colorGrey80 solid;
border: 1px #dcdfe6 solid;
background: #FFFFFF;
i {
color: #606266;
}
}
.el-form {
......
......@@ -21,6 +21,7 @@
<!-- 项目进度 - 采购 -->
<div class="supplier-operation">
<!-- 测试代码 -->
<!-- <button @click="onChange()">修改</button> -->
<button v-if="formRegister.examineState !== 0" @click="onChange()">修改</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