Commit 7b7f1087 by 严立

竞价变更公告

parent b75bec94
This diff could not be displayed because it is too large.
{ {
"name": "merchant2.1.x", "name": "merchant2.1.x",
"version": "1.0.0", "version": "1.0.0",
"description": "A Vue.js project", "description": "A Vue.js project",
"author": "立 <236048639@qq.com>", "author": "立 <236048639@qq.com>",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev", "start": "npm run dev",
"build": "node build/build.js" "build": "node build/build.js"
}, },
"dependencies": { "dependencies": {
"babel-preset-es2015": "^6.24.1", "babel-preset-es2015": "^6.24.1",
"crypto-js": "^4.0.0", "crypto-js": "^4.0.0",
"downloadjs": "^1.4.7", "downloadjs": "^1.4.7",
"element-ui": "^2.13.2", "element-ui": "^2.13.2",
"miment": "0.0.9", "miment": "0.0.9",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-router": "^3.3.4" "vue-calendar-component": "^2.8.2",
}, "vue-router": "^3.3.4"
"devDependencies": { },
"autoprefixer": "^7.1.2", "devDependencies": {
"babel-core": "^6.22.1", "autoprefixer": "^7.1.2",
"babel-helper-vue-jsx-merge-props": "^2.0.3", "babel-core": "^6.22.1",
"babel-loader": "^7.1.1", "babel-helper-vue-jsx-merge-props": "^2.0.3",
"babel-plugin-syntax-jsx": "^6.18.0", "babel-loader": "^7.1.1",
"babel-plugin-transform-runtime": "^6.22.0", "babel-plugin-syntax-jsx": "^6.18.0",
"babel-plugin-transform-vue-jsx": "^3.5.0", "babel-plugin-transform-runtime": "^6.22.0",
"babel-polyfill": "^6.26.0", "babel-plugin-transform-vue-jsx": "^3.5.0",
"babel-preset-env": "^1.3.2", "babel-polyfill": "^6.26.0",
"babel-preset-stage-2": "^6.22.0", "babel-preset-env": "^1.3.2",
"chalk": "^2.0.1", "babel-preset-stage-2": "^6.22.0",
"copy-webpack-plugin": "^4.0.1", "chalk": "^2.0.1",
"css-loader": "^0.28.0", "copy-webpack-plugin": "^4.0.1",
"extract-text-webpack-plugin": "^3.0.0", "css-loader": "^0.28.0",
"file-loader": "^1.1.4", "extract-text-webpack-plugin": "^3.0.0",
"font-spider": "^1.3.5", "file-loader": "^1.1.4",
"friendly-errors-webpack-plugin": "^1.6.1", "font-spider": "^1.3.5",
"html-webpack-plugin": "^2.30.1", "friendly-errors-webpack-plugin": "^1.6.1",
"js-base64": "^2.6.2", "html-webpack-plugin": "^2.30.1",
"less": "^3.11.3", "js-base64": "^2.6.2",
"less-loader": "^4.1.0", "less": "^3.11.3",
"node-notifier": "^5.1.2", "less-loader": "^4.1.0",
"optimize-css-assets-webpack-plugin": "^3.2.0", "node-notifier": "^5.1.2",
"ora": "^1.2.0", "optimize-css-assets-webpack-plugin": "^3.2.0",
"portfinder": "^1.0.26", "ora": "^1.2.0",
"postcss-import": "^11.0.0", "portfinder": "^1.0.26",
"postcss-loader": "^2.0.8", "postcss-import": "^11.0.0",
"postcss-url": "^7.2.1", "postcss-loader": "^2.0.8",
"rimraf": "^2.6.0", "postcss-url": "^7.2.1",
"sass-resources-loader": "^2.0.3", "rimraf": "^2.6.0",
"semver": "^5.3.0", "sass-resources-loader": "^2.0.3",
"shelljs": "^0.7.6", "semver": "^5.3.0",
"uglifyjs-webpack-plugin": "^1.1.1", "shelljs": "^0.7.6",
"url-loader": "^0.5.8", "uglifyjs-webpack-plugin": "^1.1.1",
"vue-baidu-map": "^0.21.22", "url-loader": "^0.5.8",
"vue-cli-plugin-style-resources-loader": "^0.1.4", "vue-baidu-map": "^0.21.22",
"vue-loader": "^13.3.0", "vue-cli-plugin-style-resources-loader": "^0.1.4",
"vue-pdf": "^4.1.0", "vue-loader": "^13.3.0",
"vue-style-loader": "^3.0.1", "vue-pdf": "^4.1.0",
"vue-template-compiler": "^2.6.11", "vue-style-loader": "^3.0.1",
"vuex": "^3.5.1", "vue-template-compiler": "^2.6.11",
"webpack": "^3.6.0", "vuex": "^3.5.1",
"webpack-bundle-analyzer": "^2.9.0", "webpack": "^3.6.0",
"webpack-dev-server": "^2.9.1", "webpack-bundle-analyzer": "^2.9.0",
"webpack-merge": "^4.1.0" "webpack-dev-server": "^2.9.1",
}, "webpack-merge": "^4.1.0"
"engines": { },
"node": ">= 6.0.0", "engines": {
"npm": ">= 3.0.0" "node": ">= 6.0.0",
}, "npm": ">= 3.0.0"
"browserslist": [ },
"> 1%", "browserslist": [
"last 2 versions", "> 1%",
"not ie <= 8" "last 2 versions",
] "not ie <= 8"
} ]
}
@maxWidth: 1200px; @maxWidth: 1200px;
@fontSizeBase: 12; @fontSizeBase: 12;
@fontSizeMultiple: 2; @fontSizeMultiple: 2;
@fontSize00: @fontSizeBase + @fontSizeMultiple * 0px; // 12px @fontSize00: @fontSizeBase + @fontSizeMultiple * 0px; // 12px
@fontSize01: @fontSizeBase + @fontSizeMultiple * 1px; // 14px @fontSize01: @fontSizeBase + @fontSizeMultiple * 1px; // 14px
@fontSize02: @fontSizeBase + @fontSizeMultiple * 2px; // 16px @fontSize02: @fontSizeBase + @fontSizeMultiple * 2px; // 16px
@fontSize03: @fontSizeBase + @fontSizeMultiple * 3px; // 18px @fontSize03: @fontSizeBase + @fontSizeMultiple * 3px; // 18px
@fontSize04: @fontSizeBase + @fontSizeMultiple * 4px; // 20px @fontSize04: @fontSizeBase + @fontSizeMultiple * 4px; // 20px
@fontSize06: @fontSizeBase + @fontSizeMultiple * 6px; // 24px @fontSize06: @fontSizeBase + @fontSizeMultiple * 6px; // 24px
@fontSize07: @fontSizeBase + @fontSizeMultiple * 7px; // 26px @fontSize07: @fontSizeBase + @fontSizeMultiple * 7px; // 26px
@fontSize08: @fontSizeBase + @fontSizeMultiple * 8px; // 28px @fontSize08: @fontSizeBase + @fontSizeMultiple * 8px; // 28px
@fontSize09: @fontSizeBase + @fontSizeMultiple * 9px; // 30px @fontSize09: @fontSizeBase + @fontSizeMultiple * 9px; // 30px
@fontSize10: @fontSizeBase + @fontSizeMultiple * 10px; // 32px @fontSize10: @fontSizeBase + @fontSizeMultiple * 10px; // 32px
@colorGrey00: #000000; @colorGrey00: #000000;
@colorGrey10: #1A1A1A; @colorGrey10: #1A1A1A;
@colorGrey20: #333333; @colorGrey20: #333333;
@colorGrey30: #4D4D4D; @colorGrey30: #4D4D4D;
@colorGrey40: #666666; @colorGrey40: #666666;
@colorGrey50: #808080; @colorGrey50: #808080;
@colorGrey60: #999999; @colorGrey60: #999999;
@colorGrey70: #B3B3B3; @colorGrey70: #B3B3B3;
@colorGrey80: #CCCCCC; @colorGrey80: #CCCCCC;
@colorGrey90: #E5E5E5; @colorGrey90: #E5E5E5;
@colorRed: #CF2F1D; @colorRed: #CF2F1D;
@colorBlue: #2575FA; @colorBlue: #2575FA;
@colorGreen: #49B939; @colorGreen: #49B939;
@colorWhite: #FFFFFF; @colorWhite: #FFFFFF;
@colorYellow: #EBA947; @colorYellow: #EBA947;
@backgroundImageUrl: '~@/assets/bg-06.png'; @backgroundImageUrl: '~@/assets/bg-06.png';
// 页面正文宽度 // 页面正文宽度
.global-maxwidth { .global-maxwidth {
width: @maxWidth; width: @maxWidth;
max-width: @maxWidth; max-width: @maxWidth;
} }
// 单行文本超出省略 // 单行文本超出省略
.global-overflow-ellipsis { .global-overflow-ellipsis {
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
} }
.global-color-red { color: @colorRed; } .global-color-red { color: @colorRed; }
.global-color-blue { color: @colorBlue; } .global-color-blue { color: @colorBlue; }
.global-color-grey { color: @colorGrey60; } .global-color-grey { color: @colorGrey60; }
.global-color-green { color: @colorGreen; } .global-color-green { color: @colorGreen; }
.global-color-white { color: @colorWhite; } .global-color-white { color: @colorWhite; }
.global-color-yellow { color: @colorYellow; } .global-color-yellow { color: @colorYellow; }
// 禁用文本样式 // 禁用文本样式
.global-disable-font { .global-disable-font {
color: @colorGrey60 !important; color: @colorGrey60 !important;
} }
// 禁用背景样式 // 禁用背景样式
.global-disable { .global-disable {
background: @colorGrey60 !important; background: @colorGrey60 !important;
} }
// 置灰背景样式 // 置灰背景样式
.global-enable { .global-enable {
background: @colorBlue !important; background: @colorBlue !important;
} }
// 选中文本样式 // 选中文本样式
.global-enable-font { .global-enable-font {
color: @colorBlue !important; color: @colorBlue !important;
} }
.global-none { .global-none {
display: none !important; display: none !important;
} }
.global-cursor { .global-cursor {
cursor: pointer; cursor: pointer;
} }
.global-hover:hover { .global-hover:hover {
color: @colorBlue; color: @colorBlue;
} }
.global-routine-button { .global-routine-button {
width: 160px; width: 160px;
height: 52px; height: 52px;
margin: 0 40px !important; margin: 0 40px !important;
border-radius: 26px; border-radius: 26px;
border: 1px @colorBlue solid !important; border: 1px @colorBlue solid !important;
color: @colorBlue !important; color: @colorBlue !important;
background: @colorWhite !important; background: @colorWhite !important;
} }
.global-routine-button:focus, .global-routine-button:focus,
.global-routine-button:hover { .global-routine-button:hover {
border: 1px @colorBlue solid !important; border: 1px @colorBlue solid !important;
color: @colorBlue !important; color: @colorBlue !important;
background: @colorWhite !important; background: @colorWhite !important;
} }
.global-enable-button { .global-enable-button {
width: 160px; width: 160px;
height: 52px; height: 52px;
margin: 0 40px !important; margin: 0 40px !important;
border-radius: 26px; border-radius: 26px;
border: 1px @colorBlue solid !important; border: 1px @colorBlue solid !important;
color: @colorWhite !important; color: @colorWhite !important;
background: @colorBlue !important; background: @colorBlue !important;
} }
.global-enable-button:focus, .global-enable-button:focus,
.global-enable-button:hover { .global-enable-button:hover {
border: 1px @colorBlue solid !important; border: 1px @colorBlue solid !important;
color: @colorWhite !important; color: @colorWhite !important;
background: @colorBlue !important; background: @colorBlue !important;
} }
.global-disable-button { .global-disable-button {
width: 160px; width: 160px;
height: 52px; height: 52px;
margin: 0 40px !important; margin: 0 40px !important;
border-radius: 26px; border-radius: 26px;
border: 1px @colorGrey50 solid !important; border: 1px @colorGrey50 solid !important;
color: @colorWhite !important; color: @colorWhite !important;
background: @colorGrey50 !important; background: @colorGrey50 !important;
} }
.global-disable-button:focus, .global-disable-button:focus,
.global-disable-button:hover { .global-disable-button:hover {
border: 1px @colorGrey50 solid !important; border: 1px @colorGrey50 solid !important;
color: @colorWhite !important; color: @colorWhite !important;
background: @colorGrey50 !important; background: @colorGrey50 !important;
} }
// element-ui 自定样式 // element-ui 自定样式
//按钮组件 //按钮组件
.el-button:hover { .el-button:hover {
color: #000000; color: #000000;
border-color: #dcdfe6; border-color: #dcdfe6;
background-color: #ffffff; background-color: #ffffff;
} }
// 文件上传组件清除渐变动画 // 文件上传组件清除渐变动画
.el-upload-list__item { .el-upload-list__item {
transition: none !important; transition: none !important;
} }
// 分页组件 // 分页组件
.el-pagination { .el-pagination {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
.btn-prev, .btn-prev,
.btn-next { .btn-next {
display: none; display: none;
} }
> span { > span {
display: inline-block; display: inline-block;
height: 46px !important; height: 46px !important;
} }
> span:nth-child(1) { > span:nth-child(1) {
padding-top: 8px; padding-top: 8px;
font-size: @fontSize02; font-size: @fontSize02;
} }
> span:nth-child(2) { > span:nth-child(2) {
width: 136px; width: 136px;
height: 46px; height: 46px;
font-size: @fontSize02; font-size: @fontSize02;
div, div,
input { input {
width: 136px; width: 136px;
height: 46px; height: 46px;
margin: 0 !important; margin: 0 !important;
padding: 0 !important; padding: 0 !important;
} }
span { span {
font-size: @fontSize02; font-size: @fontSize02;
} }
.el-input__inner { .el-input__inner {
border: none; border: none;
font-size: @fontSize02 !important; font-size: @fontSize02 !important;
background: #f6f6f9; background: #f6f6f9;
} }
} }
.el-pager { .el-pager {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
.active { .active {
color: #FFFFFF; color: #FFFFFF;
background: #CF2F1D !important; background: #CF2F1D !important;
} }
.more, .more,
.number { .number {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
width: 46px; width: 46px;
height: 46px; height: 46px;
margin: 0 4px; margin: 0 4px;
padding: 0; padding: 0;
font-size: @fontSize02; font-size: @fontSize02;
font-weight: 500; font-weight: 500;
} }
.number { .number {
background: #f6f6f9; background: #f6f6f9;
} }
} }
> span:nth-child(6) { > span:nth-child(6) {
width: 130px; width: 130px;
font-size: @fontSize02; font-size: @fontSize02;
.el-input { .el-input {
margin: 0 8px 0 12px; margin: 0 8px 0 12px;
} }
.el-input__inner { .el-input__inner {
width: 46px; width: 46px;
height: 46px; height: 46px;
font-size: @fontSize02; font-size: @fontSize02;
} }
} }
} }
\ No newline at end of file
let output = { let output = {
// 配置后台公告字典标识映射 // 配置后台公告字典标识映射
// 避免后台更变数值影响逻辑 // 避免后台更变数值影响逻辑
// - 全部 // - 全部
// 0 - 竞价报价 // 0 - 竞价报价
// 1 - 竞价结果 // 1 - 竞价结果
// 2 - 招标采购 // 2 - 招标采购
// 3 - 资格预审 // 3 - 资格预审
// 4 - 变更澄清 // 4 - 变更澄清
// 5 - 中标候选 // 5 - 中标候选
// 6 - 招标结果 // 6 - 招标结果
// 9 - 其他公告 // 9 - 其他公告
noticeType: { // 10 - 竞价变更公告
raw: ['', 1, 2, 5, 3, 4, 7, 8, 6], noticeType: {
mapping: ['', 2, 3, 4, 5, 6, 0, 1, 9], raw: ['', 1, 2, 5, 3, 4, 7, 9, 8, 6],
} mapping: ['', 2, 3, 4, 5, 6, 0, 10, 1, 9],
} }
}
export default output export default output
\ No newline at end of file
let output = { let output = {
// 开发路径
// base: 'http://bid-server.meiqicloud.com/',
// resources: 'http://bid-web.meiqicloud.com/',
// agentSignIn: 'http://bid-vue.meiqicloud.com/'
// 测试环境 // 测试环境
// base: '/Api/', base: 'http://bid-server.meiqicloud.com/', // 开发路径
// resources: 'http://bid-web.meiqicloud.com', // base: '/Api/', // 部署路径
// agentSignIn: 'http://bid-vue.meiqicloud.com/' resources: 'http://bid-web.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'
......
<template> <template>
<!-- 信息模板 - 代理机构 --> <!-- 信息模板 - 代理机构 -->
<div class="components-agency"> <div class="components-agency">
<div class="info"> <div class="info">
<div class="info-item row align-c"> <div class="info-item row align-c">
<span>招标代理机构:</span> <span>招标代理机构:</span>
<span>{{componentAgency.name}}</span> <span>{{componentAgency.name}}</span>
</div> </div>
<div class="info-item row align-c"> <div class="info-item row align-c">
<span>地址:</span> <span>地址:</span>
<span>{{componentAgency.address}}</span> <span>{{componentAgency.address}}</span>
</div> </div>
<div class="info-item row align-c"> <div class="info-item row align-c">
<span>联系人:</span> <span>联系人:</span>
<span>{{componentAgency.liaison}}</span> <span>{{componentAgency.liaison}}</span>
</div> </div>
<div class="info-item row align-c"> <div class="info-item row align-c">
<span>联系电话:</span> <span>联系电话:</span>
<span>{{componentAgency.phone}}</span> <span>{{componentAgency.phone}}</span>
</div> </div>
<div class="info-item row align-c"> <div class="info-item row align-c">
<span>邮箱:</span> <span>邮箱:</span>
<span>{{componentAgency.email}}</span> <span>{{componentAgency.email}}</span>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
export default { export default {
data () { data () {
return { return {
} }
}, },
computed: { computed: {
componentAgency: function () { componentAgency: function () {
return this.$store.state.componentAgency console.log('this.$store.state.componentAgency', this.$store.state.componentAgency)
}, return this.$store.state.componentAgency
}, },
} },
</script> }
</script>
<style lang="less">
.components-agency { <style lang="less">
.info { .components-agency {
.info-item { .info {
margin: 10px 0; .info-item {
margin: 10px 0;
span:nth-child(1) {
min-width: 160px; span:nth-child(1) {
margin-right: 10px; min-width: 160px;
text-align: right; margin-right: 10px;
font-size: @fontSize02; text-align: right;
} font-size: @fontSize02;
}
span:nth-child(2) {
text-align: left; span:nth-child(2) {
font-size: @fontSize01; text-align: left;
} font-size: @fontSize01;
} }
} }
} }
</style> }
</style>
<template> <template>
<!-- 信息模板 - 项目进度 --> <!-- 信息模板 - 项目进度 -->
<div class="components-progress row align-c"> <div class="components-progress row align-c">
<div v-if="componentProject.noticeType !== 0" class="row"> <div v-if="componentProject.noticeType !== 0" class="row">
<!-- 节点显示 --> <!-- 节点显示 -->
<div class="node row"> <div class="node row">
<div class="col con-c align-c"> <div class="col con-c align-c">
<div class="node-point"></div> <div class="node-point"></div>
<div class="node-name">{{progressNode[0].text}}</div> <div class="node-name">{{progressNode[0].text}}</div>
<div class="node-time">{{progressNode[0].time}}</div> <div class="node-time">{{progressNode[0].time}}</div>
</div> </div>
<div class="col con-c align-c"> <div class="col con-c align-c">
<div :class="progressState >= 2 ? 'node-point' : 'node-point-unactive'"></div> <div :class="progressState >= 2 ? 'node-point' : 'node-point-unactive'"></div>
<div class="node-name">{{progressNode[1].text}}</div> <div class="node-name">{{progressNode[1].text}}</div>
<div class="node-time">{{progressNode[1].time}}</div> <div class="node-time">{{progressNode[1].time}}</div>
</div> </div>
<div class="col con-c align-c"> <div class="col con-c align-c">
<div :class="progressState > 3 ? 'node-point' : 'node-point-unactive'"></div> <div :class="progressState > 3 ? 'node-point' : 'node-point-unactive'"></div>
<div class="node-name">{{progressNode[2].text}}</div> <div class="node-name">{{progressNode[2].text}}</div>
<div class="node-time">{{progressNode[2].time}}</div> <div class="node-time">{{progressNode[2].time}}</div>
</div> </div>
<div :style="'background-image: linear-gradient(to right, #CF2F1D 0%, #CF2F1D ' + progressWidth * progressState + '%, #FFFFFF ' + progressWidth * progressState + '%);'"></div> <div :style="'background-image: linear-gradient(to right, #CF2F1D 0%, #CF2F1D ' + progressWidth * progressState + '%, #FFFFFF ' + progressWidth * progressState + '%);'"></div>
</div> </div>
<!-- 操作按钮 --> <!-- 操作按钮 -->
<div v-if="componentProject.isOnline" class="operate row con-e align-c"> <div v-if="componentProject.isOnline" class="operate row con-e align-c">
<div class="col con-c align-c"> <div class="col con-c align-c">
<div v-if="operateText !== ''" class="operate-button"> <div v-if="operateText !== ''" class="operate-button">
<!-- 不含合同包的公告 --> <!-- 不含合同包的公告 -->
<button v-if="progressState === 2 && !componentProject.isPackage && !operateIsBuy" class="global-enable" @click="onEntered()">立即报名</button> <button v-if="progressState === 2 && !componentProject.isPackage && !operateIsBuy" class="global-enable" @click="onEntered()">立即报名</button>
<button v-if="progressState === 2 && !componentProject.isPackage && operateIsBuy" class="global-enable global-cursor" @click="onDocument()">下载标书</button> <button v-if="progressState === 2 && !componentProject.isPackage && operateIsBuy" class="global-enable global-cursor" @click="onDocument()">下载标书</button>
<!-- 包含合同包的公告 --> <!-- 包含合同包的公告 -->
<button v-if="progressState === 2 && componentProject.isPackage" class="global-enable" @click="onEntered()">立即报名</button> <button v-if="progressState === 2 && componentProject.isPackage" class="global-enable" @click="onEntered()">立即报名</button>
<button v-if="progressState === 3" class="global-disable" disabled>报名已截止</button> <button v-if="progressState === 3" class="global-disable" disabled>报名已截止</button>
<button v-if="progressState === 4" class="global-disable" disabled>报名已截止</button> <button v-if="progressState === 4" class="global-disable" disabled>报名已截止</button>
</div> </div>
<div class="operate-tip"> <div class="operate-tip">
<span v-if="progressState === 1">开始报名仅剩 <span class="global-color-red">{{operateDay}}</span><span class="global-color-red">{{operateHour}}</span> 小时</span> <span v-if="progressState === 1">开始报名仅剩 <span class="global-color-red">{{operateDay}}</span><span class="global-color-red">{{operateHour}}</span> 小时</span>
<span v-if="progressState === 2 && !operateIsBuy">报名仅剩 <span class="global-color-red">{{operateDay}}</span><span class="global-color-red">{{operateHour}}</span> 小时</span> <span v-if="progressState === 2 && !operateIsBuy">报名仅剩 <span class="global-color-red">{{operateDay}}</span><span class="global-color-red">{{operateHour}}</span> 小时</span>
</div> </div>
<div v-if="progressState === 2 && componentProject.isPackage && operateIsBuy" class="operate-bid row align-c"> <div v-if="progressState === 2 && componentProject.isPackage && operateIsBuy" class="operate-bid row align-c">
<span class="global-cursor" @click="onDocument()">下载标书</span> <span class="global-cursor" @click="onDocument()">下载标书</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- 竞标公告进度样式 --> <!-- 竞标公告进度样式 -->
<div v-if="[0].indexOf(componentProject.noticeType) >= 0" class="row"> <div v-if="[0].indexOf(componentProject.noticeType) >= 0" class="row">
<!-- 节点显示 --> <!-- 节点显示 -->
<div class="node row"> <div class="node row">
<div class="col con-c align-c"> <div class="col con-c align-c">
<div class="node-point"></div> <div class="node-point"></div>
<div class="node-name">{{progressNode[0].text}}</div> <div class="node-name">{{progressNode[0].text}}</div>
<div class="node-time">{{progressNode[0].time}}</div> <div class="node-time">{{progressNode[0].time}}</div>
</div> </div>
<div class="col con-c align-c"> <div class="col con-c align-c">
<div :class="progressState >= 2 ? 'node-point' : 'node-point-unactive'"></div> <div :class="progressState >= 2 ? 'node-point' : 'node-point-unactive'"></div>
<div class="node-name">{{progressNode[1].text}}</div> <div class="node-name">{{progressNode[1].text}}</div>
<div class="node-time">{{progressNode[1].time}}</div> <div class="node-time">{{progressNode[1].time}}</div>
</div> </div>
<div class="col con-c align-c"> <div class="col con-c align-c">
<div :class="progressState > 3 ? 'node-point' : 'node-point-unactive'"></div> <div :class="progressState > 3 ? 'node-point' : 'node-point-unactive'"></div>
<div class="node-name">{{progressNode[2].text}}</div> <div class="node-name">{{progressNode[2].text}}</div>
<div class="node-time">{{' '}}</div> <div class="node-time">{{' '}}</div>
</div> </div>
<div :style="'background-image: linear-gradient(to right, #CF2F1D 0%, #CF2F1D ' + progressWidth * progressState + '%, #FFFFFF ' + progressWidth * progressState + '%);'"></div> <div :style="'background-image: linear-gradient(to right, #CF2F1D 0%, #CF2F1D ' + progressWidth * progressState + '%, #FFFFFF ' + progressWidth * progressState + '%);'"></div>
</div> </div>
<!-- 操作按钮 --> <!-- 操作按钮 -->
<div v-if="componentProject.isOnline" class="operate row con-e align-c"> <div v-if="componentProject.isOnline" class="operate row con-e align-c">
<div class="col con-c align-c"> <div class="col con-c align-c">
<img v-if="componentProject.noticeType === 0" class="operate-img" src="../assets/notice-bitton.png" alt=""> <img v-if="componentProject.noticeType === 0" class="operate-img" src="../assets/notice-bitton.png" alt="">
<div v-if="operateText !== ''" class="operate-button"> <div v-if="operateText !== ''" class="operate-button">
<button v-if="progressState === 2" class="global-enable" @click="onOffer()">立即报价</button> <button v-if="[2].indexOf(componentProgress.state) >= 0" class="global-enable" @click="onOffer()">立即报价</button>
<button v-if="progressState === 3" class="global-disable" disabled>报价已结束</button> <button v-if="[3, 4].indexOf(componentProgress.state) >= 0" class="global-disable" disabled>报价已结束</button>
<button v-if="progressState === 4" class="global-disable" disabled>报价已结束</button> <button v-if="[5].indexOf(componentProgress.state) >= 0" class="global-disable" disabled>报价已暂停</button>
</div> <button v-if="[6].indexOf(componentProgress.state) >= 0" class="global-disable" disabled>报价已终止</button>
<div class="operate-tip"> </div>
<span v-if="progressState === 1">距离报价开始仅剩 <span class="global-color-red">{{operateDay}}</span><span class="global-color-red">{{operateHour}}</span> 小时</span> <div class="operate-tip">
<span v-if="progressState === 2 && !operateIsBuy">报价仅剩 <span class="global-color-red">{{operateDay}}</span><span class="global-color-red">{{operateHour}}</span> 小时</span> <span v-if="progressState === 1">距离报价开始仅剩 <span class="global-color-red">{{operateDay}}</span><span class="global-color-red">{{operateHour}}</span> 小时</span>
</div> <span v-if="[2].indexOf(componentProgress.state) >= 0 && !operateIsBuy">报价仅剩 <span class="global-color-red">{{operateDay}}</span><span class="global-color-red">{{operateHour}}</span> 小时</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </div>
</template>
<script>
import iMiment from 'miment' <script>
import iTime from '@/common/js/time.js' import iMiment from 'miment'
import iTime from '@/common/js/time.js'
export default {
data () { export default {
return { data () {
detailsType: 0, return {
detailsType: 0,
progressNode: [],
progressWidth: 25, progressNode: [],
progressState: 1, progressWidth: 25,
progressState: 1,
operateIsBuy: false,
operateDay: 0, operateIsBuy: false,
operateHour: 0, operateDay: 0,
operateText: '立即报名', operateHour: 0,
} operateText: '立即报名',
}, }
},
computed: {
componentProject: function () { computed: {
return this.$store.state.componentProject componentProject: function () {
}, return this.$store.state.componentProject
componentProgress: function () { },
return this.$store.state.componentProgress componentProgress: function () {
} console.log('this.$store.state.componentProgress', this.$store.state.componentProgress)
}, return this.$store.state.componentProgress
}
watch: { },
componentProject: {
handler: function (funcNewValue, funcOldValue) { watch: {
componentProject: {
}, handler: function (funcNewValue, funcOldValue) {
deep: true,
immediate: true, },
}, deep: true,
componentProgress: { immediate: true,
handler: function (funcNewValue, funcOldValue) { },
if (JSON.stringify(funcNewValue) !== '{}') { componentProgress: {
console.log('mark', funcNewValue) handler: function (funcNewValue, funcOldValue) {
this.setProgressTime(funcNewValue) if (JSON.stringify(funcNewValue) !== '{}') {
this.setOperate(funcNewValue) this.setProgressTime(funcNewValue)
} this.setOperate(funcNewValue)
}, }
deep: true, },
immediate: true, deep: true,
} immediate: true,
}, }
},
created: function () {
this.progressNode = [ created: function () {
{ 'text': ' ', 'time': ' ' }, this.progressNode = [
{ 'text': ' ', 'time': ' ' }, { 'text': ' ', 'time': ' ' },
{ 'text': ' ', 'time': ' ' }, { 'text': ' ', 'time': ' ' },
] { 'text': ' ', 'time': ' ' },
}, ]
},
methods: {
/** methods: {
* 设置进度时间数据 /**
* @function * 设置进度时间数据
* @param {object} funcProgressData - 进度原始数据 * @function
* @returns * @param {object} funcProgressData - 进度原始数据
*/ * @returns
setProgressTime: function (funcProgressData) { */
this.progressNode = [ setProgressTime: function (funcProgressData) {
{ this.progressNode = [
text: funcProgressData.text[0], {
time: iMiment(funcProgressData.timestamp[0]).format('YYYY-MM-DD hh:mm') text: funcProgressData.text[0],
}, time: iMiment(funcProgressData.timestamp[0]).format('YYYY-MM-DD')
{ },
text: funcProgressData.text[1], {
time: iMiment(funcProgressData.timestamp[1]).format('YYYY-MM-DD hh:mm') + ' - ' + iMiment(funcProgressData.timestamp[2]).format('YYYY-MM-DD hh:mm') text: funcProgressData.text[1],
}, time: iMiment(funcProgressData.timestamp[1]).format('YYYY-MM-DD hh:mm') + ' - ' + iMiment(funcProgressData.timestamp[2]).format('YYYY-MM-DD hh:mm')
{ },
text: funcProgressData.text[2], {
time: iMiment(funcProgressData.timestamp[3]).format('YYYY-MM-DD hh:mm') text: funcProgressData.text[2],
}, time: iMiment(funcProgressData.timestamp[3]).format('YYYY-MM-DD hh:mm')
] },
]
if (this.componentProject.noticeType === 0) {
this.progressNode[2].time = ' ' if (this.componentProject.noticeType === 0) {
} this.progressNode[2].time = ' '
}, }
},
/**
* 设置按钮数据 /**
* @function * 设置按钮数据
* @param {object} funcProgressData - 进度原始数据 * @function
* @returns * @param {object} funcProgressData - 进度原始数据
*/ * @returns
setOperate: function (funcProgressData) { */
// 计算进度状态 setOperate: function (funcProgressData) {
let funcIndex = 0 // 计算进度状态
for (funcIndex; funcIndex < funcProgressData.timestamp.length; funcIndex++) { let funcIndex = 0
if (iTime() < funcProgressData.timestamp[funcIndex]) { for (funcIndex; funcIndex < funcProgressData.timestamp.length; funcIndex++) {
break if (iTime() < funcProgressData.timestamp[funcIndex]) {
} break
} }
this.progressState = funcIndex }
this.progressState = funcIndex
// 计算剩余天数
let funcDistance = iMiment().distance(iTime(), funcProgressData.timestamp[funcIndex]).format('YYYY-MM-DD hh:mm:ss', true) // 计算剩余天数
let funcDistance = iMiment().distance(iTime(), funcProgressData.timestamp[funcIndex]).format('YYYY-MM-DD hh:mm:ss', true)
let funcRegExpDate = new RegExp('[0-9]+-[0-9]+-[0-9]+')
let funcDate = funcDistance.match(funcRegExpDate)[0].split('-') let funcRegExpDate = new RegExp('[0-9]+-[0-9]+-[0-9]+')
let funcRegExpTime = new RegExp('[0-9]+:[0-9]+:[0-9]+') let funcDate = funcDistance.match(funcRegExpDate)[0].split('-')
let funcTime = funcDistance.match(funcRegExpTime)[0].split(':') let funcRegExpTime = new RegExp('[0-9]+:[0-9]+:[0-9]+')
let funcTime = funcDistance.match(funcRegExpTime)[0].split(':')
let funcReturn = {
year: funcDate[0], let funcReturn = {
month: funcDate[1], year: funcDate[0],
day: funcDate[2], month: funcDate[1],
hour: funcTime[0], day: funcDate[2],
minute: funcTime[1], hour: funcTime[0],
second: funcTime[2], minute: funcTime[1],
} second: funcTime[2],
this.operateDay = funcReturn.day }
this.operateHour = parseInt(funcReturn.hour) + 1 this.operateDay = funcReturn.day
this.operateHour = parseInt(funcReturn.hour) + 1
// 设置其他状态
this.operateIsBuy = funcProgressData.isBuy // 设置其他状态
}, this.operateIsBuy = funcProgressData.isBuy
},
/**
* 报名 /**
* @function * 报名
* @returns * @function
*/ * @returns
onEntered: function () { */
// 公告为预览状态禁止操作 onEntered: function () {
if (this.$route.query.preview) return // 公告为预览状态禁止操作
this.$emit('entered') if (this.$route.query.preview) return
}, this.$emit('entered')
},
/**
* 下载标书 /**
* @function * 下载标书
* @returns * @function
*/ * @returns
onDocument: function () { */
console.log('onDocument') onDocument: function () {
// 公告为预览状态禁止操作 // 公告为预览状态禁止操作
if (this.$route.query.preview) return if (this.$route.query.preview) return
this.$emit('document') this.$emit('document')
}, },
onOffer: function () { onOffer: function () {
// 公告为预览状态禁止操作 // 公告为预览状态禁止操作
if (this.$route.query.preview) return if (this.$route.query.preview) return
this.$emit('offer') this.$emit('offer')
}, },
} }
} }
</script> </script>
<style lang="less"> <style lang="less">
.components-progress { .components-progress {
position: relative; position: relative;
width: 100%; width: 100%;
background: #F2F2F2; background: #F2F2F2;
.node { .node {
position: relative; position: relative;
.node-point { .node-point {
width: 24px; width: 24px;
height: 24px; height: 24px;
margin-bottom: 8px; margin-bottom: 8px;
border-radius: 50%; border-radius: 50%;
border: 2px #FFFFFF solid; border: 2px #FFFFFF solid;
background: #CF2F1D; background: #CF2F1D;
} }
.node-point-unactive { .node-point-unactive {
width: 24px; width: 24px;
height: 24px; height: 24px;
margin-bottom: 8px; margin-bottom: 8px;
border-radius: 50%; border-radius: 50%;
border: 2px #FFFFFF solid; border: 2px #FFFFFF solid;
background: #E5E5E5; background: #E5E5E5;
} }
.node-name { .node-name {
margin-bottom: 4px; margin-bottom: 4px;
font-size: @fontSize02; font-size: @fontSize02;
} }
.node-time { .node-time {
margin-bottom: 4px; margin-bottom: 4px;
font-size: @fontSize01; font-size: @fontSize01;
} }
> div:nth-child(1) { > div:nth-child(1) {
z-index: 5; z-index: 5;
width: 210px; width: 210px;
height: 120px; height: 120px;
} }
> div:nth-child(2) { > div:nth-child(2) {
z-index: 5; z-index: 5;
width: 380px; width: 380px;
height: 120px; height: 120px;
} }
> div:nth-child(3) { > div:nth-child(3) {
z-index: 5; z-index: 5;
width: 210px; width: 210px;
height: 120px; height: 120px;
} }
> div:nth-child(4) { > div:nth-child(4) {
z-index: 0; z-index: 0;
position: absolute; position: absolute;
top: 24px; top: 24px;
left: 100px; left: 100px;
width: 600px; width: 600px;
height: 12px; height: 12px;
background: #FFFFFF; background: #FFFFFF;
border: 2px #FFFFFF solid; border: 2px #FFFFFF solid;
} }
} }
.operate { .operate {
width: 340px; width: 340px;
> div { > div {
margin-right: 40px; margin-right: 40px;
.operate-img { .operate-img {
z-index: 0; z-index: 0;
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
} }
.operate-button { .operate-button {
z-index: 5; z-index: 5;
margin-bottom: 8px; margin-bottom: 8px;
} }
.operate-tip { .operate-tip {
z-index: 5; z-index: 5;
} }
span { span {
margin-top: 6px; margin-top: 6px;
font-size: @fontSize01; font-size: @fontSize01;
} }
} }
button { button {
width: 160px; width: 160px;
height: 50px; height: 50px;
border-radius: 25px; border-radius: 25px;
border: none; border: none;
color: #FFFFFF; color: #FFFFFF;
font-size: @fontSize02; font-size: @fontSize02;
} }
} }
} }
</style> </style>
<template> <template>
<!-- updata:06-06 --> <!-- updata:06-06 -->
<!-- 信息模板 - 投标项目 --> <!-- 信息模板 - 投标项目 -->
<div class="component-project"> <div class="component-project">
<!-- 竞价报价公告 --> <!-- 竞价报价公告 -->
<div v-if="noticeType === 0" class="info"> <div v-if="noticeType === 0" class="info">
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>竞价项目编号:</span> <span>竞价项目编号:</span>
<span>{{componentProject.projectIdentity}}</span> <span>{{componentProject.projectIdentity}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>竞价项目名称:</span> <span>竞价项目名称:</span>
<span>{{componentProject.projectName}}</span> <span>{{componentProject.projectName}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位:</span> <span>采购单位:</span>
<span>{{componentProject.buyCompany}}</span> <span>{{componentProject.buyCompany}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位性质:</span> <span>采购单位性质:</span>
<span>{{componentProject.buyCompanyType}}</span> <span>{{componentProject.buyCompanyType}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位联系人:</span> <span>采购单位联系人:</span>
<span>{{componentProject.buyLiaison}}</span> <span>{{componentProject.buyLiaison}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>联系电话:</span> <span>联系电话:</span>
<span>{{componentProject.buyPhone}}</span> <span>{{componentProject.buyPhone}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>竞价时间:</span> <span>竞价时间:</span>
<span>{{componentProject.timeBegin + ' - ' + componentProject.timeEnd}}</span> <span>{{componentProject.timeBegin + ' - ' + componentProject.timeEnd}}</span>
</div> </div>
<div class="item-text row align-s"> <div class="item-text row align-s">
<span>竞价标的:</span> <span>竞价标的:</span>
<el-table :data="componentContract" stripe :header-cell-style="tableHeaderStyle"> <el-table :data="componentContract" stripe :header-cell-style="tableHeaderStyle">
<el-table-column prop="index" label="合同包" width="80" align="center"></el-table-column> <el-table-column prop="index" label="合同包" width="80" align="center"></el-table-column>
<el-table-column prop="object" label="标的" min-width="140"></el-table-column> <el-table-column prop="object" label="标的" min-width="140"></el-table-column>
<el-table-column prop="requirement" label="参数要求" min-width="230"></el-table-column> <el-table-column prop="requirement" label="参数要求" min-width="230"></el-table-column>
<el-table-column prop="quantity" label="数量" min-width="120" align="center"></el-table-column> <el-table-column prop="quantity" label="数量" min-width="120" align="center"></el-table-column>
<el-table-column prop="budget" label="限价(元)" min-width="180" align="center"> <el-table-column prop="budget" label="限价(元)" min-width="180" align="center">
<template slot-scope="scope"> <template slot-scope="scope">
<span>{{scope.row.budget === 0 ? '无' : scope.row.budget}}</span> <span>{{scope.row.budget === 0 ? '无' : scope.row.budget}}</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
<!-- 竞价结果公告 --> <!-- 竞价结果公告 -->
<div v-if="noticeType === 1" class="info"> <div v-if="noticeType === 1" class="info">
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>竞价项目编号:</span> <span>竞价项目编号:</span>
<span>{{componentProject.projectIdentity}}</span> <span>{{componentProject.projectIdentity}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>竞价项目名称:</span> <span>竞价项目名称:</span>
<span>{{componentProject.projectName}}</span> <span>{{componentProject.projectName}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位:</span> <span>采购单位:</span>
<span>{{componentProject.buyCompany}}</span> <span>{{componentProject.buyCompany}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位性质:</span> <span>采购单位性质:</span>
<span>{{componentProject.buyCompanyType}}</span> <span>{{componentProject.buyCompanyType}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位联系人:</span> <span>采购单位联系人:</span>
<span>{{componentProject.buyLiaison}}</span> <span>{{componentProject.buyLiaison}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>联系电话:</span> <span>联系电话:</span>
<span>{{componentProject.buyPhone}}</span> <span>{{componentProject.buyPhone}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>竞价时间:</span> <span>竞价时间:</span>
<span>{{componentProject.timeBegin + ' - ' + componentProject.timeEnd}}</span> <span>{{componentProject.timeBegin + ' - ' + componentProject.timeEnd}}</span>
</div> </div>
</div> </div>
<!-- 招标采购公告 --> <!-- 招标采购公告 -->
<div v-if="noticeType === 2" class="info"> <div v-if="noticeType === 2" class="info">
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目编号:</span> <span>项目编号:</span>
<span>{{componentProject.projectIdentity}}</span> <span>{{componentProject.projectIdentity}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目名称:</span> <span>项目名称:</span>
<span>{{componentProject.projectName}}</span> <span>{{componentProject.projectName}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购方式:</span> <span>采购方式:</span>
<span>{{componentProject.buyWay}}</span> <span>{{componentProject.buyWay}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位:</span> <span>采购单位:</span>
<span>{{componentProject.buyCompany}}</span> <span>{{componentProject.buyCompany}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位联系人:</span> <span>采购单位联系人:</span>
<span>{{componentProject.buyLiaison}}</span> <span>{{componentProject.buyLiaison}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>联系电话:</span> <span>联系电话:</span>
<span>{{componentProject.buyPhone}}</span> <span>{{componentProject.buyPhone}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>文件发售时间:</span> <span>文件发售时间:</span>
<span>{{componentProject.timeBegin + ' - ' + componentProject.timeEnd}}</span> <span>{{componentProject.timeBegin + ' - ' + componentProject.timeEnd}}</span>
</div> </div>
<!-- 单一合同 --> <!-- 单一合同 -->
<div v-if="!componentProject.isPackage" class="item-text row align-c"> <div v-if="!componentProject.isPackage" class="item-text row align-c">
<span>文件售价:</span> <span>文件售价:</span>
<span>{{componentContract[0] ? componentContract[0].budget + ' 元' : ''}}</span> <span>{{componentContract[0] ? componentContract[0].budget + ' 元' : ''}}</span>
</div> </div>
<div v-if="!componentProject.isPackage" class="item-text row align-c"> <div v-if="!componentProject.isPackage" class="item-text row align-c">
<span>投标截止、开标时间:</span> <span>投标截止、开标时间:</span>
<span>{{componentProject.timeClose}}</span> <span>{{componentProject.timeClose}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>开标地点:</span> <span>开标地点:</span>
<span>{{componentProject.address}}</span> <span>{{componentProject.address}}</span>
</div> </div>
<!-- 多个合同 --> <!-- 多个合同 -->
<div v-if="componentProject.isPackage" class="item-text row align-s"> <div v-if="componentProject.isPackage" class="item-text row align-s">
<span>合同包:</span> <span>合同包:</span>
<el-table :data="componentContract" stripe :header-cell-style="tableHeaderStyle"> <el-table :data="componentContract" stripe :header-cell-style="tableHeaderStyle">
<el-table-column type="index" label="合同包" width="80" align="center"></el-table-column> <el-table-column type="index" label="合同包" width="80" align="center"></el-table-column>
<el-table-column prop="number" label="合同包编号" min-width="140"></el-table-column> <el-table-column prop="number" label="合同包编号" min-width="140"></el-table-column>
<el-table-column prop="object" label="标的" min-width="230"></el-table-column> <el-table-column prop="object" label="标的" min-width="230"></el-table-column>
<el-table-column prop="quantity" label="数量" min-width="120" align="center"></el-table-column> <el-table-column prop="quantity" label="数量" min-width="120" align="center"></el-table-column>
<el-table-column prop="budget" label="预算总金额(元)" min-width="180" align="center"></el-table-column> <el-table-column prop="budget" label="预算总金额(元)" min-width="180" align="center"></el-table-column>
<el-table-column prop="timeClose" label="投标截止、开标时间" min-width="190"></el-table-column> <el-table-column prop="timeClose" label="投标截止、开标时间" min-width="190"></el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
<!-- 资格预审公告 --> <!-- 资格预审公告 -->
<div v-if="noticeType === 3" class="info"> <div v-if="noticeType === 3" class="info">
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目编号:</span> <span>项目编号:</span>
<span>{{componentProject.projectIdentity}}</span> <span>{{componentProject.projectIdentity}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目名称:</span> <span>项目名称:</span>
<span>{{componentProject.projectName}}</span> <span>{{componentProject.projectName}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购方式:</span> <span>采购方式:</span>
<span>{{componentProject.buyWay}}</span> <span>{{componentProject.buyWay}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位:</span> <span>采购单位:</span>
<span>{{componentProject.buyCompany}}</span> <span>{{componentProject.buyCompany}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位联系人:</span> <span>采购单位联系人:</span>
<span>{{componentProject.buyLiaison}}</span> <span>{{componentProject.buyLiaison}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>联系电话:</span> <span>联系电话:</span>
<span>{{componentProject.buyPhone}}</span> <span>{{componentProject.buyPhone}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>领取资格预审文件时间:</span> <span>领取资格预审文件时间:</span>
<span>{{componentProject.timeBegin + ' - ' + componentProject.timeEnd}}</span> <span>{{componentProject.timeBegin + ' - ' + componentProject.timeEnd}}</span>
</div> </div>
<!-- 单一合同 --> <!-- 单一合同 -->
<div v-if="!componentProject.isPackage" class="item-text row align-c"> <div v-if="!componentProject.isPackage" class="item-text row align-c">
<span>文件售价:</span> <span>文件售价:</span>
<span>{{componentContract[0] ? componentContract[0].budget + ' 元' : ''}}</span> <span>{{componentContract[0] ? componentContract[0].budget + ' 元' : ''}}</span>
</div> </div>
<div v-if="!componentProject.isPackage" class="item-text row align-c"> <div v-if="!componentProject.isPackage" class="item-text row align-c">
<span>申请文件提交截止、开标时间:</span> <span>申请文件提交截止、开标时间:</span>
<span>{{componentProject.timeClose}}</span> <span>{{componentProject.timeClose}}</span>
</div> </div>
<div v-if="!componentProject.isPackage" class="item-text row align-c"> <div v-if="!componentProject.isPackage" class="item-text row align-c">
<span>开标地点:</span> <span>开标地点:</span>
<span>{{componentProject.address}}</span> <span>{{componentProject.address}}</span>
</div> </div>
<!-- 多个合同 --> <!-- 多个合同 -->
<div v-if="componentProject.isPackag" class="item-text row align-c"> <div v-if="componentProject.isPackag" class="item-text row align-c">
<span>开标地点:</span> <span>开标地点:</span>
<span>{{componentProject.address}}</span> <span>{{componentProject.address}}</span>
</div> </div>
<div v-if="componentProject.isPackage" class="item-text row align-s"> <div v-if="componentProject.isPackage" class="item-text row align-s">
<span>合同包:</span> <span>合同包:</span>
<el-table :data="componentContract" stripe :header-cell-style="tableHeaderStyle"> <el-table :data="componentContract" stripe :header-cell-style="tableHeaderStyle">
<el-table-column type="index" label="合同包" width="80" align="center"></el-table-column> <el-table-column type="index" label="合同包" width="80" align="center"></el-table-column>
<el-table-column prop="number" label="合同包编号" min-width="140"></el-table-column> <el-table-column prop="number" label="合同包编号" min-width="140"></el-table-column>
<el-table-column prop="object" label="标的" min-width="230"></el-table-column> <el-table-column prop="object" label="标的" min-width="230"></el-table-column>
<el-table-column prop="quantity" label="数量" min-width="120" align="center"></el-table-column> <el-table-column prop="quantity" label="数量" min-width="120" align="center"></el-table-column>
<el-table-column prop="budget" label="预算总金额(元)" min-width="180" align="center"></el-table-column> <el-table-column prop="budget" label="预算总金额(元)" min-width="180" align="center"></el-table-column>
<el-table-column prop="timeClose" label="投标截止、开标时间" min-width="190"></el-table-column> <el-table-column prop="timeClose" label="投标截止、开标时间" min-width="190"></el-table-column>
</el-table> </el-table>
</div> </div>
</div> </div>
<!-- 变更澄清公告 --> <!-- 变更澄清公告 -->
<div v-if="noticeType === 4" class="info"> <div v-if="noticeType === 4" class="info">
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目编号:</span> <span>项目编号:</span>
<span>{{componentProject.projectIdentity}}</span> <span>{{componentProject.projectIdentity}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目名称:</span> <span>项目名称:</span>
<span>{{componentProject.projectName}}</span> <span>{{componentProject.projectName}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购方式:</span> <span>采购方式:</span>
<span>{{componentProject.buyWay}}</span> <span>{{componentProject.buyWay}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位:</span> <span>采购单位:</span>
<span>{{componentProject.buyCompany}}</span> <span>{{componentProject.buyCompany}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位联系人:</span> <span>采购单位联系人:</span>
<span>{{componentProject.buyLiaison}}</span> <span>{{componentProject.buyLiaison}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>联系电话:</span> <span>联系电话:</span>
<span>{{componentProject.buyPhone}}</span> <span>{{componentProject.buyPhone}}</span>
</div> </div>
</div> </div>
<!-- 中标候选公告 --> <!-- 中标候选公告 -->
<div v-if="noticeType === 5" class="info"> <div v-if="noticeType === 5" class="info">
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目编号:</span> <span>项目编号:</span>
<span>{{componentProject.projectIdentity}}</span> <span>{{componentProject.projectIdentity}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目名称:</span> <span>项目名称:</span>
<span>{{componentProject.projectName}}</span> <span>{{componentProject.projectName}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购方式:</span> <span>采购方式:</span>
<span>{{componentProject.buyWay}}</span> <span>{{componentProject.buyWay}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位:</span> <span>采购单位:</span>
<span>{{componentProject.buyCompany}}</span> <span>{{componentProject.buyCompany}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位联系人:</span> <span>采购单位联系人:</span>
<span>{{componentProject.buyLiaison}}</span> <span>{{componentProject.buyLiaison}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>联系电话:</span> <span>联系电话:</span>
<span>{{componentProject.buyPhone}}</span> <span>{{componentProject.buyPhone}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>公示发布日期:</span> <span>公示发布日期:</span>
<span>{{componentProject.timeRelease}}</span> <span>{{componentProject.timeRelease}}</span>
</div> </div>
</div> </div>
<!-- 招标结果公告 --> <!-- 招标结果公告 -->
<div v-if="noticeType === 6" class="info"> <div v-if="noticeType === 6" class="info">
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目编号:</span> <span>项目编号:</span>
<span>{{componentProject.projectIdentity}}</span> <span>{{componentProject.projectIdentity}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目名称:</span> <span>项目名称:</span>
<span>{{componentProject.projectName}}</span> <span>{{componentProject.projectName}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购方式:</span> <span>采购方式:</span>
<span>{{componentProject.buyWay}}</span> <span>{{componentProject.buyWay}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位:</span> <span>采购单位:</span>
<span>{{componentProject.buyCompany}}</span> <span>{{componentProject.buyCompany}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位联系人:</span> <span>采购单位联系人:</span>
<span>{{componentProject.buyLiaison}}</span> <span>{{componentProject.buyLiaison}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>联系电话:</span> <span>联系电话:</span>
<span>{{componentProject.buyPhone}}</span> <span>{{componentProject.buyPhone}}</span>
</div> </div>
</div> </div>
<!-- 其他公告 --> <!-- 其他公告 -->
<div v-if="noticeType === 9" class="info"> <div v-if="noticeType === 9" class="info">
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目编号:</span> <span>项目编号:</span>
<span>{{componentProject.projectIdentity}}</span> <span>{{componentProject.projectIdentity}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>项目名称:</span> <span>项目名称:</span>
<span>{{componentProject.projectName}}</span> <span>{{componentProject.projectName}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购方式:</span> <span>采购方式:</span>
<span>{{componentProject.buyWay}}</span> <span>{{componentProject.buyWay}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位:</span> <span>采购单位:</span>
<span>{{componentProject.buyCompany}}</span> <span>{{componentProject.buyCompany}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>采购单位联系人:</span> <span>采购单位联系人:</span>
<span>{{componentProject.buyLiaison}}</span> <span>{{componentProject.buyLiaison}}</span>
</div> </div>
<div class="item-text row align-c"> <div class="item-text row align-c">
<span>联系电话:</span> <span>联系电话:</span>
<span>{{componentProject.buyPhone}}</span> <span>{{componentProject.buyPhone}}</span>
</div> </div>
</div> </div>
</div>
</template> <!-- 竞价变更澄清公告 -->
<div v-if="noticeType === 10" class="info">
<script> <div class="item-text row align-c">
export default { <span>竞价项目编号:</span>
data: function () { <span>{{componentProject.projectIdentity}}</span>
return { </div>
tableHeaderStyle: { <div class="item-text row align-c">
color: '#000000', <span>竞价项目名称:</span>
background: '#F2F2F2' <span>{{componentProject.projectName}}</span>
}, </div>
<div class="item-text row align-c">
noticeType: '', <span>采购单位:</span>
} <span>{{componentProject.buyCompany}}</span>
}, </div>
<div class="item-text row align-c">
computed: { <span>采购单位性质:</span>
componentProject: function () { <span>{{componentProject.buyCompanyType}}</span>
return this.$store.state.componentProject </div>
}, <div class="item-text row align-c">
componentContract: function () { <span>采购单位联系人:</span>
return this.$store.state.componentContract <span>{{componentProject.buyLiaison}}</span>
}, </div>
}, <div class="item-text row align-c">
<span>联系电话:</span>
watch: { <span>{{componentProject.buyPhone}}</span>
$route: function () { </div>
this.noticeType = this.$route.query.type ? Number(this.$route.query.type) : 0 <div class="item-text row align-c">
}, <span>竞价时间:</span>
componentContract: { <span>{{componentProject.timeBegin + ' - ' + componentProject.timeEnd}}</span>
handler: function (funcNewValue, funcOldValue) { </div>
</div>
}, </div>
deep: true, </template>
immediate: true,
} <script>
}, export default {
data: function () {
created: function () { return {
this.noticeType = this.$route.query.type ? Number(this.$route.query.type) : 0 tableHeaderStyle: {
}, color: '#000000',
background: '#F2F2F2'
methods: { },
} noticeType: '',
} }
</script> },
<style lang="less"> computed: {
.component-project { componentProject: function () {
.info { return this.$store.state.componentProject
.item-text { },
margin: 16px 0; componentContract: function () {
return this.$store.state.componentContract
span:nth-child(1) { },
min-width: 180px; },
margin-right: 10px;
text-align: right; watch: {
font-size: @fontSize02; $route: function () {
} this.noticeType = this.$route.query.type ? Number(this.$route.query.type) : 0
},
span:nth-child(2) { componentContract: {
text-align: left; handler: function (funcNewValue, funcOldValue) {
font-size: @fontSize01;
} },
} deep: true,
} immediate: true,
} }
</style> },
created: function () {
this.noticeType = this.$route.query.type ? Number(this.$route.query.type) : 0
},
methods: {
}
}
</script>
<style lang="less">
.component-project {
.info {
.item-text {
margin: 16px 0;
span:nth-child(1) {
min-width: 180px;
margin-right: 10px;
text-align: right;
font-size: @fontSize02;
}
span:nth-child(2) {
text-align: left;
font-size: @fontSize01;
}
}
}
}
</style>
<template> <template>
<div class="home col align-c"> <div class="home col align-c">
<componentHeader></componentHeader> <componentHeader></componentHeader>
<componentNavigation></componentNavigation> <componentNavigation></componentNavigation>
<div class="home-banner"> <div class="home-banner">
<el-carousel v-if="listBanner.length > 0" class="home-carousel" trigger="click" height="400px" :autoplay="true"> <el-carousel v-if="listBanner.length > 0" class="home-carousel" trigger="click" height="400px" :autoplay="true">
<el-carousel-item v-for="(item, index) in listBanner" :key="index"> <el-carousel-item v-for="(item, index) in listBanner" :key="index">
<img :src="listBanner[index].url" alt="" :class="item.isLink ? 'global-cursor' : ''" @click="onBanner(item)"> <img :src="listBanner[index].url" alt="" :class="item.isLink ? 'global-cursor' : ''" @click="onBanner(item)">
</el-carousel-item> </el-carousel-item>
</el-carousel> </el-carousel>
<div v-if="listBanner.length === 0" class="home-carousel row con-c align-c"> <div v-if="listBanner.length === 0" class="home-carousel row con-c align-c">
<img src="../assets/home-banner.png" alt=""> <img src="../assets/home-banner.png" alt="">
</div> </div>
</div> </div>
<!-- 今日开标 --> <!-- 今日开标 -->
<div class="new-bid row con-c"> <div class="new-bid row con-c">
<div class="global-maxwidth row con-b"> <div class="global-maxwidth row con-b">
<div> <div class="calendar">
<div class="row align-e"> <span class="calendar-title">开标日历</span>
<span class="title">今日开标</span> <calendar :markDate="['2020/10/13','2020/10/14']"></calendar>
<span class="title-extra global-color-red">{{timeDate + '开标项目'}}</span> </div>
</div> <div>
<div v-if="listBid.length" class="list col"> <div class="row align-e">
<div class="global-hover row con-b align-e" v-for="(item, index) in listBid" :key="index" @click="onDetail(item)"> <span class="title">今日开标</span>
<span class="global-cursor global-overflow-ellipsis ">{{item.noticeTitle}}</span> <span class="title-extra global-color-red">{{timeDate + '开标项目'}}</span>
<span>{{item.timeRelease}}</span> </div>
</div> <div v-if="listBid.length" class="list col">
</div> <div class="global-hover row con-b align-e" v-for="(item, index) in listBid" :key="index" @click="onDetail(item)">
<div v-if="!listBid.length" class="nothing col con-c align-c"> <span class="global-cursor global-overflow-ellipsis ">{{item.noticeTitle}}</span>
<img src="../assets/nothing.png" alt=""> <span>{{item.timeRelease}}</span>
<span>今日暂无开标项目</span> </div>
</div> </div>
</div> <div v-if="!listBid.length" class="nothing col con-c align-c">
<!-- 未登录状态展示 --> <img src="../assets/nothing.png" alt="">
<div v-if="!isSignIn" class="home-signin col"> <span>今日暂无开标项目</span>
<div class="home-signin-entry row"> </div>
<div class="row con-c align-c" @click="signInEntry = 'signIn'"> </div>
<span class="global-cursor" :class="signInEntry === 'signIn' ? 'home-signin-entry-active' : 'home-signin-entry-inactive'">登录</span> <!-- 未登录状态展示 -->
</div> <div v-if="!isSignIn" class="home-signin col">
<div class="row con-c align-c" @click="signInEntry = 'register'"> <div class="home-signin-entry row">
<span class="global-cursor" :class="signInEntry === 'register' ? 'home-signin-entry-active' : 'home-signin-entry-inactive'">注册</span> <div class="row con-c align-c" @click="signInEntry = 'signIn'">
</div> <span class="global-cursor" :class="signInEntry === 'signIn' ? 'home-signin-entry-active' : 'home-signin-entry-inactive'">登录</span>
</div> </div>
<div class="home-signin-identity col con-c"> <div class="row con-c align-c" @click="signInEntry = 'register'">
<div class="home-signin-item row align-c global-cursor" @click="onSignIn('supplier')"> <span class="global-cursor" :class="signInEntry === 'register' ? 'home-signin-entry-active' : 'home-signin-entry-inactive'">注册</span>
<img src="../assets/status-supplier.png" alt=""> </div>
<span>供应商</span> </div>
</div> <div class="home-signin-identity col con-c">
<div v-if="signInEntry === 'signIn'" class="home-signin-item row align-c global-cursor" @click="onSignInRedirect()"> <div class="home-signin-item row align-c global-cursor" @click="onSignIn('supplier')">
<img src="../assets/status-agency.png" alt=""> <img src="../assets/status-supplier.png" alt="">
<span>代理机构</span> <span>供应商</span>
</div> </div>
<div class="home-signin-item row align-c global-cursor" @click="onSignIn('specialist')"> <div v-if="signInEntry === 'signIn'" class="home-signin-item row align-c global-cursor" @click="onSignInRedirect()">
<img src="../assets/status-specialist.png" alt=""> <img src="../assets/status-agency.png" alt="">
<span>专家</span> <span>代理机构</span>
</div> </div>
</div> <div class="home-signin-item row align-c global-cursor" @click="onSignIn('specialist')">
</div> <img src="../assets/status-specialist.png" alt="">
<!-- 登录状态展示 - 专家 --> <span>专家</span>
<div v-if="isSignIn && info.identity === 1" class="home-signin col"> </div>
<div class="home-signin-identity-img row con-c"> </div>
<img src="../assets/home-specialist.png" alt=""> </div>
</div> <!-- 登录状态展示 - 专家 -->
<div class="home-signin-name col"> <div v-if="isSignIn && info.identity === 1" class="home-signin col">
<span>您好,</span> <div class="home-signin-identity-img row con-c">
<span>{{info.name}}</span> <img src="../assets/home-specialist.png" alt="">
</div> </div>
<div class="home-signin-notify row con-c align-c"> <div class="home-signin-name col">
<el-badge :is-dot="isNewNotice" class="row align-c"> <span>您好,</span>
<img class="global-cursor" src="../assets/notice-tip.png"> <span>{{info.name}}</span>
</el-badge> </div>
<span class="global-cursor" @click="$router.push('/specialist/notify')">我的消息</span> <div class="home-signin-notify row con-c align-c">
</div> <el-badge :is-dot="isNewNotice" class="row align-c">
<div class="home-signin-state row con-c align-c"> <img class="global-cursor" src="../assets/notice-tip.png">
<span v-if="info.register !== 1">注册信息暂未通过审核</span> </el-badge>
<span v-if="info.register === 1" class="global-cursor" @click="$router.push('/specialist')">我的评标</span> <span class="global-cursor" @click="$router.push('/specialist/notify')">我的消息</span>
</div> </div>
</div> <div class="home-signin-state row con-c align-c">
<span v-if="info.register !== 1">注册信息暂未通过审核</span>
<!-- 登录状态展示 - 商家 --> <span v-if="info.register === 1" class="global-cursor" @click="$router.push('/specialist')">我的评标</span>
<div v-if="isSignIn && info.identity === 2" class="home-signin col"> </div>
<div class="home-signin-identity-img row con-c"> </div>
<img src="../assets/home-supplier.png" alt="">
</div> <!-- 登录状态展示 - 商家 -->
<div class="home-signin-name row con-c"> <div v-if="isSignIn && info.identity === 2" class="home-signin col">
<span>{{info.name}}</span> <div class="home-signin-identity-img row con-c">
</div> <img src="../assets/home-supplier.png" alt="">
<div class="home-signin-notify row con-c align-c"> </div>
<el-badge :is-dot="isNewNotice" class="row align-c"> <div class="home-signin-name row con-c">
<img class="global-cursor" src="../assets/notice-tip.png"> <span>{{info.name}}</span>
</el-badge> </div>
<span class="global-cursor" @click="$router.push('/supplier/notify')">我的消息</span> <div class="home-signin-notify row con-c align-c">
</div> <el-badge :is-dot="isNewNotice" class="row align-c">
<div v-if="info.register !== 1" class="home-signin-state row con-c align-c"> <img class="global-cursor" src="../assets/notice-tip.png">
<span >注册信息暂未通过审核</span> </el-badge>
</div> <span class="global-cursor" @click="$router.push('/supplier/notify')">我的消息</span>
<div v-if="info.register === 1" class="home-signin-state row con-b align-c"> </div>
<span class="global-cursor" @click="$router.push('/supplier/bidding')">我的投标</span> <div v-if="info.register !== 1" class="home-signin-state row con-c align-c">
<span class="global-cursor">|</span> <span >注册信息暂未通过审核</span>
<span class="global-cursor" @click="$router.push('/supplier/auction')">我的竞价</span> </div>
</div> <div v-if="info.register === 1" class="home-signin-state row con-b align-c">
</div> <span class="global-cursor" @click="$router.push('/supplier/bidding')">我的投标</span>
</div> <span class="global-cursor">|</span>
</div> <span class="global-cursor" @click="$router.push('/supplier/auction')">我的竞价</span>
</div>
<!-- 公告信息 --> </div>
<div class="notice row con-c"> </div>
<div class="global-maxwidth"> </div>
<div class="notice-title row con-b align-e">
<span class="title">公告信息</span> <!-- 公告信息 -->
<span class="more" @click="onMoreNotice()">+ MORE</span> <div class="notice row con-c">
</div> <div class="global-maxwidth">
<div class="row"> <div class="notice-title row con-b align-e">
<div> <span class="title">公告信息</span>
<div class="notice-type row con-c align-c" :class="noticeTabActive === index ? 'notice-type-active' : ''" v-for="(item, index) in noticeTab" :key="index"> <span class="more" @click="onMoreNotice()">+ MORE</span>
<span class="global-cursor" @click="queryNotice(item.value, item.index)">{{item.label}}</span> </div>
</div> <div class="row">
</div> <div>
<div v-if="listNotice.length" class="notice-list"> <div class="notice-type row con-c align-c" :class="noticeTabActive === index ? 'notice-type-active' : ''" v-for="(item, index) in noticeTab" :key="index">
<div v-for="(item, index) in listNotice" :key="index"> <span class="global-cursor" @click="queryNotice(item.value, item.index)">{{item.label}}</span>
<div class="notice-item-title global-hover row align-c" @click="onDetail(item)"> </div>
<span class="global-cursor global-overflow-ellipsis">{{item.buyWay}}</span> </div>
<span class="global-cursor global-overflow-ellipsis">{{item.noticeTitle}}</span> <div v-if="listNotice.length" class="notice-list">
<span class="global-cursor">{{item.timeRelease}}</span> <div v-for="(item, index) in listNotice" :key="index">
</div> <div class="notice-item-title global-hover row align-c" @click="onDetail(item)">
</div> <span class="global-cursor global-overflow-ellipsis">{{item.buyWay}}</span>
</div> <span class="global-cursor global-overflow-ellipsis">{{item.noticeTitle}}</span>
<div v-if="!listNotice.length" class="notice-list row con-c align-c"> <span class="global-cursor">{{item.timeRelease}}</span>
<span>暂无数据</span> </div>
</div> </div>
</div> </div>
</div> <div v-if="!listNotice.length" class="notice-list row con-c align-c">
</div> <span>暂无数据</span>
</div>
<!-- 竞标结果 --> </div>
<div class="bidding row con-c"> </div>
<div class="global-maxwidth row"> </div>
<div class="bidding-result">
<div class="row align-c"> <!-- 竞标结果 -->
<span class="title global-cursor" :class="auctionActive === 0 ? '' : 'title-disable'" @click="onQueryAuction(0)">网上竞价</span> <div class="bidding row con-c">
<span class="title global-cursor" :class="auctionActive === 1 ? '' : 'title-disable'" @click="onQueryAuction(1)">竞价结果</span> <div class="global-maxwidth row">
<span class="more" @click="onMoreAuction()">+ MORE</span> <div class="bidding-result">
</div> <div class="row align-c">
<div class="list"> <span class="title global-cursor" :class="auctionActive === 0 ? '' : 'title-disable'" @click="onQueryAuction(0)">网上竞价</span>
<div v-for="(item, index) in listAuction" :key="index" class="list-item col con-b" :class="item.timeClose ? '' : 'list-item-result'" @click="onDetail(item)"> <span class="title global-cursor" :class="auctionActive === 1 ? '' : 'title-disable'" @click="onQueryAuction(1)">竞价结果</span>
<div class="row con-b align-c"> <span class="more" @click="onMoreAuction()">+ MORE</span>
<span class="global-overflow-ellipsis global-cursor global-hover">{{item.noticeTitle}}</span> </div>
<span>{{item.timeRelease}}</span> <div class="list">
</div> <div v-for="(item, index) in listAuction" :key="index" class="list-item col con-b" :class="item.timeClose ? '' : 'list-item-result'" @click="onDetail(item)">
<div v-if="item.timeClose" class="row"> <div class="row con-b align-c">
<span><i class="el-icon-time"></i>{{item.timeClose}}</span> <span class="global-overflow-ellipsis global-cursor global-hover">{{item.noticeTitle}}</span>
</div> <span>{{item.timeRelease}}</span>
</div> </div>
</div> <div v-if="item.timeClose" class="row">
</div> <span><i class="el-icon-time"></i>{{item.timeClose}}</span>
<div class="bidding-news"> </div>
<div class="row con-b align-e"> </div>
<span class="title">最新资讯</span> </div>
<span class="more" @click="onMoreNews()">+ MORE</span> </div>
</div> <div class="bidding-news">
<div class="bidding-news-detail" @click="onNewsDetail()"> <div class="row con-b align-e">
<div v-if="infoNew.id"> <span class="title">最新资讯</span>
<div class="col"> <span class="more" @click="onMoreNews()">+ MORE</span>
<span class="bidding-news-detail-month">{{infoNew.month}}</span> </div>
<span class="bidding-news-detail-year">{{infoNew.year}}</span> <div class="bidding-news-detail" @click="onNewsDetail()">
</div> <div v-if="infoNew.id">
<div> <div class="col">
<p class="bidding-news-detail-title">{{infoNew.title}}</p> <span class="bidding-news-detail-month">{{infoNew.month}}</span>
</div> <span class="bidding-news-detail-year">{{infoNew.year}}</span>
<div class="bidding-news-detail-html" v-html="infoNew.content"></div> </div>
</div> <div>
<div v-if="!infoNew.id" class="row con-c align-c"> <p class="bidding-news-detail-title">{{infoNew.title}}</p>
<span>暂无数据</span> </div>
</div> <div class="bidding-news-detail-html" v-html="infoNew.content"></div>
<img src="../assets/bg-01.png" alt=""> </div>
</div> <div v-if="!infoNew.id" class="row con-c align-c">
</div> <span>暂无数据</span>
</div> </div>
</div> <img src="../assets/bg-01.png" alt="">
</div>
<!-- 最新成交 --> </div>
<div class="deal row con-c"> </div>
<div class="global-maxwidth"> </div>
<div class="deal-title row con-b align-e">
<span class="title">最新成交</span> <!-- 最新成交 -->
<!-- <span class="more">+MORE</span> --> <div class="deal row con-c">
</div> <div class="global-maxwidth">
<div v-if="listDealBuffer.length" class="deal-list row"> <div class="deal-title row con-b align-e">
<img v-if="dealIndex === 0 && dealActive === 0" class="arrow-l" src="../assets/arrow/arrow-l.png" alt="" @click="onDealPrevious()"> <span class="title">最新成交</span>
<img v-if="dealIndex !== 0 || dealActive === 1" class="arrow-l" src="../assets/arrow/arrow-l-active.png" alt="" @click="onDealPrevious()"> <!-- <span class="more">+MORE</span> -->
<img v-if="dealIndex < listDealBuffer.length" class="arrow-r" src="../assets/arrow/arrow-r-active.png" alt="" @click="onDealNext()"> </div>
<img v-if="dealIndex === listDealBuffer.length - 2 && dealActive === 1" class="arrow-r" src="../assets/arrow/arrow-r.png" alt="" @click="onDealNext()"> <div v-if="listDealBuffer.length" class="deal-list row">
<div class="deal-item col con-b" :class="dealActive === index % 2 ? 'deal-item-active' : ''" v-for="(item, index) in listDeal" :key="index"> <img v-if="dealIndex === 0 && dealActive === 0" class="arrow-l" src="../assets/arrow/arrow-l.png" alt="" @click="onDealPrevious()">
<div class="row con-b align-c"> <img v-if="dealIndex !== 0 || dealActive === 1" class="arrow-l" src="../assets/arrow/arrow-l-active.png" alt="" @click="onDealPrevious()">
<span class="global-overflow-ellipsis">{{item.companyName}}</span> <img v-if="dealIndex < listDealBuffer.length" class="arrow-r" src="../assets/arrow/arrow-r-active.png" alt="" @click="onDealNext()">
<span class="global-color-grey">{{item.timeRelease}}</span> <img v-if="dealIndex === listDealBuffer.length - 2 && dealActive === 1" class="arrow-r" src="../assets/arrow/arrow-r.png" alt="" @click="onDealNext()">
</div> <div class="deal-item col con-b" :class="dealActive === index % 2 ? 'deal-item-active' : ''" v-for="(item, index) in listDeal" :key="index">
<div class="row con-b align-c"> <div class="row con-b align-c">
<span class="global-color-grey global-overflow-ellipsis">{{item.projectName}}</span> <span class="global-overflow-ellipsis">{{item.companyName}}</span>
<span class="global-color-grey">{{item.projectType}}</span> <span class="global-color-grey">{{item.timeRelease}}</span>
</div> </div>
</div> <div class="row con-b align-c">
</div> <span class="global-color-grey global-overflow-ellipsis">{{item.projectName}}</span>
<div v-if="!listDealBuffer.length" class="deal-list row con-c align-c"> <span class="global-color-grey">{{item.projectType}}</span>
<span>暂无数据</span> </div>
</div> </div>
</div> </div>
</div> <div v-if="!listDealBuffer.length" class="deal-list row con-c align-c">
<componentFooter></componentFooter> <span>暂无数据</span>
</div> </div>
</template> </div>
</div>
<script> <componentFooter></componentFooter>
import iMiment from 'miment' </div>
import iHost from '@/common/js/host.js' </template>
import iRequest from '@/common/js/request/request.js'
import iTime from '@/common/js/time.js' <script>
import iDictionary from '@/common/js/dictionary.js' import iMiment from 'miment'
import iHeader from '@/components/currency-header.vue' import iCalendar from 'vue-calendar-component';
import iNavigation from '@/components/currency-navigation.vue' import iHost from '@/common/js/host.js'
import iFooter from '@/components/currency-footer.vue' import iRequest from '@/common/js/request/request.js'
export default { import iTime from '@/common/js/time.js'
components: { import iDictionary from '@/common/js/dictionary.js'
componentHeader: iHeader, import iHeader from '@/components/currency-header.vue'
componentNavigation: iNavigation, import iNavigation from '@/components/currency-navigation.vue'
componentFooter: iFooter import iFooter from '@/components/currency-footer.vue'
}, export default {
data: function () { components: {
return { calendar: iCalendar,
signInEntry: 'signIn', componentHeader: iHeader,
isNewNotice: false, componentNavigation: iNavigation,
timeDate: '', componentFooter: iFooter
listBanner: [], },
listBid: [], // 今日开标 data: function () {
listNotice: [], // 公告信息 return {
listAuction: [], // 竞标采购 signInEntry: 'signIn',
listDeal: [], // 最新成交 isNewNotice: false,
listDealBuffer: [], // 最新成交缓存 timeDate: '',
infoNew: {}, // 最新资讯 listBanner: [],
rawBid: [], listBid: [], // 今日开标
rawNotice: [], listNotice: [], // 公告信息
rawAuction: [], listAuction: [], // 竞标采购
rawNew: [], listDeal: [], // 最新成交
rawDeal: [], listDealBuffer: [], // 最新成交缓存
noticeActive: 0, // 当前公告 infoNew: {}, // 最新资讯
noticeTabActive: 0, // 当前公告类型 rawBid: [],
noticeTab: [ rawNotice: [],
{ 'label': '招标采购公告', 'value': 2, 'index': 0 }, rawAuction: [],
{ 'label': '资格预审公告', 'value': 3, 'index': 1 }, rawNew: [],
{ 'label': '澄清变更公告', 'value': 4, 'index': 2 }, rawDeal: [],
{ 'label': '中标候选公示', 'value': 5, 'index': 3 }, noticeActive: 0, // 当前公告
{ 'label': '结果公告', 'value': 6, 'index': 4 }, noticeTabActive: 0, // 当前公告类型
{ 'label': '其他公告', 'value': 9, 'index': 5 }, noticeTab: [
], { 'label': '招标采购公告', 'value': 2, 'index': 0 },
auctionActive: 0, { 'label': '资格预审公告', 'value': 3, 'index': 1 },
dealIndex: 0, // 最新交易缓存数组索引 { 'label': '澄清变更公告', 'value': 4, 'index': 2 },
dealActive: 0, // 最新交易选中 { 'label': '中标候选公示', 'value': 5, 'index': 3 },
dealMax: 0, // 最新交易数据条目 { 'label': '结果公告', 'value': 6, 'index': 4 },
} { 'label': '其他公告', 'value': 9, 'index': 5 },
}, ],
computed: { auctionActive: 0,
info: function () { dealIndex: 0, // 最新交易缓存数组索引
return this.$store.state.info dealActive: 0, // 最新交易选中
}, dealMax: 0, // 最新交易数据条目
isSignIn: function () { }
return this.$store.state.isSignIn },
}, computed: {
}, info: function () {
return this.$store.state.info
watch: { },
info: { isSignIn: function () {
handler: function (funcNewValue, funcOldValue) { return this.$store.state.isSignIn
if (funcNewValue) this.queryNotify() },
}, },
deep: true,
immediate: true, watch: {
}, info: {
isSignIn: { handler: function (funcNewValue, funcOldValue) {
handler: function (funcNewValue, funcOldValue) { if (funcNewValue) this.queryNotify()
},
}, deep: true,
deep: true, immediate: true,
immediate: true, },
}, isSignIn: {
}, handler: function (funcNewValue, funcOldValue) {
created: function () {
this.timeDate = iMiment(iTime()).format('MM月DD日') },
this.queryBanner() deep: true,
this.queryNotice(2, 0) immediate: true,
this.onQueryAuction(0) },
this.queryData() },
}, created: function () {
methods: { this.timeDate = iMiment(iTime()).format('MM月DD日')
queryNotify: function () { this.queryBanner()
if (this.info.identity) { this.queryNotice(2, 0)
iRequest.request(iHost.base + 'bid/zNotification/countUnread', { 'userType': this.info.identity }, 'json', 'post') this.onQueryAuction(0)
.then((funcResponse) => { this.queryData()
this.isNewNotice = funcResponse.count ? true : false },
}) methods: {
} queryNotify: function () {
}, if (this.info.identity) {
queryBanner: function () { iRequest.request(iHost.base + 'bid/zNotification/countUnread', { 'userType': this.info.identity }, 'json', 'post')
iRequest.request(iHost.base + 'bid/zBanner/getListByType', { 'type': 1 }, 'json', 'post') .then((funcResponse) => {
.then((funcResponse) => { this.isNewNotice = funcResponse.count ? true : false
let funcList = [] })
let funcRawData = funcResponse.list }
for (let i = 0, len = funcRawData.length; i < len; i++) { },
let funcItem = { queryBanner: function () {
'id': funcRawData[i].id, iRequest.request(iHost.base + 'bid/zBanner/getListByType', { 'type': 1 }, 'json', 'post')
'url': iHost.base + funcRawData[i].img, .then((funcResponse) => {
'link': this.$options.filters.urlFormat(funcRawData[i].link), let funcList = []
'title': funcRawData[i].title, let funcRawData = funcResponse.list
} for (let i = 0, len = funcRawData.length; i < len; i++) {
if (funcItem.link) { let funcItem = {
funcItem.isLink = true 'id': funcRawData[i].id,
} else { 'url': iHost.base + funcRawData[i].img,
funcItem.isLink = false 'link': this.$options.filters.urlFormat(funcRawData[i].link),
} 'title': funcRawData[i].title,
funcList.push(funcItem) }
} if (funcItem.link) {
this.listBanner = funcList funcItem.isLink = true
}) } else {
.catch((funcError) => {}) funcItem.isLink = false
}, }
queryData: function () { funcList.push(funcItem)
let funcParam = { }
'pageNo': 1, this.listBanner = funcList
'pageSize': 10, })
} .catch((funcError) => {})
let funcBid = iRequest.request(iHost.base + 'bid/zIndex/todayOpenTender', {}, 'json', 'get') },
.then((funcResponse) => { queryData: function () {
this.rawBid = funcResponse let funcParam = {
}) 'pageNo': 1,
let funcNew = iRequest.request(iHost.base + 'bid/zIndex/latestNews', {}, 'json', 'get') 'pageSize': 10,
.then((funcResponse) => { }
this.rawNew = funcResponse let funcBid = iRequest.request(iHost.base + 'bid/zIndex/todayOpenTender', {}, 'json', 'get')
}) .then((funcResponse) => {
let funcDeal = iRequest.request(iHost.base + 'bid/zIndex/latestDeal', funcParam, 'json', 'post') this.rawBid = funcResponse
.then((funcResponse) => { })
this.rawDeal = funcResponse let funcNew = iRequest.request(iHost.base + 'bid/zIndex/latestNews', {}, 'json', 'get')
}) .then((funcResponse) => {
Promise.all([ funcBid, funcNew, funcDeal ]) this.rawNew = funcResponse
.then(() => { })
this.setHome() let funcDeal = iRequest.request(iHost.base + 'bid/zIndex/latestDeal', funcParam, 'json', 'post')
}) .then((funcResponse) => {
.catch((funcError) => { this.rawDeal = funcResponse
console.log(funcError) })
}) Promise.all([ funcBid, funcNew, funcDeal ])
}, .then(() => {
setHome: function () { this.setHome()
this.setBid() })
this.setNew() .catch((funcError) => {
this.setDeal() console.log(funcError)
}, })
setBid: function () { },
let funcList = [] setHome: function () {
let funcRawData = this.rawBid this.setBid()
for (let i = 0, len = funcRawData.length; i < len; i++) { this.setNew()
let funcItem = { this.setDeal()
'noticeId': funcRawData[i].id, },
'noticeType': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))], setBid: function () {
'noticeTitle': funcRawData[i].title, let funcList = []
'timeRelease': iMiment(funcRawData[i].releaseTime).format('YYYY-MM-DD'), let funcRawData = this.rawBid
} for (let i = 0, len = funcRawData.length; i < len; i++) {
funcList.push(funcItem) let funcItem = {
} 'noticeId': funcRawData[i].id,
this.listBid = funcList 'noticeType': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))],
}, 'noticeTitle': funcRawData[i].title,
setNew: function () { 'timeRelease': iMiment(funcRawData[i].releaseTime).format('YYYY-MM-DD'),
this.infoNew = { }
'id': this.rawNew.id, funcList.push(funcItem)
'type': Number(this.rawNew.informationType), }
'title': this.rawNew.title, this.listBid = funcList
'content': this.rawNew.content, },
'year': iMiment(this.rawNew.releaseTime).format('YYYY'), setNew: function () {
'month': iMiment(this.rawNew.releaseTime).format('MM.DD'), this.infoNew = {
} 'id': this.rawNew.id,
}, 'type': Number(this.rawNew.informationType),
setDeal: function () { 'title': this.rawNew.title,
let funcList = [] 'content': this.rawNew.content,
let funcRawData = this.rawDeal.list 'year': iMiment(this.rawNew.releaseTime).format('YYYY'),
for (let i = 0, len = funcRawData.length; i < len; i++) { 'month': iMiment(this.rawNew.releaseTime).format('MM.DD'),
let funcItem = { }
'noticeId': funcRawData[i].id, },
'timeRelease': iMiment(funcRawData[i].releaseTime).format('YYYY-MM-DD'), setDeal: function () {
'companyName': funcRawData[i].companyName, let funcList = []
'projectType': funcRawData[i].projectType, let funcRawData = this.rawDeal.list
'projectName': funcRawData[i].projectName, for (let i = 0, len = funcRawData.length; i < len; i++) {
} let funcItem = {
funcList.push(funcItem) 'noticeId': funcRawData[i].id,
} 'timeRelease': iMiment(funcRawData[i].releaseTime).format('YYYY-MM-DD'),
this.dealActive = 0 'companyName': funcRawData[i].companyName,
if (funcList[this.dealActive]) { 'projectType': funcRawData[i].projectType,
this.listDeal[0] = funcList[this.dealActive] 'projectName': funcRawData[i].projectName,
} }
if (funcList[this.dealActive + 1]) { funcList.push(funcItem)
this.listDeal[1] = funcList[this.dealActive + 1] }
} this.dealActive = 0
this.listDealBuffer = funcList if (funcList[this.dealActive]) {
}, this.listDeal[0] = funcList[this.dealActive]
queryNotice: function (funcType, funcIndex) { }
this.noticeTabActive = funcIndex if (funcList[this.dealActive + 1]) {
this.listDeal[1] = funcList[this.dealActive + 1]
let funcParam = { }
'noticeType': iDictionary.noticeType.raw[iDictionary.noticeType.mapping.indexOf(funcType)], this.listDealBuffer = funcList
'keyword': '', },
'releaseTimeType': '', queryNotice: function (funcType, funcIndex) {
'procurementType': '', this.noticeTabActive = funcIndex
'orderBy': 0,
'pageSize': 6, let funcParam = {
'pageNo': 1 'noticeType': iDictionary.noticeType.raw[iDictionary.noticeType.mapping.indexOf(funcType)],
} 'keyword': '',
'releaseTimeType': '',
iRequest.request(iHost.base + 'bid/zTenderNotice/getApiAllList', funcParam, 'json', 'post') 'procurementType': '',
.then((funcResponse) => { 'orderBy': 0,
let funcList = [] 'pageSize': 6,
let funcRawData = funcResponse.list 'pageNo': 1
for (let i = 0, len = funcResponse.list.length; i < len; i++) { }
let funcItem = {
'noticeId': funcRawData[i].id, iRequest.request(iHost.base + 'bid/zTenderNotice/getApiAllList', funcParam, 'json', 'post')
'noticeType': funcType, .then((funcResponse) => {
'noticeTitle': funcRawData[i].title, let funcList = []
'buyWay': funcRawData[i].procurementTypeDesc, let funcRawData = funcResponse.list
'timeRelease': iMiment(funcRawData[i].releaseTime).format('YYYY-MM-DD'), for (let i = 0, len = funcResponse.list.length; i < len; i++) {
} let funcItem = {
funcList.push(funcItem) 'noticeId': funcRawData[i].id,
} 'noticeType': funcType,
this.listNotice = funcList 'noticeTitle': funcRawData[i].title,
}) 'buyWay': funcRawData[i].procurementTypeDesc,
.catch((funcError) => { 'timeRelease': iMiment(funcRawData[i].releaseTime).format('YYYY-MM-DD'),
this.$message.error(funcError.message) }
}) funcList.push(funcItem)
}, }
onQueryAuction: function (funcType) { this.listNotice = funcList
this.auctionActive = funcType })
this.auctionActive = funcType .catch((funcError) => {
let funcParam = { this.$message.error(funcError.message)
'noticeType': iDictionary.noticeType.raw[iDictionary.noticeType.mapping.indexOf(funcType)], })
'keyword': '', },
'releaseTimeType': '', onQueryAuction: function (funcType) {
'procurementType': '', this.auctionActive = funcType
'orderBy': 0, this.auctionActive = funcType
'pageSize': 8, let funcParam = {
'pageNo': 1 'noticeType': iDictionary.noticeType.raw[iDictionary.noticeType.mapping.indexOf(funcType)],
} 'keyword': '',
'releaseTimeType': '',
iRequest.request(iHost.base + 'bid/zTenderNotice/getApiAllList', funcParam, 'json', 'post') 'procurementType': '',
.then((funcResponse) => { 'orderBy': 0,
this.rawAuction = funcResponse 'pageSize': 8,
let funcList = [] 'pageNo': 1
let funcRawData = funcResponse.list }
for (let i = 0, len = funcRawData.length; i < len; i++) {
let funcItem = { iRequest.request(iHost.base + 'bid/zTenderNotice/getApiAllList', funcParam, 'json', 'post')
'noticeId': funcRawData[i].id, .then((funcResponse) => {
'noticeType': funcType, this.rawAuction = funcResponse
'noticeTitle': funcRawData[i].title, let funcList = []
'timeRelease': iMiment(funcRawData[i].releaseTime).format('YYYY-MM-DD'), let funcRawData = funcResponse.list
'timeClose': funcRawData[i].biddingEndTime ? iMiment(funcRawData[i].biddingEndTime).format('YYYY-MM-DD hh:mm') : false, for (let i = 0, len = funcRawData.length; i < len; i++) {
} let funcItem = {
funcList.push(funcItem) 'noticeId': funcRawData[i].id,
} 'noticeType': funcType,
this.listAuction = funcList 'noticeTitle': funcRawData[i].title,
}) 'timeRelease': iMiment(funcRawData[i].releaseTime).format('YYYY-MM-DD'),
.catch((funcError) => { 'timeClose': funcRawData[i].biddingEndTime ? iMiment(funcRawData[i].biddingEndTime).format('YYYY-MM-DD hh:mm') : false,
this.$message.error(funcError.message) }
}) funcList.push(funcItem)
}, }
onSignIn: function (funcType) { this.listAuction = funcList
if (this.signInEntry === 'signIn') { })
this.$router.push('/signIn/input?status=' + funcType) .catch((funcError) => {
} else { this.$message.error(funcError.message)
this.$router.push('register/' + funcType) })
} },
}, onSignIn: function (funcType) {
onSignInRedirect: function () { if (this.signInEntry === 'signIn') {
window.open(iHost.agentSignIn, '_blank') this.$router.push('/signIn/input?status=' + funcType)
}, } else {
/** this.$router.push('register/' + funcType)
* 轮播跳转 }
* @function },
* @param {object} funcItem onSignInRedirect: function () {
* @returns window.open(iHost.agentSignIn, '_blank')
*/ },
onBanner: function (funcItem) { /**
window.open(funcItem.link, '_blank') * 轮播跳转
}, * @function
/** * @param {object} funcItem
* 公告更多 * @returns
* @function */
* @returns onBanner: function (funcItem) {
*/ window.open(funcItem.link, '_blank')
onMoreNotice: function () { },
let funcNoticeIndex = this.noticeTab[this.noticeTabActive].value /**
console.log(funcNoticeIndex) * 公告更多
let funcNoticeUrl = this.$router.resolve({ path: '/bid', query: { type: funcNoticeIndex } }) * @function
window.open(funcNoticeUrl .href, '_blank') * @returns
}, */
/** onMoreNotice: function () {
* 公告点击跳转详情 let funcNoticeIndex = this.noticeTab[this.noticeTabActive].value
* @function console.log(funcNoticeIndex)
* @param {object} funcItem let funcNoticeUrl = this.$router.resolve({ path: '/bid', query: { type: funcNoticeIndex } })
* @returns window.open(funcNoticeUrl .href, '_blank')
*/ },
onDetail: function (funcItem) { /**
let funcNoticeUrl = this.$router.resolve({ path: '/bid/notice', query: { type: funcItem.noticeType, id: funcItem.noticeId }}) * 公告点击跳转详情
window.open(funcNoticeUrl .href, '_blank') * @function
}, * @param {object} funcItem
/** * @returns
* 竞标更多 */
* @function onDetail: function (funcItem) {
* @returns let funcNoticeUrl = this.$router.resolve({ path: '/bid/notice', query: { type: funcItem.noticeType, id: funcItem.noticeId }})
*/ window.open(funcNoticeUrl .href, '_blank')
onMoreAuction: function () { },
let funcNoticeUrl = this.$router.resolve({ path: '/bid', query: { type: this.auctionActive } }) /**
window.open(funcNoticeUrl .href, '_blank') * 竞标更多
}, * @function
/** * @returns
* 最新资讯更多 */
* @function onMoreAuction: function () {
* @returns let funcNoticeUrl = this.$router.resolve({ path: '/bid', query: { type: this.auctionActive } })
*/ window.open(funcNoticeUrl .href, '_blank')
onMoreNews: function () { },
switch (this.infoNew.type) { /**
case 2: * 最新资讯更多
let funcPolicyUrl = this.$router.resolve({ path: '/policy' }) * @function
window.open(funcPolicyUrl .href, '_blank') * @returns
break */
onMoreNews: function () {
case 1: switch (this.infoNew.type) {
let funcTrendsUrl = this.$router.resolve({ path: '/trends' }) case 2:
window.open(funcTrendsUrl .href, '_blank') let funcPolicyUrl = this.$router.resolve({ path: '/policy' })
break window.open(funcPolicyUrl .href, '_blank')
} break
},
/** case 1:
* 最新资讯详情 let funcTrendsUrl = this.$router.resolve({ path: '/trends' })
* @function window.open(funcTrendsUrl .href, '_blank')
* @returns break
*/ }
onNewsDetail: function () { },
switch (this.infoNew.type) { /**
case 2: * 最新资讯详情
let funcPolicyUrl = this.$router.resolve({ path: '/policy/details', query: { id: this.infoNew.id } }) * @function
window.open(funcPolicyUrl .href, '_blank') * @returns
break */
onNewsDetail: function () {
case 1: switch (this.infoNew.type) {
let funcTrendsUrl = this.$router.resolve({ path: '/trends/details', query: { id: this.infoNew.id } }) case 2:
window.open(funcTrendsUrl .href, '_blank') let funcPolicyUrl = this.$router.resolve({ path: '/policy/details', query: { id: this.infoNew.id } })
break window.open(funcPolicyUrl .href, '_blank')
} break
},
onDealPrevious: function () { case 1:
if (this.dealActive > 0) { let funcTrendsUrl = this.$router.resolve({ path: '/trends/details', query: { id: this.infoNew.id } })
this.dealActive = this.dealActive - 1 window.open(funcTrendsUrl .href, '_blank')
return break
} }
if (this.dealActive === 0 && this.dealIndex > 0) { },
this.dealIndex = this.dealIndex - 1 onDealPrevious: function () {
this.listDeal[0] = this.listDealBuffer[this.dealIndex] if (this.dealActive > 0) {
this.listDeal[1] = this.listDealBuffer[this.dealIndex + 1] this.dealActive = this.dealActive - 1
} return
}, }
onDealNext: function () { if (this.dealActive === 0 && this.dealIndex > 0) {
if (this.dealActive === 0) { this.dealIndex = this.dealIndex - 1
this.dealActive = this.dealActive + 1 this.listDeal[0] = this.listDealBuffer[this.dealIndex]
return this.listDeal[1] = this.listDealBuffer[this.dealIndex + 1]
} }
if (this.dealActive === 1 && this.dealIndex < this.listDealBuffer.length - 2) { },
this.dealIndex = this.dealIndex + 1 onDealNext: function () {
this.listDeal[0] = this.listDealBuffer[this.dealIndex] if (this.dealActive === 0) {
this.listDeal[1] = this.listDealBuffer[this.dealIndex + 1] this.dealActive = this.dealActive + 1
} return
}, }
} if (this.dealActive === 1 && this.dealIndex < this.listDealBuffer.length - 2) {
} this.dealIndex = this.dealIndex + 1
</script> this.listDeal[0] = this.listDealBuffer[this.dealIndex]
this.listDeal[1] = this.listDealBuffer[this.dealIndex + 1]
<style lang="less"> }
.home { },
width: 100%; }
background-image: url(@backgroundImageUrl); }
background-repeat: no-repeat; </script>
.more {
flex-grow: 1; <style lang="less">
padding-bottom: 4px; .home {
text-align: right; width: 100%;
color: @colorGrey60; background-image: url(@backgroundImageUrl);
cursor: pointer; background-repeat: no-repeat;
} .more {
.title { flex-grow: 1;
margin-right: 20px; padding-bottom: 4px;
font-size: @fontSize10; text-align: right;
font-weight: 800; color: @colorGrey60;
} cursor: pointer;
.title-disable { }
color: @colorGrey60; .title {
font-size: @fontSize08; margin-right: 20px;
} font-size: @fontSize10;
.home-banner { font-weight: 800;
position: relative; }
width: 100%; .title-disable {
overflow: hidden; color: @colorGrey60;
font-size: @fontSize08;
.home-carousel { }
align-items: center; .home-banner {
flex-direction: column; position: relative;
max-width: 100%; width: 100%;
overflow: hidden;
.el-carousel__item {
display: flex; .home-carousel {
flex-direction: row; align-items: center;
justify-content: center; flex-direction: column;
align-items: center; max-width: 100%;
background: #ffffff;
} .el-carousel__item {
display: flex;
img { flex-direction: row;
height: 400px; justify-content: center;
} align-items: center;
} background: #ffffff;
} }
.new-bid {
width: 100%; img {
padding: 50px 0; height: 400px;
background: #FFFFFF; }
.title { }
> span:nth-child(1) { }
margin-right: 16px; .new-bid {
font-size: @fontSize10; position: relative;
} width: 100%;
> span:nth-child(2) { padding: 50px 0;
margin-bottom: 2px; background: #FFFFFF;
font-size: @fontSize01;
} .calendar {
} position: relative;
.title-extra { width: 410px;
padding-bottom: 4px; height: 386px;
} margin-right: 40px;
.list { box-shadow: 0px 0px 30px 0px rgba(0, 0, 0, 0.1);
width: 944px; border-radius: 25px;
span:nth-child(1) { background: #F8F8F8;
max-width: 830px;
margin-top: 32px; overflow: hidden;
font-size: @fontSize02;
} .calendar-title {
span:nth-child(2) { position: absolute;
font-size: @fontSize02; top: 10px;
color: @colorGrey60; left: 100px;
} font-size: 20px;
} font-weight: bold;
.nothing { color: #2575FA;
width: 994px; }
height: 200px;
img { .wh_content_all {
height: 100px; width: 410px;
margin-bottom: 20px; margin: 0;
} padding: 0 0 20px 0;
} background: #f8f8f8;
.home-signin {
width: 206px; .wh_top_changge {
height: 300px; .wh_content_li {
padding: 24px 0; position: relative;
background-image: url('../assets/bg-02.png'); left: 50px;
background-repeat: no-repeat; font-size: 20px;
background-size: 206px 300px; font-weight: bold;
box-shadow: 0px 0px 30px 0px rgba(41, 41, 41, 0.1); color: #000000;
border-radius: 16px; }
// 未登录状态样式
.home-signin-entry { .wh_jiantou1,
height: 34px; .wh_jiantou2 {
margin-bottom: 26px; border-color: #858585;
div { }
width: 50%; }
}
.home-signin-entry-active { // 日历天数
padding-bottom: 8px; .wh_content {
border-bottom: 4px #D02F1E solid; width: 372px;
text-align: center; margin: 0 20px;
font-size: @fontSize04; padding: 0;
font-weight: 800;
} .wh_content_item {
.home-signin-entry-inactive { width: 50px;
padding-bottom: 8px; height: 50px;
border-bottom: 2px#FFFFFF solid; margin: 0 3px 3px 0;
font-size: @fontSize02; padding: 0;
}
} .wh_top_tag {
.home-signin-identity { width: 50px;
height: 190px; height: 50px;
} color: #666666;
.home-signin-item { }
width: 100%;
height: 64px; .wh_item_date,
padding: 0 36px; .wh_chose_day {
span { width: 50px;
font-size: @fontSize03; height: 50px;
} border-radius: 0;
img { background: #FFFFFF;
width: 40px;
margin-right: 14px; font-size: 20px;
} font-weight: bold;
} color: #000000;
.home-signin-item:hover { }
background: #ffffff;
box-shadow: 0px 0px 30px 0px rgba(42, 42, 42, 0.15); .wh_other_dayhide {
} color: #CCCCCC;
}
// 登录相关样式
.home-signin-identity-img { .wh_isMark {
width: 100%; position: relative;
img { }
width: 44px;
height: 44px; .wh_isMark::after {
} position: absolute;
} bottom: 4px;
.home-signin-name { content: '';
width: 100%; width: 10px;
min-height: 40px; height: 10px;
margin-top: 26px; border-radius: 50%;
> span { background: #D02F1E;
text-align: center; }
}
} .wh_isToday {
.home-signin-notify { width: 50px;
width: 166px; height: 50px;
height: 54px; border-radius: 0;
margin: 26px 20px; background: #2575fa;
border-top: 1px #cccccc dashed;
border-bottom: 1px #cccccc dashed; color: #FFFFFF;
.el-badge { }
height: 20px; }
}
span { .wh_content_item:nth-child(6),
height: 24px; .wh_content_item:nth-child(7) {
margin-left: 10px; .wh_top_tag {
} color: #D02F1E;
} }
.home-signin-state { }
width: 100%; }
padding: 0 20px; }
> span { }
font-size: @fontSize01; .title {
} > span:nth-child(1) {
} margin-right: 16px;
} font-size: @fontSize10;
} }
.notice { > span:nth-child(2) {
width: 100%; margin-bottom: 2px;
height: 674px; font-size: @fontSize01;
padding: 50px 0; }
background-image: url('../assets/bg-03.png'); }
background-repeat: no-repeat; .title-extra {
.notice-title { padding-bottom: 4px;
margin-bottom: 30px; }
} .list {
.notice-type { width: 750px;
width: 156px; span:nth-child(1) {
height: 66px; max-width: 830px;
margin-bottom: 2px; margin-top: 32px;
border-radius: 15px 0px 0px 15px; font-size: @fontSize02;
background: #EEEEEE; }
} span:nth-child(2) {
.notice-type-active { font-size: @fontSize02;
border: 1px @colorBlue solid; color: @colorGrey60;
color: @colorWhite; }
background: #3e8ddc; }
} .nothing {
.notice-list { width: 750px;
width: 1044px; height: 200px;
padding: 24px 20px; img {
background: #FFFFFF; height: 100px;
border-radius: 0px 15px 15px 0px; margin-bottom: 20px;
.notice-item-title { }
height: 70px; }
border-bottom: 1px #E5E5E5 dashed; .home-signin {
span:nth-child(1) { position: absolute;
width: 130px; top: 60px;
} right: 0;
span:nth-child(2) { width: 206px;
flex-grow: 1; height: 300px;
max-width: 740px; padding: 24px 0;
margin-right: 40px; background-image: url('../assets/bg-02.png');
} background-repeat: no-repeat;
span:nth-child(3) { background-size: 206px 300px;
flex-grow: 1; box-shadow: 0px 0px 30px 0px rgba(41, 41, 41, 0.1);
width: 96px; border-radius: 16px;
color: @colorGrey60; // 未登录状态样式
text-align: right; .home-signin-entry {
} height: 34px;
} margin-bottom: 26px;
.notice-item-title-active { div {
border: none; width: 50%;
} }
.notice-item-time-active { .home-signin-entry-active {
height: 60px; padding-bottom: 8px;
padding-left: 130px; border-bottom: 4px #D02F1E solid;
color: @colorGrey40; text-align: center;
font-size: @fontSize01; font-size: @fontSize04;
border-bottom: 1px #E5E5E5 dashed; font-weight: 800;
i { }
margin-right: 6px; .home-signin-entry-inactive {
} padding-bottom: 8px;
} border-bottom: 2px#FFFFFF solid;
.notice-item-time { font-size: @fontSize02;
display: none; }
} }
} .home-signin-identity {
} height: 190px;
.bidding { }
width: 100%; .home-signin-item {
height: 694px; width: 100%;
padding: 50px 0; height: 64px;
background: #FFFFFF; padding: 0 36px;
.bidding-result { span {
width: 654px; font-size: @fontSize03;
} }
.bidding-news { img {
width: 544px; width: 40px;
margin-left: 40px; margin-right: 14px;
.bidding-news-detail { }
position: relative; }
margin-top: 40px; .home-signin-item:hover {
padding-left: 44px; background: #ffffff;
p { box-shadow: 0px 0px 30px 0px rgba(42, 42, 42, 0.15);
color: #000000; }
}
// 登录相关样式
.bidding-news-detail-title { .home-signin-identity-img {
font-weight: 800; width: 100%;
} img {
width: 44px;
> div { height: 44px;
position: absolute; }
top: 44px; }
left: 0; .home-signin-name {
width: 485px; width: 100%;
height: 275px; min-height: 40px;
padding: 34px; margin-top: 26px;
background: #FFFFFF; > span {
box-shadow: 0px 0px 30px 0px rgba(41,41,41,0.1); text-align: center;
opacity: 0.85; }
border-radius: 15px; }
.bidding-news-detail-month { .home-signin-notify {
font-size: @fontSize10; width: 166px;
font-weight: 800; height: 54px;
} margin: 26px 20px;
.bidding-news-detail-year { border-top: 1px #cccccc dashed;
width: 34px; border-bottom: 1px #cccccc dashed;
margin-bottom: 20px; .el-badge {
padding-bottom: 10px; height: 20px;
border-bottom: 4px @colorRed solid; }
} span {
.bidding-news-detail-html { height: 24px;
width: 100%; margin-left: 10px;
height: 40px; }
margin-top: 20px; }
font-size: @fontSize01 !important; .home-signin-state {
overflow: hidden; width: 100%;
} padding: 0 20px;
} > span {
img { font-size: @fontSize01;
width: 100%; }
} }
} }
}
// 对应后台富文本编辑边框样式 .notice {
table { width: 100%;
border-top: 1px solid #ccc; height: 674px;
border-left: 1px solid #ccc; padding: 50px 0;
th { background-image: url('../assets/bg-03.png');
border-bottom: 1px solid #ccc; background-repeat: no-repeat;
border-right: 1px solid #ccc; .notice-title {
text-align: center; margin-bottom: 30px;
} }
td { .notice-type {
border-bottom: 1px solid #ccc; width: 156px;
border-right: 1px solid #ccc; height: 66px;
padding: 3px 5px; margin-bottom: 2px;
} border-radius: 15px 0px 0px 15px;
} background: #EEEEEE;
} }
.list { .notice-type-active {
margin-top: 8px; border: 1px @colorBlue solid;
.list-item { color: @colorWhite;
height: 70px; background: #3e8ddc;
padding: 10px 0; }
border-bottom: 1px #E5E5E5 dashed; .notice-list {
> div:nth-child(1) { width: 1044px;
> span:nth-child(1) { padding: 24px 20px;
max-width: 500px; background: #FFFFFF;
} border-radius: 0px 15px 15px 0px;
> span:nth-child(2) { .notice-item-title {
font-size: @fontSize01; height: 70px;
text-align: right; border-bottom: 1px #E5E5E5 dashed;
color: @colorGrey60; span:nth-child(1) {
} width: 130px;
} }
> div:nth-child(2) { span:nth-child(2) {
font-size: @fontSize01; flex-grow: 1;
color: @colorGrey60; max-width: 740px;
i { margin-right: 40px;
margin-right: 6px; }
} span:nth-child(3) {
} flex-grow: 1;
} width: 96px;
.list-item-result { color: @colorGrey60;
padding-top: 24px; text-align: right;
} }
} }
} .notice-item-title-active {
.deal { border: none;
width: 100%; }
padding: 50px 0; .notice-item-time-active {
background-image: url('../assets/bg-04.png'); height: 60px;
background-repeat: no-repeat; padding-left: 130px;
.deal-title { color: @colorGrey40;
padding-left: 30px; font-size: @fontSize01;
} border-bottom: 1px #E5E5E5 dashed;
.deal-list { i {
position: relative; margin-right: 6px;
min-height: 100px; }
margin: 0 30px; }
.arrow-l { .notice-item-time {
position: absolute; display: none;
top: 66px; }
left: -30px; }
width: 28px; }
height: 28px; .bidding {
} width: 100%;
.arrow-r { height: 694px;
position: absolute; padding: 50px 0;
top: 66px; background: #FFFFFF;
right: -30px; .bidding-result {
width: 28px; width: 654px;
height: 28px; }
} .bidding-news {
.deal-item { width: 544px;
width: 602px; margin-left: 40px;
height: 100px; .bidding-news-detail {
margin-top: 30px; position: relative;
padding: 22px 20px; margin-top: 40px;
border-radius: 15px; padding-left: 44px;
> div { p {
> span:nth-child(1) { color: #000000;
max-width: 450; }
}
} .bidding-news-detail-title {
> div:nth-child(2) { font-weight: 800;
font-size: @fontSize01; }
}
} > div {
.deal-item-active { position: absolute;
background: #FFFFFF; top: 44px;
box-shadow: 0px 0px 30px 0px rgba(41,41,41,0.1); left: 0;
} width: 485px;
} height: 275px;
} padding: 34px;
} background: #FFFFFF;
box-shadow: 0px 0px 30px 0px rgba(41,41,41,0.1);
opacity: 0.85;
border-radius: 15px;
.bidding-news-detail-month {
font-size: @fontSize10;
font-weight: 800;
}
.bidding-news-detail-year {
width: 34px;
margin-bottom: 20px;
padding-bottom: 10px;
border-bottom: 4px @colorRed solid;
}
.bidding-news-detail-html {
width: 100%;
height: 40px;
margin-top: 20px;
font-size: @fontSize01 !important;
overflow: hidden;
}
}
img {
width: 100%;
}
}
// 对应后台富文本编辑边框样式
table {
border-top: 1px solid #ccc;
border-left: 1px solid #ccc;
th {
border-bottom: 1px solid #ccc;
border-right: 1px solid #ccc;
text-align: center;
}
td {
border-bottom: 1px solid #ccc;
border-right: 1px solid #ccc;
padding: 3px 5px;
}
}
}
.list {
margin-top: 8px;
.list-item {
height: 70px;
padding: 10px 0;
border-bottom: 1px #E5E5E5 dashed;
> div:nth-child(1) {
> span:nth-child(1) {
max-width: 500px;
}
> span:nth-child(2) {
font-size: @fontSize01;
text-align: right;
color: @colorGrey60;
}
}
> div:nth-child(2) {
font-size: @fontSize01;
color: @colorGrey60;
i {
margin-right: 6px;
}
}
}
.list-item-result {
padding-top: 24px;
}
}
}
.deal {
width: 100%;
padding: 50px 0;
background-image: url('../assets/bg-04.png');
background-repeat: no-repeat;
.deal-title {
padding-left: 30px;
}
.deal-list {
position: relative;
min-height: 100px;
margin: 0 30px;
.arrow-l {
position: absolute;
top: 66px;
left: -30px;
width: 28px;
height: 28px;
}
.arrow-r {
position: absolute;
top: 66px;
right: -30px;
width: 28px;
height: 28px;
}
.deal-item {
width: 602px;
height: 100px;
margin-top: 30px;
padding: 22px 20px;
border-radius: 15px;
> div {
> span:nth-child(1) {
max-width: 450;
}
}
> div:nth-child(2) {
font-size: @fontSize01;
}
}
.deal-item-active {
background: #FFFFFF;
box-shadow: 0px 0px 30px 0px rgba(41,41,41,0.1);
}
}
}
}
</style> </style>
\ No newline at end of file
<template> <template>
<!-- 投标管理 - 我竞价的项目 --> <!-- 投标管理 - 我竞价的项目 -->
<div class="personal-bid-auction col"> <div class="personal-bid-auction col">
<div class="map row align-c"> <div class="map row align-c">
<currencyMap :customPath="[{ text: '投标管理', redirect: null }, { text: '我的竞价项目', redirect: null }]"></currencyMap> <currencyMap :customPath="[{ text: '投标管理', redirect: null }, { text: '我的竞价项目', redirect: null }]"></currencyMap>
</div> </div>
<div class="limit row"> <div class="limit row">
<div class="limit-option"> <div class="limit-option">
<el-input v-model="limitProject" placeholder="请输入要检索的项目名称/项目编号"></el-input> <el-input v-model="limitProject" placeholder="请输入要检索的项目名称/项目编号"></el-input>
</div> </div>
<div class="limit-option"> <div class="limit-option">
<el-select v-model="limitBuyWay" placeholder="项目状态"> <el-select v-model="limitBuyWay" placeholder="项目状态">
<el-option label="竞标中" value="2"></el-option> <el-option label="竞标中" value="2"></el-option>
<el-option label="已截止" value="3"></el-option> <el-option label="已截止" value="3"></el-option>
<el-option label="已结束" value="4"></el-option> <el-option label="已结束" value="4"></el-option>
</el-select> </el-select>
</div> </div>
<div class="limit-operation"> <div class="limit-operation">
<button class="global-cursor" @click="queryList()">查询</button> <button class="global-cursor" @click="queryList()">查询</button>
<button class="global-cursor" @click="resetQueryList()">重置</button> <button class="global-cursor" @click="resetQueryList()">重置</button>
</div> </div>
</div> </div>
<!-- 列表 --> <!-- 列表 -->
<div class="list"> <div class="list">
<div v-for="(item, index) in noticeList" :key="index"> <div v-for="(item, index) in noticeList" :key="index">
<div class="item col"> <div class="item col">
<div class="project-info row con-b align-c" @click="onDetail(item)"> <div class="project-info row con-b align-c" @click="onDetail(item)">
<div class="row align-c"> <div class="row align-c">
<span class="global-cursor project-title">{{item.projectName}}</span> <span class="global-cursor project-title">{{item.projectName}}</span>
</div> </div>
<div class="row align-c"> <div class="row align-c">
<span class="global-color-green">{{item.isWin ? '成交' : ''}}</span> <span class="global-color-green">{{item.isWin ? '成交' : ''}}</span>
<span v-if="item.projectState === 1" class="project-state">竞标中</span> <span v-if="item.projectState === 1" class="project-state">待竞价</span>
<span v-if="item.projectState === 2" class="project-state">竞标中</span> <span v-if="item.projectState === 2" class="project-state">竞标中</span>
<span v-if="item.projectState === 3" class="project-state">已截止</span> <span v-if="item.projectState === 3" class="project-state">已截止</span>
<span v-if="item.projectState === 4" class="project-state">已结束</span> <span v-if="item.projectState === 4" class="project-state">已结束</span>
</div> <span v-if="item.projectState === 5" class="project-state">已暂停</span>
</div> <span v-if="item.projectState === 6" class="project-state">已终止</span>
<div class="project-record row con-b align-c"> </div>
<div> </div>
<span class="project-close">{{item.timeClose + ' 截止报价'}}</span> <div class="project-record row con-b align-c">
<!-- <span class="record-number">共报价&nbsp;<span class="global-color-blue">{{item.quoteNumber}}</span>&nbsp;</span> --> <div>
<!-- <span class="record-time">{{item.quotationTime}}</span> --> <span class="project-close">{{item.timeClose + ' 截止报价'}}</span>
<!-- <span class="record-quote">报价</span> --> <!-- <span class="record-number">共报价&nbsp;<span class="global-color-blue">{{item.quoteNumber}}</span>&nbsp;</span> -->
<!-- <span class="global-cursor record-list" @click="onQueryQuoteRecord(index, item)">记录</span> --> <!-- <span class="record-time">{{item.quotationTime}}</span> -->
</div> <!-- <span class="record-quote">报价</span> -->
<div class="row align-c"> <!-- <span class="global-cursor record-list" @click="onQueryQuoteRecord(index, item)">记录</span> -->
<span v-if="item.projectState === 2" class="global-cursor global-color-blue" @click="onDetail(item, true)">我要报价</span> </div>
</div> <div class="row align-c">
</div> <span v-if="item.projectState === 2" class="global-cursor global-color-blue" @click="onDetail(item, true)">我要报价</span>
<div v-if="quoteRecordActive === index" class="quote-record-list"> </div>
<div v-for="(item, index) in quoteRecordList" :key="index" class="row"> </div>
<span>{{'报价时间:' + item.time}}</span> <div v-if="quoteRecordActive === index" class="quote-record-list">
<span>{{'报价价格:' + item.price + ' 元'}}</span> <div v-for="(item, index) in quoteRecordList" :key="index" class="row">
</div> <span>{{'报价时间:' + item.time}}</span>
</div> <span>{{'报价价格:' + item.price + ' 元'}}</span>
</div> </div>
</div> </div>
</div> </div>
</div>
<!-- 列表分页 --> </div>
<div class="pagination row">
<el-pagination :total="pagination.total" layout="total, sizes, prev, pager, next, jumper" @size-change="(size) => {onPagination(size, 'size', pagination)}" @current-change="(size) => {onPagination(size, 'current', pagination)}"></el-pagination> <!-- 列表分页 -->
<button>确定</button> <div class="pagination row">
</div> <el-pagination :total="pagination.total" layout="total, sizes, prev, pager, next, jumper" @size-change="(size) => {onPagination(size, 'size', pagination)}" @current-change="(size) => {onPagination(size, 'current', pagination)}"></el-pagination>
</div> <button>确定</button>
</template> </div>
</div>
<script> </template>
import iMiment from 'miment'
<script>
import iHost from '@/common/js/host.js' import iMiment from 'miment'
import iRequest from '@/common/js/request/request.js'
import iHost from '@/common/js/host.js'
import iCurrencyMap from '@/components/currency-map.vue' import iRequest from '@/common/js/request/request.js'
import iFramePagination from '@/common/frame/pagination/pagination.js'
import iCurrencyMap from '@/components/currency-map.vue'
export default { import iFramePagination from '@/common/frame/pagination/pagination.js'
components: {
currencyMap: iCurrencyMap, export default {
}, components: {
currencyMap: iCurrencyMap,
data: function () { },
return {
limitProject: '', data: function () {
limitBuyWay: '', return {
limitProjectState: '', limitProject: '',
limitBuyWay: '',
noticeList: [], limitProjectState: '',
quoteRecordActive: -1, noticeList: [],
quoteRecordList: [],
quoteRecordActive: -1,
pagination: { quoteRecordList: [],
size: 10,
total: 0, pagination: {
current: 1, size: 10,
} total: 0,
} current: 1,
}, }
}
created: function () { },
this.queryList()
}, created: function () {
this.queryList()
watch: { },
}, watch: {
methods: { },
resetQueryList: function () {
this.limitProject = '' methods: {
this.limitBuyWay = '' resetQueryList: function () {
this.pagination.current = 1 this.limitProject = ''
this.queryList() this.limitBuyWay = ''
}, this.pagination.current = 1
/** this.queryList()
* 列表查询 },
* @function /**
* @returns * 列表查询
*/ * @function
queryList: function () { * @returns
let funcParam = { */
'keyword': this.limitProject, queryList: function () {
'state': this.limitBuyWay, // 2 - 竞价中, 3 - 已截止, 4 - 已结束 let funcParam = {
'pageSize': this.pagination.size, 'keyword': this.limitProject,
'pageNo': this.pagination.current 'state': this.limitBuyWay, // 2 - 竞价中, 3 - 已截止, 4 - 已结束
} 'pageSize': this.pagination.size,
'pageNo': this.pagination.current
iRequest.request(iHost.base + 'bid/zBiddingProject/getHaveBidProjectList', funcParam, 'json', 'post') }
.then((funcResponse) => {
let funcList = [] iRequest.request(iHost.base + 'bid/zBiddingProject/getHaveBidProjectList', funcParam, 'json', 'post')
for (let i = 0, len = funcResponse.list.length; i < len; i++) { .then((funcResponse) => {
let funcItem = { let funcList = []
'noticeId': funcResponse.list[i].id, for (let i = 0, len = funcResponse.list.length; i < len; i++) {
'noticeTitle': funcResponse.list[i].title, let funcItem = {
'projectId': funcResponse.list[i].id, 'noticeId': funcResponse.list[i].id,
'projectName': funcResponse.list[i].projectName, 'noticeTitle': funcResponse.list[i].title,
'projectState': Number(funcResponse.list[i].state), 'projectId': funcResponse.list[i].id,
'projectNumber': funcResponse.list[i].projectNo, 'projectName': funcResponse.list[i].projectName,
'quoteNumber': funcResponse.list[i].quotationNumber, 'projectState': Number(funcResponse.list[i].state),
'quotationTime': iMiment(funcResponse.list[i].quotationTime).format('YYYY-MM-DD hh:mm:ss'), 'projectNumber': funcResponse.list[i].projectNo,
'timeClose': iMiment(funcResponse.list[i].biddingEndTime).format('YYYY-MM-DD hh:mm:ss'), 'quoteNumber': funcResponse.list[i].quotationNumber,
'isWin': funcResponse.list[i].selected, 'quotationTime': iMiment(funcResponse.list[i].quotationTime).format('YYYY-MM-DD hh:mm:ss'),
} 'timeClose': iMiment(funcResponse.list[i].biddingEndTime).format('YYYY-MM-DD hh:mm:ss'),
'isWin': funcResponse.list[i].selected,
funcList.push(funcItem) }
}
funcList.push(funcItem)
this.noticeList = funcList }
this.pagination.total = funcResponse.count
}) this.noticeList = funcList
.catch((funcError) => { this.pagination.total = funcResponse.count
this.$message.error(funcError.message) })
}) .catch((funcError) => {
}, this.$message.error(funcError.message)
})
onQueryQuoteRecord: function (funcIndex, funcItem) { },
this.quoteRecordList = []
this.quoteRecordActive = funcIndex onQueryQuoteRecord: function (funcIndex, funcItem) {
this.quoteRecordList = []
let funcParam = { this.quoteRecordActive = funcIndex
'pageNo': 1,
'pageSize': 5, let funcParam = {
'biddingPackageId': funcItem.id, 'pageNo': 1,
} 'pageSize': 5,
iRequest.request(iHost.base + 'bid/zBiddingPackageOffer/packageHaveBidLogs', funcParam, 'json', 'post') 'biddingPackageId': funcItem.id,
.then((funcResponse) => { }
let funcRawData = funcResponse.page.list iRequest.request(iHost.base + 'bid/zBiddingPackageOffer/packageHaveBidLogs', funcParam, 'json', 'post')
let funcList = [] .then((funcResponse) => {
for (let i = 0, len = funcRawData.length; i < len; i++) { let funcRawData = funcResponse.page.list
let funcItem = { let funcList = []
'time': funcRawData[i].createDate, for (let i = 0, len = funcRawData.length; i < len; i++) {
'price': funcRawData[i].price, let funcItem = {
} 'time': funcRawData[i].createDate,
funcList.push(funcItem) 'price': funcRawData[i].price,
} }
this.quoteRecordList = funcList funcList.push(funcItem)
}
if (this.quoteRecordList.length === 0) { this.quoteRecordList = funcList
this.quoteRecordList.push({ 'time': '暂无报价', 'price': 0 })
} if (this.quoteRecordList.length === 0) {
}) this.quoteRecordList.push({ 'time': '暂无报价', 'price': 0 })
.catch((funcError) => {}) }
}, })
.catch((funcError) => {})
onDetail: function (funcItem, funcIsQuote) { },
if (funcIsQuote) {
this.$router.push('/supplier/detail?type=0' + '&id=' + funcItem.noticeId + '&quote=true') onDetail: function (funcItem, funcIsQuote) {
return if (funcIsQuote) {
} this.$router.push('/supplier/detail?type=0' + '&id=' + funcItem.noticeId + '&quote=true')
this.$router.push('/supplier/detail?type=0' + '&id=' + funcItem.noticeId) return
}, }
this.$router.push('/supplier/detail?type=0' + '&id=' + funcItem.noticeId)
/** },
* 页码组件
* @function /**
* @param {number} funcValue * 页码组件
* @param {string} funcType - 数据类型 * @function
* @param {object} funcUpdateObject - 记录对象 * @param {number} funcValue
* @returns * @param {string} funcType - 数据类型
*/ * @param {object} funcUpdateObject - 记录对象
onPagination: function (funcValue, funcType, funcUpdateObject) { * @returns
iFramePagination(funcValue, funcType, funcUpdateObject) */
this.queryList() onPagination: function (funcValue, funcType, funcUpdateObject) {
}, iFramePagination(funcValue, funcType, funcUpdateObject)
} this.queryList()
} },
</script> }
}
<style lang="less"> </script>
.personal-bid-auction {
padding-bottom: 180px; <style lang="less">
.personal-bid-auction {
.map { padding-bottom: 180px;
height: 66px;
border-bottom: 1px #EFEFEF solid; .map {
} height: 66px;
border-bottom: 1px #EFEFEF solid;
.limit { }
width: 100%;
margin-top: 22px; .limit {
width: 100%;
.limit-option { margin-top: 22px;
.el-input,
.el-select { .limit-option {
width: 300px; .el-input,
margin-right: 20px; .el-select {
} width: 300px;
margin-right: 20px;
button { }
width: 120px;
height: 40px; button {
margin-right: 20px; width: 120px;
border: 1px solid @colorBlue; height: 40px;
border-radius: 5px; margin-right: 20px;
color: @colorBlue; border: 1px solid @colorBlue;
background: #FFFFFF; border-radius: 5px;
} color: @colorBlue;
} background: #FFFFFF;
}
.limit-operation { }
button {
width: 70px; .limit-operation {
height: 40px; button {
margin-right: 20px; width: 70px;
border-radius: 5px; height: 40px;
border: none; margin-right: 20px;
} border-radius: 5px;
border: none;
button:nth-child(1) { }
color: #FFFFFF;
background: @colorBlue; button:nth-child(1) {
} color: #FFFFFF;
background: @colorBlue;
button:nth-child(2) { }
color: @colorGrey20;
background: @colorGrey90; button:nth-child(2) {
} color: @colorGrey20;
} background: @colorGrey90;
} }
}
.list { }
> div { .list {
margin-top: 20px;
border: 1px #EFEFEF solid; > div {
margin-top: 20px;
.item { border: 1px #EFEFEF solid;
.project-info {
min-height: 60px; .item {
padding: 0 20px; .project-info {
background: #FAFAFA; min-height: 60px;
padding: 0 20px;
.project-title { background: #FAFAFA;
padding-right: 40px;
} .project-title {
padding-right: 40px;
.project-close { }
width: 250px;
color: #999999; .project-close {
} width: 250px;
color: #999999;
.project-state { }
width: 100px;
text-align: right; .project-state {
color: #999999; width: 100px;
} text-align: right;
} color: #999999;
}
.project-record { }
position: relative;
height: 60px; .project-record {
padding: 0 20px; position: relative;
height: 60px;
.record-number { padding: 0 20px;
margin-right: 10px;
} .record-number {
margin-right: 10px;
.record-time { }
margin-right: 10px;
} .record-time {
margin-right: 10px;
.record-quote { }
margin-right: 10px;
} .record-quote {
margin-right: 10px;
.record-list { }
color: @colorBlue;
} .record-list {
} color: @colorBlue;
}
.quote-record-list { }
min-height: 30px;
padding: 20px 20px; .quote-record-list {
font-size: @fontSize01; min-height: 30px;
background: #FFFFFF; padding: 20px 20px;
font-size: @fontSize01;
span { background: #FFFFFF;
margin-right: 110px;
} span {
} margin-right: 110px;
} }
} }
} }
}
.pagination { }
margin-top: 60px;
.pagination {
> button { margin-top: 60px;
width: 70px;
height: 46px; > button {
color: #FFFFFF; width: 70px;
border: none; height: 46px;
font-size: @fontSize02; color: #FFFFFF;
background: #00468C; border: none;
} font-size: @fontSize02;
} background: #00468C;
} }
</style> }
}
</style>
<template> <template>
<!-- 用户中心首页 --> <!-- 用户中心首页 -->
<div class="supplier-home col"> <div class="supplier-home col">
<div class="biding row con-b align-c"> <div class="biding row con-b align-c">
<div class="company"> <div class="company">
<span class="global-color-blue">{{info.name}}</span> <span class="global-color-blue">{{info.name}}</span>
</div> </div>
<div class="row"> <div class="row">
<div class="biding-item col align-c"> <div class="biding-item col align-c">
<span class="global-color-blue">{{quantityBid}}</span> <span class="global-color-blue">{{quantityBid}}</span>
<span>招标采购中</span> <span>招标采购中</span>
</div> </div>
<div class="biding-item col align-c"> <div class="biding-item col align-c">
<span class="global-color-green">{{quantityQualification}}</span> <span class="global-color-green">{{quantityQualification}}</span>
<span>资格预审中</span> <span>资格预审中</span>
</div> </div>
<div class="biding-item col align-c"> <div class="biding-item col align-c">
<span class="global-color-yellowe">{{quantityAuction}}</span> <span class="global-color-yellowe">{{quantityAuction}}</span>
<span>竞价中</span> <span>竞价中</span>
</div> </div>
</div> </div>
</div> </div>
<div class="other-data row con-b"> <div class="other-data row con-b">
<div> <div>
<!-- 我的投标项目 --> <!-- 我的投标项目 -->
<div> <div>
<div class="title title-decorate row con-b align-c"> <div class="title title-decorate row con-b align-c">
<span>我的投标项目</span> <span>我的投标项目</span>
<span class="global-cursor" @click="onMore('bid')">更多</span> <span class="global-cursor" @click="onMore('bid')">更多</span>
</div> </div>
<div class="list"> <div class="list">
<div v-for="(item, index) in listBid" :key="index" class="bid-item"> <div v-for="(item, index) in listBid" :key="index" class="bid-item">
<div class="bid-item-top col con-b"> <div class="bid-item-top col con-b">
<div class="row con-b"> <div class="row con-b">
<span class="global-cursor" @click="onDetail(item)">{{item.projectName}}</span> <span class="global-cursor" @click="onDetail(item)">{{item.projectName}}</span>
<span class="project-state global-color-grey" v-if="item.projectState === 0">待公告</span> <span class="project-state global-color-grey" v-if="item.projectState === 0">待公告</span>
<span class="project-state global-color-red" v-if="item.projectState === 1">公告中</span> <span class="project-state global-color-red" v-if="item.projectState === 1">公告中</span>
<span class="project-state global-color-grey" v-if="item.projectState === 2">已开标</span> <span class="project-state global-color-grey" v-if="item.projectState === 2">已开标</span>
<span class="project-state global-color-grey" v-if="item.projectState === 3">已结束</span> <span class="project-state global-color-grey" v-if="item.projectState === 3">已结束</span>
</div> </div>
<div class="row con-b"> <div class="row con-b">
<span class="global-color-grey">{{item.projectNumber}}</span> <span class="global-color-grey">{{item.projectNumber}}</span>
<span v-if="item.operationState === 0">&nbsp;</span> <span v-if="item.operationState === 0">&nbsp;</span>
<span v-if="item.operationState === 1" class="global-color-green">中标</span> <span v-if="item.operationState === 1" class="global-color-green">中标</span>
<span v-if="item.operationState === 2">&nbsp;</span> <span v-if="item.operationState === 2">&nbsp;</span>
</div> </div>
</div> </div>
<div class="bid-item-bottom row con-b align-c"> <div class="bid-item-bottom row con-b align-c">
<span class="global-color-grey">{{item.timeClose + ' 截止投标'}}</span> <span class="global-color-grey">{{item.timeClose + ' 截止投标'}}</span>
<span v-if="item.projectState !== 3" class="global-enable-font global-cursor" @click="onBidDocument(item)">下载标书</span> <span v-if="item.projectState !== 3" class="global-enable-font global-cursor" @click="onBidDocument(item)">下载标书</span>
<span v-if="item.projectState === 3"></span> <span v-if="item.projectState === 3"></span>
</div> </div>
</div> </div>
<div v-if="listBid.length === 0"> <div v-if="listBid.length === 0">
<span>暂无数据</span> <span>暂无数据</span>
</div> </div>
</div> </div>
</div> </div>
<!-- 我参与竞价的项目 --> <!-- 我参与竞价的项目 -->
<div> <div>
<div class="title title-decorate row con-b align-c"> <div class="title title-decorate row con-b align-c">
<span>我参与竞价的项目</span> <span>我参与竞价的项目</span>
<span class="global-cursor" @click="onMore('quote')">更多</span> <span class="global-cursor" @click="onMore('quote')">更多</span>
</div> </div>
<div class="list"> <div class="list">
<div v-for="(item, index) in listAuction" :key="index" class="bid-item"> <div v-for="(item, index) in listAuction" :key="index" class="bid-item">
<div class="bid-item-top col con-b"> <div class="bid-item-top col con-b">
<div class="row con-b"> <div class="row con-b">
<span class="global-cursor" @click="onDetail(item)">{{item.projectName}}</span> <span class="global-cursor" @click="onDetail(item)">{{item.projectName}}</span>
<span v-if="item.projectState === 2" class="global-color-yellow">竞价中</span> <span v-if="item.projectState === 1" class="global-color-yellow">待竞价</span>
<span v-if="item.projectState === 3" class="global-color-grey">已截止</span> <span v-if="item.projectState === 2" class="global-color-yellow">竞价中</span>
<span v-if="item.projectState === 4" class="global-color-grey">已结束</span> <span v-if="item.projectState === 3" class="global-color-grey">已截止</span>
</div> <span v-if="item.projectState === 4" class="global-color-grey">已结束</span>
<div class="row con-b align-c"> <span v-if="item.projectState === 5" class="global-color-grey">已暂停</span>
<span class="global-color-grey">{{item.projectNumber}}</span> <span v-if="item.projectState === 6" class="global-color-grey">已终止</span>
<span class="global-color-green">{{item.isWin ? '成交' : ''}}</span> </div>
</div> <div class="row con-b align-c">
</div> <span class="global-color-grey">{{item.projectNumber}}</span>
<div class="bid-item-bottom row con-b align-c"> <span class="global-color-green">{{item.isWin ? '成交' : ''}}</span>
<span>共报价&nbsp;<span class="global-color-blue">{{item.quoteNumber}}</span>&nbsp;</span> </div>
<span v-if="item.projectState === 2" class="global-color-blue global-cursor" @click="onQuote(item)">继续报价</span> </div>
<span v-if="item.projectState === 3">&nbsp;</span> <div class="bid-item-bottom row con-b align-c">
<span v-if="item.projectState === 4">&nbsp;</span> <span>共报价&nbsp;<span class="global-color-blue">{{item.quoteNumber}}</span>&nbsp;</span>
</div> <span v-if="item.projectState === 2" class="global-color-blue global-cursor" @click="onQuote(item)">继续报价</span>
</div> <span v-if="item.projectState === 3">&nbsp;</span>
<div v-if="listAuction.length === 0"> <span v-if="item.projectState === 4">&nbsp;</span>
<span>暂无数据</span> </div>
</div> </div>
</div> <div v-if="listAuction.length === 0">
</div> <span>暂无数据</span>
</div> </div>
</div>
<div> </div>
<!-- 最新通知 --> </div>
<div>
<div class="title title-decorate row align-c"> <div>
<span>最新通知</span> <!-- 最新通知 -->
<span class="global-cursor" @click="onMore('notify')">更多</span> <div>
</div> <div class="title title-decorate row align-c">
<div class="list"> <span>最新通知</span>
<div v-for="(item, index) in listNotify" :key="index" class="bid-notice row align-c"> <span class="global-cursor" @click="onMore('notify')">更多</span>
<span class="global-cursor global-overflow-ellipsis" @click="onDeatilNotify(item)">{{item.title}}</span> </div>
<span>{{item.time}}</span> <div class="list">
</div> <div v-for="(item, index) in listNotify" :key="index" class="bid-notice row align-c">
<div v-if="listNotify.length === 0"> <span class="global-cursor global-overflow-ellipsis" @click="onDeatilNotify(item)">{{item.title}}</span>
<span>暂无数据</span> <span>{{item.time}}</span>
</div> </div>
</div> <div v-if="listNotify.length === 0">
</div> <span>暂无数据</span>
</div>
<!-- 今日开标 --> </div>
<div class="open-bid"> </div>
<div class="title title-decorate row align-c">
<span>今日开标</span> <!-- 今日开标 -->
</div> <div class="open-bid">
<div class="list"> <div class="title title-decorate row align-c">
<div v-for="(item, index) in listBidOpen" :key="index" class="bid-notice row align-c"> <span>今日开标</span>
<span class="global-cursor global-overflow-ellipsis" @click="onPublicDetail(item)">{{item.noticeTitle}}</span> </div>
<span>{{item.timeRelease}}</span> <div class="list">
</div> <div v-for="(item, index) in listBidOpen" :key="index" class="bid-notice row align-c">
<div v-if="listBidOpen.length === 0"> <span class="global-cursor global-overflow-ellipsis" @click="onPublicDetail(item)">{{item.noticeTitle}}</span>
<span>今日暂无开标项目</span> <span>{{item.timeRelease}}</span>
</div> </div>
</div> <div v-if="listBidOpen.length === 0">
</div> <span>今日暂无开标项目</span>
</div> </div>
</div> </div>
</div>
<el-dialog title="通知" :visible.sync="winDialog" :lock-scroll="false" width="800px" :close-on-click-modal="false"> </div>
<span>{{notifyContent}}</span> </div>
<span slot="footer" class="dialog-footer">
<el-button type="primary" @click="winDialog = false">确 定</el-button> <el-dialog title="通知" :visible.sync="winDialog" :lock-scroll="false" width="800px" :close-on-click-modal="false">
</span> <span>{{notifyContent}}</span>
</el-dialog> <span slot="footer" class="dialog-footer">
</div> <el-button type="primary" @click="winDialog = false">确 定</el-button>
</template> </span>
</el-dialog>
<script> </div>
import iMiment from 'miment' </template>
import iHost from '@/common/js/host.js' <script>
import iRequest from '@/common/js/request/request.js' import iMiment from 'miment'
import iDictionary from '@/common/js/dictionary.js'
import iHost from '@/common/js/host.js'
export default { import iRequest from '@/common/js/request/request.js'
components: { import iDictionary from '@/common/js/dictionary.js'
}, export default {
data: function () { components: {
return {
rawBidOpen: [], // 今日开标 },
rawNotice: [], // 通知列表 data: function () {
rawBid: [], // 我的投标 return {
rawPrice: [], // 我的竞价 rawBidOpen: [], // 今日开标
rawNotice: [], // 通知列表
listBidOpen: [], // 今日开标 rawBid: [], // 我的投标
listNotify: [], // 通知列表 rawPrice: [], // 我的竞价
listBid: [], // 我的投标
listAuction: [], // 我的竞价 listBidOpen: [], // 今日开标
listNotify: [], // 通知列表
quantityBid: 0, listBid: [], // 我的投标
quantityAuction: 0, listAuction: [], // 我的竞价
quantityQualification: 0,
quantityBid: 0,
notifyContent: [], quantityAuction: 0,
winDialog: false, quantityQualification: 0,
}
}, notifyContent: [],
created: function () { winDialog: false,
this.getRawData() }
}, },
computed: { created: function () {
info: function () { this.getRawData()
return this.$store.state.info },
}, computed: {
}, info: function () {
watch: { return this.$store.state.info
info: { },
handler: function (funcNewValue, funcOldValue) { },
watch: {
}, info: {
deep: true, handler: function (funcNewValue, funcOldValue) {
immediate: true,
} },
}, deep: true,
methods: { immediate: true,
getRawData: function () { }
let funcParam = { },
'pageNo': 1, methods: {
'pageSize': 3 getRawData: function () {
} let funcParam = {
let funcNowBid = iRequest.request(iHost.base + 'bid/zIndex/todayOpenTender', { 'isCompany': 1 }, 'json', 'get') 'pageNo': 1,
.then((funcResponse) => { 'pageSize': 3
this.rawBidOpen = funcResponse }
}) let funcNowBid = iRequest.request(iHost.base + 'bid/zIndex/todayOpenTender', { 'isCompany': 1 }, 'json', 'get')
.then((funcResponse) => {
let funcBid = iRequest.request(iHost.base + 'bid/zTenderNotice/getApiCompanyTender', { 'pageNo': 1, 'pageSize': 3 }, 'json', 'post') this.rawBidOpen = funcResponse
.then((funcResponse) => { })
this.rawBid = funcResponse.list
}) let funcBid = iRequest.request(iHost.base + 'bid/zTenderNotice/getApiCompanyTender', { 'pageNo': 1, 'pageSize': 3 }, 'json', 'post')
.then((funcResponse) => {
let funcPrice = iRequest.request(iHost.base + 'bid/zBiddingProject/getHaveBidProjectList',funcParam , 'json', 'post') this.rawBid = funcResponse.list
.then((funcResponse) => { })
this.rawPrice = funcResponse.list
}) let funcPrice = iRequest.request(iHost.base + 'bid/zBiddingProject/getHaveBidProjectList',funcParam , 'json', 'post')
.then((funcResponse) => {
let funcTotal = iRequest.request(iHost.base + 'bid/zUserCompany/getLoginUserInfo', {}, 'json', 'get') this.rawPrice = funcResponse.list
.then((funcResponse) => { })
this.quantityBid = funcResponse.tenderNum
this.quantityAuction = funcResponse.biddingNum let funcTotal = iRequest.request(iHost.base + 'bid/zUserCompany/getLoginUserInfo', {}, 'json', 'get')
this.quantityQualification = funcResponse.qualificationNum .then((funcResponse) => {
}) this.quantityBid = funcResponse.tenderNum
this.quantityAuction = funcResponse.biddingNum
let funcNotify = iRequest.request(iHost.base + 'bid/zNotification/getApiList', {'pageNo': 1, 'pageSize': 5, 'userType': 2 }, 'json', 'post') this.quantityQualification = funcResponse.qualificationNum
.then((funcResponse) => { })
let funcRawData = funcResponse.list
let funcList = [] let funcNotify = iRequest.request(iHost.base + 'bid/zNotification/getApiList', {'pageNo': 1, 'pageSize': 5, 'userType': 2 }, 'json', 'post')
for (let i = 0, l = funcRawData.length; i < l; i++) { .then((funcResponse) => {
let funcItem = { let funcRawData = funcResponse.list
'id': funcRawData[i].id, let funcList = []
'time': funcRawData[i].createDate, for (let i = 0, l = funcRawData.length; i < l; i++) {
'title': funcRawData[i].content, let funcItem = {
'isRead': funcRawData[i].readStatus === '1' ? true : false, 'id': funcRawData[i].id,
} 'time': funcRawData[i].createDate,
funcList.push(funcItem) 'title': funcRawData[i].content,
} 'isRead': funcRawData[i].readStatus === '1' ? true : false,
this.listNotify = funcList }
}) funcList.push(funcItem)
}
Promise.all([ funcBid, funcPrice, funcPrice, funcTotal ]) this.listNotify = funcList
.then((funcResponse) => { })
this.setHomeData()
}) Promise.all([ funcBid, funcPrice, funcPrice, funcTotal ])
.catch((funcError) => { .then((funcResponse) => {
console.log(funcError) this.setHomeData()
}) })
}, .catch((funcError) => {
console.log(funcError)
setHomeData: function () { })
this.setBid() },
this.setPrice()
this.setBidOpen() setHomeData: function () {
}, this.setBid()
this.setPrice()
setBid: function () { this.setBidOpen()
let funcRawData = this.rawBid },
let funcList = []
for (let i = 0, len = funcRawData.length; i < len; i++) { setBid: function () {
let funcItem = { let funcRawData = this.rawBid
'noticeId': funcRawData[i].tenderNoticeId, let funcList = []
'noticeType': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))], for (let i = 0, len = funcRawData.length; i < len; i++) {
'noticeTitle': funcRawData[i].title, let funcItem = {
'projectId': funcRawData[i].tenderProjectId, 'noticeId': funcRawData[i].tenderNoticeId,
'projectName': funcRawData[i].projectName, 'noticeType': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))],
'projectState': Number(funcRawData[i].projectState), 'noticeTitle': funcRawData[i].title,
'projectNumber': funcRawData[i].projectNo, 'projectId': funcRawData[i].tenderProjectId,
'enrollTime': funcRawData[i].enrollTime, 'projectName': funcRawData[i].projectName,
'operationState': funcRawData[i].tenderState ? Number(funcRawData[i].tenderState) : 3, 'projectState': Number(funcRawData[i].projectState),
'timeClose': iMiment(funcRawData[i].applyEndTime).format('YYYY年MM月DD日 hh:mm'), 'projectNumber': funcRawData[i].projectNo,
} 'enrollTime': funcRawData[i].enrollTime,
funcList.push(funcItem) 'operationState': funcRawData[i].tenderState ? Number(funcRawData[i].tenderState) : 3,
} 'timeClose': iMiment(funcRawData[i].applyEndTime).format('YYYY年MM月DD日 hh:mm'),
this.listBid = funcList }
}, funcList.push(funcItem)
}
setPrice: function () { this.listBid = funcList
let funcRawData = this.rawPrice },
let funcList = []
for (let i = 0, len = funcRawData.length; i < len; i++) { setPrice: function () {
let funcItem = { let funcRawData = this.rawPrice
'noticeId': funcRawData[i].id, let funcList = []
'noticeTitle': funcRawData[i].title, for (let i = 0, len = funcRawData.length; i < len; i++) {
'noticeType:': 0, let funcItem = {
'projectId': funcRawData[i].tenderProjectId, 'noticeId': funcRawData[i].id,
'projectName': funcRawData[i].projectName, 'noticeTitle': funcRawData[i].title,
'projectState': Number(funcRawData[i].state), 'noticeType:': 0,
'projectNumber': funcRawData[i].projectNo, 'projectId': funcRawData[i].tenderProjectId,
'quotaTime': funcRawData[i].quotationTime, 'projectName': funcRawData[i].projectName,
'quoteNumber': funcRawData[i].quotationNumber, 'projectState': Number(funcRawData[i].state),
'timeRelease': iMiment(funcRawData[i].biddingBeginTime).format('YYYY年MM月DD日'), 'projectNumber': funcRawData[i].projectNo,
'timeClose': iMiment(funcRawData[i].biddingEndTime).format('YYYY年MM月DD日'), 'quotaTime': funcRawData[i].quotationTime,
'isWin': funcRawData[i].selected, 'quoteNumber': funcRawData[i].quotationNumber,
} 'timeRelease': iMiment(funcRawData[i].biddingBeginTime).format('YYYY年MM月DD日'),
funcList.push(funcItem) 'timeClose': iMiment(funcRawData[i].biddingEndTime).format('YYYY年MM月DD日'),
} 'isWin': funcRawData[i].selected,
this.listAuction = funcList }
}, funcList.push(funcItem)
}
setBidOpen: function () { this.listAuction = funcList
let funcList = [] },
let funcRawData = this.rawBidOpen
for (let i = 0, len = funcRawData.length; i < len; i++) { setBidOpen: function () {
let funcItem = { let funcList = []
'noticeId': funcRawData[i].id, let funcRawData = this.rawBidOpen
'noticeType': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))], for (let i = 0, len = funcRawData.length; i < len; i++) {
'noticeTitle': funcRawData[i].title, let funcItem = {
'timeRelease': iMiment(funcRawData[i].releaseTime).format('YYYY-MM-DD'), 'noticeId': funcRawData[i].id,
} 'noticeType': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))],
funcList.push(funcItem) 'noticeTitle': funcRawData[i].title,
} 'timeRelease': iMiment(funcRawData[i].releaseTime).format('YYYY-MM-DD'),
this.listBidOpen = funcList }
}, funcList.push(funcItem)
}
onBidDocument: function (funcItem) { this.listBidOpen = funcList
let funcNoticeUrl = this.$router.resolve({ path: '/supplier/detail', query: { type: funcItem.noticeType, id: funcItem.noticeId, quote: true }}) },
window.open(funcNoticeUrl .href, '_blank')
}, onBidDocument: function (funcItem) {
let funcNoticeUrl = this.$router.resolve({ path: '/supplier/detail', query: { type: funcItem.noticeType, id: funcItem.noticeId, quote: true }})
onMore: function (funcType) { window.open(funcNoticeUrl .href, '_blank')
switch (funcType) { },
case 'bid':
this.$router.push('/supplier/bidding') onMore: function (funcType) {
break switch (funcType) {
case 'bid':
case 'quote': this.$router.push('/supplier/bidding')
this.$router.push('/supplier/auction') break
break
case 'quote':
case 'notify': this.$router.push('/supplier/auction')
this.$router.push('/supplier/notify') break
break
} case 'notify':
}, this.$router.push('/supplier/notify')
break
onDetail: function (funcItem) { }
let funcNoticeUrl = this.$router.resolve({ path: '/supplier/detail', query: { type: funcItem.noticeType, id: funcItem.noticeId }}) },
window.open(funcNoticeUrl .href, '_blank')
}, onDetail: function (funcItem) {
let funcNoticeUrl = this.$router.resolve({ path: '/supplier/detail', query: { type: funcItem.noticeType, id: funcItem.noticeId }})
onDeatilNotify: function (funcItem) { window.open(funcNoticeUrl .href, '_blank')
iRequest.request(iHost.base + 'bid/zNotification/getApiDetail', { 'notificationId': funcItem.id }, 'json', 'post') },
.then((funcResponse) => {
this.winDialog = true onDeatilNotify: function (funcItem) {
this.notifyContent = funcResponse.content iRequest.request(iHost.base + 'bid/zNotification/getApiDetail', { 'notificationId': funcItem.id }, 'json', 'post')
this.$store.commit('notify', Math.round(new Date() / 1000)) .then((funcResponse) => {
}) this.winDialog = true
.catch((funcError) => { this.notifyContent = funcResponse.content
this.$message.error(funcError.message) this.$store.commit('notify', Math.round(new Date() / 1000))
}) })
}, .catch((funcError) => {
this.$message.error(funcError.message)
onPublicDetail: function (funcItem) { })
let funcNoticeUrl = this.$router.resolve({ path: '/bid/notice', query: { type: funcItem.noticeType, id: funcItem.noticeId }}) },
window.open(funcNoticeUrl .href, '_blank')
}, onPublicDetail: function (funcItem) {
let funcNoticeUrl = this.$router.resolve({ path: '/bid/notice', query: { type: funcItem.noticeType, id: funcItem.noticeId }})
onQuote: function (funcItem) { window.open(funcNoticeUrl .href, '_blank')
this.$router.push('/supplier/detail?type=0&id=' + funcItem.noticeId + '&quote=true') },
},
}, onQuote: function (funcItem) {
} this.$router.push('/supplier/detail?type=0&id=' + funcItem.noticeId + '&quote=true')
</script> },
},
<style lang="less"> }
.supplier-home { </script>
.biding {
width: 100%; <style lang="less">
min-width: 800px; .supplier-home {
height: 82px; .biding {
border-bottom: 1px #EFEFEF solid; width: 100%;
min-width: 800px;
.company { height: 82px;
font-size: @fontSize04; border-bottom: 1px #EFEFEF solid;
}
.company {
.biding-item { font-size: @fontSize04;
margin: 0 30px; }
> span:nth-child(1) { .biding-item {
font-size: @fontSize09; margin: 0 30px;
}
> span:nth-child(2) { > span:nth-child(1) {
color: #656565; font-size: @fontSize09;
font-size: @fontSize01; }
} > span:nth-child(2) {
} color: #656565;
} font-size: @fontSize01;
}
.other-data { }
> div { }
width: calc(50% - 15px);
> div { .other-data {
margin-bottom: 40px; > div {
} width: calc(50% - 15px);
} > div {
margin-bottom: 40px;
.project-state { }
min-width: 50px; }
margin-left: 20px;
} .project-state {
min-width: 50px;
.title { margin-left: 20px;
height: 50px; }
margin-bottom: 22px;
border-bottom: 1px #F2F2F2 solid; .title {
height: 50px;
span:nth-child(1) { margin-bottom: 22px;
flex-grow: 1; border-bottom: 1px #F2F2F2 solid;
font-size: @fontSize04;
font-weight: 800; span:nth-child(1) {
} flex-grow: 1;
font-size: @fontSize04;
span:nth-child(2) { font-weight: 800;
color: #999999; }
font-size: @fontSize01;
} span:nth-child(2) {
} color: #999999;
font-size: @fontSize01;
.title-decorate:before{ }
content: ''; }
display: inline-block;
width: 4px; .title-decorate:before{
height: 20px; content: '';
margin-right: 10px; display: inline-block;
overflow: hidden; width: 4px;
background-image: linear-gradient(#CF2F1E 20%, #00468C 20%, #00468C 100%); height: 20px;
} margin-right: 10px;
overflow: hidden;
.list { background-image: linear-gradient(#CF2F1E 20%, #00468C 20%, #00468C 100%);
.bid-item { }
height: 140px;
margin-bottom: 22px; .list {
border: 1px #EFEFEF solid; .bid-item {
height: 140px;
.bid-item-top { margin-bottom: 22px;
height: 94px; border: 1px #EFEFEF solid;
padding: 20px;
font-size: @fontSize02; .bid-item-top {
background: #FAFAFA; height: 94px;
} padding: 20px;
font-size: @fontSize02;
.bid-item-bottom { background: #FAFAFA;
height: 44px; }
padding: 0 20px;
font-size: @fontSize02; .bid-item-bottom {
border-top: 1px #EFEFEF solid; height: 44px;
} padding: 0 20px;
} font-size: @fontSize02;
border-top: 1px #EFEFEF solid;
.bid-notice { }
height: 50px; }
border-bottom: 1px #EAEAEA dashed;
.bid-notice {
span:nth-child(1) { height: 50px;
flex-grow: 1; border-bottom: 1px #EAEAEA dashed;
width: 60%;
max-width: 600px; span:nth-child(1) {
margin-left: 12px; flex-grow: 1;
font-size: @fontSize02; width: 60%;
} max-width: 600px;
margin-left: 12px;
span:nth-child(2) { font-size: @fontSize02;
flex-grow: 1; }
text-align: right;
color: #A7A7A7; span:nth-child(2) {
} flex-grow: 1;
} text-align: right;
color: #A7A7A7;
.bid-notice:before{ }
content: ''; }
display: inline-block;
width: 2px; .bid-notice:before{
height: 2px; content: '';
border-radius: 50%; display: inline-block;
background: #000000; width: 2px;
} height: 2px;
} border-radius: 50%;
} background: #000000;
} }
</style> }
}
}
</style>
import iMiment from 'miment' import iMiment from 'miment'
import iHost from '@/common/js/host.js' import iHost from '@/common/js/host.js'
import iRequest from '@/common/js/request/request.js' import iRequest from '@/common/js/request/request.js'
import iDictionary from '@/common/js/dictionary.js' import iDictionary from '@/common/js/dictionary.js'
let output = function (thisVue, id, type) { let output = function (thisVue, id, type) {
let funcRequestDetail let funcRequestDetail
let funcRequestOther let funcRequestOther
let funcRequestWinInfo let funcRequestWinInfo
let funcMap = [] let funcMap = []
let funcProject = {} // 项目数据 let funcProject = {} // 项目数据
let funcProgress = {} // 进度数据 let funcProgress = {} // 进度数据
let funcPackage = [] // 合同数据 let funcPackage = [] // 合同数据
let funcAgency = {} // 供应信息 let funcAgency = {} // 供应信息
let funcFile = [] // 附件 let funcFile = [] // 附件
let funcOther = [] // 相关公告 let funcOther = [] // 相关公告
// 竞价报价公告 // 竞价报价公告
if (type === 0) { if (type === 0) {
console.log('set quoteNotice') funcMap = [{ text: '工作台首页', redirect: '/supplier' }, { text: '我竞价的项目', redirect: '/supplier/auction' }, { text: '竞价项目详情', redirect: null }]
funcMap = [{ text: '工作台首页', redirect: '/supplier' }, { text: '我竞价的项目', redirect: '/supplier/auction' }, { text: '竞价项目详情', redirect: null }]
funcRequestDetail = iRequest.request(iHost.base + 'bid/zBiddingProject/getApiDetail',{ 'id': id } , 'json', 'post')
funcRequestDetail = iRequest.request(iHost.base + 'bid/zBiddingProject/getApiDetail',{ 'id': id } , 'json', 'post') .then((funcResponse) => {
.then((funcResponse) => { // 项目信息
// 项目信息 funcProject = {
funcProject = { 'noticeId': id,
'noticeId': id, 'noticeType': type,
'noticeType': type, 'noticeTitle': funcResponse.title, // 公告标题
'noticeTitle': funcResponse.title, // 公告标题
'projectId': funcResponse.id, // 项目标识
'projectId': funcResponse.id, // 项目标识 'projectName': funcResponse.projectName, // 项目名称
'projectName': funcResponse.projectName, // 项目名称 'projectIdentity': funcResponse.projectNo, // 项目编号
'projectIdentity': funcResponse.projectNo, // 项目编号
'buyWay': '', // 采购方式
'buyWay': '', // 采购方式 'buyCompany': funcResponse.company, // 采购公司
'buyCompany': funcResponse.company, // 采购公司 'buyCompanyType': funcResponse.companyType, // 采购公司类型
'buyCompanyType': funcResponse.companyType, // 采购公司类型 'buyLiaison': funcResponse.companyContactor, // 采购联系人
'buyLiaison': funcResponse.companyContactor, // 采购联系人 'buyPhone': funcResponse.companyContact, // 采购电话
'buyPhone': funcResponse.companyContact, // 采购电话 'address': '', // 开标地点
'address': '', // 开标地点
'filePrice': '', // 文件价格
'filePrice': '', // 文件价格
'state': Number(funcResponse.state),
'timeRelease': iMiment(funcResponse.releaseTime).format('YYYY年MM月DD日 hh:mm'), // 发布时间 'timeRelease': iMiment(funcResponse.releaseTime).format('YYYY年MM月DD日 hh:mm'), // 发布时间
'timeBegin': iMiment(funcResponse.biddingBeginTime).format('YYYY年MM月DD日 hh:mm'), // 开始时间 'timeBegin': iMiment(funcResponse.biddingBeginTime).format('YYYY年MM月DD日 hh:mm'), // 开始时间
'timeEnd': iMiment(funcResponse.biddingEndTime).format('YYYY年MM月DD日 hh:mm'), // 结束时间 'timeEnd': iMiment(funcResponse.biddingEndTime).format('YYYY年MM月DD日 hh:mm'), // 结束时间
'timeClose': '', // 截止时间 'timeClose': '', // 截止时间
'timeTimestampRelease': iMiment(funcResponse.releaseTime).stamp(), 'timeTimestampRelease': iMiment(funcResponse.releaseTime).stamp(),
'timeTimestampBegin': iMiment(funcResponse.biddingBeginTime).stamp(), 'timeTimestampBegin': iMiment(funcResponse.biddingBeginTime).stamp(),
'timeTimestampEnd': iMiment(funcResponse.biddingEndTime).stamp(), 'timeTimestampEnd': iMiment(funcResponse.biddingEndTime).stamp(),
'timeTimestampClose': 1577808000000, 'timeTimestampClose': 1577808000000,
'contentTitle': '内容说明', 'contentTitle': '内容说明',
'contentHtml': funcResponse.biddingExplain, 'contentHtml': funcResponse.biddingExplain,
'isOnline': true, 'isOnline': true,
} }
thisVue.$store.commit('componentProject', funcProject) thisVue.$store.commit('componentProject', funcProject)
// 竞价表格 // 竞价表格
let funcRawData = funcResponse.packageAll let funcRawData = funcResponse.packageAll
funcRawData.sort(function(a, b) { funcRawData.sort(function(a, b) {
let funcMainWeight = 1000 let funcMainWeight = 1000
// 计算 a 的索引权重 // 计算 a 的索引权重
let funcIndex = a.index.toString().split('-') let funcIndex = a.index.toString().split('-')
let funcA = Number(funcIndex[0]) * funcMainWeight let funcA = Number(funcIndex[0]) * funcMainWeight
if (funcIndex[1]) { if (funcIndex[1]) {
a.isChild = true a.isChild = true
funcA = funcA + Number(funcIndex[1]) funcA = funcA + Number(funcIndex[1])
} else { } else {
a.isChild = false a.isChild = false
} }
// 计算 b 的索引权重 // 计算 b 的索引权重
funcIndex = b.index.toString().split('-') funcIndex = b.index.toString().split('-')
let funcB = Number(funcIndex[0]) * funcMainWeight let funcB = Number(funcIndex[0]) * funcMainWeight
if (funcIndex[1]) { if (funcIndex[1]) {
b.isChild = true b.isChild = true
funcB = funcB + Number(funcIndex[1]) funcB = funcB + Number(funcIndex[1])
} else { } else {
b.isChild = false b.isChild = false
} }
return funcA - funcB return funcA - funcB
}) })
for (let i = 0, len = funcRawData.length; i < len; i++) { for (let i = 0, len = funcRawData.length; i < len; i++) {
let funcItem = { let funcItem = {
'index': funcRawData[i].index.toString(), // 序号 'index': funcRawData[i].index.toString(), // 序号
'id': funcRawData[i].biddingPackageId, // 标识 'id': funcRawData[i].biddingPackageId, // 标识
'object': funcRawData[i].name ? funcRawData[i].name : '', // 标的 'object': funcRawData[i].name ? funcRawData[i].name : '', // 标的
'budget': funcRawData[i].fixedPrice, // 预算金额 'budget': funcRawData[i].fixedPrice, // 预算金额
'quantity': funcRawData[i].num, // 标的数量 'quantity': funcRawData[i].num, // 标的数量
'requirement': funcRawData[i].requirement, // 竞价参数要求 'requirement': funcRawData[i].requirement, // 竞价参数要求
'isChild': funcRawData[i].isChild, 'isChild': funcRawData[i].isChild,
'isWin': funcRawData[i].selected, 'isWin': funcRawData[i].selected,
} }
if (!funcItem.isChild) { if (!funcItem.isChild) {
if (funcRawData[i + 1] && funcRawData[i + 1].isChild) { if (funcRawData[i + 1] && funcRawData[i + 1].isChild) {
funcItem.haveChild = true funcItem.haveChild = true
} else { } else {
funcItem.haveChild = false funcItem.haveChild = false
} }
} else { } else {
funcItem.haveChild = false funcItem.haveChild = false
} }
funcPackage.push(funcItem) funcPackage.push(funcItem)
} }
thisVue.$store.commit('componentContract', funcPackage)
console.log(funcPackage)
thisVue.$store.commit('componentContract', funcPackage)
// 进度组件
funcProgress = {
text: ['发布时间', '竞价时间', '公布结果'],
timestamp: [ // 进度组件
funcProject.timeTimestampRelease, funcProgress = {
funcProject.timeTimestampBegin, text: ['发布时间', '竞价时间', '公布结果'],
funcProject.timeTimestampEnd, timestamp: [
funcProject.timeTimestampClose, funcProject.timeTimestampRelease,
], funcProject.timeTimestampBegin,
isBuy: false, funcProject.timeTimestampEnd,
isSignIn: false, funcProject.timeTimestampClose,
} ],
thisVue.$store.commit('componentProgress', funcProgress) isBuy: false,
isSignIn: false,
state: funcProject.state
}
// 附件组件 thisVue.$store.commit('componentProgress', funcProgress)
funcRawData = funcResponse.file
for (let i = 0, len = funcRawData.length; i < len; i++) {
let funcItem = {
'name': funcRawData[i].name, // 附件组件
'url': funcRawData[i].url funcRawData = funcResponse.file
} for (let i = 0, len = funcRawData.length; i < len; i++) {
funcFile.push(funcItem) let funcItem = {
} 'name': funcRawData[i].name,
thisVue.$store.commit('componentFile', funcFile) 'url': funcRawData[i].url
}) }
.catch((funcError) => {}) funcFile.push(funcItem)
}
funcRequestOther = iRequest.request(iHost.base + 'bid/zBiddingNotice/getApiBiddingRelevantNotices', { 'noticeId': id, 'noticeType': 7, 'isProject': 1 }, 'json', 'post') thisVue.$store.commit('componentFile', funcFile)
.then((funcResponse) => { })
let funcRawData = funcResponse.list .catch((funcError) => {})
for (let i = 0, len = funcRawData.length; i < len; i++) {
let funcItem = { funcRequestOther = iRequest.request(iHost.base + 'bid/zBiddingNotice/getApiBiddingRelevantNotices', { 'noticeId': id, 'noticeType': 7, 'isProject': 1 }, 'json', 'post')
'id': funcRawData[i].id, .then((funcResponse) => {
'type': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))], let funcRawData = funcResponse.list
'title': funcRawData[i].title, for (let i = 0, len = funcRawData.length; i < len; i++) {
} let funcItem = {
funcOther.push(funcItem) 'id': funcRawData[i].id,
} 'type': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))],
thisVue.$store.commit('componentNotice', funcOther) 'title': funcRawData[i].title,
}) }
funcOther.push(funcItem)
Promise.all([ funcRequestDetail, funcRequestOther ]) }
.then(() => { thisVue.$store.commit('componentNotice', funcOther)
thisVue.noticeData(funcMap, funcProgress, funcProject, funcPackage, funcAgency, funcFile, funcOther) })
})
.catch((funcError) => { Promise.all([ funcRequestDetail, funcRequestOther ])
console.log(funcError) .then(() => {
}) thisVue.noticeData(funcMap, funcProgress, funcProject, funcPackage, funcAgency, funcFile, funcOther)
} })
.catch((funcError) => {
// 招标采购公告 console.log(funcError)
if (type === 2) { })
console.log('set bidNotice') }
funcMap = [{ text: '工作台首页', redirect: '/supplier' }, { text: '我投标的项目', redirect: '/supplier/bidding' }, { text: '投标项目详情', redirect: null }]
// 招标采购公告
funcRequestDetail = iRequest.request(iHost.base + 'bid/zTenderNotice/getApiDetail', { 'id': id } , 'json', 'post') if (type === 2) {
.then((funcResponse) => { funcMap = [{ text: '工作台首页', redirect: '/supplier' }, { text: '我投标的项目', redirect: '/supplier/bidding' }, { text: '投标项目详情', redirect: null }]
funcProject = {
'noticeId': id, funcRequestDetail = iRequest.request(iHost.base + 'bid/zTenderNotice/getApiDetail', { 'id': id } , 'json', 'post')
'noticeType': type, .then((funcResponse) => {
'noticeTitle': funcResponse.title, // 公告标题 funcProject = {
'noticeId': id,
'projectId': funcResponse.tenderProjectId, // 项目标识 'noticeType': type,
'projectName': funcResponse.projectName, // 项目名称 'noticeTitle': funcResponse.title, // 公告标题
'projectIdentity': funcResponse.projectNo, // 项目编号
'projectId': funcResponse.tenderProjectId, // 项目标识
'buyWay': funcResponse.procurementType, // 采购方式 'projectName': funcResponse.projectName, // 项目名称
'buyCompany': funcResponse.company, // 采购公司 'projectIdentity': funcResponse.projectNo, // 项目编号
'buyCompanyType': '', // 采购公司类型
'buyLiaison': funcResponse.companyContactor, // 采购联系人 'buyWay': funcResponse.procurementType, // 采购方式
'buyPhone': funcResponse.phone, // 采购电话 'buyCompany': funcResponse.company, // 采购公司
'address': funcResponse.area.replace(/\//g, '') + funcResponse.address, // 开标地点 'buyCompanyType': '', // 采购公司类型
'buyLiaison': funcResponse.companyContactor, // 采购联系人
'timeRelease': iMiment(funcResponse.releaseTime).format('YYYY年MM月DD日 hh:mm'), // 发布时间 'buyPhone': funcResponse.phone, // 采购电话
'timeBegin': iMiment(funcResponse.receiveBeginTime).format('YYYY年MM月DD日 hh:mm'), // 开始时间 'address': funcResponse.area.replace(/\//g, '') + funcResponse.address, // 开标地点
'timeEnd': iMiment(funcResponse.receiveEndTime).format('YYYY年MM月DD日 hh:mm'), // 结束时间
'timeClose': iMiment(funcResponse.applyEndTime).format('YYYY年MM月DD日 hh:mm'), // 截止时间 'timeRelease': iMiment(funcResponse.releaseTime).format('YYYY年MM月DD日 hh:mm'), // 发布时间
'timeTimestampRelease': iMiment(funcResponse.releaseTime).stamp(), 'timeBegin': iMiment(funcResponse.receiveBeginTime).format('YYYY年MM月DD日 hh:mm'), // 开始时间
'timeTimestampBegin': iMiment(funcResponse.receiveBeginTime).stamp(), 'timeEnd': iMiment(funcResponse.receiveEndTime).format('YYYY年MM月DD日 hh:mm'), // 结束时间
'timeTimestampEnd': iMiment(funcResponse.receiveEndTime).stamp(), 'timeClose': iMiment(funcResponse.applyEndTime).format('YYYY年MM月DD日 hh:mm'), // 截止时间
'timeTimestampClose': iMiment(funcResponse.applyEndTime).stamp(), 'timeTimestampRelease': iMiment(funcResponse.releaseTime).stamp(),
'timeTimestampBegin': iMiment(funcResponse.receiveBeginTime).stamp(),
'contentTitle': '公告内容', 'timeTimestampEnd': iMiment(funcResponse.receiveEndTime).stamp(),
'contentHtml': funcResponse.content, 'timeTimestampClose': iMiment(funcResponse.applyEndTime).stamp(),
'isOnline': funcResponse.saleOnline === '0' ? false : true,
'isPackage': funcResponse.containPackage === '0' ? false : true, 'contentTitle': '公告内容',
} 'contentHtml': funcResponse.content,
thisVue.$store.commit('componentProject', funcProject) 'isOnline': funcResponse.saleOnline === '0' ? false : true,
'isPackage': funcResponse.containPackage === '0' ? false : true,
}
thisVue.$store.commit('componentProject', funcProject)
let funcRawData
if (funcProject.isPackage) {
// 多个合同
funcRawData = funcResponse.package let funcRawData
let funcLastTimeClose = 0 if (funcProject.isPackage) {
for (let i = 0, len = funcRawData.length; i < len; i++) { // 多个合同
let funcItem = { funcRawData = funcResponse.package
'index': i + 1, let funcLastTimeClose = 0
'id': funcRawData[i].tenderPackageId, for (let i = 0, len = funcRawData.length; i < len; i++) {
'number': funcRawData[i].no, let funcItem = {
'object': funcRawData[i].name, 'index': i + 1,
'quantity': funcRawData[i].num, 'id': funcRawData[i].tenderPackageId,
'budget': funcRawData[i].amount, 'number': funcRawData[i].no,
'timeClose': funcRawData[i].openTenderTime, 'object': funcRawData[i].name,
'fileName': funcRawData[i].files.name, 'quantity': funcRawData[i].num,
'fileUrl': funcRawData[i].files.url 'budget': funcRawData[i].amount,
} 'timeClose': funcRawData[i].openTenderTime,
funcPackage.push(funcItem) 'fileName': funcRawData[i].files.name,
'fileUrl': funcRawData[i].files.url
if (funcLastTimeClose < iMiment(funcRawData[i].openTenderTime).stamp()) { }
funcLastTimeClose = iMiment(funcRawData[i].openTenderTime).stamp() funcPackage.push(funcItem)
}
} if (funcLastTimeClose < iMiment(funcRawData[i].openTenderTime).stamp()) {
funcLastTimeClose = iMiment(funcRawData[i].openTenderTime).stamp()
funcProject.timeClose = iMiment(funcLastTimeClose).format('YYYY年MM月DD日 hh:mm') }
funcProject.timeTimestampClose = funcLastTimeClose }
thisVue.$store.commit('componentProject', funcProject)
} else { funcProject.timeClose = iMiment(funcLastTimeClose).format('YYYY年MM月DD日 hh:mm')
// 单一合同 funcProject.timeTimestampClose = funcLastTimeClose
funcRawData = funcResponse thisVue.$store.commit('componentProject', funcProject)
funcPackage = [{ } else {
'index': '', // 单一合同
'id': '', funcRawData = funcResponse
'number': '', funcPackage = [{
'object': '', 'index': '',
'quantity': '', 'id': '',
'budget': funcRawData.price, 'number': '',
'timeClose': '', 'object': '',
'fileName': funcRawData.tenderFile.name, 'quantity': '',
'fileUrl': funcRawData.tenderFile.url 'budget': funcRawData.price,
}] 'timeClose': '',
} 'fileName': funcRawData.tenderFile.name,
thisVue.$store.commit('componentContract', funcPackage) 'fileUrl': funcRawData.tenderFile.url
}]
}
thisVue.$store.commit('componentContract', funcPackage)
funcProgress = {
text: ['发布时间', '报名时间', '投标截止、开标时间'],
timestamp: [
funcProject.timeTimestampRelease, funcProgress = {
funcProject.timeTimestampBegin, text: ['发布时间', '报名时间', '投标截止、开标时间'],
funcProject.timeTimestampEnd, timestamp: [
funcProject.timeTimestampClose, funcProject.timeTimestampRelease,
], funcProject.timeTimestampBegin,
isBuy: false, funcProject.timeTimestampEnd,
isSignIn: false, funcProject.timeTimestampClose,
} ],
thisVue.$store.commit('componentProgress', funcProgress) isBuy: false,
isSignIn: false,
}
thisVue.$store.commit('componentProgress', funcProgress)
funcRawData = funcResponse.agencyInfo
funcAgency = {
'id': funcRawData.agencyInfoId,
'name': funcRawData.companyName, funcRawData = funcResponse.agencyInfo
'address': funcRawData.area.replace(/\//g, '') + funcRawData.address, funcAgency = {
'phone': funcRawData.phone, 'id': funcRawData.agencyInfoId,
'liaison': funcRawData.contactor, 'name': funcRawData.companyName,
'email': funcRawData.email 'address': funcRawData.area.replace(/\//g, '') + funcRawData.address,
} 'phone': funcRawData.phone,
thisVue.$store.commit('componentAgency', funcAgency) 'liaison': funcRawData.contactor,
'email': funcRawData.email
}
thisVue.$store.commit('componentAgency', funcAgency)
funcRawData = funcResponse.file
for (let i = 0, len = funcRawData.length; i < len; i++) {
let funcItem = {
'name': funcRawData[i].name, funcRawData = funcResponse.file
'url': funcRawData[i].url, for (let i = 0, len = funcRawData.length; i < len; i++) {
} let funcItem = {
funcFile.push(funcItem) 'name': funcRawData[i].name,
} 'url': funcRawData[i].url,
thisVue.$store.commit('componentFile', funcFile) }
}) funcFile.push(funcItem)
.catch((funcError) => {}) }
thisVue.$store.commit('componentFile', funcFile)
funcRequestOther = iRequest.request(iHost.base + 'bid/zTenderNotice/getApiRelevantNotices', { 'tenderNoticeId': id, 'type': 1 }, 'json', 'post') })
.then((funcResponse) => { .catch((funcError) => {})
let funcRawData = funcResponse
for (let i = 0, len = funcRawData.length; i < len; i++) { funcRequestOther = iRequest.request(iHost.base + 'bid/zTenderNotice/getApiRelevantNotices', { 'tenderNoticeId': id, 'type': 1 }, 'json', 'post')
let funcItem = { .then((funcResponse) => {
'id': funcRawData[i].id, let funcRawData = funcResponse
'type': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))], for (let i = 0, len = funcRawData.length; i < len; i++) {
'title': funcRawData[i].title, let funcItem = {
} 'id': funcRawData[i].id,
funcOther.push(funcItem) 'type': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))],
} 'title': funcRawData[i].title,
thisVue.$store.commit('componentNotice', funcOther) }
}) funcOther.push(funcItem)
}
Promise.all([ funcRequestDetail, funcRequestOther, funcRequestWinInfo ]) thisVue.$store.commit('componentNotice', funcOther)
.then(() => { })
thisVue.noticeData(funcMap, funcProgress, funcProject, funcPackage, funcAgency, funcFile, funcOther)
}) Promise.all([ funcRequestDetail, funcRequestOther, funcRequestWinInfo ])
.catch((funcError) => { .then(() => {
console.log(funcError) thisVue.noticeData(funcMap, funcProgress, funcProject, funcPackage, funcAgency, funcFile, funcOther)
}) })
} .catch((funcError) => {
console.log(funcError)
// 资格预审公告 })
if (type === 3) { }
console.log('set qualificationNotice')
funcMap = [{ text: '招标公告', redirect: '/bid' }, { text: '资格预审公告', redirect: null }] // 资格预审公告
if (type === 3) {
funcRequestDetail = iRequest.request(iHost.base + 'bid/zTenderNotice/getApiDetail', { 'id': id } , 'json', 'post') funcMap = [{ text: '招标公告', redirect: '/bid' }, { text: '资格预审公告', redirect: null }]
.then((funcResponse) => {
funcProject = { funcRequestDetail = iRequest.request(iHost.base + 'bid/zTenderNotice/getApiDetail', { 'id': id } , 'json', 'post')
'noticeId': id, .then((funcResponse) => {
'noticeType': type, funcProject = {
'noticeTitle': funcResponse.title, // 公告标题 'noticeId': id,
'noticeType': type,
'projectId': funcResponse.tenderProjectId, // 项目标识 'noticeTitle': funcResponse.title, // 公告标题
'projectName': funcResponse.projectName, // 项目名称
'projectIdentity': funcResponse.projectNo, // 项目编号 'projectId': funcResponse.tenderProjectId, // 项目标识
'projectName': funcResponse.projectName, // 项目名称
'buyWay': funcResponse.procurementType, // 采购方式 'projectIdentity': funcResponse.projectNo, // 项目编号
'buyCompany': funcResponse.company, // 采购公司
'buyCompanyType': '', // 采购公司类型 'buyWay': funcResponse.procurementType, // 采购方式
'buyLiaison': funcResponse.companyContactor, // 采购联系人 'buyCompany': funcResponse.company, // 采购公司
'buyPhone': funcResponse.phone, // 采购电话 'buyCompanyType': '', // 采购公司类型
'address': funcResponse.area.replace(/\//g, '') + funcResponse.address, // 开标地点 'buyLiaison': funcResponse.companyContactor, // 采购联系人
'buyPhone': funcResponse.phone, // 采购电话
'timeRelease': iMiment(funcResponse.releaseTime).format('YYYY年MM月DD日 hh:mm'), // 发布时间 'address': funcResponse.area.replace(/\//g, '') + funcResponse.address, // 开标地点
'timeBegin': iMiment(funcResponse.receiveBeginTime).format('YYYY年MM月DD日 hh:mm'), // 开始时间
'timeEnd': iMiment(funcResponse.receiveEndTime).format('YYYY年MM月DD日 hh:mm'), // 结束时间 'timeRelease': iMiment(funcResponse.releaseTime).format('YYYY年MM月DD日 hh:mm'), // 发布时间
'timeClose': iMiment(funcResponse.applyEndTime).format('YYYY年MM月DD日 hh:mm'), // 截止时间 'timeBegin': iMiment(funcResponse.receiveBeginTime).format('YYYY年MM月DD日 hh:mm'), // 开始时间
'timeTimestampRelease': iMiment(funcResponse.releaseTime).stamp(), 'timeEnd': iMiment(funcResponse.receiveEndTime).format('YYYY年MM月DD日 hh:mm'), // 结束时间
'timeTimestampBegin': iMiment(funcResponse.receiveBeginTime).stamp(), 'timeClose': iMiment(funcResponse.applyEndTime).format('YYYY年MM月DD日 hh:mm'), // 截止时间
'timeTimestampEnd': iMiment(funcResponse.receiveEndTime).stamp(), 'timeTimestampRelease': iMiment(funcResponse.releaseTime).stamp(),
'timeTimestampClose': iMiment(funcResponse.applyEndTime).stamp(), 'timeTimestampBegin': iMiment(funcResponse.receiveBeginTime).stamp(),
'timeTimestampEnd': iMiment(funcResponse.receiveEndTime).stamp(),
'contentTitle': '公告内容', 'timeTimestampClose': iMiment(funcResponse.applyEndTime).stamp(),
'contentHtml': funcResponse.content,
'isOnline': funcResponse.saleOnline === '0' ? false : true, 'contentTitle': '公告内容',
'isPackage': funcResponse.containPackage === '0' ? false : true, 'contentHtml': funcResponse.content,
} 'isOnline': funcResponse.saleOnline === '0' ? false : true,
thisVue.$store.commit('componentProject', funcProject) 'isPackage': funcResponse.containPackage === '0' ? false : true,
}
thisVue.$store.commit('componentProject', funcProject)
let funcRawData
if (funcProject.isPackage) {
// 多个合同 let funcRawData
funcRawData = funcResponse.package if (funcProject.isPackage) {
let funcLastTimeClose = 0 // 多个合同
for (let i = 0, len = funcRawData.length; i < len; i++) { funcRawData = funcResponse.package
let funcItem = { let funcLastTimeClose = 0
'index': i + 1, for (let i = 0, len = funcRawData.length; i < len; i++) {
'id': funcRawData[i].tenderPackageId, let funcItem = {
'price': funcRawData[i].price, 'index': i + 1,
'number': funcRawData[i].no, 'id': funcRawData[i].tenderPackageId,
'object': funcRawData[i].name, 'price': funcRawData[i].price,
'quantity': funcRawData[i].num, 'number': funcRawData[i].no,
'budget': funcRawData[i].amount, 'object': funcRawData[i].name,
'timeClose': funcRawData[i].openTenderTime, 'quantity': funcRawData[i].num,
'fileName': funcRawData[i].files.name, 'budget': funcRawData[i].amount,
'fileUrl': funcRawData[i].files.url 'timeClose': funcRawData[i].openTenderTime,
} 'fileName': funcRawData[i].files.name,
funcPackage.push(funcItem) 'fileUrl': funcRawData[i].files.url
}
if (funcLastTimeClose < iMiment(funcRawData[i].openTenderTime).stamp()) { funcPackage.push(funcItem)
funcLastTimeClose = iMiment(funcRawData[i].openTenderTime).stamp()
} if (funcLastTimeClose < iMiment(funcRawData[i].openTenderTime).stamp()) {
} funcLastTimeClose = iMiment(funcRawData[i].openTenderTime).stamp()
}
funcProject.timeClose = iMiment(funcLastTimeClose).format('YYYY年MM月DD日 hh:mm') }
funcProject.timeTimestampClose = funcLastTimeClose
thisVue.$store.commit('componentProject', funcProject) funcProject.timeClose = iMiment(funcLastTimeClose).format('YYYY年MM月DD日 hh:mm')
} else { funcProject.timeTimestampClose = funcLastTimeClose
// 单一合同 thisVue.$store.commit('componentProject', funcProject)
funcRawData = funcResponse } else {
funcPackage = [{ // 单一合同
'index': '', funcRawData = funcResponse
'id': '', funcPackage = [{
'number': '', 'index': '',
'object': '', 'id': '',
'quantity': '', 'number': '',
'budget': funcRawData.price, 'object': '',
'timeClose': '', 'quantity': '',
}] 'budget': funcRawData.price,
} 'timeClose': '',
thisVue.$store.commit('componentContract', funcPackage) }]
}
thisVue.$store.commit('componentContract', funcPackage)
funcProgress = {
text: ['发布时间', '领取资格预审文件时间', '投标截止、开标时间'],
timestamp: [ funcProgress = {
funcProject.timeTimestampRelease, text: ['发布时间', '领取资格预审文件时间', '投标截止、开标时间'],
funcProject.timeTimestampBegin, timestamp: [
funcProject.timeTimestampEnd, funcProject.timeTimestampRelease,
funcProject.timeTimestampClose, funcProject.timeTimestampBegin,
], funcProject.timeTimestampEnd,
isBuy: false, funcProject.timeTimestampClose,
isSignIn: false, ],
} isBuy: false,
thisVue.$store.commit('componentProgress', funcProgress) isSignIn: false,
}
thisVue.$store.commit('componentProgress', funcProgress)
funcRawData = funcResponse.agencyInfo
funcAgency = {
'id': funcRawData.agencyInfoId, funcRawData = funcResponse.agencyInfo
'name': funcRawData.companyName, funcAgency = {
'address': funcRawData.area.replace(/\//g, '') + funcRawData.address, 'id': funcRawData.agencyInfoId,
'phone': funcRawData.phone, 'name': funcRawData.companyName,
'liaison': funcRawData.contactor, 'address': funcRawData.area.replace(/\//g, '') + funcRawData.address,
'email': funcRawData.email 'phone': funcRawData.phone,
} 'liaison': funcRawData.contactor,
thisVue.$store.commit('componentAgency', funcAgency) 'email': funcRawData.email
}
thisVue.$store.commit('componentAgency', funcAgency)
funcRawData = funcResponse.file
for (let i = 0, len = funcRawData.length; i < len; i++) {
let funcItem = { funcRawData = funcResponse.file
'name': funcRawData[i].name, for (let i = 0, len = funcRawData.length; i < len; i++) {
'url': funcRawData[i].url, let funcItem = {
} 'name': funcRawData[i].name,
funcFile.push(funcItem) 'url': funcRawData[i].url,
} }
thisVue.$store.commit('componentFile', funcFile) funcFile.push(funcItem)
}) }
.catch((funcError) => {}) thisVue.$store.commit('componentFile', funcFile)
})
funcRequestOther = iRequest.request(iHost.base + 'bid/zTenderNotice/getApiRelevantNotices', { 'tenderNoticeId': id, 'type': 1 }, 'json', 'post') .catch((funcError) => {})
.then((funcResponse) => {
let funcRawData = funcResponse funcRequestOther = iRequest.request(iHost.base + 'bid/zTenderNotice/getApiRelevantNotices', { 'tenderNoticeId': id, 'type': 1 }, 'json', 'post')
for (let i = 0, len = funcRawData.length; i < len; i++) { .then((funcResponse) => {
let funcItem = { let funcRawData = funcResponse
'id': funcRawData[i].id, for (let i = 0, len = funcRawData.length; i < len; i++) {
'type': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))], let funcItem = {
'title': funcRawData[i].title, 'id': funcRawData[i].id,
} 'type': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcRawData[i].noticeType))],
funcOther.push(funcItem) 'title': funcRawData[i].title,
} }
thisVue.$store.commit('componentNotice', funcOther) funcOther.push(funcItem)
}) }
thisVue.$store.commit('componentNotice', funcOther)
Promise.all([ funcRequestDetail, funcRequestOther, funcRequestWinInfo ]) })
.then(() => {
thisVue.noticeData(funcMap, funcProgress, funcProject, funcPackage, funcAgency, funcFile, funcOther) Promise.all([ funcRequestDetail, funcRequestOther, funcRequestWinInfo ])
}) .then(() => {
.catch((funcError) => { thisVue.noticeData(funcMap, funcProgress, funcProject, funcPackage, funcAgency, funcFile, funcOther)
console.log(funcError) })
}) .catch((funcError) => {
} console.log(funcError)
} })
}
}
export default output export default output
\ No newline at end of file
This diff could not be displayed because it is too large.
<template> <template>
<div class="public-bid-list col align-c"> <div class="public-bid-list col align-c">
<div class="main global-maxwidth"> <div class="main global-maxwidth">
<!-- 全局搜索 --> <!-- 全局搜索 -->
<div class="query-key row"> <div class="query-key row">
<el-input v-model="limitKeyword" placeholder="请输入您要搜索的内容" @keyup.enter.native="queryList()"></el-input> <el-input v-model="limitKeyword" placeholder="请输入您要搜索的内容" @keyup.enter.native="queryList()"></el-input>
<el-button @click="queryList()"> <el-button @click="queryList()">
<span>搜  索</span> <span>搜  索</span>
</el-button> </el-button>
</div> </div>
<!-- 搜索条件 --> <!-- 搜索条件 -->
<div class="query-limits row align-c"> <div class="query-limits row align-c">
<div> <div>
<div class="item" v-for="(item, index) in queryLimit" :key="index"> <div class="item" v-for="(item, index) in queryLimit" :key="index">
<span class="title">{{item.title}}</span> <span class="title">{{item.title}}</span>
<span class="key-word" :class="itemChildren.active ? 'global-enable-font' : ''" v-for="(itemChildren, itemIndex) in item.keyWord" :key="itemIndex" @click="onLimitItem(index, itemIndex, itemChildren)"> <span class="key-word" :class="itemChildren.active ? 'global-enable-font' : ''" v-for="(itemChildren, itemIndex) in item.keyWord" :key="itemIndex" @click="onLimitItem(index, itemIndex, itemChildren)">
{{itemChildren.label}} {{itemChildren.label}}
</span> </span>
</div> </div>
</div> </div>
</div> </div>
<!-- 结果列表 --> <!-- 结果列表 -->
<div class="query-list col"> <div class="query-list col">
<!-- 额外信息 --> <!-- 额外信息 -->
<div class="list-info row con-b align-c"> <div class="list-info row con-b align-c">
<div class="sort row align-c"> <div class="sort row align-c">
<span>发布时间</span> <span>发布时间</span>
<img v-show="limitTimeOrder === 0" src="../../assets/arrow-up.png" alt="" @click="onLimitOrder('new')"> <img v-show="limitTimeOrder === 0" src="../../assets/arrow-up.png" alt="" @click="onLimitOrder('new')">
<img v-show="limitTimeOrder === 1" src="../../assets/arrow-up-active.png" alt="" @click="onLimitOrder('new')"> <img v-show="limitTimeOrder === 1" src="../../assets/arrow-up-active.png" alt="" @click="onLimitOrder('new')">
<img v-show="limitTimeOrder === 1" src="../../assets/arrow-down.png" alt="" @click="onLimitOrder('old')"> <img v-show="limitTimeOrder === 1" src="../../assets/arrow-down.png" alt="" @click="onLimitOrder('old')">
<img v-show="limitTimeOrder === 0" src="../../assets/arrow-down-active.png" alt="" @click="onLimitOrder('old')"> <img v-show="limitTimeOrder === 0" src="../../assets/arrow-down-active.png" alt="" @click="onLimitOrder('old')">
</div> </div>
<div> <div>
<span><span class="quantity">{{pagination.total}}</span> 条相关信息</span> <span><span class="quantity">{{pagination.total}}</span> 条相关信息</span>
</div> </div>
</div> </div>
<!-- 公告列表 --> <!-- 公告列表 -->
<div class="list"> <div class="list">
<div v-show="infoList.length > 0" class="row con-c align-c" v-for="(item, index) in infoList" :key="index" @click="onBidDetails(item)"> <div v-show="infoList.length > 0" class="row con-c align-c" v-for="(item, index) in infoList" :key="index" @click="onBidDetails(item)">
<span class="global-overflow-ellipsis global-cursor">{{item.title}}</span> <span class="global-overflow-ellipsis global-cursor">{{item.title}}</span>
<span class="global-overflow-ellipsis global-cursor">{{item.type}}</span> <span class="global-overflow-ellipsis global-cursor">{{item.type}}</span>
<span class="global-cursor">{{item.time}}</span> <span class="global-cursor">{{item.time}}</span>
</div> </div>
<div v-show="infoList.length === 0" class="list-nothing row con-c align-c"> <div v-show="infoList.length === 0" class="list-nothing row con-c align-c">
<span>未能找到满足您条件的信息!</span> <span>未能找到满足您条件的信息!</span>
</div> </div>
</div> </div>
<!-- 列表分页 --> <!-- 列表分页 -->
<div class="pagination row con-c"> <div class="pagination row con-c">
<el-pagination :total="pagination.total" layout="total, sizes, prev, pager, next, jumper" @size-change="(size) => {onPagination(size, 'size', pagination)}" @current-change="(size) => {onPagination(size, 'current', pagination)}"></el-pagination> <el-pagination :total="pagination.total" layout="total, sizes, prev, pager, next, jumper" @size-change="(size) => {onPagination(size, 'size', pagination)}" @current-change="(size) => {onPagination(size, 'current', pagination)}"></el-pagination>
<button>确定</button> <button>确定</button>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import iMiment from 'miment' import iMiment from 'miment'
import iHost from '@/common/js/host.js' import iHost from '@/common/js/host.js'
import iRequest from '@/common/js/request/request.js' import iRequest from '@/common/js/request/request.js'
import iDictionary from '@/common/js/dictionary.js' import iDictionary from '@/common/js/dictionary.js'
import iFramePagination from '@/common/frame/pagination/pagination.js' import iFramePagination from '@/common/frame/pagination/pagination.js'
export default { export default {
data: function () { data: function () {
return { return {
queryLimit: [], queryLimit: [],
limitKeyword: '', // 搜索字段 limitKeyword: '', // 搜索字段
limitInformation: '', // 信息分类 limitInformation: '', // 信息分类
limitLately: '', // 最近时段 limitLately: '', // 最近时段
limitProcurement: '', // 采购方式 limitProcurement: '', // 采购方式
limitTimeOrder: 0, // 时间排序 limitTimeOrder: 0, // 时间排序
infoList: [], infoList: [],
pagination: { pagination: {
size: 10, size: 10,
total: 0, total: 0,
current: 1, current: 1,
} }
} }
}, },
watch:{ watch:{
$route() { $route() {
if (this.$route.query.search) this.limitKeyword = this.$route.query.search if (this.$route.query.search) this.limitKeyword = this.$route.query.search
this.queryList() this.queryList()
this.setActiveLimitItem() this.setActiveLimitItem()
} }
}, },
created: function () { created: function () {
this.setQueryTab() this.setQueryTab()
if (this.$route.query.search) this.limitKeyword = this.$route.query.search if (this.$route.query.search) this.limitKeyword = this.$route.query.search
}, },
methods: { methods: {
/** /**
* 设置查询条件标签 * 设置查询条件标签
* @function * @function
* @returns * @returns
*/ */
setQueryTab: function () { setQueryTab: function () {
let funcNoticeList = {} let funcNoticeList = {}
let funcBuyList = {} let funcBuyList = {}
let funcLately = { let funcLately = {
title: '发布时间:', title: '发布时间:',
keyWord: [ keyWord: [
{ label: '不限', value: '', active: false }, { label: '不限', value: '', active: false },
{ label: '近一周', value: 1, active: false }, { label: '近一周', value: 1, active: false },
{ label: '近一个月', value: 2, active: false }, { label: '近一个月', value: 2, active: false },
{ label: '近三个月', value: 3, active: false }, { label: '近三个月', value: 3, active: false },
] ]
} }
let funcTypeTab = iRequest.request(iHost.base + 'bid/common/getDictByType', { 'type': 'all_notice_type' }, 'json', 'post') let funcTypeTab = iRequest.request(iHost.base + 'bid/common/getDictByType', { 'type': 'all_notice_type' }, 'json', 'post')
.then((funcResponse) => { .then((funcResponse) => {
let funcList = [ let funcList = [
{ 'label': '全部', 'value': '','active': false } { 'label': '全部', 'value': '','active': false }
] ]
for (let i = 0, len = funcResponse.length; i < len; i++) { for (let i = 0, len = funcResponse.length; i < len; i++) {
let funcItem = { let funcItem = {
'label': funcResponse[i].label, 'label': funcResponse[i].label,
'value': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcResponse[i].value))], 'value': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcResponse[i].value))],
'active': false 'active': false
} }
funcList[iDictionary.noticeType.raw.indexOf(Number(funcResponse[i].value))] = (funcItem) funcList[iDictionary.noticeType.raw.indexOf(Number(funcResponse[i].value))] = (funcItem)
} }
funcNoticeList.title = '信息分类:' funcNoticeList.title = '信息分类:'
funcNoticeList.keyWord = funcList funcNoticeList.keyWord = funcList
}) })
.catch((funcError) => { .catch((funcError) => {
this.$message.error(funcError.message) this.$message.error(funcError.message)
}) })
let funcBuyTab = iRequest.request(iHost.base + 'bid/common/getDictByType', { 'type': 'procurement_type' }, 'json', 'post') let funcBuyTab = iRequest.request(iHost.base + 'bid/common/getDictByType', { 'type': 'procurement_type' }, 'json', 'post')
.then((funcResponse) => { .then((funcResponse) => {
let funcList = [{ let funcList = [{
'label': '不限', 'label': '不限',
'value': '', 'value': '',
'active': false 'active': false
}] }]
for (let i = 0, len = funcResponse.length; i < len; i++) { for (let i = 0, len = funcResponse.length; i < len; i++) {
let funcItem = { let funcItem = {
'label': funcResponse[i].label, 'label': funcResponse[i].label,
'value': Number(funcResponse[i].value), 'value': Number(funcResponse[i].value),
'active': false 'active': false
} }
funcList.push(funcItem) funcList.push(funcItem)
} }
funcBuyList.title = '采购方式:' funcBuyList.title = '采购方式:'
funcBuyList.keyWord = funcList funcBuyList.keyWord = funcList
}) })
.catch((funcError) => { .catch((funcError) => {
this.$message.error(funcError.message) this.$message.error(funcError.message)
}) })
Promise.all([ funcTypeTab, funcBuyTab ]) Promise.all([ funcTypeTab, funcBuyTab ])
.then((funcResponse) => { .then((funcResponse) => {
this.queryLimit = [funcNoticeList, funcBuyList, funcLately] this.queryLimit = [funcNoticeList, funcBuyList, funcLately]
// 默认查询条件 // 默认查询条件
for (let i = 0, len = this.queryLimit.length; i < len; i++) { for (let i = 0, len = this.queryLimit.length; i < len; i++) {
this.queryLimit[i].keyWord[0].active = true this.queryLimit[i].keyWord[0].active = true
} }
// 如果路径存在公告类型则定位到对应的搜索条件 // 如果路径存在公告类型则定位到对应的搜索条件
if (this.$route.query.type) { if (this.$route.query.type) {
for (let i = 0, len = this.queryLimit[0].keyWord.length; i < len; i++) { for (let i = 0, len = this.queryLimit[0].keyWord.length; i < len; i++) {
if (Number(this.$route.query.type) === Number(this.queryLimit[0].keyWord[i].value)) { if (Number(this.$route.query.type) === Number(this.queryLimit[0].keyWord[i].value)) {
this.queryLimit[0].keyWord[0].active = false this.queryLimit[0].keyWord[0].active = false
this.queryLimit[0].keyWord[i].active = true this.queryLimit[0].keyWord[i].active = true
this.limitInformation = Number(this.$route.query.type) this.limitInformation = Number(this.$route.query.type)
} }
} }
} }
this.queryList() this.queryList()
}) })
.catch((funcError) => {}) .catch((funcError) => {})
}, },
/** /**
* 列表查询 * 列表查询
* @function * @function
* @returns * @returns
*/ */
queryList: function () { queryList: function () {
let funcParam = { let funcParam = {
'noticeType': iDictionary.noticeType.raw[iDictionary.noticeType.mapping.indexOf(Number(this.$route.query.type))], 'noticeType': iDictionary.noticeType.raw[iDictionary.noticeType.mapping.indexOf(Number(this.$route.query.type))],
'releaseTimeType': this.limitLately, 'releaseTimeType': this.limitLately,
'procurementType': this.limitProcurement, 'procurementType': this.limitProcurement,
'keyword': this.limitKeyword, 'keyword': this.limitKeyword,
'orderBy': this.limitTimeOrder, 'orderBy': this.limitTimeOrder,
'pageSize': this.pagination.size, 'pageSize': this.pagination.size,
'pageNo': this.pagination.current 'pageNo': this.pagination.current
} }
iRequest.request(iHost.base + 'bid/zTenderNotice/getApiAllList', funcParam, 'json', 'post') iRequest.request(iHost.base + 'bid/zTenderNotice/getApiAllList', funcParam, 'json', 'post')
.then((funcResponse) => { .then((funcResponse) => {
let funcList = [] let funcList = []
for (let i = 0, len = funcResponse.list.length; i < len; i++) { for (let i = 0, len = funcResponse.list.length; i < len; i++) {
let funcItem = { let funcItem = {
'id': funcResponse.list[i].id, 'id': funcResponse.list[i].id,
'time': iMiment(funcResponse.list[i].releaseTime).format('YYYY-MM-DD'), 'time': iMiment(funcResponse.list[i].releaseTime).format('YYYY-MM-DD'),
'title': funcResponse.list[i].title, 'title': funcResponse.list[i].title,
'typeId': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcResponse.list[i].noticeType))], 'typeId': iDictionary.noticeType.mapping[iDictionary.noticeType.raw.indexOf(Number(funcResponse.list[i].noticeType))],
} }
if (funcItem.type === '-') { if (funcItem.type === '-') {
funcItem.type = ' ' funcItem.type = ' '
} }
funcList.push(funcItem) funcList.push(funcItem)
} }
this.infoList = funcList this.infoList = funcList
this.pagination.total = funcResponse.count this.pagination.total = funcResponse.count
}) })
.catch((funcError) => { .catch((funcError) => {
this.$message.error(funcError.message) this.$message.error(funcError.message)
}) })
}, },
/** /**
* 设置高亮标签 * 设置高亮标签
* @function * @function
* @returns * @returns
*/ */
setActiveLimitItem: function () { setActiveLimitItem: function () {
let funcNoticeType = this.queryLimit[0].keyWord let funcNoticeType = this.queryLimit[0].keyWord
for (let i = 0, len = funcNoticeType.length; i < len; i++) { for (let i = 0, len = funcNoticeType.length; i < len; i++) {
funcNoticeType[i].active = false funcNoticeType[i].active = false
if (this.$route.query.type) { if (this.$route.query.type) {
if (funcNoticeType[i].value === Number(this.$route.query.type)) { if (funcNoticeType[i].value === Number(this.$route.query.type)) {
funcNoticeType[i].active = true funcNoticeType[i].active = true
} }
} else { } else {
funcNoticeType[0].active = true funcNoticeType[0].active = true
} }
} }
}, },
/** /**
* 条件选择 - 标签选择 * 条件选择 - 标签选择
* @function * @function
* @param {number} funcRankIndex * @param {number} funcRankIndex
* @param {number} funcItemIndex * @param {number} funcItemIndex
* @param {object} funcItem * @param {object} funcItem
* @returns * @returns
*/ */
onLimitItem: function (funcRankIndex, funcItemIndex, funcItem) { onLimitItem: function (funcRankIndex, funcItemIndex, funcItem) {
switch (funcRankIndex) { switch (funcRankIndex) {
case 0: case 0:
this.limitInformation = funcItem.value this.limitInformation = funcItem.value
if (funcItem.value === '') { if (funcItem.value === '') {
this.$router.push('/bid') this.$router.push('/bid')
} else { } else {
this.$router.push('/bid?type=' + funcItem.value) this.$router.push('/bid?type=' + funcItem.value)
} }
break break
case 1: case 1:
this.limitProcurement = funcItem.value this.limitProcurement = funcItem.value
this.queryList() this.queryList()
break break
case 2: case 2:
this.limitLately = funcItem.value this.limitLately = funcItem.value
this.queryList() this.queryList()
break break
} }
// 设置高亮 // 设置高亮
let funcData = this.queryLimit[funcRankIndex].keyWord let funcData = this.queryLimit[funcRankIndex].keyWord
for (let i = 0, len = funcData.length; i < len; i++) { for (let i = 0, len = funcData.length; i < len; i++) {
funcData[i].active = false funcData[i].active = false
if (i === funcItemIndex) funcData[i].active = true if (i === funcItemIndex) funcData[i].active = true
} }
}, },
/** /**
* 条件选择 - 排序 * 条件选择 - 排序
* @function * @function
* @param {string} funcType * @param {string} funcType
* @returns * @returns
*/ */
onLimitOrder: function (funcType) { onLimitOrder: function (funcType) {
switch (funcType) { switch (funcType) {
case 'old': case 'old':
this.limitTimeOrder = 0 this.limitTimeOrder = 0
this.queryList() this.queryList()
break break
case 'new': case 'new':
this.limitTimeOrder = 1 this.limitTimeOrder = 1
this.queryList() this.queryList()
break break
} }
}, },
/** /**
* 页码组件 * 页码组件
* @function * @function
* @param {number} funcValue * @param {number} funcValue
* @param {string} funcType - 数据类型 * @param {string} funcType - 数据类型
* @param {object} funcUpdateObject - 记录对象 * @param {object} funcUpdateObject - 记录对象
* @returns * @returns
*/ */
onPagination: function (funcValue, funcType, funcUpdateObject) { onPagination: function (funcValue, funcType, funcUpdateObject) {
iFramePagination(funcValue, funcType, funcUpdateObject) iFramePagination(funcValue, funcType, funcUpdateObject)
this.queryList() this.queryList()
}, },
onBidDetails: function (funcItem) { onBidDetails: function (funcItem) {
this.$router.push('/bid/notice?type=' + funcItem.typeId + '&id=' + funcItem.id) this.$router.push('/bid/notice?type=' + funcItem.typeId + '&id=' + funcItem.id)
}, },
} }
} }
</script> </script>
<style lang="less"> <style lang="less">
.public-bid-list { .public-bid-list {
width: 100%; width: 100%;
background-image: url(@backgroundImageUrl); background-image: url(@backgroundImageUrl);
background-repeat: no-repeat; background-repeat: no-repeat;
.query-key { .query-key {
width: 100%; width: 100%;
height: 100px; height: 100px;
margin-top: 36px; margin-top: 36px;
padding: 20px; padding: 20px;
background: #00468C; background: #00468C;
.el-input { .el-input {
width: 980px; width: 980px;
} }
input { input {
width: 980px; width: 980px;
height: 60px; height: 60px;
padding-right: 0; padding-right: 0;
border-radius: 0; border-radius: 0;
border-style: solid none solid solid; border-style: solid none solid solid;
font-size: @fontSize01; font-size: @fontSize01;
} }
button { button {
width: 180px; width: 180px;
height: 60px; height: 60px;
padding: 0; padding: 0;
border: 1px #CF2F1D solid; border: 1px #CF2F1D solid;
border-radius: 0; border-radius: 0;
background: #CF2F1D; background: #CF2F1D;
span { span {
font-size: @fontSize04; font-size: @fontSize04;
color: @colorWhite; color: @colorWhite;
} }
} }
} }
.query-limits { .query-limits {
width: 100%; width: 100%;
height: 150px; height: 150px;
margin-top: 36px; margin-top: 36px;
padding-left: 32px; padding-left: 32px;
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);
.item { .item {
margin: 16px 0; margin: 16px 0;
} }
.title { .title {
font-weight: 800; font-weight: 800;
font-size: @fontSize02; font-size: @fontSize02;
} }
.key-word { .key-word {
margin-right: 24px; margin-right: 24px;
font-size: @fontSize01; font-size: @fontSize01;
color: @colorGrey60; color: @colorGrey60;
cursor: pointer; cursor: pointer;
} }
} }
.query-list { .query-list {
width: 100%; width: 100%;
min-height: 270px; min-height: 270px;
margin: 36px 0; margin: 36px 0;
padding-bottom: 44px; padding-bottom: 44px;
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);
.list-info { .list-info {
width: 100%; width: 100%;
height: 56px; height: 56px;
padding: 0 32px; padding: 0 32px;
background: #F2F2F2; background: #F2F2F2;
span { span {
color: @colorGrey40; color: @colorGrey40;
} }
.sort { .sort {
span { span {
margin-right: 8px; margin-right: 8px;
font-size: @fontSize01; font-size: @fontSize01;
} }
img { img {
width: 8px; width: 8px;
height: 12px; height: 12px;
margin: 0 8px; margin: 0 8px;
cursor: pointer; cursor: pointer;
} }
} }
.quantity { .quantity {
color: #CF2F1D; color: #CF2F1D;
} }
} }
.list { .list {
flex-grow: 1; flex-grow: 1;
> div { > div {
height: 50px; height: 50px;
margin: 0 32px; margin: 0 32px;
border-bottom: 1px @colorGrey90 dashed; border-bottom: 1px @colorGrey90 dashed;
span { span {
font-size: @fontSize02; font-size: @fontSize02;
color: @colorGrey10; color: @colorGrey10;
} }
span:nth-child(1) { span:nth-child(1) {
max-width: 870px; max-width: 870px;
padding-right: 80px; padding-right: 80px;
flex-grow: 1; flex-grow: 1;
} }
span:nth-child(2) { span:nth-child(2) {
width: 170px; width: 170px;
padding-right: 20px; padding-right: 20px;
} }
span:nth-child(3) { span:nth-child(3) {
width: 96px; width: 96px;
color: @colorGrey60; color: @colorGrey60;
} }
} }
.list-nothing { .list-nothing {
text-align: center; text-align: center;
} }
} }
.pagination { .pagination {
margin-top: 40px; margin-top: 40px;
> button { > button {
width: 70px; width: 70px;
height: 46px; height: 46px;
color: #FFFFFF; color: #FFFFFF;
border: none; border: none;
font-size: @fontSize02; font-size: @fontSize02;
background: #00468C; background: #00468C;
} }
} }
} }
} }
</style> </style>
\ No newline at end of file
This diff could not be displayed because it is too large.
This diff could not be displayed because it is too large.
<template> <template>
<!-- 通用组件 - 登录身份 --> <!-- 通用组件 - 登录身份 -->
<div class="currency-sign-in-forget row con-c"> <div class="currency-sign-in-forget row con-c">
<div class="main global-maxwidth"> <div class="main global-maxwidth">
<!-- 页面地图 --> <!-- 页面地图 -->
<div> <div>
<currencyMap></currencyMap> <currencyMap></currencyMap>
</div> </div>
<!-- 登录身份选择 --> <!-- 登录身份选择 -->
<div class="col con-c align-c"> <div class="col con-c align-c">
<!-- 节点显示 --> <!-- 节点显示 -->
<div class="progress row con-b"> <div class="progress row con-b">
<div class="node node-active col align-c"> <div class="node node-active col align-c">
<div class="row con-c align-c"> <div class="row con-c align-c">
<span>1</span> <span>1</span>
</div> </div>
<div>输入手机号码</div> <div>输入手机号码</div>
</div> </div>
<div class="node col align-c" :class="state >= 2 ? 'node-active' : ''"> <div class="node col align-c" :class="state >= 2 ? 'node-active' : ''">
<div class="row con-c align-c"> <div class="row con-c align-c">
<span>2</span> <span>2</span>
</div> </div>
<div>设置新密码</div> <div>设置新密码</div>
</div> </div>
<div class="node col align-c" :class="state >= 4 ? 'node-active' : ''"> <div class="node col align-c" :class="state >= 4 ? 'node-active' : ''">
<div class="row con-c align-c"> <div class="row con-c align-c">
<span>3</span> <span>3</span>
</div> </div>
<div>设置成功</div> <div>设置成功</div>
</div> </div>
<div :style="'background-image: linear-gradient(to right, #2575FA 0%, #2575FA ' + state * 25 + '%, #F2F2F2 ' + state * 25 + '%);'"></div> <div :style="'background-image: linear-gradient(to right, #2575FA 0%, #2575FA ' + state * 25 + '%, #F2F2F2 ' + state * 25 + '%);'"></div>
</div> </div>
<!-- 输入手机 --> <!-- 输入手机 -->
<div v-if="state === 1" key="inputPhone" class="forget-info row"> <div v-if="state === 1" key="inputPhone" class="forget-info row">
<el-form ref="formForget" :model="formForget" :rules="rule" label-width="120px"> <el-form ref="formForget" :model="formForget" :rules="rule" label-width="120px">
<el-form-item label="手机号码:" prop="phone"> <el-form-item label="手机号码:" prop="phone">
<el-input v-model="formForget.phone" maxlength="11" placeholder="请输入联系人手机号"></el-input> <el-input v-model="formForget.phone" maxlength="11" placeholder="请输入联系人手机号"></el-input>
</el-form-item> </el-form-item>
<el-form-item class="form-item-code" label="验证码:"> <el-form-item class="form-item-code" label="验证码:">
<el-input v-model="formForget.code" maxlength="4" placeholder="请输入验证码"></el-input> <el-input v-model="formForget.code" maxlength="4" placeholder="请输入验证码"></el-input>
<button @click.prevent="onImageCode"><img :src="imageCodeData" alt=""></button> <button @click.prevent="onImageCode"><img :src="imageCodeData" alt=""></button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" @click.prevent="onNext()">下一步</el-button> <el-button type="primary" @click.prevent="onNext()">下一步</el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<!-- 设置密码 --> <!-- 设置密码 -->
<div v-if="state === 3" key="inputPassword" class="forget-info row"> <div v-if="state === 3" key="inputPassword" class="forget-info row">
<el-form ref="formForget" :model="formForget" :rules="rule" label-width="120px"> <el-form ref="formForget" :model="formForget" :rules="rule" label-width="120px">
<el-form-item label="新密码:" prop="password"> <el-form-item label="新密码:" prop="password">
<el-input v-model="formForget.password" show-password maxlength="20" placeholder="6-20个字符,区分英文大小写,不包含空格与表情"></el-input> <el-input v-model="formForget.password" show-password maxlength="20" placeholder="6-20个字符,区分英文大小写,不包含空格与表情"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="确认密码:" prop="passwordRepeat"> <el-form-item label="确认密码:" prop="passwordRepeat">
<el-input v-model="formForget.passwordRepeat" show-password maxlength="20" placeholder="再次输入登录密码"></el-input> <el-input v-model="formForget.passwordRepeat" show-password maxlength="20" placeholder="再次输入登录密码"></el-input>
</el-form-item> </el-form-item>
<el-form-item class="form-item-code" label="手机验证码:" prop="phoneCode"> <el-form-item class="form-item-code" label="手机验证码:" prop="phoneCode">
<el-input v-model="formForget.phoneCode" maxlength="6" placeholder="请输入手机验证码"></el-input> <el-input v-model="formForget.phoneCode" maxlength="6" placeholder="请输入手机验证码"></el-input>
<button :disabled="disabledPhone" :class="disabledPhone ? 'global-disable' : 'global-enable'" @click.prevent="getCode('phone')">{{'获取验证码' + disabledPhoneText}}</button> <button :disabled="disabledPhone" :class="disabledPhone ? 'global-disable' : 'global-enable'" @click.prevent="getCode('phone')">{{'获取验证码' + disabledPhoneText}}</button>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<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>
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<!-- 设置成功 --> <!-- 设置成功 -->
<div v-if="state === 5" class="forget-info row con-c"> <div v-if="state === 5" class="forget-info row con-c">
<div class="forget-finished col align-c"> <div class="forget-finished col align-c">
<img src="../assets/icon-finished.png" alt=""> <img src="../assets/icon-finished.png" alt="">
<span>密码设置成功!</span> <span>密码设置成功!</span>
<span><span class="global-color-red">{{redirectSecond}}</span> 秒后自动跳转到登录页,若未跳转,可<span class="global-color-blue" @click="onBack('now')">点击跳转</span></span> <span><span class="global-color-red">{{redirectSecond}}</span> 秒后自动跳转到登录页,若未跳转,可<span class="global-color-blue" @click="onBack('now')">点击跳转</span></span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
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'
import iCurrencyMap from '@/components/currency-map.vue' import iCurrencyMap from '@/components/currency-map.vue'
export default { export default {
components: { components: {
currencyMap: iCurrencyMap, currencyMap: iCurrencyMap,
}, },
data: function () { data: function () {
return { return {
state: 1, // 1 - 输入手机, 3 - 设置密码, 5 - 设置成功 state: 1, // 1 - 输入手机, 3 - 设置密码, 5 - 设置成功
formForget: { formForget: {
code: '', code: '',
phone: '', phone: '',
phoneCode: '', phoneCode: '',
password: '', password: '',
passwordRepeat: '', passwordRepeat: '',
}, },
redirectTimer: 3, redirectTimer: 3,
redirectSecond: 3, redirectSecond: 3,
imageCodeData: '', imageCodeData: '',
// 手机短信按钮控制 // 手机短信按钮控制
disabledPhone: false, // 按钮点击状态 disabledPhone: false, // 按钮点击状态
disabledPhoneMax: 60, // 最大秒数 disabledPhoneMax: 60, // 最大秒数
disabledPhoneText: '', // 计时文本 disabledPhoneText: '', // 计时文本
disabledPhoneTime: 0, // 计时数字 disabledPhoneTime: 0, // 计时数字
disabledPhoneTimer: 0, // 计时器 disabledPhoneTimer: 0, // 计时器
rule: { rule: {
phone: [ phone: [
{ required: true, message: '请输入联系人手机号', trigger: 'blur' }, { required: true, message: '请输入联系人手机号', trigger: 'blur' },
{ validator: iRule.phone, message: '请正确输入手机号码', trigger: 'blur'} { validator: iRule.phone, message: '请正确输入手机号码', trigger: 'blur'}
], ],
phoneCode: [ phoneCode: [
{ required: true, message: '请输入验证码', trigger: 'blur' }, { required: true, message: '请输入验证码', trigger: 'blur' },
{ validator: iRule.predefineNumeral, message: '请正确输入验证码', trigger: 'blur'} { validator: iRule.predefineNumeral, message: '请正确输入验证码', trigger: 'blur'}
], ],
password: [ password: [
{ required: true, message: '请设置登录密码', trigger: 'blur' }, { required: true, message: '请设置登录密码', trigger: 'blur' },
{ validator: iRule.unSpace, message: '不能包含空格', trigger: 'blur'}, { validator: iRule.unSpace, message: '不能包含空格', trigger: 'blur'},
{ validator: iRule.unEmoji, message: '不能包含 emoji 表情', trigger: 'blur'}, { validator: iRule.unEmoji, message: '不能包含 emoji 表情', trigger: 'blur'},
{ validator: iRule.unChinese, message: '不能包含中文', trigger: 'blur'}, { validator: iRule.unChinese, message: '不能包含中文', trigger: 'blur'},
{ validator: iRule.password, message: '6-20个字符,数字、英文字母及标点符号至少2种(除空格)', trigger: 'blur'} { validator: iRule.password, message: '6-20个字符,数字、英文字母及标点符号至少2种(除空格)', trigger: 'blur'}
], ],
passwordRepeat: [ passwordRepeat: [
{ required: true, message: '请再次输入登录密码', trigger: 'blur' }, { required: true, message: '请再次输入登录密码', trigger: 'blur' },
{ validator: (funcRule, funcValue, funcCallback) => iRule.passwordRepeat(funcRule, funcValue, funcCallback, this.formForget.password), message: '与登录密码不一致,请重新输入', trigger: 'blur'} { validator: (funcRule, funcValue, funcCallback) => iRule.passwordRepeat(funcRule, funcValue, funcCallback, this.formForget.password), message: '与登录密码不一致,请重新输入', trigger: 'blur'}
] ]
} }
} }
}, },
created: function () { created: function () {
// this.reset() // this.reset()
this.setButtonDisable('phone') this.setButtonDisable('phone')
this.onImageCode() this.onImageCode()
}, },
methods: { methods: {
onImageCode: function () { onImageCode: function () {
iRequest.request(iHost.base + 'bid/common/getImgCode', {}, 'json', 'post') iRequest.request(iHost.base + 'bid/common/getImgCode', {}, 'json', 'post')
.then((funcResponse) => { .then((funcResponse) => {
this.imageCodeData = funcResponse.img this.imageCodeData = funcResponse.img
}) })
.catch((funcError) => { .catch((funcError) => {
this.$message.error(funcError.message) this.$message.error(funcError.message)
}) })
}, },
checkImageCode: function () { checkImageCode: function () {
if (!this.formForget.code) { if (!this.formForget.code) {
this.$message.error('请输入图片验证码') this.$message.error('请输入图片验证码')
return return
} }
iRequest.request(iHost.base + 'bid/common/validateImgCode', { 'imgCode': this.formForget.code }, 'json', 'get') iRequest.request(iHost.base + 'bid/common/validateImgCode', { 'imgCode': this.formForget.code }, 'json', 'get')
.then((funcResponse) => { .then((funcResponse) => {
this.checkPhone() this.checkPhone()
}) })
.catch((funcError) => { .catch((funcError) => {
this.$message.error(funcError.message) this.$message.error(funcError.message)
this.onImageCode() this.onImageCode()
}) })
}, },
/** /**
* 获取验证码 * 获取验证码
* @function * @function
* @param {string} funcCodeType * @param {string} funcCodeType
* @returns * @returns
*/ */
getCode: function (funcCodeType) { getCode: function (funcCodeType) {
if (this.formForget.phone === '') { if (this.formForget.phone === '') {
this.$message.error('联系人手机号') this.$message.error('联系人手机号')
return return
} }
let funcParam = {} let funcParam = {}
switch (this.$route.query.status) { switch (this.$route.query.status) {
case 'specialist': case 'specialist':
funcParam.type = 'expertResetPassword' funcParam.type = 'expertResetPassword'
funcParam.mobile = this.formForget.phone funcParam.mobile = this.formForget.phone
break break
case 'supplier': case 'supplier':
funcParam.type = 'companyResetPassword' funcParam.type = 'companyResetPassword'
funcParam.mobile = this.formForget.phone funcParam.mobile = this.formForget.phone
break break
} }
iRequest.request(iHost.base + 'bid/common/getMobileVerificationCode', funcParam, 'json', 'post') iRequest.request(iHost.base + 'bid/common/getMobileVerificationCode', funcParam, 'json', 'post')
.then((funcResponse) => { .then((funcResponse) => {
this.$message({ message: '验证码已发送', type: 'success' }) this.$message({ message: '验证码已发送', type: 'success' })
window.sessionStorage.setItem('phoneTimer', Math.ceil(new Date())) window.sessionStorage.setItem('phoneTimer', Math.ceil(new Date()))
this.disableTimer('phone', this.disabledPhoneMax) this.disableTimer('phone', this.disabledPhoneMax)
}) })
.catch((funcError) => { .catch((funcError) => {
this.$message.error(funcError.message) this.$message.error(funcError.message)
}) })
}, },
/** /**
* 设置验证码禁用时间 * 设置验证码禁用时间
* @function * @function
* @param {string} funcCodeType * @param {string} funcCodeType
* @returns * @returns
*/ */
setButtonDisable: function (funcCodeType) { setButtonDisable: function (funcCodeType) {
let funcTimeDistance = Math.ceil((new Date() - Number(window.sessionStorage.getItem('phoneTimer'))) / 1000) let funcTimeDistance = Math.ceil((new Date() - Number(window.sessionStorage.getItem('phoneTimer'))) / 1000)
if (funcTimeDistance < this.disabledPhoneMax) { if (funcTimeDistance < this.disabledPhoneMax) {
this.disableTimer('phone', this.disabledPhoneMax - funcTimeDistance) this.disableTimer('phone', this.disabledPhoneMax - funcTimeDistance)
} }
}, },
/** /**
* 按钮禁用读秒 * 按钮禁用读秒
* @function * @function
* @param {string} funcCodeType * @param {string} funcCodeType
* @param {number} funcTimerSecond * @param {number} funcTimerSecond
* @returns * @returns
*/ */
disableTimer: function (funcCodeType, funcTimerSecond) { disableTimer: function (funcCodeType, funcTimerSecond) {
this.disabledPhone = true this.disabledPhone = true
this.disabledPhoneTime = funcTimerSecond this.disabledPhoneTime = funcTimerSecond
this.disabledPhoneText = ' (' + this.disabledPhoneTime + ')' this.disabledPhoneText = ' (' + this.disabledPhoneTime + ')'
this.disabledPhoneTimer = setInterval(() => { this.disabledPhoneTimer = setInterval(() => {
if (this.disabledPhoneTime > 1) { if (this.disabledPhoneTime > 1) {
this.disabledPhoneTime = this.disabledPhoneTime - 1 this.disabledPhoneTime = this.disabledPhoneTime - 1
this.disabledPhoneText = ' (' + this.disabledPhoneTime + ')' this.disabledPhoneText = ' (' + this.disabledPhoneTime + ')'
} else { } else {
this.disabledPhone = false this.disabledPhone = false
this.disabledPhoneText = '' this.disabledPhoneText = ''
clearTimeout(this.disabledPhoneTimer) clearTimeout(this.disabledPhoneTimer)
} }
}, 1000) }, 1000)
}, },
onPrevious: function () { onPrevious: function () {
switch (this.state) { switch (this.state) {
case 3: case 3:
this.state = 1 this.state = 1
this.$refs.formForget.clearValidate() this.$refs.formForget.clearValidate()
break break
} }
}, },
onNext: function () { onNext: function () {
switch (this.state) { switch (this.state) {
case 1: case 1:
this.$refs.formForget.validate(funcValid => { this.$refs.formForget.validate(funcValid => {
if (funcValid) { if (funcValid) {
this.checkImageCode() this.checkImageCode()
} }
}) })
break break
case 3: case 3:
this.$refs.formForget.validate(funcValid => { this.$refs.formForget.validate(funcValid => {
if (funcValid) { if (funcValid) {
this.checkPhoneCode() this.checkPhoneCode()
} }
}) })
break break
} }
}, },
/** /**
* 校验手机 * 校验手机
* @function * @function
* @returns * @returns
*/ */
checkPhone: function () { checkPhone: function () {
switch (this.$route.query.status) { switch (this.$route.query.status) {
case 'specialist': case 'specialist':
iRequest.request(iHost.base + 'bid/zUserExpert/validateData', { mobile: this.formForget.phone }, 'json', 'post') iRequest.request(iHost.base + 'bid/zUserExpert/validateData', { mobile: this.formForget.phone }, 'json', 'post')
.then((funcResponse) => { .then((funcResponse) => {
this.$message.error('手机号码不存在') this.$message.error('手机号码不存在')
}) })
.catch((funcError) => { .catch((funcError) => {
this.state = 3 this.state = 3
}) })
break break
case 'supplier': case 'supplier':
iRequest.request(iHost.base + 'bid/zUserCompany/validateData', { mobile: this.formForget.phone }, 'json', 'post') iRequest.request(iHost.base + 'bid/zUserCompany/validateData', { mobile: this.formForget.phone }, 'json', 'post')
.then((funcResponse) => { .then((funcResponse) => {
this.$message.error('手机号码不存在') this.$message.error('手机号码不存在')
}) })
.catch((funcError) => { .catch((funcError) => {
this.state = 3 this.state = 3
}) })
break break
} }
}, },
/** /**
* 校验手机验证码正确性 * 校验手机验证码正确性
* @function * @function
* @returns * @returns
*/ */
checkPhoneCode: function () { checkPhoneCode: function () {
let funcParam = {} let funcParam = {}
switch (this.$route.query.status) { switch (this.$route.query.status) {
case 'specialist': case 'specialist':
funcParam.type = 'expertResetPassword' funcParam.type = 'expertResetPassword'
funcParam.mobile = this.formForget.phone funcParam.mobile = this.formForget.phone
funcParam.noteCode = this.formForget.phoneCode funcParam.noteCode = this.formForget.phoneCode
break break
case 'supplier': case 'supplier':
funcParam.type = 'companyResetPassword' funcParam.type = 'companyResetPassword'
funcParam.mobile = this.formForget.phone funcParam.mobile = this.formForget.phone
funcParam.noteCode = this.formForget.phoneCode funcParam.noteCode = this.formForget.phoneCode
break break
} }
iRequest.request(iHost.base + 'bid/common/verifyMobileVerificationCode', funcParam, 'json', 'post') iRequest.request(iHost.base + 'bid/common/verifyMobileVerificationCode', funcParam, 'json', 'post')
.then((funcResponse) => { .then((funcResponse) => {
this.resetPassword() this.resetPassword()
}) })
.catch((funcError) => { .catch((funcError) => {
this.$message.error(funcError.message) this.$message.error(funcError.message)
}) })
}, },
resetPassword: function () { resetPassword: function () {
let funcParam = {} let funcParam = {}
switch (this.$route.query.status) { switch (this.$route.query.status) {
case 'specialist': case 'specialist':
funcParam.mobile = this.formForget.phone funcParam.mobile = this.formForget.phone
funcParam.newPassword = this.formForget.password funcParam.newPassword = this.formForget.password
funcParam.verificationCode = this.formForget.phoneCode funcParam.verificationCode = this.formForget.phoneCode
iRequest.request(iHost.base + 'bid/zUserExpert/resetPassword', funcParam, 'json', 'post') iRequest.request(iHost.base + 'bid/zUserExpert/resetPassword', funcParam, 'json', 'post')
.then((funcResponse) => { .then((funcResponse) => {
this.state = 5 this.state = 5
sessionStorage.removeItem('phoneTimer') sessionStorage.removeItem('phoneTimer')
this.onBack('timer') this.onBack('timer')
}) })
.catch((funcError) => { .catch((funcError) => {
this.$message.error(funcError.message) this.$message.error(funcError.message)
}) })
break break
case 'supplier': case 'supplier':
funcParam.mobile = this.formForget.phone funcParam.mobile = this.formForget.phone
funcParam.newPassword = this.formForget.password funcParam.newPassword = this.formForget.password
funcParam.verificationCode = this.formForget.phoneCode funcParam.verificationCode = this.formForget.phoneCode
iRequest.request(iHost.base + 'bid/zUserCompany/resetPassword', funcParam, 'json', 'post') iRequest.request(iHost.base + 'bid/zUserCompany/resetPassword', funcParam, 'json', 'post')
.then((funcResponse) => { .then((funcResponse) => {
this.state = 5 this.state = 5
sessionStorage.removeItem('phoneTimer') sessionStorage.removeItem('phoneTimer')
this.onBack('timer') this.onBack('timer')
}) })
.catch((funcError) => { .catch((funcError) => {
this.$message.error(funcError.message) this.$message.error(funcError.message)
}) })
break break
} }
}, },
onBack: function (funcType) { onBack: function (funcType) {
switch (funcType) { switch (funcType) {
case 'timer': case 'timer':
this.redirectSecond = 3 this.redirectSecond = 3
this.redirectTimer = setInterval(() => { this.redirectTimer = setInterval(() => {
this.redirectSecond = this.redirectSecond - 1 this.redirectSecond = this.redirectSecond - 1
if (this.redirectSecond === 0) { if (this.redirectSecond === 0) {
this.$router.push('/signIn/input?status=' + this.$route.query.status) this.$router.push('/signIn/input?status=' + this.$route.query.status)
clearInterval(this.redirectTimer) clearInterval(this.redirectTimer)
} }
}, 1000) }, 1000)
break break
case 'now': case 'now':
clearInterval(this.redirectTimer) clearInterval(this.redirectTimer)
this.$router.push('/signIn/input?status=' + this.$route.query.status) this.$router.push('/signIn/input?status=' + this.$route.query.status)
break break
} }
} }
}, },
} }
</script> </script>
<style lang="less"> <style lang="less">
.currency-sign-in-forget { .currency-sign-in-forget {
width: 100%; width: 100%;
background-image: url(@backgroundImageUrl); background-image: url(@backgroundImageUrl);
> div { > div {
width: 1200px; width: 1200px;
min-height: 480px; min-height: 480px;
margin-top: 36px; margin-top: 36px;
margin-bottom: 40px; margin-bottom: 40px;
padding: 32px 32px 0 32px; padding: 32px 32px 0 32px;
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);
.progress { .progress {
position: relative; position: relative;
width: 100%; width: 100%;
margin-bottom: 40px; margin: 20px 0 40px 0;
.node { .node {
flex-grow: 1; flex-grow: 1;
> div:nth-child(1) { > div:nth-child(1) {
z-index: 5; z-index: 5;
width: 40px; width: 40px;
height: 40px; height: 40px;
margin-bottom: 14px; margin-bottom: 14px;
border-radius: 50%; border-radius: 50%;
background: #F2F2F2; background: #F2F2F2;
} }
} }
.node-active { .node-active {
> div:nth-child(1) { > div:nth-child(1) {
color: @colorWhite; color: @colorWhite;
background: @colorBlue; background: @colorBlue;
} }
} }
> div:nth-child(4) { > div:nth-child(4) {
z-index: 0; z-index: 0;
position: absolute; position: absolute;
top: 18px; top: 18px;
left: 210px; left: 210px;
width: 760px; width: 760px;
height: 4px; height: 4px;
background: #FFFFFF; background: #FFFFFF;
} }
} }
.forget-info { .forget-info {
width: 590px; width: 590px;
.el-form { .el-form {
width: 100%; width: 100%;
.form-item-code { .form-item-code {
> div { > div {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
.el-input { .el-input {
display: inline-block; display: inline-block;
width: 310px; width: 310px;
} }
button { button {
display: inline-block; display: inline-block;
width: 180px; width: 180px;
height: 40px; height: 40px;
margin-left: 10px; margin-left: 10px;
padding: 0; padding: 0;
border: none; border: none;
color: @colorWhite; color: @colorWhite;
background: @colorBlue; background: @colorBlue;
img { img {
width: 180px; width: 180px;
height: 40px; height: 40px;
} }
} }
} }
} }
} }
.forget-finished { .forget-finished {
margin-top: 46px; margin-top: 46px;
> span:nth-child(2) { > span:nth-child(2) {
margin-top: 18px; margin-top: 18px;
font-size: @fontSize06; font-size: @fontSize06;
} }
> span:nth-child(3) { > span:nth-child(3) {
margin-top: 14px; margin-top: 14px;
font-size: @fontSize01; font-size: @fontSize01;
} }
} }
} }
} }
} }
</style> </style>
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