Commit 17a88754 authored by 张冬's avatar 张冬

修改

parent 861ae640
......@@ -14,6 +14,17 @@ export function creatProject(data) {
})
}
// 编辑招标项目
export function editProject(data) {
return request({
url: '/tender-project/edit',
method: 'POST',
data: data
})
}
// 2.1.2
// 发送询价公告
export function createEnquiry(data) {
......
import request from '@/utils/request'
// 首页
export function home() {
return request({
url: "bidder-index/detail",
method: 'get',
})
}
\ No newline at end of file
This diff is collapsed.
<template>
<div>
<div class="content-head">
<el-breadcrumb separator="/">
<el-breadcrumb-item>招标管理 </el-breadcrumb-item>
<el-breadcrumb-item>招标项目管理</el-breadcrumb-item>
<el-breadcrumb-item>发布项目</el-breadcrumb-item>
</el-breadcrumb>
<h3>编辑项目</h3>
<h5>编辑招标项目</h5>
</div>
<div class="othercontent">
<!-- 项目信息 -->
<div class="message1">
<messaage ref="message" :ruleForm="detail"></messaage>
</div>
<!-- 标的需求 -->
<div class="demand">
<demand ref="demand" :ruleForm="detail"></demand>
</div>
<!-- 招标时间设置 -->
<div class="timeSet">
<timeSet ref="timeSet" :ruleForm="detail"></timeSet>
</div>
<!-- 招标文件上传 -->
<div class="fileUpload">
<fileUpload ref="fileUpload" :detail="detail"></fileUpload>
</div>
</div>
<div class="centerButton">
<el-button @click="edit">编辑</el-button>
</div>
</div>
</template>
<script>
import { getTime1 } from '@utils/time';
import { projectdetail } from '@api/supply/bid';
import messaage from './message.vue';
import demand from './demand.vue';
import timeSet from './timeSet.vue';
import fileUpload from './fileUpload.vue';
export default {
components: {
messaage,
demand,
timeSet,
fileUpload
},
data() {
return {
activeIdx: 0,
allForm: {},
detail: {
projectName: '项目1'
}
};
},
created() {
this.getenquiryProjectId();
},
methods: {
async edit() {
await this.$refs.message.next();
await this.$refs.timeSet.next();
await this.$refs.fileUpload.next();
console.log('通过');
console.log(this.detail);
},
// 获取详情
async getenquiryProjectId() {
let projectId = localStorage.getItem('projectId');
const { data, code } = await projectdetail(projectId);
if (code == 200) {
data.endTime = getTime1(data.endTime);
data.startTime = getTime1(data.startTime);
data.createTime = data.createTime.substring(0, 10);
data.bidBookInfoPO = data.bidBookInfoDO;
data.earnestInfoPO = data.earnestInfoDO;
this.detail = data;
}
}
}
};
</script>
<style scoped>
.steps {
width: 800px;
margin: 0 auto;
padding: 30px 0;
}
.othercontent > div {
background: #fff;
margin-bottom: 30px;
}
.bid {
margin-top: -20px;
}
.button {
display: flex;
justify-content: flex-end;
padding-bottom: 20px;
margin-right: 20px;
}
</style>
<template>
<div>
<div class="describe">上传招标文件</div>
<div class="padding">
<div class="details">
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="demo-ruleForm">
<el-form-item label="上传附件" prop="file">
<upload :limit="1" accept=".pdf" tip="请上传一个招标文件(pdf),不要超过50M。" :max="50" @input="getfile"></upload>
</el-form-item>
<el-form-item label="其他附件">
<upload :limit="5" tip="最多上传五个附件,单个不超过100M。" :type="1" :max="100" @input="getfile1"> </upload>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import { creatProject } from '@api/purchaser/bid';
import upload from '@components/Upload/specialUpload.vue';
export default {
components: {
upload
},
props: {
allForm: {
type: Object,
default() {
return {};
}
}
},
data() {
let checkidentity = (rule, value, callback) => {
let le;
if (this.ruleForm.bidBookPO.length === 0) {
callback(new Error('请上传附件'));
} else {
callback();
}
};
return {
ruleForm: {
bidBookPO: [],
bidBookAccessoryPOList: []
},
fileList: [],
rules: {
file: [
{
required: true,
validator: checkidentity,
trigger: 'change'
}
]
}
};
},
methods: {
getfile(val) {
this.ruleForm.bidBookPO = val;
},
getfile1(val) {
this.ruleForm.bidBookAccessoryPOList = val;
},
async next() {
const valid = await this.$refs['ruleForm'].validate();
}
}
};
</script>
<style scoped>
.padding {
padding: 0px 20px 30px 20px;
}
.details > div {
margin-bottom: 20px;
}
.correct {
margin-right: 20px;
margin-top: 5px;
}
.button {
display: flex;
justify-content: flex-end;
padding-bottom: 20px;
margin-right: 20px;
}
</style>
This diff is collapsed.
<template>
<div>
<div class="describe">招标时间设置</div>
<div class="form">
<!-- <dataForm :search-form="searchForm" :search-data="searchData" :is-handle="false" label-width="250px"></dataForm> -->
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="250px" class="demo-ruleForm">
<el-form-item label="招标公告正式发布时间:" prop="releaseTime">
<el-date-picker v-model="ruleForm.releaseTime" type="datetime" placeholder="选择日期时间" @change="releaseTime">
</el-date-picker>
</el-form-item>
<el-form-item label="标书获取开始时间:" prop="startTime">
<el-date-picker v-model="ruleForm.startTime" type="datetime" placeholder="选择日期时间" @change="startTime">
</el-date-picker>
</el-form-item>
<el-form-item label="标书获取结束时间:" prop="endTime">
<el-date-picker v-model="ruleForm.endTime" type="datetime" placeholder="选择日期时间" @change="endTime">
</el-date-picker>
</el-form-item>
<el-form-item label="投标人澄清答疑截止时间:" prop="answerQuestionEndTime">
<el-date-picker
v-model="ruleForm.answerQuestionEndTime"
type="datetime"
placeholder="选择日期时间"
@change="answerQuestionEndTime"
>
</el-date-picker>
</el-form-item>
<el-form-item label="投标文件递交截止时间及开标时间:" prop="openBidStartTime">
<el-date-picker
v-model="ruleForm.openBidStartTime"
type="datetime"
placeholder="选择日期时间"
@change="openBidStartTime"
>
</el-date-picker>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import dataForm from '@components/dataForm.vue';
export default {
name: 'bidingList',
components: {
dataForm
},
props: {
ruleForm: {
type: Object,
default() {
return {};
}
}
},
data() {
let checkTime = (rule, value, callback) => {
let nowTime = new Date().getTime();
if (nowTime < value) {
callback();
} else {
return callback(new Error('请选择大于当前的时间'));
}
};
let checkTime1 = (rule, value, callback) => {
if (!this.ruleForm.releaseTime) {
return callback(new Error('请先选择招标公告正式发布时间'));
} else {
if (value > this.ruleForm.releaseTime) {
callback();
} else {
return callback(new Error('请选择大于招标公告正式发布时间'));
}
}
};
let checkTime2 = (rule, value, callback) => {
if (!this.ruleForm.startTime) {
return callback(new Error('请先选择标书获取开始时间'));
} else {
if (value > this.ruleForm.startTime) {
callback();
} else {
return callback(new Error('请选择大于标书获取开始时间'));
}
}
};
let checkTime3 = (rule, value, callback) => {
if (!this.ruleForm.endTime) {
return callback(new Error('请先选择标书获取结束时间'));
} else {
if (value > this.ruleForm.endTime) {
callback();
} else {
return callback(new Error('请选择大于标书获取结束时间'));
}
}
};
let checkTime4 = (rule, value, callback) => {
if (!this.ruleForm.answerQuestionEndTime) {
return callback(new Error('请先选择投标人澄清答疑截止时间'));
} else {
if (value > this.ruleForm.answerQuestionEndTime) {
callback();
} else {
return callback(new Error('请选择投标人澄清答疑截止时间'));
}
}
};
return {
ruleForm: {
releaseTime: '',
startTime: '',
endTime: '',
answerQuestionEndTime: '',
openBidStartTime: ''
},
rules: {
releaseTime: [
{
type: 'date',
required: true,
message: '请选择时间',
trigger: 'blur'
},
{
validator: checkTime
}
],
startTime: [
{
type: 'date',
required: true,
message: '请选择时间',
trigger: 'blur'
},
{
validator: checkTime1
}
],
endTime: [
{
type: 'date',
required: true,
message: '请选择时间',
trigger: 'blur'
},
{
validator: checkTime2
}
],
answerQuestionEndTime: [
{
type: 'date',
required: true,
message: '请选择时间',
trigger: 'blur'
},
{
validator: checkTime3
}
],
openBidStartTime: [
{
type: 'date',
required: true,
message: '请选择时间',
trigger: 'blur'
},
{
validator: checkTime4
}
]
}
};
},
methods: {
releaseTime(val) {
this.ruleForm.releaseTime = new Date(val).getTime();
},
startTime(val) {
this.ruleForm.startTime = new Date(val).getTime();
},
endTime(val) {
this.ruleForm.endTime = new Date(val).getTime();
},
answerQuestionEndTime(val) {
this.ruleForm.answerQuestionEndTime = new Date(val).getTime();
},
openBidStartTime(val) {
this.ruleForm.openBidStartTime = new Date(val).getTime();
},
async next() {
const valid = await this.$refs['ruleForm'].validate();
},
upper() {
this.$parent.upper();
}
}
};
</script>
<style scoped>
.form {
width: 50%;
margin: 0 auto;
box-sizing: border-box;
padding-bottom: 30px;
}
.button {
display: flex;
justify-content: flex-end;
padding-bottom: 20px;
margin-right: 20px;
}
</style>
......@@ -3,7 +3,6 @@
<div class="describe">上传招标文件</div>
<div class="padding">
<div class="details">
<!-- <div class="flex">
<div class="correct">*文件名称</div>
<el-input v-model="bidBookPO" style="width: 50%;" placeholder="请输入" clearable>
......@@ -13,9 +12,8 @@
<el-form-item label="上传附件" prop="file">
<upload :limit="1" accept=".pdf" tip="请上传一个招标文件(pdf),不要超过50M。" :max="50" @input="getfile"></upload>
</el-form-item>
<el-form-item label="其他附件" >
<upload :limit="5" tip="最多上传五个附件,单个不超过100M。" :type="1" :max="100" @input="getfile1">
</upload>
<el-form-item label="其他附件">
<upload :limit="5" tip="最多上传五个附件,单个不超过100M。" :type="1" :max="100" @input="getfile1"> </upload>
</el-form-item>
</el-form>
<!-- <div>
......@@ -26,21 +24,18 @@
<div>*其他附件</div>
<upload :file-list="fileList" :limit="5" tip="最多上传五个附件,单个不超过100M。" max="100" @input="getfile1"></upload>
</div> -->
</div>
<div class="button">
<el-button @click="upper">上一步</el-button>
<el-button type="primary" @click="next" >发布</el-button>
<el-button type="primary" @click="next">发布</el-button>
</div>
</div>
</div>
</template>
<script>
import {
creatProject
} from '@api/purchaser/bid'
import { creatProject } from '@api/purchaser/bid';
import upload from '@components/Upload/specialUpload.vue'
import upload from '@components/Upload/specialUpload.vue';
export default {
components: {
upload
......@@ -49,19 +44,19 @@ export default {
allForm: {
type: Object,
default() {
return {}
return {};
}
}
},
data() {
let checkidentity = (rule, value, callback) => {
let le
let le;
if (this.ruleForm.bidBookPO.length === 0) {
callback(new Error('请上传附件'))
callback(new Error('请上传附件'));
} else {
callback()
}
callback();
}
};
return {
ruleForm: {
bidBookPO: [],
......@@ -69,79 +64,74 @@ export default {
},
fileList: [],
rules: {
file: [{
file: [
{
required: true,
validator: checkidentity,
trigger: 'change'
}],
}
]
}
};
},
methods: {
getfile(val) {
this.ruleForm.bidBookPO = val
this.ruleForm.bidBookPO = val;
},
getfile1(val) {
this.ruleForm.bidBookAccessoryPOList = val
this.ruleForm.bidBookAccessoryPOList = val;
},
async next() {
const valid = await this.$refs['ruleForm'].validate()
console.log(valid)
const valid = await this.$refs['ruleForm'].validate();
console.log(valid);
if (valid) {
Object.assign(this.allForm, this.ruleForm)
let allForm=this.allForm;
allForm.companyId=localStorage.getItem("companyId")
const {
msg,
code
} = await creatProject(this.allForm)
Object.assign(this.allForm, this.ruleForm);
let allForm = this.allForm;
allForm.companyId = localStorage.getItem('companyId');
const { msg, code } = await creatProject(this.allForm);
if (code === 200) {
this.$message({
message: msg,
type: 'success',
duration:1500
})
setTimeout(()=>{
this.$router.push("/purchaser/bid/administrationList")
},1500)
}else{
this.$message.error(msg)
duration: 1500
});
setTimeout(() => {
this.$router.push('/purchaser/bid/administrationList');
}, 1500);
} else {
this.$message.error(msg);
}
}
},
upper() {
this.$parent.upper()
this.$parent.upper();
}
// changeType(val) {
// }
}
}
};
</script>
<style scoped>
.padding {
padding: 0px 20px 30px 20px
}
.padding {
padding: 0px 20px 30px 20px;
}
.details>div {
.details > div {
margin-bottom: 20px;
}
}
.correct {
.correct {
margin-right: 20px;
margin-top: 5px;
}
}
.button {
.button {
display: flex;
justify-content: flex-end;
padding-bottom: 20px;
margin-right: 20px;
}
}
</style>
......@@ -17,15 +17,24 @@
</el-date-picker>
</el-form-item>
<el-form-item label="投标人澄清答疑截止时间:" prop="answerQuestionEndTime">
<el-date-picker v-model="ruleForm.answerQuestionEndTime" type="datetime" placeholder="选择日期时间" @change="answerQuestionEndTime">
<el-date-picker
v-model="ruleForm.answerQuestionEndTime"
type="datetime"
placeholder="选择日期时间"
@change="answerQuestionEndTime"
>
</el-date-picker>
</el-form-item>
<el-form-item label="投标文件递交截止时间及开标时间:" prop="openBidStartTime">
<el-date-picker v-model="ruleForm.openBidStartTime" type="datetime" placeholder="选择日期时间" @change="openBidStartTime">
<el-date-picker
v-model="ruleForm.openBidStartTime"
type="datetime"
placeholder="选择日期时间"
@change="openBidStartTime"
>
</el-date-picker>
</el-form-item>
</el-form>
</div>
<div class="button">
<el-button @click="upper">上一步</el-button>
......@@ -35,7 +44,7 @@
</template>
<script>
import dataForm from '@components/dataForm.vue'
import dataForm from '@components/dataForm.vue';
export default {
name: 'bidingList',
components: {
......@@ -43,47 +52,53 @@ export default {
},
data() {
let checkTime = (rule, value, callback) => {
let nowTime= new Date().getTime() if (nowTime<value) { callback(); } else { return callback(new Error('请选择大于当前的时间')); } };
let nowTime = new Date().getTime();
if (nowTime < value) {
callback();
} else {
return callback(new Error('请选择大于当前的时间'));
}
};
let checkTime1 = (rule, value, callback) => {
if(!this.ruleForm.releaseTime){
if (!this.ruleForm.releaseTime) {
return callback(new Error('请先选择招标公告正式发布时间'));
}else{
if(value>this.ruleForm.releaseTime){
} else {
if (value > this.ruleForm.releaseTime) {
callback();
}else{
} else {
return callback(new Error('请选择大于招标公告正式发布时间'));
}
}
};
let checkTime2 = (rule, value, callback) => {
if(!this.ruleForm.startTime){
if (!this.ruleForm.startTime) {
return callback(new Error('请先选择标书获取开始时间'));
}else{
if(value>this.ruleForm.startTime){
} else {
if (value > this.ruleForm.startTime) {
callback();
}else{
} else {
return callback(new Error('请选择大于标书获取开始时间'));
}
}
};
let checkTime3 = (rule, value, callback) => {
if(!this.ruleForm.endTime){
if (!this.ruleForm.endTime) {
return callback(new Error('请先选择标书获取结束时间'));
}else{
if(value>this.ruleForm.endTime){
} else {
if (value > this.ruleForm.endTime) {
callback();
}else{
} else {
return callback(new Error('请选择大于标书获取结束时间'));
}
}
};
let checkTime4 = (rule, value, callback) => {
if(!this.ruleForm.answerQuestionEndTime){
if (!this.ruleForm.answerQuestionEndTime) {
return callback(new Error('请先选择投标人澄清答疑截止时间'));
}else{
if(value>this.ruleForm.answerQuestionEndTime){
} else {
if (value > this.ruleForm.answerQuestionEndTime) {
callback();
}else{
} else {
return callback(new Error('请选择投标人澄清答疑截止时间'));
}
}
......@@ -97,97 +112,107 @@ export default {
openBidStartTime: ''
},
rules: {
releaseTime: [{
releaseTime: [
{
type: 'date',
required: true,
message: '请选择时间',
trigger: 'blur'
},
{
validator:checkTime,
}],
startTime: [{
validator: checkTime
}
],
startTime: [
{
type: 'date',
required: true,
message: '请选择时间',
trigger: 'blur'
},
{
validator:checkTime1,
}],
endTime: [{
validator: checkTime1
}
],
endTime: [
{
type: 'date',
required: true,
message: '请选择时间',
trigger: 'blur'
},
{
validator:checkTime2,
}],
answerQuestionEndTime: [{
validator: checkTime2
}
],
answerQuestionEndTime: [
{
type: 'date',
required: true,
message: '请选择时间',
trigger: 'blur'
},
{
validator:checkTime3,
}],
openBidStartTime: [{
validator: checkTime3
}
],
openBidStartTime: [
{
type: 'date',
required: true,
message: '请选择时间',
trigger: 'blur'
},
{
validator:checkTime4,
}]
validator: checkTime4
}
]
}
};
},
methods: {
releaseTime(val) {
this.ruleForm.releaseTime = new Date(val).getTime()
this.ruleForm.releaseTime = new Date(val).getTime();
},
startTime(val) {
this.ruleForm.startTime = new Date(val).getTime()
this.ruleForm.startTime = new Date(val).getTime();
},
endTime(val) {
this.ruleForm.endTime = new Date(val).getTime()
this.ruleForm.endTime = new Date(val).getTime();
},
answerQuestionEndTime(val) {
this.ruleForm.answerQuestionEndTime = new Date(val).getTime()
this.ruleForm.answerQuestionEndTime = new Date(val).getTime();
},
openBidStartTime(val) {
this.ruleForm.openBidStartTime = new Date(val).getTime()
this.ruleForm.openBidStartTime = new Date(val).getTime();
},
async next() {
const valid = await this.$refs['ruleForm'].validate();
if(valid){
this.$emit('getruleForm', this.ruleForm)
this.$parent.next()
if (valid) {
this.$emit('getruleForm', this.ruleForm);
this.$parent.next();
}
},
upper() {
this.$parent.upper()
this.$parent.upper();
}
}
}
};
</script>
<style scoped>
.form {
.form {
width: 50%;
margin: 0 auto;
box-sizing: border-box;
padding-bottom: 30px;
}
}
.button {
.button {
display: flex;
justify-content: flex-end;
padding-bottom: 20px;
margin-right: 20px;
}
}
</style>
<template>
<div>
<div class="describe">标的需求</div>
<div class="padding">
<dataTable :table-data="ruleForm.commodityVOList" :columns="columns" :is-pageobj="false"> </dataTable>
<el-dialog :visible.sync="dialogVisible" title="添加标的" width="50%">
<el-form :model="searchData" :rules="rules" ref="searchData" label-width="150px">
<el-form-item label="标的编码:" prop="encoding">
<el-input v-model.trim="searchData.encoding" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="标的名称:" prop="bidName">
<el-input v-model.trim="searchData.bidName" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="数量:" prop="quantity">
<el-input
v-model.trim="searchData.quantity"
onkeyup="value=value.replace(/[^\d]/g,'')"
placeholder="请输入"
maxlength="30"
></el-input>
</el-form-item>
<el-form-item label="计量单位:" prop="unit">
<el-input v-model.trim="searchData.unit" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="品牌:" prop="brand">
<el-input v-model.trim="searchData.brand" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="规格型号:" prop="specification">
<el-input v-model.trim="searchData.specification" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
<el-form-item label="标杆价(元):" prop="price">
<el-input-number
v-model="searchData.price"
:min="0"
:controls="false"
:precision="2"
placeholder="请输入"
></el-input-number>
</el-form-item>
<el-form-item label="备注:" prop="remark">
<el-input v-model.trim="searchData.remark" placeholder="请输入" maxlength="30"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="sure">确 定</el-button>
</div>
</el-dialog>
</div>
</div>
</template>
<script>
import { generateNumber } from '@api/common/list';
import dataTable from '@components/nopageTable.vue';
import dataForm from '@components/dataForm.vue';
export default {
components: {
dataTable,
dataForm
},
props: {
ruleForm: {
type: Object,
default() {
return {};
}
}
},
data() {
return {
// 表单验证
rules: {
encoding: [
{
required: true,
message: '请输入',
trigger: 'blur'
}
],
bidName: [
{
required: true,
message: '请输入',
trigger: 'blur'
}
],
quantity: [
{
required: true,
message: '请输入',
trigger: 'blur'
}
],
unit: [
{
required: true,
message: '请输入',
trigger: 'blur'
}
],
brand: [
{
required: true,
message: '请输入',
trigger: 'blur'
}
],
specification: [
{
required: true,
message: '请输入',
trigger: 'blur'
}
],
price: [
{
required: true,
message: '请输入',
trigger: 'blur'
}
]
},
multipleSelection: [],
dialogVisible: false,
searchData: {
encoding: '',
bidName: '',
quantity: '',
unit: '',
brand: '',
specification: '',
price: undefined,
remark: ''
},
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'
},
{
slot: 'operate'
}
], // 操作列
pageObj: {
size: 10,
total: 1,
currentPage: 1,
sizes: [100, 200, 300],
func: (currentPage) => {
this.pageTurning(currentPage);
}
},
type: '',
idx: ''
};
},
created() {
},
methods: {
// 删除操作
handleDelete(row, index) {
// 二次确认删除
this.$confirm('确定要删除吗?', '提示', {
type: 'warning'
})
.then(() => {
this.$message.success('删除成功');
this.tableData.splice(index, 1);
})
.catch(() => {});
},
getSelection(val) {
console.log(val);
this.multipleSelection = val;
},
// 删除操作
delAllSelection() {
let val = this.multipleSelection;
if (val.length > 0) {
console.log(val);
val.forEach((va, index) => {
this.tableData.forEach((v, i) => {
if (va.bidName === v.bidName) {
this.tableData.splice(i, 1);
}
});
});
this.$message.success('删除成功');
this.multipleSelection = [];
} else {
this.$message.error('没有选择删除的项');
}
},
// 确认添加需求
async sure() {
const valid = await this.$refs['searchData'].validate();
console.log(valid);
if (valid) {
let type = this.type;
if (type === 0) {
this.tableData.push(this.searchData);
} else {
this.$set(this.tableData, this.idx, this.searchData);
}
this.dialogVisible = false;
}
},
examine(row, index) {
this.type = 1;
this.idx = index;
this.searchData = Object.assign({}, row);
this.dialogVisible = true;
},
async add() {
try {
this.type = 0;
this.dialogVisible = true;
const { data, code } = await generateNumber(2);
let searchData = {
encoding: data,
bidName: '',
quantity: '',
unit: '',
brand: '',
specification: '',
price: '',
remark: ''
};
console.log(searchData);
this.searchData = searchData;
} catch (e) {
console.log(e);
}
},
next() {
let projectCommodityList = this.tableData;
let ruleForm = {};
ruleForm.projectCommodityList = projectCommodityList;
this.$emit('getruleForm', ruleForm);
this.$parent.next();
}
}
};
</script>
<style scoped>
.padding {
box-sizing: border-box;
padding: 10px 20px 30px 20px;
}
.buttons {
margin-bottom: 30px;
}
.button {
display: flex;
justify-content: flex-end;
padding-bottom: 20px;
margin-right: 20px;
}
</style>
<template>
<div>
<div class="describe">上传招标文件</div>
<div class="padding">
<div class="details">
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="100px" class="demo-ruleForm">
<el-form-item label="上传附件" prop="file">
<upload :limit="1" accept=".pdf" tip="请上传一个招标文件(pdf),不要超过50M。" :max="50" @input="getfile"></upload>
</el-form-item>
<el-form-item label="其他附件">
<upload :limit="5" tip="最多上传五个附件,单个不超过100M。" :type="1" :max="100" @input="getfile1"> </upload>
</el-form-item>
</el-form>
</div>
</div>
</div>
</template>
<script>
import { creatProject } from '@api/purchaser/bid';
import upload from '@components/Upload/specialUpload.vue';
export default {
components: {
upload
},
props: {
allForm: {
type: Object,
default() {
return {};
}
}
},
data() {
let checkidentity = (rule, value, callback) => {
let le;
if (this.ruleForm.bidBookPO.length === 0) {
callback(new Error('请上传附件'));
} else {
callback();
}
};
return {
ruleForm: {
bidBookPO: [],
bidBookAccessoryPOList: []
},
fileList: [],
rules: {
file: [
{
required: true,
validator: checkidentity,
trigger: 'change'
}
]
}
};
},
methods: {
getfile(val) {
this.ruleForm.bidBookPO = val;
},
getfile1(val) {
this.ruleForm.bidBookAccessoryPOList = val;
},
async next() {
const valid = await this.$refs['ruleForm'].validate();
}
}
};
</script>
<style scoped>
.padding {
padding: 0px 20px 30px 20px;
}
.details > div {
margin-bottom: 20px;
}
.correct {
margin-right: 20px;
margin-top: 5px;
}
.button {
display: flex;
justify-content: flex-end;
padding-bottom: 20px;
margin-right: 20px;
}
</style>
This diff is collapsed.
<template>
<div>
<div class="content-head">
<el-breadcrumb separator="/">
<el-breadcrumb-item>招标管理 </el-breadcrumb-item>
<el-breadcrumb-item>招标项目管理</el-breadcrumb-item>
<el-breadcrumb-item>发布项目</el-breadcrumb-item>
</el-breadcrumb>
<h3>查看项目</h3>
<h5>查看招标项目</h5>
</div>
<div class="othercontent">
<!-- 项目信息 -->
<div class="message1">
<messaage ref="message" :ruleForm="detail"></messaage>
</div>
<!-- 标的需求 -->
<div class="demand">
<demand ref="demand" :ruleForm="detail"></demand>
</div>
<!-- 招标时间设置 -->
<div class="timeSet">
<timeSet ref="timeSet" :ruleForm="detail"></timeSet>
</div>
<!-- 招标文件上传 -->
<div class="fileUpload">
<fileUpload ref="fileUpload" :detail="detail"></fileUpload>
</div>
</div>
<div class="centerButton">
<el-button @click="back">返回</el-button>
</div>
</div>
</template>
<script>
import { projectdetail } from '@api/supply/bid';
import { getTime1 } from '@utils/time';
import messaage from './message.vue';
import demand from './demand.vue';
import timeSet from './timeSet.vue';
import fileUpload from './fileUpload.vue';
export default {
components: {
messaage,
demand,
timeSet,
fileUpload
},
data() {
return {
activeIdx: 0,
allForm: {},
detail: {
}
};
},
created() {
this.getenquiryProjectId();
},
methods: {
back(){
this.$router.go(-1)
},
// 获取详情
async getenquiryProjectId() {
let projectId = localStorage.getItem('projectId');
const { data, code } = await projectdetail(projectId);
if (code == 200) {
data.endTime = getTime1(data.endTime);
data.startTime = getTime1(data.startTime);
data.createTime = data.createTime.substring(0, 10);
data.bidBookInfoPO=data.bidBookInfoDO
data.earnestInfoPO=data.earnestInfoDO
this.detail = data;
}
}
}
};
</script>
<style scoped>
.steps {
width: 800px;
margin: 0 auto;
padding: 30px 0;
}
.othercontent > div {
background: #fff;
margin-bottom: 30px;
}
.bid {
margin-top: -20px;
}
.button {
display: flex;
justify-content: flex-end;
padding-bottom: 20px;
margin-right: 20px;
}
</style>
<template>
<div>
<div class="describe">招标时间设置</div>
<div class="form">
<!-- <dataForm :search-form="searchForm" :search-data="searchData" :is-handle="false" label-width="250px"></dataForm> -->
<el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="250px" class="demo-ruleForm">
<el-form-item label="招标公告正式发布时间:" prop="releaseTime">
<el-date-picker v-model="ruleForm.releaseTime" type="datetime" placeholder="选择日期时间" @change="releaseTime" disabled>
</el-date-picker>
</el-form-item>
<el-form-item label="标书获取开始时间:" prop="startTime">
<el-date-picker v-model="ruleForm.startTime" type="datetime" placeholder="选择日期时间" @change="startTime" disabled>
</el-date-picker>
</el-form-item>
<el-form-item label="标书获取结束时间:" prop="endTime">
<el-date-picker v-model="ruleForm.endTime" type="datetime" placeholder="选择日期时间" @change="endTime " disabled>
</el-date-picker>
</el-form-item>
<el-form-item label="投标人澄清答疑截止时间:" prop="answerQuestionEndTime">
<el-date-picker v-model="ruleForm.answerQuestionEndTime" type="datetime" placeholder="选择日期时间" @change="answerQuestionEndTime" disabled>
</el-date-picker>
</el-form-item>
<el-form-item label="投标文件递交截止时间及开标时间:" prop="openBidStartTime">
<el-date-picker v-model="ruleForm.openBidStartTime" type="datetime" placeholder="选择日期时间" @change="openBidStartTime" disabled>
</el-date-picker>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
import dataForm from '@components/dataForm.vue'
export default {
components: {
dataForm
},
props: {
ruleForm: {
type: Object,
default() {
return {};
}
}
},
data() {
let checkTime = (rule, value, callback) => {
let nowTime= new Date().getTime()
if (nowTime<value) {
callback();
} else {
return callback(new Error('请选择大于当前的时间'));
}
};
let checkTime1 = (rule, value, callback) => {
if(!this.ruleForm.releaseTime){
return callback(new Error('请先选择招标公告正式发布时间'));
}else{
if(value>this.ruleForm.releaseTime){
callback();
}else{
return callback(new Error('请选择大于招标公告正式发布时间'));
}
}
};
let checkTime2 = (rule, value, callback) => {
if(!this.ruleForm.startTime){
return callback(new Error('请先选择标书获取开始时间'));
}else{
if(value>this.ruleForm.startTime){
callback();
}else{
return callback(new Error('请选择大于标书获取开始时间'));
}
}
};
let checkTime3 = (rule, value, callback) => {
if(!this.ruleForm.endTime){
return callback(new Error('请先选择标书获取结束时间'));
}else{
if(value>this.ruleForm.endTime){
callback();
}else{
return callback(new Error('请选择大于标书获取结束时间'));
}
}
};
let checkTime4 = (rule, value, callback) => {
if(!this.ruleForm.answerQuestionEndTime){
return callback(new Error('请先选择投标人澄清答疑截止时间'));
}else{
if(value>this.ruleForm.answerQuestionEndTime){
callback();
}else{
return callback(new Error('请选择投标人澄清答疑截止时间'));
}
}
};
return {
rules: {
}
}
},
methods: {
releaseTime(val) {
this.ruleForm.releaseTime = new Date(val).getTime()
},
startTime(val) {
this.ruleForm.startTime = new Date(val).getTime()
},
endTime(val) {
this.ruleForm.endTime = new Date(val).getTime()
},
answerQuestionEndTime(val) {
this.ruleForm.answerQuestionEndTime = new Date(val).getTime()
},
openBidStartTime(val) {
this.ruleForm.openBidStartTime = new Date(val).getTime()
},
async next() {
const valid = await this.$refs['ruleForm'].validate();
},
upper() {
this.$parent.upper()
}
}
}
</script>
<style scoped>
.form {
width: 50%;
margin: 0 auto;
box-sizing: border-box;
padding-bottom: 30px;
}
.button {
display: flex;
justify-content: flex-end;
padding-bottom: 20px;
margin-right: 20px;
}
</style>
......@@ -3,101 +3,87 @@
<div class="user">
<div>你好 ,MaikoXie , 欢迎开始一天的工作!</div>
<ul class="user-list flex-between">
<li class="flex-colunm ">
<img src="@static/images/user.png" alt="">
<div>全部项目</div>
<div>{{detail.projectCount}}</div>
</li>
<li class="flex-colunm ">
<img src="@static/images/user.png" alt="">
<div>我的供应商</div>
<div>{{detail.bidderCount}}</div>
</li>
<li class="flex-colunm ">
<img src="@static/images/user.png" alt="">
<div>已定标项目</div>
<div>{{detail.calibrated}}</div>
</li>
<li class="flex-colunm ">
<img src="@static/images/user.png" alt="">
<div>已流标项目</div>
<div>{{detail.bidFailed}}</div>
<li class="flex-colunm">
<img src="@static/images/user.png" alt="" />
<div>今日可报名项目</div>
<div>{{ detail.applyProjects }}</div>
</li>
<li class="flex-colunm ">
<img src="@static/images/user.png" alt="">
<div>已终止项目</div>
<div>{{detail.end}}</div>
<li class="flex-colunm">
<img src="@static/images/user.png" alt="" />
<div>中标项目</div>
<div>{{ detail.winProjects }}</div>
</li>
</ul>
<h1>项目信息</h1>
<dataTable :table-data="tableData" :columns="columns" :is-pageobj="false" >
<el-table-column slot="operate" label="快捷操作" align="center" fixed="right" width="200">
<template slot-scope="scope">
<el-button type="text" size="small" @click="handleSee(scope.row)">查看</el-button>
</template>
</el-table-column>
<dataTable :table-data="tableData" :columns="columns" :is-pageobj="false">
</dataTable>
<h1>待办事项</h1>
<!-- <h1>待办事项</h1>
<ul class="flex-between project-list">
<li class="flex-colunm">
<img src="@static/images/item.png" alt="">
<img src="@static/images/item.png" alt="" />
<div>待修改项目</div>
<div>{{ detail.projectCount }}</div>
</li>
<li class="flex-colunm">
<img src="@static/images/item.png" alt="">
<img src="@static/images/item.png" alt="" />
<div>待修改询价公告</div>
<div>{{ detail.inquiryNoticeNeedModify }}</div>
</li>
<li class="flex-colunm">
<img src="@static/images/item.png" alt="">
<img src="@static/images/item.png" alt="" />
<div>待修改招标公告</div>
<div>{{ detail.biddingNoticeNeedModify }}</div>
</li>
<li class="flex-colunm">
<img src="@static/images/item.png" alt="">
<img src="@static/images/item.png" alt="" />
<div>待签署应收账款买断合同</div>
<div>{{ detail.payment }}</div>
</li>
<li class="flex-colunm">
<img src="@static/images/item.png" alt="">
<img src="@static/images/item.png" alt="" />
<div>待确认供应商凭证</div>
<div>{{ detail.credentials }}</div>
</li>
</ul>
</ul> -->
</div>
</div>
</template>
<script>
import {home} from '@api/purchaser/home'
import {getSearchString} from '@utils/common'
import dataTable from '@components/nopageTable.vue'
import { home } from '@api/purchaser/home';
import { getSearchString } from '@utils/common';
import dataTable from '@components/nopageTable.vue';
export default {
components: {
dataTable
},
data() {
return {
detail:"",
tableData: [{
detail: '',
tableData: [
{
state: '审核通过待发布的项目',
number: '10',
url: ''
}, {
},
{
state: '处于招投标阶段的项目',
number: '10',
url: ''
}, {
},
{
state: '今日截标(开标)的项目',
number: '10',
url: ''
}, {
},
{
state: '处于开标阶段的项目',
number: '10',
url: ''
}],
columns: [{
}
],
columns: [
{
label: '当前状态',
prop: 'state'
},
......@@ -109,7 +95,8 @@ export default {
slot: 'operate'
}
], // 操作列
projectlist: [{
projectlist: [
{
id: 0,
img: require('@static/images/item.png'),
project: '待审核项目',
......@@ -139,77 +126,73 @@ export default {
project: '待审核项目',
number: '100'
}
],
}
]
};
},
created(){
let token=getSearchString("token");
if(token!=="undefined"){
localStorage.setItem("token",token)
created() {
let token = getSearchString('token');
if (token !== 'undefined') {
localStorage.setItem('token', token);
}
this.gethome()
this.gethome();
},
methods: {
handleSee(row) {
this.$router.push(row.url)
this.$router.push(row.url);
},
async gethome() {
const {
data,
code
} = await home()
this.detail=data
this.tableData[0].number=data.prePublic
this.tableData[1].number=data.sellingBidding
this.tableData[2].number=data.bidding
this.tableData[3].number=data.open
this.tableData[4].number=data.bidOpening
this.tableData[5].number=data.bidOevaluating
const { data, code } = await home();
this.detail = data;
this.tableData[0].number = data.sellingBidding;
this.tableData[1].number = data. bidding;
this.tableData[2].number = data.open;
this.tableData[3].number = data.bidOpening;
this.tableData[4].number = data.bidOevaluating;
this.tableData[5].number = data.bidDecide;
}
}
}
};
</script>
<style scoped>
.user>h1 {
.user > h1 {
font-weight: bold;
margin-top: 50px;
margin-bottom: 30px;
}
}
.home {
.home {
box-sizing: border-box;
padding: 30px
}
padding: 30px;
}
.home>.user {
.home > .user {
box-sizing: border-box;
padding-left: 30px;
padding-top: 30px;
background: #fff;
}
}
.user>.user-list {
.user > .user-list {
margin-top: 50px;
margin-left: 30px;
}
}
.user>ul {
width: 80%
}
.user > ul {
width: 80%;
}
.user>.user-list>li>div {
.user > .user-list > li > div {
margin-top: 10px;
margin-bottom: 10px;
}
}
.project-list {
.project-list {
margin-left: 30px;
}
}
.project-list>li>div {
.project-list > li > div {
margin-top: 10px;
margin-bottom: 10px;
}
}
</style>
......@@ -4,25 +4,19 @@
<div class="user">
<h5>你好,MaikoXie,欢迎开始一天的工作!</h5>
<ul class="user-list flex">
<li v-for = "item in imglist" :key ="item.id" class="flex-colunm">
<img :src="item.src" alt="">
<li v-for="item in imglist" :key="item.id" class="flex-colunm">
<img :src="item.src" alt="" />
<div class="user-pos">{{ item.info }}</div>
<div>{{ item.num }}</div>
</li>
</ul>
<h2>项目信息</h2>
<dataTable :table-data = "tabledata" :columns="columns" >
<el-table-column slot="opration" align="center" label="快捷操作" flexd="right" width="200px">
<template :slot-scope = "scope">
<el-button type="text" size="small" @click="handlesee(scope.row)">查看
</el-button>
</template>
</el-table-column>
<dataTable :table-data="tabledata" :columns="columns">
</dataTable>
<h2 class="se-h2">待办事项</h2>
<ul class="project-list flex" >
<li v-for = "item in projectlist" :key = "item.id">
<img :src="item.src" alt="">
<ul class="project-list flex">
<li v-for="item in projectlist" :key="item.id">
<img :src="item.src" alt="" />
<div>{{ item.project }}</div>
<div>{{ item.account }}</div>
</li>
......@@ -32,144 +26,137 @@
</template>
<script>
import dataTable from '@components/nopageTable.vue'
import { home } from '@api/supply/home';
import { getSearchString } from '@utils/common';
import dataTable from '@components/nopageTable.vue';
export default {
components: {
dataTable
},
data() {
return {
projectlist: [{
projectlist: [
{
id: 0,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 1,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 2,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 3,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 4,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 5,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 6,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 7,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 8,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 9,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 10,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 11,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 12,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 13,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
},
{
id: 14,
src: require('@static/images/item.png'),
project: '待处理投标邀请',
account: 100
}],
imglist: [{
}
],
imglist: [
{
id: 0,
src: require('@static/images/user.png'),
info: '今日可报名项目',
num: 100
}, {
},
{
id: 1,
src: require('@static/images/user.png'),
info: '中标项目',
num: 100
}],
}
],
//表格第一行
columns: [{
columns: [
{
label: '当前状态',
prop: 'state'
},
{
label: '数量',
prop: 'number'
}, {
},
{
slot: 'opration'
}
],
tabledata: [{
tabledata: [
{
state: '处于售标&投标阶段的项目',
number: 10,
url: ''
......@@ -198,55 +185,69 @@ export default {
state: '处于定标阶段的项目',
number: 10,
url: ''
}]
}
]
};
},
methods: {
handlesee() {
handlesee() {},
async gethome() {
const { data, code } = await home();
this.detail = data;
this.tableData[0].number = data.prePublic;
this.tableData[1].number = data.sellingBidding;
this.tableData[2].number = data.bidding;
this.tableData[3].number = data.open;
this.tableData[4].number = data.bidOpening;
this.tableData[5].number = data.bidOevaluating;
}
},
created() {
let token = getSearchString('token');
if (token !== 'undefined') {
localStorage.setItem('token', token);
}
}
this.gethome();
},
};
</script>
<style scoped>
.home{
padding:30px;
.home {
padding: 30px;
box-sizing: border-box;
}
.home>.user{
.home > .user {
box-sizing: border-box;
padding-left:20px;
padding-top:20px;
padding-left: 20px;
padding-top: 20px;
background: #fff;
}
.user-list{
.user-list {
margin-bottom: 30px;
margin-left: 10px;
}
.user-list>li{
.user-list > li {
margin-right: 70px;
}
h5{
margin-top:30px;
margin-bottom:30px;
h5 {
margin-top: 30px;
margin-bottom: 30px;
}
h2{
h2 {
margin-bottom: 50px;
}
.se-h2{
margin-top:30px;
.se-h2 {
margin-top: 30px;
}
.project-list{
margin-left:30px;
.project-list {
margin-left: 30px;
flex-wrap: wrap;
text-align: center;
}
.project-list>li{
margin-right:100px;
.project-list > li {
margin-right: 100px;
margin-bottom: 20px;
}
</style>
......@@ -302,6 +302,16 @@ export default new Router({
show: true,
component: () => import('../pages/purchaser/bid/releaseProject/releaseProject.vue')
},
{
path: '/purchaser/bid/editProject',
show: true,
component: () => import('../pages/purchaser/bid/editProject/editProject.vue')
},
{
path: '/purchaser/bid/seeProject',
show: true,
component: () => import('../pages/purchaser/bid/seeProject/seeProject.vue')
},
{
path: '/purchaser/bid/reviewed/inquiryAnnouncement',
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