Commit b2fb0d15 authored by 张冬's avatar 张冬

联调

parent a42528a9
<template> <template>
<div> <div>
<div class="content"> <div class="content">
<dataBreadcrumb :breads="breads"></dataBreadcrumb> <dataBreadcrumb :breads="breads"></dataBreadcrumb>
<div>中国标准时间:{{ currentTime }}</div> <div>中国标准时间:{{ currentTime }}</div>
<div class="hal"> <div class="hal">
<h2 style="text-align: center;">育才小学大楼翻新项目开标大厅</h2> <h2 style="text-align: center;">育才小学大楼翻新项目开标大厅</h2>
<div class="time-message flex-between"> <div class="time-message flex-between">
<div class="flex"> <div class="flex">
<p>截标倒计时:</p> <p>截标倒计时:</p>
<timeDown :remain-time="remaintime" @countDowmEnd="remaintimeEnd"></timeDown> <timeDown :remain-time="remaintime" @countDowmEnd="remaintimeEnd"></timeDown>
</div>
<div class="flex" v-show="decodeTime">
<p>解密倒计时:</p>
<timeDown :remain-time="decodeTime" @countDowmEnd="decodeTimeEnd"></timeDown>
</div>
<div class="flex" v-show="signatureTime">
<p>签名倒计时:</p>
<timeDown :remain-time="signatureTime" @countDowmEnd="signatureTimeEnd"></timeDown>
</div>
</div>
<div class="flex">
<div class="hal-left">
<div>
<h1>签到{{leftmessage.signIn}}</h1>
<h1>解密{{leftmessage.decode}}</h1>
<h1>签名{{leftmessage.signature}}</h1>
</div>
<div @click="isMessge=true">签到解密签名情况</div>
</div>
<div class="hal-center">
<ul>
<li v-for="(item,index) in halList" :key="index" class="flex">
<div>{{item.time}}</div>
<div>{{item.name}}</div>
<div>{{item.behavior}}</div>
</li>
</ul>
</div>
<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>
</div>
</div>
<!-- 在线对话 -->
<div class="dialogue" style="margin-top: 30px;" v-show="dialogue">
<ul class="dialogueList">
<li v-for="(item,index) in dialogueList" :key="index">
<div class="flex-item">
<div v-if="myId==item.userId"></div>
<div v-else>{{item.name}}</div>
<div>({{item.time}})</div>
</div> </div>
<div>{{item.chatContent}}</div> <div class="flex" v-show="decodeTime">
</li> <p>解密倒计时:</p>
</ul> <timeDown :remain-time="decodeTime" @countDowmEnd="decodeTimeEnd"></timeDown>
<el-input </div>
placeholder="请输入内容" <div class="flex" v-show="signatureTime">
v-model="content" <p>签名倒计时:</p>
clearable <timeDown :remain-time="signatureTime" @countDowmEnd="signatureTimeEnd"></timeDown>
@keyup.enter.native="send" </div>
> </div>
</el-input> <div class="flex">
</div> <div class="hal-left">
</div> <div>
<!-- 最下面一栏 --> <h1>签到{{leftmessage.signIn}}</h1>
<div class="flex-between buttons"> <h1>解密{{leftmessage.decode}}</h1>
<el-button @click="isfailInfo=true" v-if="isfail">流标</el-button> <h1>签名{{leftmessage.signature}}</h1>
<el-button @click="failDetail" v-else>流标信息</el-button> </div>
<div> <div @click="isMessge=true">签到解密签名情况</div>
<el-button icon="el-icon-refresh">刷新</el-button> </div>
<el-button>下发开标一览表</el-button> <div class="hal-center">
<el-button @click="isopenInfo=true">查看开标一览表</el-button> <ul>
</div> <li v-for="(item,index) in halList" :key="index" class="flex">
<el-button @click="back">退出大厅<i class="el-icon-right"></i></el-button> <div>{{item.time}}</div>
</div> <div>{{item.name}}</div>
</div> <div>{{item.behavior}}</div>
<!--确认开标窗口 --> </li>
<el-dialog :visible.sync="isOpenbid" title="确认开标" width="35%"> </ul>
<div class="flex bid-message" style="width: 70%;margin:0 auto"> </div>
<div>项目编号:{{projectCode}}</div> <div class="hal-right">
<div>项目名称:{{ projectName}}</div> <el-button @click=isdialogue>在线对话<i class="el-icon-chat-dot-round"></i></el-button>
<div style="margin-right:120px;">投标 :{{startDetail.bidFileCount}}</div> <div class="button-pos">
<div> 纳保证金人数:{{startDetail.earnestFeeCount}}</div> <el-button v-if="openbidButton" type="primary" @click="confirm" style="margin-left: 10px;">立即开标</el-button>
<div>签到人数:{{startDetail.signInCount}}</div> <!-- <el-button v-else type="info" style="margin-left: 10px;">{{ buttonWords }}</el-button> -->
</div> <el-button v-if="endbidButton" type="primary" @click="end" style="margin-top: 10px;">结束开标</el-button>
<div slot="footer" class="dialog-footer"> </div>
<el-button @click="isOpenbid = false">取消开标</el-button> </div>
<el-button type="primary" @click="openbid">确定开标 </el-button> <!-- 在线对话 -->
</div> <div class="dialogue" style="margin-top: 30px;" v-show="dialogue">
</el-dialog> <ul class="dialogueList">
<!-- 详细信息 --> <li v-for="(item,index) in dialogueList" :key="index" :class="myId==item.userId?'flex-left':'flex-right'">
<el-dialog :visible.sync="isMessge" title="详细信息" width="60%"> <div>
<dataTable :columns="columns" :page-obj="pageObj" :margin-top="0" :margin-bottom="0" url="/open-bid/sign/detail"> <div class="flex-item">
<el-table-column slot="operate" label="是否买断账期" align="center" fixed="right" > <div v-if="myId==item.userId"></div>
<template slot-scope="scope"> <div v-else>{{item.name}}</div>
<div v-if="scope.row.isPayment"></div> <div>({{item.time}})</div>
<div v-else></div> </div>
</template> <div>{{item.chatContent}}</div>
</el-table-column> </div>
<el-table-column slot="operate" label="是否递交投标文件" align="center" fixed="right" > </li>
<template slot-scope="scope"> </ul>
<div v-if="scope.row.bidFileId"></div> <el-input placeholder="请输入内容" v-model="content" clearable @keyup.enter.native="send">
<div v-else></div> </el-input>
</template> </div>
</el-table-column> </div>
<el-table-column slot="operate" label="签到" align="center" fixed="right" > <!-- 最下面一栏 -->
<template slot-scope="scope"> <div class="flex-between buttons">
<div v-if="scope.row.signIn"></div> <el-button @click="isfailInfo=true" v-if="isfail">流标</el-button>
<div v-else></div> <el-button @click="failDetail" v-else>流标信息</el-button>
</template> <div>
</el-table-column> <el-button icon="el-icon-refresh">刷新</el-button>
<el-table-column slot="operate" label="解密" align="center" fixed="right" > <el-button>下发开标一览表</el-button>
<template slot-scope="scope"> <el-button @click="isopenInfo=true">查看开标一览表</el-button>
<div v-if="scope.row.decode"></div> </div>
<div v-else></div> <el-button @click="back">退出大厅<i class="el-icon-right"></i></el-button>
</template> </div>
</el-table-column> </div>
<el-table-column slot="operate" label="签名" align="center" fixed="right" > <!--确认开标窗口 -->
<template slot-scope="scope"> <el-dialog :visible.sync="isOpenbid" title="确认开标" width="35%">
<div v-if="scope.row.signature"></div> <div class="flex bid-message" style="width: 70%;margin:0 auto">
<div v-else></div> <div>项目编号:{{projectCode}}</div>
</template> <div>项目名称:{{ projectName}}</div>
</el-table-column> <div style="margin-right:120px;">投标 :{{startDetail.bidFileCount}}</div>
</dataTable> <div> 纳保证金人数:{{startDetail.earnestFeeCount}}</div>
<div slot="footer" class="dialog-footer"> <div>签到人数:{{startDetail.signInCount}}</div>
<el-button @click="isMessge = false">关闭</el-button> </div>
</div> <div slot="footer" class="dialog-footer">
</el-dialog> <el-button @click="isOpenbid = false">取消开标</el-button>
<!-- 开标一览表 --> <el-button type="primary" @click="openbid">确定开标 </el-button>
<el-dialog :visible.sync="isopenInfo" title="开标一览表"> </div>
<nopageTable :tableData="tableData" :columns="nopagecolumns" :margin-top="0" :margin-bottom="0" > </el-dialog>
</nopageTable> <!-- 详细信息 -->
<div slot="footer" class="dialog-footer"> <el-dialog :visible.sync="isMessge" title="详细信息" width="60%">
<el-button @click="isopenInfo=false">关闭 </el-button> <dataTable :columns="columns" :page-obj="pageObj" :margin-top="0" :margin-bottom="0" url="/open-bid/sign/detail">
</div> <el-table-column slot="operate" label="是否买断账期" align="center" fixed="right">
</el-dialog> <template slot-scope="scope">
<!-- 流标框提交 --> <div v-if="scope.row.isPayment"></div>
<el-dialog :visible.sync="isfailInfo" title="流标"> <div v-else></div>
<el-form :model="form" :rules="rules" ref="form" label-width="100px"> </template>
<el-form-item label="操作人"> </el-table-column>
<div>{{userName}}</div> <el-table-column slot="operate" label="是否递交投标文件" align="center" fixed="right">
</el-form-item> <template slot-scope="scope">
<el-form-item label="流标原因" prop="reason"> <div v-if="scope.row.bidFileId"></div>
<el-input v-model="form.reason" ></el-input> <div v-else></div>
</el-form-item> </template>
<el-form-item label="上传附件" > </el-table-column>
<singleUpload :limit="1" :max="10" tip="支持上传1份附件,不差过10M." @input="getfile"></singleUpload> <el-table-column slot="operate" label="签到" align="center" fixed="right">
</el-form-item> <template slot-scope="scope">
</el-form> <div v-if="scope.row.signIn"></div>
<div slot="footer" class="dialog-footer"> <div v-else></div>
<el-button @click="isfailInfo = false">取 消</el-button> </template>
<el-button type="primary" @click="failbid">确 定</el-button> </el-table-column>
</div> <el-table-column slot="operate" label="解密" align="center" fixed="right">
</el-dialog> <template slot-scope="scope">
<!-- 流标详情 --> <div v-if="scope.row.decode"></div>
<el-dialog :visible.sync="isfailDetail" title="流标信息"> <div v-else></div>
<el-form :model="form" :rules="rules" ref="form" label-width="100px"> </template>
<el-form-item label="操作人"> </el-table-column>
<div>{{userName}}</div> <el-table-column slot="operate" label="签名" align="center" fixed="right">
</el-form-item> <template slot-scope="scope">
<el-form-item label="流标原因" prop="reason"> <div v-if="scope.row.signature"></div>
<div>{{faildetail.reason}}</div> <div v-else></div>
</el-form-item> </template>
<el-form-item label="上传附件" v-if="faildetail.fileName"> </el-table-column>
<div @click="down(faildetail.fileUrl)" >{{faildetail.fileName}}</div> </dataTable>
</el-form-item> <div slot="footer" class="dialog-footer">
</el-form> <el-button @click="isMessge = false">关闭</el-button>
<div slot="footer" class="dialog-footer"> </div>
<el-button @click="isfailDetail= false">取 消</el-button> </el-dialog>
</div> <!-- 开标一览表 -->
</el-dialog> <el-dialog :visible.sync="isopenInfo" title="开标一览表">
</div> <nopageTable :tableData="tableData" :columns="nopagecolumns" :margin-top="0" :margin-bottom="0">
</div> </nopageTable>
<div slot="footer" class="dialog-footer">
<el-button @click="isopenInfo=false">关闭 </el-button>
</div>
</el-dialog>
<!-- 流标框提交 -->
<el-dialog :visible.sync="isfailInfo" title="流标">
<el-form :model="form" :rules="rules" ref="form" label-width="100px">
<el-form-item label="操作人">
<div>{{userName}}</div>
</el-form-item>
<el-form-item label="流标原因" prop="reason">
<el-input v-model="form.reason"></el-input>
</el-form-item>
<el-form-item label="上传附件">
<singleUpload :limit="1" :max="10" tip="支持上传1份附件,不差过10M." @input="getfile"></singleUpload>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="isfailInfo = false">取 消</el-button>
<el-button type="primary" @click="failbid">确 定</el-button>
</div>
</el-dialog>
<!-- 流标详情 -->
<el-dialog :visible.sync="isfailDetail" title="流标信息">
<el-form :model="form" :rules="rules" ref="form" label-width="100px">
<el-form-item label="操作人">
<div>{{userName}}</div>
</el-form-item>
<el-form-item label="流标原因" prop="reason">
<div>{{faildetail.reason}}</div>
</el-form-item>
<el-form-item label="上传附件" v-if="faildetail.fileName">
<div @click="down(faildetail.fileUrl)">{{faildetail.fileName}}</div>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="isfailDetail= false">取 消</el-button>
</div>
</el-dialog>
</div>
</div>
</template> </template>
<script> <script>
import { import {
getTime getTime
} from '@utils/time' } from '@utils/time'
import { timeInfo,startInfo,openInfo,signdetail,startbid,openbidFailed,bidFaileddetail} from '@api/purchaser/bid' import {
import dataBreadcrumb from '@components/dataBreadcrumb.vue' timeInfo,
import timeDown from '@components/timeDown.vue' startInfo,
import dataTable from '@components/dataTable.vue' openInfo,
import nopageTable from '@components/nopageTable.vue' signdetail,
import singleUpload from '@components/Upload/Upload.vue' startbid,
export default { openbidFailed,
components: { bidFaileddetail
dataBreadcrumb, } from '@api/purchaser/bid'
timeDown, import dataBreadcrumb from '@components/dataBreadcrumb.vue'
dataTable, import timeDown from '@components/timeDown.vue'
nopageTable, import dataTable from '@components/dataTable.vue'
singleUpload import nopageTable from '@components/nopageTable.vue'
}, import singleUpload from '@components/Upload/Upload.vue'
data() { export default {
return { components: {
faildetail:"", dataBreadcrumb,
isfailDetail:false, timeDown,
projectCode:"", dataTable,
projectName:"", nopageTable,
userName:"", singleUpload
isfail:true,
rules: {
reason: [{
required: true,
message: '请输入',
trigger: 'blur'
}]
},
form:{
reason:'',
filePOList:[]
}, },
isfailInfo:false, data() {
endbidButton:false, return {
tableData:[], faildetail: "",
isopenInfo:false, isfailDetail: false,
startDetail:"", projectCode: "",
dialogue:false, projectName: "",
remaintime:"", userName: "",
storagedecodeTime:"", isfail: true,
storagesignatureTime:"", rules: {
decodeTime:"", reason: [{
signatureTime:"", required: true,
isMessge: false, message: '请输入',
pageObj: { trigger: 'blur'
size: 10, }]
currentPage: 1, },
func: (currentPage) => { form: {
this.pageTurning(currentPage) reason: '',
} filePOList: []
}, },
nopagecolumns: [{ isfailInfo: false,
label: '投标人名称', endbidButton: false,
prop: 'companyName' tableData: [],
}, isopenInfo: false,
{ startDetail: "",
label: '投标报价(元)', dialogue: false,
prop: 'price' remaintime: "",
}, storagedecodeTime: "",
{ storagesignatureTime: "",
label: '是否签名', decodeTime: "",
prop: 'isSign', signatureTime: "",
}, isMessge: false,
], // pageObj: {
columns: [{ size: 10,
label: '投标人名称', currentPage: 1,
prop: 'companyName' func: (currentPage) => {
}, this.pageTurning(currentPage)
{
label: '联系人',
prop: 'project'
},
{
label: '手机号',
prop: 'phone'
},
{
slot: 'operate'
}
], //
isOpenbid: false,
buttonWords: '立即开标',
openbidButton: false,
halList: [],
minutes: '',
seconds: '',
currentTime: '',
breads: ['招标管理', '招标项目管理', '工作台'],
websock: null,
content:"",
dialogueList:[],
myId:"",
leftmessage:""
}
},
created() {
this.projectCode=localStorage.getItem("projectCode")
this.projectName=localStorage.getItem("projectName")
this.userName=JSON.parse(localStorage.getItem("userInfo")).name
this.gettimeInfo();
this.getstartInfo();
this.getopenInfo();
this.getsigndetail();
this.myId=JSON.parse(localStorage.getItem("userInfo")).userId
this.pageObj.companyId=localStorage.getItem("companyId")
this.pageObj.projectId=localStorage.getItem("projectId")
// 中国标准时间
let currentTime = getTime()
this.currentTime = currentTime
setInterval(() => {
let currentTime = getTime()
this.currentTime = currentTime
}, 1000)
// websocket
this.createWebSocket()
},
methods: {
end(){
},
down(url){
window.open(url)
},
// 流标详情
async failDetail(){
this.isfailDetail=true
let projectId=localStorage.getItem("projectId")
const {
data,
code
} = await bidFaileddetail(projectId)
if(code==200){
this.faildetail=data
}
},
// 确定流标
async failbid(){
try {
let valid = await this.$refs['form'].validate()
if (valid) {
let form=this.form;
form.projectId=localStorage.getItem("projectId")
const { code,msg } = await openbidFailed(form)
if (code === 200) {
this.$message.success(msg)
this.isfailInfo=false
this.isfail=false
}else if(code===500){
this.$message.error(msg)
this.isfailInfo=false
this.isfail=false
} }
} },
} catch (e) { nopagecolumns: [{
console.log(e) label: '投标人名称',
} prop: 'companyName'
}, },
isdialogue(){ {
this.dialogue=!this.dialogue label: '投标报价(元)',
}, prop: 'price'
getfile(val){ },
this.form.filePOList=val {
}, label: '是否签名',
// 时间信息 prop: 'isSign',
async gettimeInfo() { },
try { ], //
let projectId=localStorage.getItem("projectId") columns: [{
const { label: '投标人名称',
data, prop: 'companyName'
code },
} = await timeInfo(projectId) {
let remaintime=Number(data.remainTime); label: '联系人',
if(remaintime<0){ prop: 'project'
this.openbidButton=true },
}else{ {
this.remaintime=remaintime label: '手机号',
} prop: 'phone'
this.storagedecodeTime=Number(data.decodeTime) },
this.storagesignatureTime=Number(data.signatureTime) {
} catch (e) { slot: 'operate'
console.log(e)
}
},
// 开标按钮上三个信息(投标人数,缴纳保证金人数,签到人数)
async getstartInfo() {
try {
let projectId=localStorage.getItem("projectId")
const {
data,
code
} = await startInfo(projectId)
if(code==200){
this.startDetail=data
} }
} catch (e) { ], //
console.log(e) isOpenbid: false,
} buttonWords: '立即开标',
}, openbidButton: false,
//签到解密略简 halList: [],
async getsigndetail() { minutes: '',
try { seconds: '',
let projectId=localStorage.getItem("projectId") currentTime: '',
const { breads: ['招标管理', '招标项目管理', '工作台'],
data, websock: null,
code content: "",
} = await signdetail(projectId) dialogueList: [],
if(code==200){ myId: "",
this.leftmessage=data leftmessage: "",
timer:""
}
},
created() {
this.projectCode = localStorage.getItem("projectCode")
this.projectName = localStorage.getItem("projectName")
this.userName = JSON.parse(localStorage.getItem("userInfo")).name
this.gettimeInfo();
this.getstartInfo();
this.getopenInfo();
this.getsigndetail();
this.myId = JSON.parse(localStorage.getItem("userInfo")).userId
this.pageObj.companyId = localStorage.getItem("companyId")
this.pageObj.projectId = localStorage.getItem("projectId")
// 中国标准时间
let currentTime = getTime()
this.currentTime = currentTime
this.timer1=setInterval(() => {
let currentTime = getTime()
this.currentTime = currentTime
}, 1000)
// websocket
this.createWebSocket()
// 长轮训获取
this.timer = setInterval(() => {
this.getstartInfo()
}, 5000);
},
methods: {
end() {
},
down(url) {
window.open(url)
},
// 流标详情
async failDetail() {
this.isfailDetail = true
let projectId = localStorage.getItem("projectId")
const {
data,
code
} = await bidFaileddetail(projectId)
if (code == 200) {
this.faildetail = data
}
},
// 确定流标
async failbid() {
try {
let valid = await this.$refs['form'].validate()
if (valid) {
let form = this.form;
form.projectId = localStorage.getItem("projectId")
const {
code,
msg
} = await openbidFailed(form)
if (code === 200) {
this.$message.success(msg)
this.isfailInfo = false
this.isfail = false
} else if (code === 500) {
this.$message.error(msg)
this.isfailInfo = false
this.isfail = false
} }
} catch (e) { }
console.log(e) } catch (e) {
} console.log(e)
}, }
// 开标一栏表 },
async getopenInfo() { isdialogue() {
try { this.dialogue = !this.dialogue
let projectId=localStorage.getItem("projectId") },
const { getfile(val) {
data, this.form.filePOList = val
code },
} = await openInfo(projectId) // 时间信息
if(code==200){ async gettimeInfo() {
for(let item of data){ try {
if(item.isSign){ let projectId = localStorage.getItem("projectId")
item.isSign="是" const {
}else{ data,
item.isSign="否" code
} } = await timeInfo(projectId)
let remaintime = Number(data.remainTime);
if (remaintime < 0) {
this.openbidButton = true
} else {
this.remaintime = remaintime
}
this.storagedecodeTime = Number(data.decodeTime)
this.storagesignatureTime = Number(data.signatureTime)
} catch (e) {
console.log(e)
}
},
// 开标按钮上三个信息(投标人数,缴纳保证金人数,签到人数)
async getstartInfo() {
try {
let projectId = localStorage.getItem("projectId")
const {
data,
code
} = await startInfo(projectId)
if (code == 200) {
this.startDetail = data
}
} catch (e) {
console.log(e)
}
},
//签到解密略简
async getsigndetail() {
try {
let projectId = localStorage.getItem("projectId")
const {
data,
code
} = await signdetail(projectId)
if (code == 200) {
this.leftmessage = data
}
} catch (e) {
console.log(e)
}
},
// 开标一栏表
async getopenInfo() {
try {
let projectId = localStorage.getItem("projectId")
const {
data,
code
} = await openInfo(projectId)
if (code == 200) {
for (let item of data) {
if (item.isSign) {
item.isSign = "是"
} else {
item.isSign = "否"
} }
this.tableData=data
} }
} catch (e) { this.tableData = data
console.log(e) }
} } catch (e) {
}, console.log(e)
back(){
this.$router.go(-1)
},
// 计算分秒倒计时
// add: function() {
// var _this = this
// var time = window.setInterval(function() {
// if (_this.seconds === 0 && _this.minutes !== 0) {
// _this.seconds = 59
// _this.minutes -= 1
// } else if (_this.minutes === 0 && _this.seconds === 0) {
// _this.seconds = 0
// window.clearInterval(time)
// } else {
// _this.seconds -= 1
// }
// }, 1000)
// },
// 截标时间到了
remaintimeEnd(val) {
this.openbidButton = val
},
// 解密时间到了
decodeTimeEnd(val) {
},
// 签名时间到了
signatureTimeEnd(val) {
this.endbidButton = val
},
// 开标
async openbid() {
try {
let projectId=localStorage.getItem("projectId")
const {
code
} = await startbid(projectId)
if(code==200){
this.isOpenbid = false
this.openbidButton = false
this.buttonWords = '停止开标'
this.decodeTime=this.storagedecodeTime
this.signatureTime=this.storagesignatureTime
this.$message({
message: '开标成功',
type: 'success'
})
} }
} catch (e) { },
console.log(e) back() {
} this.$router.go(-1)
},
// 计算分秒倒计时
}, // add: function() {
// 开标提示 // var _this = this
confirm() { // var time = window.setInterval(function() {
this.$alert('请立即开标', '请立即开标', { // if (_this.seconds === 0 && _this.minutes !== 0) {
confirmButtonText: '知道了', // _this.seconds = 59
callback: action => { // _this.minutes -= 1
if (action === 'confirm') { // } else if (_this.minutes === 0 && _this.seconds === 0) {
this.isOpenbid = true // _this.seconds = 0
// window.clearInterval(time)
} // } else {
} // _this.seconds -= 1
}) // }
}, // }, 1000)
// websocket // },
createWebSocket() { // 截标时间到了
let token=localStorage.getItem("token") remaintimeEnd(val) {
let projectId=localStorage.getItem("projectId") this.openbidButton = val
this.websocket = new WebSocket('ws://192.168.3.35:8085/webSocket/' +projectId+"/"+ token ) },
// 连接成功时 // 解密时间到了
this.websocket.onopen = () => { decodeTimeEnd(val) {
}
this.websocket.onmessage = event => { },
// 后端发送的消息在event.data中 // 签名时间到了
let data=JSON.parse(event.data); signatureTimeEnd(val) {
if(data.type==1){ this.endbidButton = val
this.content="" },
this.dialogueList.push(data) // 开标
}else{ async openbid() {
this.halList.push(data) try {
} let projectId = localStorage.getItem("projectId")
} const {
this.websocket.onclose = function () { code
console.log('关闭了') } = await startbid(projectId)
} if (code == 200) {
// 路由跳转时结束websocket链接 this.isOpenbid = false
this.$router.afterEach(function () { this.openbidButton = false
this.websocket.close() this.buttonWords = '停止开标'
}) this.decodeTime = this.storagedecodeTime
// 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常 this.signatureTime = this.storagesignatureTime
window.onbeforeunload = function () { this.$message({
this.websocket.close() message: '开标成功',
} type: 'success'
}, })
send(){ }
let content=this.content; } catch (e) {
this.websocket.send(content) console.log(e)
}
},
// 开标提示
confirm() {
this.$alert('请立即开标', '请立即开标', {
confirmButtonText: '知道了',
callback: action => {
if (action === 'confirm') {
this.isOpenbid = true
}
}
})
},
// websocket
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.onopen = () => {}
this.websocket.onmessage = event => {
// 后端发送的消息在event.data中
let data = JSON.parse(event.data);
if (data.type == 1) {
this.content = ""
this.dialogueList.push(data)
} else {
this.halList.push(data)
}
}
this.websocket.onclose = function() {
console.log('关闭了')
}
// 路由跳转时结束websocket链接
this.$router.afterEach(function() {
this.websocket.close()
})
// 监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常
window.onbeforeunload = function() {
this.websocket.close()
}
},
send() {
let content = this.content;
this.websocket.send(content)
}
},
destroyed() {
//清除定时器
clearInterval(this.timer);
clearInterval(this.timer1);
}
} }
},
}
</script> </script>
<style scoped> <style scoped>
.dialogue{ .flex-left{
display: flex;
justify-content: flex-start;
}
.flex-right{
display: flex;
justify-content: flex-end;
}
.dialogue {
position: absolute; position: absolute;
top:10%; top: 10%;
right: 10%; right: 10%;
} }
.dialogue>.dialogueList{
.dialogue>.dialogueList {
border: 1px solid #DCDFE6; border: 1px solid #DCDFE6;
width: 400px; width: 400px;
height: 300px; height: 300px;
overflow:auto; overflow: auto;
} }
.hal{
.hal {
position: relative; position: relative;
} }
.buttons { .buttons {
margin: 100px 0; margin: 100px 0;
} }
...@@ -578,7 +604,7 @@ export default { ...@@ -578,7 +604,7 @@ export default {
margin: 0 50px; margin: 0 50px;
box-sizing: border-box; box-sizing: border-box;
padding: 30px; padding: 30px;
overflow:auto overflow: auto
} }
.hal-center>ul>li { .hal-center>ul>li {
...@@ -615,12 +641,14 @@ export default { ...@@ -615,12 +641,14 @@ export default {
margin-right: 50px; margin-right: 50px;
margin-bottom: 30px; margin-bottom: 30px;
} }
.dialogue>.dialogueList{
.dialogue>.dialogueList {
box-sizing: border-box; box-sizing: border-box;
padding:20px; padding: 20px;
overflow:auto overflow: auto
} }
.dialogueList>li{
.dialogueList>li {
margin-bottom: 20px; margin-bottom: 20px;
} }
</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 to comment