|
@@ -3,23 +3,15 @@
|
|
|
|
|
|
<div class="head-container" style="margin: 10px 0 10px 0;">
|
|
|
<!-- 搜索 -->
|
|
|
- <!-- <el-input
|
|
|
- v-model="query.value"
|
|
|
+ <el-input
|
|
|
+ v-model="query.title"
|
|
|
clearable
|
|
|
placeholder="输入搜索内容"
|
|
|
style="width: 200px;"
|
|
|
size="small"
|
|
|
class="filter-item"
|
|
|
/>
|
|
|
- <el-button class="filter-item" size="small" type="primary" icon="el-icon-search" plain>搜索</el-button>
|
|
|
- <el-button
|
|
|
- class="filter-item"
|
|
|
- size="small"
|
|
|
- type="primary"
|
|
|
- icon="el-icon-plus"
|
|
|
- @click="handleAdd"
|
|
|
- >发布新标
|
|
|
- </el-button>-->
|
|
|
+ <el-button class="filter-item" size="small" type="primary" icon="el-icon-search" @click="handleFind" plain>搜索</el-button>
|
|
|
</div>
|
|
|
<!--表格渲染-->
|
|
|
<el-table v-loading="loading" :data="data" style="width: 100%;">
|
|
@@ -36,7 +28,9 @@
|
|
|
|
|
|
<el-table-column label="结果" align="center">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-tag type="info" v-if="scope.row.status == 1">未参与</el-tag>
|
|
|
+ <!-- {{scope.row.bidding.status}} -->
|
|
|
+ <el-tag type="info" v-if="scope.row.status == null">未参与</el-tag>
|
|
|
+ <el-tag type="success" v-if="scope.row.status == 0">已提交</el-tag>
|
|
|
<el-tag type="success" v-if="scope.row.status == 2">已中标</el-tag>
|
|
|
<el-tag type="danger" v-if="scope.row.status == 3">未中标</el-tag>
|
|
|
</template>
|
|
@@ -44,14 +38,15 @@
|
|
|
|
|
|
<el-table-column prop="description" :show-overflow-tooltip="true" label="报价方式" align="center" >
|
|
|
<template slot-scope="scope">
|
|
|
- <span v-if="scope.row.priceQuotes == 1">总价</span>
|
|
|
- <span v-if="scope.row.priceQuotes == 2">单价</span>
|
|
|
+ <el-tag color="#5783E6" style="border-color:#5783E6" effect="dark" v-if="scope.row.priceQuotes == 1">总价</el-tag>
|
|
|
+ <el-tag effect="dark" color="#82C497" style="border-color:#82C497" v-if="scope.row.priceQuotes == 2">单价</el-tag>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
- <el-table-column prop="remarks" label="备注" align="center" />
|
|
|
+ <el-table-column prop="remarks" label="备注" align="center" :show-overflow-tooltip="true"/>
|
|
|
<el-table-column prop="appendix" label="附件" align="center" >
|
|
|
<template slot-scope="scope">
|
|
|
- <el-link type="primary" :href="scope.row.appendix">查看</el-link>
|
|
|
+ <!-- <el-link type="primary" :href="scope.row.appendix">查看</el-link> -->
|
|
|
+ <el-button type="text" @click="onLoad(scope.row.appendix)">下载</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
<el-table-column prop="endTime" label="截止时间" align="center" />
|
|
@@ -59,8 +54,9 @@
|
|
|
|
|
|
<el-table-column label="操作" width="250" align="center">
|
|
|
<template slot-scope="scope">
|
|
|
- <el-button slot="reference" type="text" icon="el-icon-edit" @click="handleAdd(scope.row)">投标</el-button>
|
|
|
- <el-button slot="reference" type="text" icon="el-icon-edit" @click="handleEdit(scope.row)">改标</el-button>
|
|
|
+ <el-button slot="reference" type="text" v-if="scope.row.tenderStatus == 1 && scope.row.status == null" icon="el-icon-edit" @click="handleAdd(scope.row)">投标</el-button>
|
|
|
+ <el-button slot="reference" type="text" v-if="scope.row.tenderStatus == 1 && scope.row.status == 0" icon="el-icon-edit" @click="handleEdit(scope.row)">改标</el-button>
|
|
|
+ <el-button slot="reference" icon="el-icon-view" type="text" v-if="scope.row.tenderStatus == 2 || scope.row.tenderStatus == 3" @click="handleView(scope.row)">投标详情</el-button>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
@@ -70,22 +66,26 @@
|
|
|
<el-pagination
|
|
|
:current-page.sync="currentPage"
|
|
|
:page-size="pageSize"
|
|
|
- layout="total, prev, pager, next, jumper"
|
|
|
+ layout="total, sizes, prev, pager, next, jumper"
|
|
|
:total="total"
|
|
|
background
|
|
|
+ @size-change="handleSizeChange"
|
|
|
@current-change="handleCurrentChange"
|
|
|
/>
|
|
|
</div>
|
|
|
|
|
|
<!--新增-->
|
|
|
- <el-dialog :append-to-body="true" :visible.sync="dialog" :title="isAdd ? '发布新标' : '修改新标'" width="50%">
|
|
|
+ <el-dialog :append-to-body="true" :visible.sync="dialog" :title="isAdd ? '投标' : '修标'" width="50%">
|
|
|
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
|
|
|
<el-form-item label="报价方式">
|
|
|
- <el-radio v-model="form.priceQuotes" :label="1">总价</el-radio>
|
|
|
- <el-radio v-model="form.priceQuotes" :label="2">单价</el-radio>
|
|
|
+ <!-- <el-radio v-model="form.priceQuotes" disabled :label="1">总价</el-radio>
|
|
|
+ <el-radio v-model="form.priceQuotes" disabled :label="2">单价</el-radio> -->
|
|
|
+ <el-tag v-if="form.priceQuotes == 1">总价</el-tag>
|
|
|
+ <el-tag v-if="form.priceQuotes == 2">单价</el-tag>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="报价" prop="dictCode">
|
|
|
+ <el-form-item label="报价" prop="price">
|
|
|
<el-input v-model="form.price" style="width: 170px;" placeholder="请输入金额" ><template slot="append">元</template></el-input>
|
|
|
+ <!-- <el-input class="input-width" v-model="form.price" @keyup.native="validateNumberInput($event,'price')" @blur="blurNumberInput($event,'price')"></el-input> -->
|
|
|
</el-form-item>
|
|
|
<el-form-item label="备注" prop="remarks" >
|
|
|
<el-input
|
|
@@ -96,7 +96,7 @@
|
|
|
v-model="form.remarks">
|
|
|
</el-input>
|
|
|
</el-form-item>
|
|
|
- <el-form-item label="附件" prop="description">
|
|
|
+ <el-form-item label="附件" required="true" prop="appendix">
|
|
|
<el-upload
|
|
|
class="upload-demo"
|
|
|
drag
|
|
@@ -106,7 +106,7 @@
|
|
|
:on-remove="handleRemove"
|
|
|
:before-remove="beforeRemove"
|
|
|
:on-exceed="handleExceed"
|
|
|
- action="/tender/upload"
|
|
|
+ action="/bidding/upload"
|
|
|
list-type="text"
|
|
|
:file-list="fileList"
|
|
|
multiple>
|
|
@@ -123,39 +123,76 @@
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
|
|
|
- <!-- 详情 -->
|
|
|
+
|
|
|
+ <!-- 详情 -->
|
|
|
<el-dialog :append-to-body="true" :visible.sync="viewDialog" title="投标详情" width="90%" center>
|
|
|
- <el-table v-loading="loading" center :data="data" border style="width: 100%;">
|
|
|
+ <el-table center :data="Paramdata" border style="width: 100%;">
|
|
|
|
|
|
- <el-table-column prop="dictName" label="客户名称" />
|
|
|
+ <el-table-column prop="customerName" label="客户名称" align="center"/>
|
|
|
|
|
|
<el-table-column label="报价方式" align="center">
|
|
|
<template slot-scope="scope">
|
|
|
- <span>{{scope.row.gwStatus}}</span>
|
|
|
+ <el-tag color="#5783E6" style="border-color:#5783E6" effect="dark" v-if="scope.row.priceQuotes == 1">总价</el-tag>
|
|
|
+ <el-tag effect="dark" color="#82C497" style="border-color:#82C497" v-if="scope.row.priceQuotes == 2">单价</el-tag>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+
|
|
|
+ <el-table-column prop="price" :show-overflow-tooltip="true" label="报价金额" align="center" />
|
|
|
+ <el-table-column prop="remarks" label="备注" :show-overflow-tooltip="true" align="center" />
|
|
|
+ <el-table-column prop="appendix" label="附件" align="center" width="100" >
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <!-- <el-link type="primary" :href="scope.row.appendix">查看</el-link> -->
|
|
|
+ <el-button type="text" @click="onLoad(scope.row.appendix)">下载</el-button>
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
+ <el-table-column prop="createTime" label="投极时间" align="center"/>
|
|
|
+ <el-table-column prop="userName" label=" 投标帐号" align="center"/>
|
|
|
+ <el-table-column prop="status" label=" 投标结果" align="center" >
|
|
|
+ <template slot-scope="scope">
|
|
|
+ <span v-if="scope.row.status == 0">已提交</span>
|
|
|
+ <span v-if="scope.row.status == 1">中标</span>
|
|
|
+ <span v-if="scope.row.status == 2">未中标</span>
|
|
|
</template>
|
|
|
</el-table-column>
|
|
|
|
|
|
- <el-table-column prop="description" :show-overflow-tooltip="true" label="报价金额" />
|
|
|
- <el-table-column prop="remark" label="备注" />
|
|
|
- <el-table-column prop="remark" label="附件" />
|
|
|
- <el-table-column prop="createTime" label="投极时间" />
|
|
|
- <el-table-column prop="createTime" label=" 投标帐号" />
|
|
|
- <el-table-column prop="createTime" label=" 投标结果" />
|
|
|
</el-table>
|
|
|
+ <div class="pagination">
|
|
|
+ <el-pagination
|
|
|
+ :current-page.sync="param.page"
|
|
|
+ :page-size="param.size"
|
|
|
+ layout="total, sizes, prev, pager, next, jumper"
|
|
|
+ :total="total1"
|
|
|
+ :page-sizes="[10, 20, 30, 50]"
|
|
|
+ background
|
|
|
+ @size-change="handleSizeChangeParam"
|
|
|
+ @current-change="handleCurrentChangeParam"
|
|
|
+ />
|
|
|
+ </div>
|
|
|
<div slot="footer" class="dialog-footer">
|
|
|
<el-button @click="viewDialog = false">取消</el-button>
|
|
|
- <el-button :loading="loading" type="primary" @click="doSubmit">确认</el-button>
|
|
|
+ <el-button :loading="loading" type="primary" @click="viewDialog = false">确认</el-button>
|
|
|
</div>
|
|
|
</el-dialog>
|
|
|
+
|
|
|
</div>
|
|
|
|
|
|
</template>
|
|
|
|
|
|
<script>
|
|
|
-import { getTableList, } from '@/api/tender'
|
|
|
+import { getTableList,getQueryAdd,getQueryEdit,getQueryId } from '@/api/tender'
|
|
|
|
|
|
export default {
|
|
|
data() {
|
|
|
+ const checkTel = (rule, value, callback)=>{
|
|
|
+ console.log(rule)
|
|
|
+ console.log(value)
|
|
|
+ console.log(callback)
|
|
|
+ if(value == null){
|
|
|
+ callback(new Error("请选择附件"))
|
|
|
+ }else {
|
|
|
+ callback()
|
|
|
+ }
|
|
|
+ }
|
|
|
return {
|
|
|
form: {
|
|
|
},
|
|
@@ -171,11 +208,12 @@ export default {
|
|
|
dictName: [
|
|
|
{ required: true, message: '字典名称不为空', trigger: 'blur' }
|
|
|
],
|
|
|
- dictCode: [
|
|
|
- { required: true, message: '字典编码不为空', trigger: 'blur' }
|
|
|
+ price: [
|
|
|
+ { required: true, message: '报价金额不为空', trigger: 'blur' }
|
|
|
],
|
|
|
- description: [
|
|
|
- { required: true, message: '描述不为空', trigger: 'blur' }
|
|
|
+ appendix: [
|
|
|
+ // { type:"array",required: true, message: '附件不为空', trigger: 'blur' },
|
|
|
+ { validator: checkTel, trigger: 'blur' }
|
|
|
]
|
|
|
},
|
|
|
queryTypeOptions: [
|
|
@@ -185,23 +223,44 @@ export default {
|
|
|
query: {
|
|
|
type: '',
|
|
|
value: ''
|
|
|
- }
|
|
|
+ },
|
|
|
+ fileList:[],
|
|
|
+ param:{
|
|
|
+ page:1,
|
|
|
+ size:10
|
|
|
+ },
|
|
|
+ total1:0,
|
|
|
+ Paramdata:[]
|
|
|
}
|
|
|
},
|
|
|
created() {
|
|
|
this.getDictData()
|
|
|
},
|
|
|
methods: {
|
|
|
+ validateNumberInput(e,item) {
|
|
|
+ let value = e.target.value.replace(/[^\d.]/g,'').replace(/\.{2,}/g,'.').replace('.','$#$').replace(/\./g,'').replace('$#$','.').replace(/^(\-)*(\d+)\.(\d\d).*$/,'$1$2.$3');
|
|
|
+ if(value >= 999999999.99) {
|
|
|
+ this.priceListForm[item] = 999999999.99;
|
|
|
+ }else {
|
|
|
+ this.priceListForm[item] = value;
|
|
|
+ }
|
|
|
+ },
|
|
|
+ blurNumberInput(e,item) {
|
|
|
+ if(e.target.value && e.target.value.indexOf('.') <= 0) {
|
|
|
+ this.priceListForm[item] = e.target.value + '.00'
|
|
|
+ }
|
|
|
+ },
|
|
|
// 发布时间
|
|
|
oncustom(){
|
|
|
|
|
|
},
|
|
|
- // 获取字典详情
|
|
|
+ // 获取详情
|
|
|
getDictData: function() {
|
|
|
this.loading = true
|
|
|
const params = {
|
|
|
page:this.currentPage,
|
|
|
- size:this.pageSize
|
|
|
+ size:this.pageSize,
|
|
|
+ title:this.query.title
|
|
|
}
|
|
|
getTableList(params).then(res => {
|
|
|
console.log(res)
|
|
@@ -211,13 +270,54 @@ export default {
|
|
|
})
|
|
|
},
|
|
|
|
|
|
+ // 搜索
|
|
|
+ handleFind: function() {
|
|
|
+ this.currentPage = 1
|
|
|
+ this.getDictData()
|
|
|
+ },
|
|
|
+
|
|
|
+ // 文件移除的时候
|
|
|
+ handleRemove(file, fileList) {
|
|
|
+ this.form.appendix = ""
|
|
|
+ console.log(file, fileList,this.fileList,"移出");
|
|
|
+ },
|
|
|
+ // 文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用
|
|
|
+ handleChange(file,fileList){
|
|
|
+ console.log(file,fileList,"上传")
|
|
|
+ if(file.response){
|
|
|
+ console.log(file.response,"file")
|
|
|
+ this.form.appendix=file.response.data
|
|
|
+ }
|
|
|
+ },
|
|
|
+ // 点击文件列表中已上传的文件时的钩子
|
|
|
+ handlePreview(file) {
|
|
|
+ console.log(file,"file1");
|
|
|
+ window.location.href = file.url
|
|
|
+ },
|
|
|
+ handleExceed(files, fileList) {
|
|
|
+ this.$message.warning(`当前限制选择 1 个附件,本次选择了 ${files.length} 个文件`);
|
|
|
+ },
|
|
|
+ beforeRemove(file, fileList) {
|
|
|
+ return this.$confirm(`确定移除 ${ file.name }?`);
|
|
|
+ },
|
|
|
+ // 下载
|
|
|
+ onLoad(row){
|
|
|
+ // const params = new URLSearchParams()
|
|
|
+ // params.append('path', row)
|
|
|
+ let a =document.createElement('a')
|
|
|
+ // a.href= /bidding/load
|
|
|
+ let url = window.location.origin + "/bidding/load?path=" + encodeURIComponent(row)
|
|
|
+ a.href = url
|
|
|
+ a.click()
|
|
|
+ },
|
|
|
+
|
|
|
// 字典名称提交动作
|
|
|
doSubmit() {
|
|
|
this.$refs['form'].validate((valid) => {
|
|
|
if (valid) {
|
|
|
if (this.isAdd) {
|
|
|
// 新增字典
|
|
|
- saveDict(this.form).then((res) => {
|
|
|
+ getQueryAdd(this.form).then((res) => {
|
|
|
if (res.data.code === 200) {
|
|
|
this.$message({ message: '操作成功', type: 'success' })
|
|
|
} else {
|
|
@@ -229,7 +329,7 @@ export default {
|
|
|
})
|
|
|
} else {
|
|
|
// 更新字典
|
|
|
- updateDict(this.form).then((res) => {
|
|
|
+ getQueryEdit(this.form).then((res) => {
|
|
|
if (res.data.code === 200) {
|
|
|
this.$message({ message: '操作成功', type: 'success' })
|
|
|
} else {
|
|
@@ -243,22 +343,61 @@ export default {
|
|
|
})
|
|
|
},
|
|
|
// 添加字典
|
|
|
- handleAdd: function() {
|
|
|
+ handleAdd: function(row) {
|
|
|
this.dialog = true
|
|
|
this.isAdd = true
|
|
|
this.form = {}
|
|
|
+ this.fileList = []
|
|
|
+ this.form.tenderId = row.id
|
|
|
+ this.form.priceQuotes = row.priceQuotes
|
|
|
+ if(this.$refs['form']){
|
|
|
+ this.$refs["form"].resetFields();
|
|
|
+ }
|
|
|
},
|
|
|
// 编辑字典
|
|
|
handleEdit: function(row) {
|
|
|
+ if(this.$refs['form']){
|
|
|
+ this.$refs["form"].resetFields();
|
|
|
+ }
|
|
|
this.dialog = true
|
|
|
this.isAdd = false
|
|
|
- this.form = row
|
|
|
+ this.form = row.bidding
|
|
|
+ this.form.priceQuotes =row.priceQuotes
|
|
|
+ let name = this.form.appendix.split("\\") ;
|
|
|
+ name = name.pop()
|
|
|
+ // let name = data.appendix.replace(/(.*\/)*([^.]+).*/ig, "$2");
|
|
|
+ this.fileList = [{name:name,url: this.form.appendix}]
|
|
|
+ },
|
|
|
+ handleView(row){
|
|
|
+ this.param.tenderId = row.id
|
|
|
+ this.getParam()
|
|
|
+ this.viewDialog =true
|
|
|
+ },
|
|
|
+ getParam(){
|
|
|
+ let data = this.param
|
|
|
+ getQueryId(data).then((res)=>{
|
|
|
+ console.log(res.data.data.records,"")
|
|
|
+ this.Paramdata = res.data.data.records
|
|
|
+ this.total1 = res.data.data.total
|
|
|
+ })
|
|
|
},
|
|
|
|
|
|
// 换页
|
|
|
handleCurrentChange: function(val) {
|
|
|
this.currentPage = val
|
|
|
this.getDictData()
|
|
|
+ },
|
|
|
+ handleSizeChange(val){
|
|
|
+ this.pageSize = val
|
|
|
+ this.getDictData()
|
|
|
+ },
|
|
|
+ handleCurrentChangeParam(val){
|
|
|
+ this.param.page = val
|
|
|
+ this.getParam()
|
|
|
+ },
|
|
|
+ handleSizeChangeParam(val){
|
|
|
+ this.param.size = val
|
|
|
+ this.getParam()
|
|
|
}
|
|
|
}
|
|
|
}
|