Commit fdfbd2b6 authored by 张冬's avatar 张冬

更新大部分

parent e280408e
File added
......@@ -136,6 +136,15 @@ export function biddingProjectId(projectId) {
method: 'get'
})
}
//获取项目的分类
export function projectClassify(projectId) {
return request({
url: `project/projectClassify/${projectId}`,
method: 'get'
})
}
// 部署线上
export function autodeploy() {
......@@ -147,4 +156,4 @@ export function autodeploy() {
name:"me"
}
})
}
}
\ No newline at end of file
......@@ -248,6 +248,13 @@ export function messageRecord(projectId) {
method: 'get',
})
}
// 结束开标
export function bidFinish(projectId) {
return request({
url: `open-bid/finish/${projectId}`,
method: 'get',
})
}
// 2.1.5
// 评标管理:变更公告列表
......@@ -397,6 +404,13 @@ export function sentBookList(projectId) {
method: 'get'
})
}
// 中标通知书提交审核
export function sentBookAduit(projectId) {
return request({
url: `/tender-decide/winner/sentBook/aduit/${projectId}`,
method: 'put'
})
}
// 保存/编辑中标通知书
export function editSentBook(data) {
return request({
......@@ -405,6 +419,7 @@ export function editSentBook(data) {
data:data
})
}
// 招标结果通知书列表
export function resultBookList(projectId) {
return request({
......@@ -412,7 +427,7 @@ export function resultBookList(projectId) {
method: 'get'
})
}
// 保存/编辑中标通知书
// 保存/编辑招标结果通知书
export function editResultBook(data) {
return request({
url: "/tender-decide/resultBook/save",
......@@ -420,6 +435,15 @@ export function editResultBook(data) {
data:data
})
}
// 招标结果提交审核
export function resultBookAduit(projectId) {
return request({
url: `/tender-decide/resultBook/aduit/${projectId}`,
method: 'put'
})
}
// 合同管理保存
export function contract(data) {
return request({
......@@ -469,10 +493,6 @@ export function winPersonInfo(projectId) {
// 标书费提交
export function operationAduit(data) {
return request({
......@@ -483,8 +503,6 @@ export function operationAduit(data) {
}
// 招标文件下载
export function bidBookDownload(projectId) {
return request({
......@@ -492,3 +510,13 @@ export function bidBookDownload(projectId) {
method: 'get',
})
}
// 工作台接口
export function projectConsole(params) {
return request({
url: "/project/console",
method: 'get',
params:params
})
}
<template>
<div class="noticeDetail">
<div class="info_mes">
<p>
项目名称:{{projectName}}
</p>
<p>
项目 项目编号:{{projectCode}}
</p>
<p >
发布日期:{{detail.createTime}}
</p>
</div>
<h1>{{detail.title}}</h1>
<div v-html="detail.content"></div>
<div class="content_list">
<div class="flex-item">
<div>附件下载:</div>
<ul v-if="detail.accessoryVOList">
<li v-for="item in detail.accessoryVOList" :key="item.id">
<a :href="item.accessoryUrl">{{item.fileName}}</a>
</li>
</ul>
<ul v-else>
无附件
</ul>
<div v-if="state">
<div class="info_mes">
<p>
项目名称:{{projectName}}
</p>
<p>
项目 项目编号:{{projectCode}}
</p>
<p >
发布日期:{{detail.createTime}}
</p>
</div>
<h1>{{detail.title}}</h1>
<div v-html="detail.content"></div>
<div class="content_list">
<div class="flex-item">
<div>附件下载:</div>
<ul v-if="detail.accessoryVOList">
<li v-for="item in detail.accessoryVOList" :key="item.id">
<a :href="item.accessoryUrl">{{item.fileName}}</a>
</li>
</ul>
<ul v-else>
无附件
</ul>
</div>
</div>
<slot></slot>
</div>
<div v-else class="no-notice">
未找到该公告详情
</div>
</div>
</template>
......@@ -38,7 +44,8 @@
return {
projectName: "",
projectCode: "",
detail: ""
detail: "",
state:true
}
},
methods: {
......@@ -49,7 +56,11 @@
data,
code
} = await biddingProjectId(projectId)
this.detail = data
if(code==200){
this.detail = data
}else if(code==500){
this.state=false
}
},
},
created() {
......@@ -61,6 +72,11 @@
</script>
<style scoped>
.no-notice{
margin-top: 30px;
text-align: center;
margin-bottom: 30px;
}
.info_mes {
margin-bottom: 40px;
display: flex;
......
<template>
<div >
<div>
<h1>{{projectName}}在线询价公告</h1>
<div class="flex-center">
<div class="flex-center" v-if="state">
<h6 style="margin-right:60px;margin-top:30px" v-if="detail.area">询价所在地:{{detail.area}}</h6>
<h6 style="margin-buttom:60px;margin-top:30px">日期:{{detail.createTime}}</h6>
</div>
<div class="form">
<div class="form" v-if="state">
<h3 style="margin-buttom:30px">基本信息</h3>
<table border="0" width="100%" height="120px">
<tr>
......@@ -68,6 +68,10 @@
</div>
<div v-html="detail.commercialRequirements"></div>
</div>
<slot></slot>
</div>
<div v-if="!state" class="no-notice">
未找到该公告详情
</div>
</div>
</template>
......@@ -86,6 +90,7 @@
},
data() {
return {
state:true,
tableData:[],
projectName:"",
detail: "",
......@@ -124,6 +129,9 @@
}
},
methods: {
back() {
this.$router.go(-1)
},
// 获取详情
async getenquiryProjectId() {
let projectId = localStorage.getItem("projectId")
......@@ -131,11 +139,14 @@
data,
code
} = await enquiryProjectId(projectId)
data.endTime=getTime1(data.endTime)
data.startTime=getTime1(data.startTime)
data.createTime=data.createTime.substring(0,10)
this.detail = data
if(code==200){
data.endTime=getTime1(data.endTime)
data.startTime=getTime1(data.startTime)
data.createTime=data.createTime.substring(0,10)
this.detail = data
}else if(code==500){
this.state=false
}
},
},
created() {
......@@ -146,6 +157,11 @@
</script>
<style scoped>
.no-notice{
margin-top: 30px;
text-align: center;
margin-bottom: 30px;
}
.filelist{
box-sizing: border-box;
padding:20px
......
<template>
<div class="message">
<!-- 基本信息 -->
<div>
<div class="describe">基本信息</div>
<div class="message-form">
<div>项目名称:{{projectdetail.projectName}} </div>
<div class="flex-between">
<div>项目编号:{{projectdetail.projectCode}}</div>
<div>项目分类:{{projectdetail.classifyName}}</div>
</div>
<div class="flex-between">
<div>采购单位:{{projectdetail.purchaseAgent}}</div>
<div>项目归属行业:{{projectdetail.industry}}</div>
</div>
<div class="flex-between">
<div>项目归属地区:{{projectdetail.local}}</div>
<div>最小投标单位数:{{projectdetail.minTender}}</div>
</div>
<div class="flex-between">
<div>招标联系人:{{projectdetail.contacts}}</div>
<div>联系方式:{{projectdetail.contactsWay}}</div>
</div>
</div>
</div>
<!-- 标书费用 -->
<div>
<div class="describe">标书费用信息</div>
<div class="message-form">
<div class="flex-between">
<div>标书费结算账号:{{projectdetail.bidBookInfoDO.account}}</div>
<div>标书费结算开户行:{{projectdetail.bidBookInfoDO.bank}}</div>
</div>
<div class="flex-between">
<div>标书费结算账户名:{{projectdetail.bidBookInfoDO.accountName}}</div>
<div>标书费结算联系电话:{{projectdetail.bidBookInfoDO.phone}} </div>
</div>
</div>
</div>
<!-- 保证金费用 -->
<div>
<div class="describe">保证金费用信息</div>
<div class="message-form">
<div>是否需要投标保证金:{{projectdetail.isNeedEarnest?"是":"否"}}</div>
<div class='price' v-if="projectdetail.isNeedEarnest">
<div>投标保证金金额:{{projectdetail.earnestInfoDO.money}}</div>
<div class="flex-between">
<div>投标保证金结算账号:{{projectdetail.earnestInfoDO.account}}</div>
<div>投标保证金结算开户行:{{projectdetail.earnestInfoDO.bank}}</div>
</div>
<div class="flex-between">
<div>投标保证金结算账户名:{{projectdetail.earnestInfoDO.userName}}</div>
<div>投标保证金结算联系电话:{{projectdetail.earnestInfoDO.phone}} </div>
</div>
</div>
</div>
</div>
<div>
<div class="describe">标的需求</div>
<dataTable :table-data="projectdetail.commodityVOList" :columns="columns" :margin-top="10" :margin-bottom="0">
</dataTable>
</div>
<div class="button">
<el-button @click="back">返回</el-button>
</div>
</div>
</template>
<script>
import { projectdetail,timeInfo} from '@api/supply/bid'
import dataTable from '@components/nopageTable.vue'
export default {
components: {
dataTable,
},
data() {
return {
projectdetail:"",
breads: ['投标管理', '我参与的项目', '工作台 '],
nav: ['供应商'],
dialogFormVisible: false,
tip: '请上传于招标项目相关的文件,如委托单,技术附件,招标方案,项目真是材料等(文件格式PDF,JPG,JPEG,ZIP,RAR,数量不超过20个,单个文件大小不超过25M)',
managers: [],
belongTypes: [],
projectTypes: [],
textarea: '',
tableData: [],
columns: [{
label: '标的编码',
prop: 'encoding'
},
{
label: '标的名称',
prop: 'bidName'
},
{
label: '数量',
prop: 'quantity'
},
{
label: '计量单位',
prop: 'unit'
},
{
label: '品牌',
prop: 'brand'
},
{
label: '规格型号',
prop: 'specification'
},
{
label: '标杆价(元)',
prop: 'price'
},
{
label: '备注',
prop: 'remark'
},
],
ruleForm: {
projectName: '',
projectCode: '',
classify: '',
purchaseAgent: '',
industry: '',
region: '',
minTender: '',
contacts: '',
contactsWay: '',
// 招标方式
bidType: 0,
isPublishAd: false,
content: '',
// 标的需求
isNeedEarnest: false,
provinceId: '',
cityId: '',
districtId: ''
}
}
},
computed: {
},
created() {
this.getprojectdetail()
this.gettimeInfo()
},
methods: {
async getprojectdetail() {
let projectId=localStorage.getItem("projectId")
const {data} = await projectdetail(projectId)
this.projectdetail=data
},
async gettimeInfo() {
let projectId=localStorage.getItem("projectId")
const {data} = await timeInfo(projectId)
this.timeInfo=data
},
back(){
this.$router.go(-1)
}
}
}
</script>
<style>
.message>div {
background: #fff;
margin-bottom: 30px;
}
.message-form>div,.price>div{
margin-bottom: 10px
}
.message-form {
width: 80%;
margin: 0 auto
}
.message-form {
padding-bottom: 15px;
}
.message {
background: #F0F2F5;
}
.button {
display: flex;
justify-content: flex-end;
padding: 10px 20px;
}
.bid {
margin-bottom: 20px;
}
</style>
......@@ -10,11 +10,14 @@
<p>截标倒计时:</p>
<timeDown :remain-time="remaintime" @countDowmEnd="remaintimeEnd"></timeDown>
</div>
<div class="flex" v-show="decodeTime">
<!-- <div class="flex" v-show="decodeTime"> -->
<div class="flex" v-show="openStatus==2">
<p>解密倒计时:</p>
<timeDown :remain-time="decodeTime" @countDowmEnd="decodeTimeEnd"></timeDown>
</div>
<div class="flex" v-show="signatureTime">
<!-- <div class="flex" v-show="signatureTime"> -->
<div class="flex" v-show="openStatus==2">
openStatus==2
<p>签名倒计时:</p>
<timeDown :remain-time="signatureTime" @countDowmEnd="signatureTimeEnd"></timeDown>
</div>
......@@ -29,7 +32,7 @@
<div @click="isMessge=true">签到解密签名情况</div>
</div>
<div class="hal-center">
<ul>
<ul id="chatRecord1">
<li v-for="(item,index) in halList" :key="index" class="flex-item">
<div>{{item.time}}</div>
<div>{{item.name}}</div>
......@@ -40,14 +43,13 @@
<div class="hal-right">
<el-button @click="isdialogue">在线对话<i class="el-icon-chat-dot-round"></i></el-button>
<div class="button-pos">
<el-button v-if="openbidButton" type="primary" @click="confirm" style="margin-left: 10px;">立即开标</el-button>
<!-- <el-button v-else type="info" style="margin-left: 10px;">{{ buttonWords }}</el-button> -->
<el-button v-if="endbidButton" type="primary" @click="end" style="margin-top: 10px;">结束开标</el-button>
<el-button v-if="openStatus==1" type="primary" @click="confirm" style="margin-left: 10px;" :disabled="openbidButton">立即开标</el-button>
<el-button v-if="openStatus==2" type="primary" @click="end" style="margin-top: 10px;" :disabled="endbidButton">结束开标</el-button>
</div>
</div>
<!-- 在线对话 -->
<div class="dialogue" style="margin-top: 30px;" v-show="dialogue">
<ul class="dialogueList" id="chatContainer">
<ul class="dialogueList" id="chatRecord">
<li v-for="(item,index) in dialogueList" :key="index" :class="myId==item.userId?'flex-left':'flex-right'">
<div>
<div class="flex-item">
......@@ -59,13 +61,13 @@
</div>
</li>
</ul>
<el-input placeholder="请输入内容" v-model.trim="content" clearable @keyup.enter.native="send" maxlength="30">
<el-input placeholder="请输入内容" v-model="content" clearable @keyup.enter.native="send" maxlength="30">
</el-input>
</div>
</div>
<!-- 最下面一栏 -->
<div class="flex-between buttons">
<el-button @click="isfailInfo=true" v-if="isfail">流标</el-button>
<el-button @click="isfailInfo=true" v-if="!isFailed">流标</el-button>
<el-button @click="failDetail" v-else>流标信息</el-button>
<div>
<el-button icon="el-icon-refresh">刷新</el-button>
......@@ -142,7 +144,7 @@
<div>{{userName}}</div>
</el-form-item>
<el-form-item label="流标原因" prop="reason">
<el-input v-model.trim="form.reason" maxlength="300" type="textarea" :rows="2"></el-input>
<el-input v-model.trim="form.reason" maxlength="300" type="textarea" :rows="2"></el-input>
</el-form-item>
<el-form-item label="上传附件">
<singleUpload :limit="1" :max="10" tip="支持上传1份附件,不差过10M." @input="getfile"></singleUpload>
......@@ -185,7 +187,8 @@
signdetail,
startbid,
openbidFailed,
bidFaileddetail
bidFaileddetail,
bidFinish
} from '@api/purchaser/bid'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import timeDown from '@components/timeDown.vue'
......@@ -202,12 +205,13 @@
},
data() {
return {
openStatus:'',
faildetail: "",
isfailDetail: false,
projectCode: "",
projectName: "",
userName: "",
isfail: true,
isFailed: true,
rules: {
reason: [{
required: true,
......@@ -280,10 +284,9 @@
dialogueList: [],
myId: "",
leftmessage: "",
timer:""
timer: ""
}
},
created() {
this.projectCode = localStorage.getItem("projectCode")
this.projectName = localStorage.getItem("projectName")
......@@ -298,20 +301,40 @@
// 中国标准时间
let currentTime = getTime()
this.currentTime = currentTime
this.timer1=setInterval(() => {
this.timer1 = setInterval(() => {
let currentTime = getTime()
this.currentTime = currentTime
}, 1000)
// websocket
this.createWebSocket()
// 长轮训获取
this.timer = setInterval(() => {
this.getstartInfo()
}, 5000);
this.timer = setInterval(() => {
this.getstartInfo()
}, 5000);
},
methods: {
end() {
async end() {
try {
let projectId = localStorage.getItem("projectId")
const {
msg,
code
} = await bidFinish(projectId)
if (code == 200) {
this.$message({
message: msg,
type: 'success',
duration: 1500
})
setTimeout(() => {
this.$router.go(-1)
}, 1500)
} else {
this.$message.error(msg)
}
} catch (e) {
console.log(e)
}
},
down(url) {
window.open(url)
......@@ -342,11 +365,11 @@
if (code === 200) {
this.$message.success(msg)
this.isfailInfo = false
this.isfail = false
this.isFailed = false
} else if (code === 500) {
this.$message.error(msg)
this.isfailInfo = false
this.isfail = false
this.isFailed = false
}
}
} catch (e) {
......@@ -389,6 +412,8 @@
} = await startInfo(projectId)
if (code == 200) {
this.startDetail = data
this.openStatus=data.openStatus
this.isFailed=data.isFailed
}
} catch (e) {
console.log(e)
......@@ -466,7 +491,8 @@
try {
let projectId = localStorage.getItem("projectId")
const {
code
code,
msg
} = await startbid(projectId)
if (code == 200) {
this.isOpenbid = false
......@@ -478,6 +504,11 @@
message: '开标成功',
type: 'success'
})
}else{
this.$message({
message: msg,
type: 'error'
})
}
} catch (e) {
console.log(e)
......@@ -499,10 +530,10 @@
},
// websocket
createWebSocket() {
let token=localStorage.getItem("token")
let token = localStorage.getItem("token")
let projectId = localStorage.getItem("projectId")
this.websocket = new WebSocket('ws://192.168.3.35:8085/webSocket/' + projectId +"/"+token )
// this.websocket = new WebSocket('ws://60.205.251.80:8085/webSocket/' + projectId +"/"+token )
// this.websocket = new WebSocket('ws://192.168.3.35:8085/webSocket/' + projectId + "/" + token)
this.websocket = new WebSocket('ws://60.205.251.80:8085/webSocket/' + projectId +"/"+token )
// 连接成功时
this.websocket.onopen = () => {}
this.websocket.onmessage = event => {
......@@ -529,38 +560,39 @@
},
send() {
let content = this.content;
this.websocket.send(content)
if(content.split(" ").join("").length == 0){
this.$message.error("请输入内容")
}else{
this.websocket.send(content)
}
}
},
// watch: {
// chatlog() {
// console.log("chatlog change");
// this.$nextTick(() => {
// var container = this.$el.querySelector("#chatContainer");
// console.log(container);
// container.scrollTop = container.scrollHeight;
// })
// // document.getElementById('chatContainer').scrollTop = document.getElementById('chatContainer').scrollHeight+150;
// }
// },
destroyed() {
//清除定时器
clearInterval(this.timer);
clearInterval(this.timer1);
}
updated(){
// 聊天定位到底部
let ele = document.getElementById('chatRecord');
ele.scrollTop = ele.scrollHeight;
let ele1 = document.getElementById('chatRecord1');
ele1.scrollTop = ele1.scrollHeight;
},
destroyed() {
//清除定时器
clearInterval(this.timer);
clearInterval(this.timer1);
}
}
</script>
<style scoped>
.flex-left{
.flex-left {
display: flex;
justify-content: flex-start;
}
.flex-right{
.flex-right {
display: flex;
justify-content: flex-end;
}
.dialogue {
position: absolute;
top: 10%;
......
......@@ -25,7 +25,7 @@
<div>
<el-form-item label="开标人" prop="bidOpener">
<el-select v-model="ruleForm.bidOpener" placeholder="请选择" style="width: 250px;">
<el-option v-for="item in bidOpeners" :key="item.id" :label="item.name" :value="item.id">
<el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id">
</el-option>
</el-select>
</el-form-item>
......@@ -55,9 +55,7 @@
</div>
</div>
</template>
<script>
import { bidsetting} from '@api/purchaser/bid'
import { opener,mamager} from '@api/common/list'
import dataTable from '@components/dataTable.vue'
......@@ -134,7 +132,7 @@ export default {
code
} = await mamager(projectId)
if (code === 200) {
this.bidOpeners=data
this.ruleForm.bidOpener=data
}
},
//提交表单
......
......@@ -50,7 +50,7 @@ export default {
},
{
label: '状态',
prop: 'Status'
prop: 'projectStatus'
},
{
label: '备注',
......
......@@ -49,6 +49,14 @@ export default {
quillEditor
},
data() {
let checkSpace = (rule, value, callback) => {
console.log(value.split(" ").join("").length)
if (value.split(" ").join("").length == 0) {
callback(new Error('请输入'))
} else {
callback()
}
}
return {
accessoryPOList: [],
editorOption: {},
......@@ -61,23 +69,22 @@ export default {
title: [{
required: true,
message: '请输入',
trigger: 'blue'
trigger: 'blur'
}],
release: [{
required: true,
message: '请输入',
trigger: 'blue'
trigger: 'blur'
}],
// file: [{
// required: true,
// message: '请输入',
// trigger: 'blue'
// }],
content: [{
required: true,
message: '请输入',
trigger: 'blue'
}]
trigger: 'blur'
},
{
validator: checkSpace,
trigger: 'blur'
}]
}
}
},
......
<template>
<div>
<div class="content-head">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<h3>{{ title }}</h3>
<h5>{{ title }}</h5>
</div>
<div class="content">
<div class="describe">流标公告</div>
<div class="form">
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="120px" class="demo-ruleForm">
<el-form-item label="公告标题" prop="title">
<el-input v-model.trim="ruleForm.title" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="上传附件" prop="file">
<singleUpload tip="支持扩展名:.rar .zip .doc .docx .pdf .jpg..." @input="getfile"></singleUpload>
</el-form-item>
<el-form-item label="公告内容" prop="content">
<quill-editor ref="text" v-model="ruleForm.content" :options="editorOption" class="myQuillEditor" />
</el-form-item>
</el-form>
<div class="button">
<el-button @click="cancle">取消</el-button>
<el-button type="primary">提交审核</el-button>
</div>
</div>
</div>
</div>
<div>
<div class="content-head">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<h3>{{ title }}</h3>
<h5>{{ title }}</h5>
</div>
<div class="content">
<div class="describe">流标公告</div>
<div class="form">
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="120px" class="demo-ruleForm">
<el-form-item label="公告标题" prop="title">
<el-input v-model.trim="ruleForm.title" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="上传附件">
<singleUpload tip="支持扩展名:.rar .zip .doc .docx .pdf .jpg..." @input="getfile"></singleUpload>
</el-form-item>
<el-form-item label="公告内容" prop="content">
<quill-editor ref="text" v-model="ruleForm.content" :options="editorOption" class="myQuillEditor" />
</el-form-item>
</el-form>
<div class="button">
<el-button @click="cancle">取消</el-button>
<el-button type="primary" @click="submit">提交审核</el-button>
</div>
</div>
</div>
</div>
</template>
<script>
import {
createAbortive
} from '@api/purchaser/bid'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import singleUpload from '@components/Upload/Upload.vue'
import {
quillEditor
} from 'vue-quill-editor'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
export default {
components: {
dataBreadcrumb,
singleUpload,
quillEditor
},
data() {
return {
editorOption: {},
title: '发布流标公告',
breads: ['招标管理', '招标项目管理', '工作台'],
ruleForm: {
title: '',
content: '',
accessoryPOList: []
},
rules: {
title: [{
required: true,
message: '请输入',
trigger: 'blue'
}],
release: [{
required: true,
message: '请输入',
trigger: 'blue'
}],
file: [{
required: true,
message: '请输入',
trigger: 'blue'
}],
content: [{
required: true,
message: '请输入',
trigger: 'blue'
}]
}
}
},
created() {
let type = this.$route.query.type
console.log(type)
if (type === 'modify') {
this.ruleForm = {
title: '修改',
content: '大修改'
}
this.title = '修改流标公告'
}
},
methods: {
cancle() {
this.$router.go(-1)
},
//提交表单
async submit() {
let ruleForm = this.ruleForm
ruleForm.projectId = 1
let type = this.$route.query.type
if (type === 'modify') {
ruleForm.changeId = 1
}
try {
const valid = await this.$refs['ruleForm'].validate()
if (valid) {
const {
code,
msg
} = await createAbortive(this.ruleForm)
if (code === 200) {
this.$message({
message: msg,
type: 'success'
})
// this.$router.go(-1)
}
}
} catch (err) {
console.log(err)
}
}
}
import {
createAbortive
} from '@api/purchaser/bid'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import singleUpload from '@components/Upload/Upload.vue'
import {
quillEditor
} from 'vue-quill-editor'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.snow.css'
import 'quill/dist/quill.bubble.css'
export default {
components: {
dataBreadcrumb,
singleUpload,
quillEditor
},
data() {
return {
editorOption: {},
title: '发布流标公告',
breads: ['招标管理', '招标项目管理', '工作台'],
ruleForm: {
title: '',
content: '',
accessoryPOList: []
},
rules: {
title: [{
required: true,
message: '请输入',
trigger: 'blue'
}],
release: [{
required: true,
message: '请输入',
trigger: 'blue'
}],
content: [{
required: true,
message: '请输入',
trigger: 'blue'
}]
}
}
},
created() {
let type = this.$route.query.type
console.log(type)
if (type === 'modify') {
this.ruleForm = {
title: '修改',
content: '大修改'
}
this.title = '修改流标公告'
}
},
methods: {
getfile(val){
this.ruleForm.accessoryPOList=val
},
cancle() {
this.$router.go(-1)
},
//提交表单
async submit() {
let ruleForm = this.ruleForm
ruleForm.projectId = 1
let type = this.$route.query.type
if (type === 'modify') {
ruleForm.changeId = 1
}
try {
const valid = await this.$refs['ruleForm'].validate()
if (valid) {
const {
code,
msg
} = await createAbortive(this.ruleForm)
if (code === 200) {
this.$message({
message: msg,
type: 'success',
duration: 1500
})
setTimeout(() => {
this.$router.go(-1)
}, 1500)
} else {
this.$message.error(msg)
}
}
} catch (err) {
console.log(err)
}
}
}
}
}
</script>
......
<template>
<div>
<div class="content-head">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<h3>项目信息</h3>
<h5>查看项目信息</h5>
</div>
<div class="othercontent">
<projectDetail></projectDetail>
</div>
</div>
</template>
<script>
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import projectDetail from '@components/detail/projectDetail.vue'
export default {
components: {
dataBreadcrumb,
projectDetail
},
data() {
return {
projectdetail:"",
breads: ['投标管理', '我参与的项目', '工作台 '],
nav: ['供应商'],
dialogFormVisible: false,
tip: '请上传于招标项目相关的文件,如委托单,技术附件,招标方案,项目真是材料等(文件格式PDF,JPG,JPEG,ZIP,RAR,数量不超过20个,单个文件大小不超过25M)',
managers: [],
belongTypes: [],
projectTypes: [],
textarea: '',
ruleForm: {
projectName: '',
projectCode: '',
classify: '',
purchaseAgent: '',
industry: '',
region: '',
minTender: '',
contacts: '',
contactsWay: '',
// 招标方式
bidType: 0,
isPublishAd: false,
content: '',
// 标的需求
isNeedEarnest: false,
provinceId: '',
cityId: '',
districtId: ''
}
}
},
computed: {
},
}
</script>
<style scoped>
.message>div {
background: #fff;
margin-bottom: 30px;
}
.message-form>div,.price>div{
margin-bottom: 10px
}
.message-form {
width: 80%;
margin: 0 auto
}
.message-form {
padding-bottom: 15px;
}
.message {
background: #F0F2F5;
}
.button {
display: flex;
justify-content: flex-end;
padding: 10px 20px;
}
.bid {
margin-bottom: 20px;
}
</style>
......@@ -12,25 +12,25 @@
<div>项目名称:{{projectName}}</div>
</div>
<div class="flex-between">
<div>日期:{{ date }}</div>
<div>中标金额:100.00元</div>
<div>日期:{{ winDate}}</div>
<div>中标金额:{{money}}</div>
</div>
<div class="flex-between">
<div class="flex">
<div >上传附件:</div>
<singleUpload tips="支持上传一个pdf格式文件,大小不超过100M。"></singleUpload>
<singleUpload :limit='1' tip="支持上传一个pdf格式文件,大小不超过100M。" accept='.pdf' @input="getfile"></singleUpload>
</div>
<div>
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="150px" class="demo-ruleForm">
<el-form-item label="招标结果通知书编号" prop="code">
<el-input v-model.trim="ruleForm.code" oninput="value=value.replace(/[^\d]/g,'')"></el-input>
<el-form-item label="招标结果通知书编号" prop="number">
<el-input v-model.trim="ruleForm.number" oninput="value=value.replace(/[^\d]/g,'')"></el-input>
</el-form-item>
</el-form>
</div>
</div>
<div class="flex-center button">
<el-button>取消</el-button>
<el-button type="primary">保存</el-button>
<el-button @click="back">取消</el-button>
<el-button type="primary" @click="submitData">保存</el-button>
</div>
</div>
</div>
......@@ -38,6 +38,7 @@
</template>
<script>
import { editResultBook} from '@api/purchaser/bid'
import dataTable from '@components/dataTable.vue'
import singleUpload from '@components/Upload/singleUpload.vue'
export default {
......@@ -48,13 +49,16 @@ export default {
},
data() {
return {
money:"",
winDate:"",
projectCode:"",
projectName:"",
ruleForm: {
code: ''
number: '',
fileList:[]
},
rules: {
code: [{
number: [{
required: true,
message: '请填写编号',
trigger: 'blur'
......@@ -65,22 +69,47 @@ export default {
}
},
created() {
this.resultId=this.$route.query.id;
this.money=this.$route.query.money
this.winDate=this.$route.query.winDate
this.projectCode=localStorage.getItem("projectCode")
this.projectName=localStorage.getItem("projectName")
this.addDate()
},
methods: {
addDate() {
let nowDate = new Date()
let date = {
year: nowDate.getFullYear(),
month: nowDate.getMonth() + 1,
date: nowDate.getDate()
methods: {
back(){
this.$router.go(-1)
},
getfile(val){
this.ruleForm.fileList=val
},
//提交表单
async submitData() {
try {
const valid = await this.$refs['ruleForm'].validate()
if (valid) {
let ruleForm=this.ruleForm;
ruleForm.id=this.resultId
ruleForm.projectId=localStorage.getItem("projectId")
ruleForm.companyId=localStorage.getItem("companyId")
const { code,msg } = await editResultBook(ruleForm);
if (code === 200) {
this.$message({
message: msg,
type: 'success',
duration:1500
})
setTimeout(()=>{
this.$router.go(-1)
},1500)
}else{
this.$message.error(msg)
}
}
} catch (e) {
console.log(e)
}
let systemDate = date.year + '-' + 0 + date.month + '-' + 0 + date.date
this.date = systemDate
}
}
}
}
</script>
......
......@@ -18,14 +18,18 @@
</dataTable>
<div class="button flex-center">
<el-button @click="back">返回</el-button>
<el-button type="primary">提交审核</el-button>
<el-button type="primary" @click="submitData">提交审核</el-button>
</div>
</div>
</div>
</template>
<script>
import dataTable from '@components/dataTable.vue'
import {
resultBookList,
resultBookAduit
} from '@api/purchaser/bid'
import dataTable from '@components/nopageTable.vue'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import changeNav from '@components/changeNav.vue'
export default {
......@@ -68,26 +72,66 @@ export default {
slot: 'operate'
}
], // 操作列
pageObj: {
size: 10,
total: 1,
currentPage: 1,
sizes: [100, 200, 300],
func: (currentPage) => {
this.pageTurning(currentPage)
}
}
}
},
methods: {
examine() {
this.$router.push('/admin/bid/bidingDetail')
},
back() {
this.$router.go(-1)
}
}
methods: {
edit(row) {
this.$router.push(`/purchaser/bid/bidSure/bidResult/edit?id=${row.id}&winDate=${row.winDate}&money=${row.money}`)
},
back() {
this.$router.go(-1)
},
// 获取列表
async getresultBookList() {
try {
let projectId = localStorage.getItem("projectId");
const {
data,
code
} = await resultBookList(projectId)
if (code === 200) {
for (let item of data) {
if (item.status == 0) {
item.state = "未审核"
} else if (item.status == 1) {
item.state = "通过审核"
} else if (item.status == 2) {
item.state = "未通过审核"
} else if (item.status == -1) {
item.state = "暂存本地"
}
}
this.tableData = data
}
} catch (e) {
console.log(e)
}
},
async submitData() {
try {
let projectId = localStorage.getItem("projectId")
const {
msg,
code
} = await resultBookAduit(projectId)
if (code == 200) {
this.$message({
message: msg,
type: 'success',
duration: 1500
})
setTimeout(() => {
this.$router.go(-1)
}, 1500)
} else {
this.$message.error(msg)
}
} catch (e) {
console.log(e)
}
}
}
}
</script>
......
......@@ -10,7 +10,7 @@
<div style="margin-right: 100px;">项目名称:{{projectName}}</div>
</div>
<div class="flex-between">
<div>项目分类:货物</div>
<div>项目分类:{{classify}}</div>
<div class="flex">
<div class="adjustment">上传附件:</div>
<singleUpload :limit="1" tip="支持上传1个附件,不超过20M" @input="getfile"></singleUpload>
......@@ -20,8 +20,8 @@
<div class="form">
<h3>确定中标人</h3>
<el-radio-group v-model="companyId">
<el-radio :label="item.companyId" v-for="(item,index) in tableData" :key="index">{{item.companyName}}</el-radio>
</el-radio-group>
<el-radio :label="item.companyId" v-for="(item,index) in tableData" :key="index">{{item.companyName}}</el-radio>
</el-radio-group>
<h3 style="margin-top:30px">说明</h3>
<el-input :rows="3" v-model.trim="content" type="textarea" placeholder="请输入内容" maxlength="300">
</el-input>
......@@ -41,7 +41,9 @@
candidate,
winnerSave
} from '@api/purchaser/bid'
import {
projectClassify
} from '@api/common/list'
import dataTable from '@components/nopageTable.vue'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import changeNav from '@components/changeNav.vue'
......@@ -55,10 +57,11 @@
},
data() {
return {
projectCode:"",
projectName:"",
file:[],
companyId:"",
classify:"",
projectCode: "",
projectName: "",
file: [],
companyId: "",
projectId: 2,
content: '',
navs: ['确认中标人'],
......@@ -85,12 +88,13 @@
},
created() {
this.getcandidate();
this.projectCode=localStorage.getItem("projectCode")
this.projectName=localStorage.getItem("projectName")
this.getprojectClassify();
this.projectCode = localStorage.getItem("projectCode")
this.projectName = localStorage.getItem("projectName")
},
methods: {
getfile(val){
this.file=val
getfile(val) {
this.file = val
},
back() {
this.$router.go(-1)
......@@ -116,14 +120,27 @@
console.log(e)
}
},
// 获取项目分类
async getprojectClassify() {
let projectId = localStorage.getItem("projectId");
try {
const {
data,
code
} = await projectClassify(projectId)
this.classify=data;
} catch (e) {
console.log(e)
}
},
// 提交中标人
async submitData() {
try {
let data={};
data.projectId=localStorage.getItem("projectId")
data.companyId=this.companyId
data.remark=this.remark;
data.fileList=this.file;
let data = {};
data.projectId = localStorage.getItem("projectId")
data.companyId = this.companyId
data.remark = this.remark;
data.fileList = this.file;
const {
msg,
code
......
......@@ -14,7 +14,8 @@
<div class="flex-between">
<div class="flex">
<div class="adjustment">上传附件:</div>
<singleUpload tips="支持上传1个附件,不超过20M"></singleUpload>
<singleUpload :limit="1" tip="支持上传1个附件,不超过20M" @input="getfile"></singleUpload>
</div>
<div>发布媒体:捷安采官网</div>
</div>
......@@ -51,7 +52,7 @@
<el-dialog :visible.sync="dialogFormVisible" title="收货地址" width="30%">
<el-form :model="form">
<el-form-item label-width="120px" label="输入中标价">
<el-input v-model="form.price" type="number" autocomplete="off"></el-input>
<el-input-number v-model="form.price" :min="0" :controls="false" :precision="2" placeholder="输入"></el-input-number>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
......@@ -64,7 +65,8 @@
<script>
import {
createwin,winPersonInfo
createwin,
winPersonInfo
} from '@api/purchaser/bid'
import {
quillEditor
......@@ -74,23 +76,23 @@
import 'quill/dist/quill.bubble.css'
import dataTable from '@components/nopageTable.vue'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import singleUpload from '@components/Upload/singleUpload.vue'
import singleUpload from '@components/Upload/Upload.vue'
export default {
components: {
dataTable,
dataBreadcrumb,
singleUpload,
singleUpload,
quillEditor
},
data() {
return {
projectCode:"",
projectName:"",
projectCode: "",
projectName: "",
editorOption: {},
file: [],
ruleForm: {
title: '',
content: ''
content: '',
accessoryPOList:[]
},
rules: {
title: [{
......@@ -108,13 +110,12 @@
price: ''
},
dialogFormVisible: false,
remark: '',
breads: ['招标管理', '招标项目管理', '工作台'],
tableData: [],
columns: [{
label: '中标人',
prop: 'bidPerson'
prop: 'companyName'
},
{
label: '中标价(元)',
......@@ -128,32 +129,32 @@
},
methods: {
getfile(val) {
this.file = val
this.ruleForm.accessoryPOList = val
},
edit(row) {
this.dialogFormVisible = true
this.form = row
},
// 中标人列表
async getwinPersonInfo() {
try {
let projectId=localStorage.getItem("projectId")
const {
data,
code
} = await winPersonInfo(projectId)
this.tableData=data
} catch (e) {
console.log(e)
}
},
async getwinPersonInfo() {
try {
let projectId = localStorage.getItem("projectId")
const {
data,
code
} = await winPersonInfo(projectId)
this.tableData.push(data)
} catch (e) {
console.log(e)
}
},
async submitData() {
try {
const valid = await this.$refs['ruleForm'].validate()
if (valid) {
let ruleForm = this.ruleForm;
ruleForm.projectId = localStorage.getItem("projectId")
ruleForm.accessoryPOList = this.file
ruleForm.price=this.tableData[0].price
const {
code,
msg
......@@ -174,11 +175,11 @@
}
}
},
created() {
this.projectCode=localStorage.getItem("projectCode")
this.projectName=localStorage.getItem("projectName")
this.getwinPersonInfo();
}
created() {
this.projectCode = localStorage.getItem("projectCode")
this.projectName = localStorage.getItem("projectName")
this.getwinPersonInfo();
}
}
</script>
......
......@@ -12,18 +12,18 @@
<div>项目名称:{{projectName}}</div>
</div>
<div class="flex-between">
<div>日期:{{ date }}</div>
<div>中标金额:100.00元</div>
<div>日期:{{ winDate}}</div>
<div>中标金额:{{money}}</div>
</div>
<div>
<div class="flex" style="margin-bottom:50px">
<div >上传附件:</div>
<div class="adjustment">上传附件:</div>
<singleUpload :limit='1' tip="支持上传一个pdf格式文件,大小不超过100M。" accept='.pdf' @input="getfile"></singleUpload>
</div>
<div>
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="120px" class="demo-ruleForm">
<el-form-item label="中标通知书编号" prop="number">
<el-input v-model="ruleForm.number" placeholder="请输入"></el-input>
<el-input v-model="ruleForm.number" placeholder="请输入" oninput="value=value.replace(/[^\d]/g,'')"></el-input>
</el-form-item>
</el-form>
</div>
......@@ -38,7 +38,6 @@
</template>
<script>
import {getTime } from '@utils/time'
import { editSentBook} from '@api/purchaser/bid'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
......@@ -50,11 +49,14 @@ export default {
},
data() {
return {
money:"",
winDate:"",
projectCode:"",
projectName:"",
resultId:"",
ruleForm: {
number: ''
number: '',
fileList:[]
},
rules: {
number: [{
......@@ -63,14 +65,13 @@ export default {
trigger: 'blur'
}]
},
date: '',
breads: ['招标管理', '招标项目管理', '工作台']
}
},
created() {
let date=getTime();
this.date=date.substring(0,9)
this.resultId=this.$route.query.id;
this.money=this.$route.query.money
this.winDate=this.$route.query.winDate
this.projectCode=localStorage.getItem("projectCode")
this.projectName=localStorage.getItem("projectName")
},
......@@ -87,13 +88,22 @@ export default {
const valid = await this.$refs['ruleForm'].validate()
if (valid) {
let ruleForm=this.ruleForm;
ruleForm.resultId=this.resultId
ruleForm.id=this.resultId
ruleForm.projectId=localStorage.getItem("projectId")
ruleForm.companyId=localStorage.getItem("companyId")
const { code,msg } = await editSentBook(ruleForm);
if (code === 2000) {
this.$success.success(msg)
}
if (code === 200) {
this.$message({
message: msg,
type: 'success',
duration:1500
})
setTimeout(()=>{
this.$router.go(-1)
},1500)
}else{
this.$message.error(msg)
}
}
} catch (e) {
console.log(e)
......
<template>
<div >
<div class="content">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<changeNav :navs="navs"></changeNav>
<dataTable :table-data="tableData" :columns="columns" :is-pageobj="false" >
<el-table-column slot="code" label="中标通知书编号" align="center" fixed="right">
<template slot-scope="scope">
<div v-if="scope.row.code"></div>
<div v-else>(空)</div>
</template>
</el-table-column>
<el-table-column slot="operate" label="操作" align="center" fixed="right" width="150">
<template slot-scope="scope">
<el-button type="text" size="small" @click="edit(scope.row.id)">通知书编辑</el-button>
</template>
</el-table-column>
</dataTable>
<div class="button flex-center">
<el-button @click="back">返回</el-button>
<el-button type="primary">提交审核</el-button>
</div>
</div>
</div>
<div>
<div class="content">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<changeNav :navs="navs"></changeNav>
<dataTable :table-data="tableData" :columns="columns" :is-pageobj="false">
<el-table-column slot="code" label="中标通知书编号" align="center" fixed="right">
<template slot-scope="scope">
<div v-if="scope.row.code"></div>
<div v-else>(空)</div>
</template>
</el-table-column>
<el-table-column slot="operate" label="操作" align="center" fixed="right" width="150">
<template slot-scope="scope">
<el-button type="text" size="small" @click="edit(scope.row)">通知书编辑</el-button>
</template>
</el-table-column>
</dataTable>
<div class="button flex-center">
<el-button @click="back">返回</el-button>
<el-button type="primary" @click="submitData">提交审核</el-button>
</div>
</div>
</div>
</template>
<script>
import {sentBookList} from '@api/purchaser/bid'
import dataTable from '@components/nopageTable.vue'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import changeNav from '@components/changeNav.vue'
export default {
components: {
dataTable,
dataBreadcrumb,
changeNav
},
data() {
return {
projectId:2,
navs: ['中标通知书'],
breads: ['招标管理', '招标项目管理', '工作台'],
tableData: [],
columns: [{
label: '投标人',
prop: 'bidder'
},
{
slot: 'code'
},
{
label: '状态',
prop: 'state'
},
{
label: '接收人',
prop: 'receiver'
},
{
slot: 'operate'
}
], // 操作列
}
},
created() {
this.getsentBookList();
},
methods: {
edit(id) {
this.$router.push(`/purchaser/bid/bidSure/winBid/edit?id=${id}`)
},
back() {
this.$router.go(-1)
},
async getsentBookList() {
try {
let projectId=localStorage.getItem("projectId");
const {
data,
code
} = await sentBookList(projectId)
if (code === 200) {
for(let item of data){
item.bidder="杭州光海科技有限公司"
item.receiver="杭州泰基科技有限公司"
if(item.status==0){
item.state="未审核"
}else if(item.status==1){
item.state="审核通过"
}else{
item.state="未审核"
import {
sentBookList,
sentBookAduit
} from '@api/purchaser/bid'
import dataTable from '@components/nopageTable.vue'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import changeNav from '@components/changeNav.vue'
export default {
components: {
dataTable,
dataBreadcrumb,
changeNav
},
data() {
return {
projectId: 2,
navs: ['中标通知书'],
breads: ['招标管理', '招标项目管理', '工作台'],
tableData: [],
columns: [{
label: '投标人',
prop: 'companyName'
},
{
slot: 'code'
},
{
label: '状态',
prop: 'state'
},
{
label: '接收人',
prop: 'companyName'
},
{
slot: 'operate'
}
], // 操作列
}
},
created() {
this.getsentBookList();
},
methods: {
edit(row) {
this.$router.push(`/purchaser/bid/bidSure/winBid/edit?id=${row.id}&winDate=${row.winDate}&money=${row.money}`)
},
back() {
this.$router.go(-1)
},
// 获取列表
async getsentBookList() {
try {
let projectId = localStorage.getItem("projectId");
const {
data,
code
} = await sentBookList(projectId)
if (code === 200) {
for (let item of data) {
if (item.status == 0) {
item.state = "未审核"
} else if (item.status == 1) {
item.state = "通过审核"
} else if (item.status == 2) {
item.state = "未通过审核"
} else if (item.status == -1) {
item.state = "暂存本地"
}
}
this.tableData = data
}
} catch (e) {
console.log(e)
}
this.tableData = data
}
} catch (e) {
console.log(e)
}
}
}
}
},
async submitData() {
try {
let projectId = localStorage.getItem("projectId")
const {
msg,
code
} = await sentBookAduit(projectId)
if (code == 200) {
this.$message({
message: msg,
type: 'success',
duration: 1500
})
setTimeout(() => {
this.$router.go(-1)
}, 1500)
} else {
this.$message.error(msg)
}
} catch (e) {
console.log(e)
}
}
}
}
</script>
<style scoped>
.button{
.button {
width: 100%;
height: 400px;
}
......
......@@ -99,18 +99,18 @@
</el-form-item>
</div>
<div class="flex-between">
<el-form-item label="标书费结算账号:" prop="account">
<el-form-item label="保证金结算账号:" prop="account">
<el-input v-model.trim="earnestInfoPO.account" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="标书费结算开户行:" prop="bank">
<el-form-item label="保证金结算开户行:" prop="bank">
<el-input v-model.trim="earnestInfoPO.bank" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
</div>
<div class="flex-between">
<el-form-item label="标书费结算账户名:" prop="accountName">
<el-form-item label="保证金结算账户名:" prop="userName">
<el-input v-model.trim="earnestInfoPO.accountName" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="标书费结算联系电话:" prop="phone">
<el-form-item label="保证金结算联系电话:" prop="phone">
<el-input v-model.trim="earnestInfoPO.phone" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
</div>
......@@ -440,7 +440,7 @@ export default {
purchaseAgent: '',
industry: '',
region: '',
minTender: '',
minTender: 3,
contacts: '',
contactsWay: '',
// 招标方式
......@@ -582,10 +582,11 @@ export default {
// 获取项目经理
async userList() {
let id=localStorage.getItem("companyId")
const {
code,
data
} = await userList(1)
} = await userList(id)
if (code === 200) {
this.managers = data
}
......
......@@ -6,19 +6,20 @@
<h5>查看询价公告</h5>
</div>
<div class="content">
<priceDetail></priceDetail>
<div class='form'>
<h3>参与报价供应商情况</h3>
<dataTable :table-data="Bidderlist" :columns="offerBiddercolumns" :is-index="true">
<el-table-column slot="operate" label="操作" align="center" fixed="right" width="200">
<template slot-scope="scope">
<el-button type="text" size="small" @click="see(scope.row.companyId)">查看报价明细</el-button>
</template>
</el-table-column>
</dataTable>
<div class="centerButton">
<el-button type="primary" @click="back">返回</el-button>
</div>
<priceDetail>
<slot>
<h3>参与报价供应商情况</h3>
<dataTable :table-data="Bidderlist" :columns="offerBiddercolumns" :is-index="true">
<el-table-column slot="operate" label="操作" align="center" fixed="right" width="200">
<template slot-scope="scope">
<el-button type="text" size="small" @click="see(scope.row.companyId)">查看报价明细</el-button>
</template>
</el-table-column>
</dataTable>
</slot>
</priceDetail>
<div class="centerButton">
<el-button type="primary" @click="back">返回</el-button>
</div>
</div>
<el-dialog title="收货地址" :visible.sync="dialogFormVisible">
......
......@@ -100,7 +100,9 @@ export default {
type: 'success'
})
this.$router.go(-1)
}
}else{
this.$message.error(msg)
}
}
} catch (err) {
console.log(err)
......
......@@ -29,7 +29,7 @@
</el-form-item>
<div class="flex-between" style="width:60%">
<el-form-item label="询价单编号" prop="inquiryCode">
<el-input v-model.trim="ruleForm.inquiryCode" placeholder="请输入" maxlength="30" style="width: 250px;"></el-input>
<el-input v-model.trim="ruleForm.inquiryCode" onkeyup="value=value.replace(/[^\d]/g,'')" placeholder="请输入" maxlength="30" style="width: 250px;"></el-input>
</el-form-item>
<el-form-item label="采购目录" prop="purchaseCategory">
<el-input v-model.trim="ruleForm.purchaseCategory" placeholder="请输入" maxlength="30" style="width: 250px;"></el-input>
......@@ -338,7 +338,7 @@ export default {
setTimeout(()=>{
this.$router.go(-1)
},1500)
}else if(code == 500){
}else{
this.$message.error(msg)
}
}
......
......@@ -22,7 +22,7 @@
</div>
</div>
<div class="bottomButton">
<el-button>取消</el-button>
<el-button @click="back">取消</el-button>
<el-button type="primary" @click="submit">提交审核</el-button>
</div>
</div>
......@@ -78,6 +78,9 @@ export default {
}
},
methods: {
back(){
this.$router.go(-1)
},
cancel() {
this.$router.go(-1)
},
......
......@@ -3,25 +3,33 @@
<div class="content">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<changeNav :navs="navs"></changeNav>
<h1>项目状态:项目待审核</h1>
<h1>项目状态:{{remark}}</h1>
<div class="flex state">
<ul class="flex-left">
<!-- <ul class="flex-left">
<li v-for="(item,index) in states" :key="index" class="flex">
<div>{{ item.title }}</div>
<ul class="inside flex">
<li v-for="(mods,index) in item.modulars" :key="index" class="flex-center">
<!-- <div :class="[mods=='项目信息'||mods=='项目终止'?'active':'']">{{ mods }}</div> -->
<div class="active" @click="jump(mods.label,mods.url)">{{ mods.label }}</div>
</li>
</ul>
</li>
</ul>
</ul> -->
<ul class="flex">
<li v-for="(item,index) in states" :key="index" >
<el-button type="primary" @click="jump(item.button,item.uri)">{{ item.button }}</el-button>
</li>
</ul>
</div>
<div class="centerButton">
<el-button type="primary" @click="back">返回</el-button>
</div>
</div>
</div>
</template>
<script>
import { projectConsole} from '@api/purchaser/bid'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import changeNav from '@components/changeNav.vue'
export default {
......@@ -31,136 +39,16 @@ export default {
},
data() {
return {
states:[],
breads: ['招标管理', '招标项目管理 ', '工作台'],
navs: ['工作台'],
states: [{
title: '公告',
modulars:[{
label:"变更公告管理",
url:"/purchaser/bid/bidStage/changeList"
},
{
label:"流标公告管理",
url:"/purchaser/bid/bidStage/failList"
}]
},
{
title: '招标',
modulars:[
{
label:"发布询价公告",
url:"/purchaser/bid/reviewed/inquiryAnnouncement"
},
{
label:"查看询价公告",
url:"/purchaser/bid/reviewed/SeeinquiryAnnouncement"
},
{
label:"发布招标公告",
url:"/purchaser/bid/reviewed/tenderAnnouncement"
},
{
label:"查看招标公告",
url:"/purchaser/bid/reviewed/SeetenderAnnouncement"
},
{
label:"发布投标邀请书",
url:"/purchaser/bid/reviewed/bidInvitation"
},
{
label:"招标文件澄清管理",
url:"/purchaser/bid/bidStage/clearManagement"
}]
},
{
title: '投标',
modulars: [{
label:"投标信息查看",
url:"/purchaser/bid/bidStage/tenderInformationlist"
}]
},
{
title: '开标',
modulars: [{
label:"开标设置",
url:"/purchaser/bid/bidStage/bidSet"
},
{
label:"开标大厅",
url:"/purchaser/bid/bidOpen/bidOpenhal"
},
{
label:"开标过程记录查看",
url:"/purchaser/bid/bidEvaluation/hallInformation"
}]
},
{
title: '评标',
modulars: [
{
label:"专家评审",
url:"/purchaser/bid/bidEvaluation/review/review"
},
{
label:"项目经理",
url:"/purchaser/bid/bidEvaluation/projectManager/content"
},
{
label:"评标查看",
url:"/purchaser/bid/bidSure/see"
}]
},
{
title: '定标',
modulars: [
{
label:"中标候选人公示",
url:"/purchaser/bid/bidSure/publicity"
},
{
label:"确定中标人",
url:"/purchaser/bid/bidSure/determine"
},
{
label:"重新确定中标人",
url:"/purchaser/bid/bidSure/determine"
},
{
label:"发布中标公告",
url:"/purchaser/bid/bidSure/notice"
},
{
label:"中标通知书处理",
url:"/purchaser/bid/bidSure/winBid/list"
},
{
label:"合同管理",
url:"/purchaser/bid/bidSure/contract"
}]
},
{
title: '费用',
modulars: [{
label:"标书费缴纳管理",
url:"/purchaser/bid/bidStage/tenderFeelist"
},
{
label:"保证金缴纳管理",
url:"/purchaser/bid/bidStage/bondList"
}]
},
{
title: '功能',
modulars: [{
label:"项目终止",
url:""
}]
}
]
remark:""
}
},
methods: {
back(){
this.$router.go(-1)
},
async jump(label,url){
console.log(label,url)
if(label=="项目终止"){
......@@ -174,7 +62,30 @@ export default {
}else{
this.$router.push(url)
}
}
},
async getprojectConsole() {
try {
let message={}
message.projectId=localStorage.getItem("projectId")
message.type=1
const {
data,
msg,
code
} = await projectConsole(message)
if(code==200){
this.states=data
this.remark=data[0].remark
}else{
this.$message.error(msg)
}
} catch (e) {
console.log(e)
}
}
},
created() {
this.getprojectConsole()
}
}
</script>
......@@ -182,10 +93,19 @@ export default {
<style scoped>
.state {
margin-top: 30px;
margin-left: 50px;
/* margin-left: 50px; */
}
.state>ul{
flex-wrap: wrap;
}
.state>ul>li{
margin-right: 50px;
margin-bottom: 50px;
cursor: pointer;
}
.flex-left>li {
/* .flex-left>li {
font-weight: bold;
font-size: 20px;
height: 50px;
......@@ -210,5 +130,5 @@ export default {
}
.inside>li>.active{
background: #2288EE
}
} */
</style>
......@@ -28,7 +28,7 @@
</div>
</div>
<div class="hal-center">
<ul>
<ul id="chatRecord1">
<li v-for="(item,index) in halList" :key="index" class="flex-item">
<div>{{ item.time }}</div>
<div>{{ item.role }}</div>
......@@ -44,7 +44,7 @@
</div>
<!-- 在线对话 -->
<div class="dialogue" style="margin-top: 30px;" v-show="dialogue">
<ul class="dialogueList" id="chatContainer">
<ul class="dialogueList" id="chatRecord">
<li v-for="(item,index) in dialogueList" :key="index" :class="myId==item.userId?'flex-left':'flex-right'">
<div>
<div class="flex-item">
......@@ -56,7 +56,7 @@
</div>
</li>
</ul>
<el-input placeholder="请输入内容" v-model.trim="content" clearable @keyup.enter.native="send" maxlength="30">
<el-input placeholder="请输入内容" v-model="content" clearable @keyup.enter.native="send" maxlength="30">
</el-input>
</div>
</div>
......@@ -192,13 +192,6 @@
myId:""
}
},
watch: {
chatlog() {
var container = this.$el.querySelector("#chatContainer");
console.log(container);
container.scrollTop = container.scrollHeight;
}
},
mounted() {
this.add()
},
......@@ -225,8 +218,8 @@
createWebSocket() {
let token=localStorage.getItem("token")
let projectId = localStorage.getItem("projectId")
this.websocket = new WebSocket('ws://192.168.3.35:8085/webSocket/' + projectId +"/"+token )
// this.websocket = new WebSocket('ws://60.205.251.80:8085/webSocket/' + projectId +"/"+token )
// this.websocket = new WebSocket('ws://192.168.3.35:8085/webSocket/' + projectId +"/"+token )
this.websocket = new WebSocket('ws://60.205.251.80:8085/webSocket/' + projectId +"/"+token )
// 连接成功时
this.websocket.onopen = () => {}
this.websocket.onmessage = event => {
......@@ -253,8 +246,12 @@
})
},
send() {
let content = this.content;
let content = this.content;
if(content.split(" ").join("").length == 0){
this.$message.error("请输入内容")
}else{
this.websocket.send(content)
}
},
back() {
this.$router.go(-1)
......@@ -345,6 +342,13 @@
}
},
},
updated(){
// 聊天定位到底部
let ele = document.getElementById('chatRecord');
ele.scrollTop = ele.scrollHeight;
let ele1 = document.getElementById('chatRecord1');
ele1.scrollTop = ele1.scrollHeight;
},
destroyed() {
//清除定时器
clearInterval(this.timer1);
......
......@@ -6,92 +6,22 @@
<h5>查看项目信息</h5>
</div>
<div class="othercontent">
<div class="message">
<!-- 基本信息 -->
<div>
<div class="describe">基本信息</div>
<div class="message-form">
<div>项目名称:{{projectdetail.projectName}} </div>
<div class="flex-between">
<div>项目编号:{{projectdetail.projectCode}}</div>
<div>项目分类:{{projectdetail.classify}}</div>
</div>
<div class="flex-between">
<div>采购单位:{{projectdetail.purchaseAgent}}</div>
<div>项目归属行业:{{projectdetail.industry}}</div>
</div>
<div class="flex-between">
<div>项目归属地区:{{projectdetail.local}}</div>
<div>最小投标单位数:{{projectdetail.minTender}}</div>
</div>
<div class="flex-between">
<div>招标联系人:{{projectdetail.contacts}}</div>
<div>联系方式:{{projectdetail.contactsWay}}</div>
</div>
</div>
</div>
<!-- 标书费用 -->
<div>
<div class="describe">标书费用信息</div>
<div class="message-form">
<div class="flex-between">
<div>标书费结算账号:{{projectdetail.account}}</div>
<div>标书费结算开户行:{{projectdetail.bank}}</div>
</div>
<div class="flex-between">
<div>标书费结算账户名:{{projectdetail.accountName}}</div>
<div>标书费结算联系电话:{{projectdetail.phone}} </div>
</div>
</div>
</div>
<!-- 保证金费用 -->
<div>
<div class="describe">保证金费用信息</div>
<div class="message-form">
<div>是否需要投标保证金:{{projectdetail.isNeedEarnest}}</div>
<div>投标保证金金额:{{projectdetail.money}}</div>
<div class="flex-between">
<div>投标保证金结算账号:{{projectdetail.account}}</div>
<div>投标保证金结算开户行:{{projectdetail.bank}}</div>
</div>
<div class="flex-between">
<div>投标保证金结算账户名:{{projectdetail.accountName}}</div>
<div>投标保证金结算联系电话:{{projectdetail.phone}} </div>
</div>
</div>
</div>
<div>
<div class="describe">标的需求</div>
<dataTable :table-data="tableData" :columns="columns" :margin-top="10" :margin-bottom="0">
<el-table-column slot="operate" label="操作" align="center" fixed="right" width="100">
<template slot-scope="scope">
<el-button type="text" size="small" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</dataTable>
</div>
<div class="button">
<el-button @click="back">返回</el-button>
</div>
</div>
<projectDetail></projectDetail>
</div>
</div>
</template>
<script>
import { projectdetail,timeInfo} from '@api/supply/bid'
import dataTable from '@components/nopageTable.vue'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import projectDetail from '@components/detail/projectDetail.vue'
export default {
components: {
dataTable,
dataBreadcrumb
dataBreadcrumb,
projectDetail
},
data() {
return {
projectdetail:"",
projectdetail:"",
breads: ['投标管理', '我参与的项目', '工作台 '],
nav: ['供应商'],
dialogFormVisible: false,
......@@ -100,44 +30,6 @@ export default {
belongTypes: [],
projectTypes: [],
textarea: '',
tableData: [],
columns: [{
label: '标的编码',
prop: 'code'
},
{
label: '标的名称',
prop: 'name'
},
{
label: '数量',
prop: 'number'
},
{
label: '计量单位',
prop: 'meter'
},
{
label: '品牌',
prop: 'brand'
},
{
label: '规格型号',
prop: 'model'
},
{
label: '标杆价(元)',
prop: 'price'
},
{
label: '备注',
prop: 'remark'
},
{
slot: 'operate'
}
],
ruleForm: {
projectName: '',
projectCode: '',
......@@ -163,60 +55,9 @@ export default {
computed: {
},
created() {
this.getprojectdetail()
this.gettimeInfo()
},
methods: {
async getprojectdetail() {
let projectId=localStorage.getItem("projectId")
const {data} = await projectdetail(projectId)
this.projectdetail=data
},
async gettimeInfo() {
let projectId=localStorage.getItem("projectId")
const {data} = await timeInfo(projectId)
this.timeInfo=data
},
back(){
this.$router.go(-1)
}
}
}
</script>
<style scoped>
.message>div {
background: #fff;
margin-bottom: 30px;
}
.message-form>div {
margin-bottom: 10px
}
.message-form {
width: 80%;
margin: 0 auto
}
.message-form {
padding-bottom: 15px;
}
.message {
background: #F0F2F5;
}
.button {
display: flex;
justify-content: flex-end;
padding: 10px 20px;
}
.bid {
margin-bottom: 20px;
}
</style>
......@@ -32,7 +32,10 @@
methods: {
Prev() {
this.$router.push('/supply/Join_items/work_place/all_content')
}
},
back() {
this.$router.go(-1)
},
},
}
</script>
......
......@@ -114,6 +114,7 @@
data,
code
} = await contractdetail(projectId)
this.form=data
}
},
created() {
......
......@@ -3,25 +3,33 @@
<div class="content">
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<changeNav :navs="navs"></changeNav>
<h1>项目状态:项目待审核</h1>
<h1>项目状态:{{remark}}</h1>
<div class="flex state">
<ul class="flex-left">
<!-- <ul class="flex-left">
<li v-for="(item,index) in states" :key="index" class="flex">
<div>{{ item.title }}</div>
<ul class="inside flex">
<li v-for="(mods,index) in item.modulars" :key="index" class="flex-center">
<!-- <div :class="[mods=='项目信息'||mods=='项目终止'?'active':'']">{{ mods }}</div> -->
<div class="active" @click="jump(mods.label,mods.url)">{{ mods.label }}</div>
</li>
</ul>
</li>
</ul>
</ul> -->
<ul class="flex">
<li v-for="(item,index) in states" :key="index" >
<el-button type="primary" @click="jump(item.button,item.uri)">{{ item.button }}</el-button>
</li>
</ul>
</div>
<div class="centerButton">
<el-button type="primary" @click="back">返回</el-button>
</div>
</div>
</div>
</template>
<script>
import { projectConsole} from '@api/purchaser/bid'
import dataBreadcrumb from '@components/dataBreadcrumb.vue'
import changeNav from '@components/changeNav.vue'
export default {
......@@ -33,104 +41,14 @@ export default {
return {
breads: ['投标管理', '我参与的项目 ', '工作台'],
navs: ['工作台'],
states: [{
title: '公告',
modulars:[{
label:"变更公告管理",
url:"/supply/bid/joinProject/bidStage/changeList"
},
{
label:"流标公告管理",
url:"/supply/bid/joinProject/bidStage/failList"
}]
},
{
title: '招标',
modulars:[
{
label:"项目信息",
url:"/supply/bid/joinProject/bidStage/projectInformation"
},
{
label:"查看询价公告",
url:"/supply/bid/joinProject/bidStage/seePrice"
},
{
label:"查看招标公告",
url:"/supply/bid/signupOnline/seeAnnouncement"
},
{
label:"招标文件下载",
url:"/supply/bid/joinProject/bidStage/fileDownload"
},
{
label:"招标文件澄清管理",
url:"/supply/bid/joinProject/bidStage/clearManagement"
}]
},
// 下面的没配置
{
title: '投标',
modulars: [{
label:"递交投标文件",
url:"/supply/bid/joinProject/bidSubmit/bidSubmit"
}]
},
{
title: '开标',
modulars: [
{
label:"参与开标",
url:"/supply/bid/joinProject/bidOpen/bidOpenhal"
}]
},
{
title: '评标',
modulars: [{
label:"评标问题澄清",
url:"/supply/bid/joinProject/bidEvaluation/evaluationList"
}]
},
{
title: '定标',
modulars: [{
label:"中标候选人公示查看",
url:"/supply/bid/joinProject/bidSure/candidateSee"
},
{
label:"中标公告查看",
url:"/supply/bid/joinProject/bidSure/noticeSee"
},
{
label:"中标通知书查看",
url:"/supply/bid/joinProject/bidSure/bidwinAdvice"
},
{
label:"招标结果通知书查看",
url:"/supply/bid/joinProject/bidSure/bidresultAdvice"
},
{
label:"合同管理",
url:"/supply/bid/joinProject/bidSure/contractManagement"
}]
},
{
title: '费用',
modulars: [{
label:"标书费缴纳管理",
url:"/supply/bid/joinProject/bidStage/tenderFee"
},
{
label:"保证金缴纳管理",
url:"/supply/bid/joinProject/bidStage/bond"
}]
},
]
states: [],
remark:""
}
},
methods: {
back(){
this.$router.go(-1)
},
async jump(label,url){
console.log(label,url)
if(label=="项目终止"){
......@@ -144,7 +62,29 @@ export default {
}else{
this.$router.push(url)
}
}
},
async getprojectConsole() {
try {
let message={}
message.projectId=localStorage.getItem("projectId")
message.type=2
const {
data,
code
} = await projectConsole(message)
if(code==200){
this.states=data
this.remark=data[0].remark
}else{
this.$message.error(msg)
}
} catch (e) {
console.log(e)
}
}
},
created() {
this.getprojectConsole()
}
}
</script>
......@@ -152,10 +92,19 @@ export default {
<style scoped>
.state {
margin-top: 30px;
margin-left: 50px;
/* margin-left: 50px; */
}
.state>ul{
flex-wrap: wrap;
}
.state>ul>li{
margin-right: 50px;
margin-bottom: 50px;
cursor: pointer;
}
.flex-left>li {
/* .flex-left>li {
font-weight: bold;
font-size: 20px;
height: 50px;
......@@ -180,5 +129,5 @@ export default {
}
.inside>li>.active{
background: #2288EE
}
} */
</style>
......@@ -3,10 +3,13 @@
<div class="content">
<div>
<dataBreadcrumb :breads="breads"></dataBreadcrumb>
<noticeDetail></noticeDetail>
<noticeDetail>
<slot>
<div @click="jump" class="jump">项目报价</div>
</slot>
</noticeDetail>
</div>
<div class="info_box">
<div @click="jump" class="jump">项目报价</div>
<el-row>
<el-button @click="back">返回</el-button>
<el-button type="primary" @click="signup">报名</el-button>
......
......@@ -337,6 +337,11 @@ export default new Router({
show: true,
component: () => import('../pages/purchaser/bid/bidStage/bidSet.vue')
},
{
path: '/purchaser/bid/bidStage/projectInformation',
show: true,
component: () => import('../pages/purchaser/bid/bidStage/projectInformation.vue')
},
{
path: '/purchaser/bid/bidStage/clearManagement/propose',
show: true,
......
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 to comment