sangwenwei hace 11 meses
padre
commit
d36fe06d81

+ 44 - 0
src/api/jy/BidService.js

@@ -0,0 +1,44 @@
+import request from "@/utils/httpRequest";
+import { BUSINESS_PATH as prefix } from "../AppPath";
+
+export default class BidService {
+	findPageList(params) {
+		return request({
+			url: prefix + "/bid/list",
+			method: "get",
+			params: params,
+		});
+	}
+
+	save(param) {
+		return request({
+			url: prefix + "/bid/save",
+			method: "post",
+			data: param,
+		});
+	}
+
+	findById(id) {
+		return request({
+			url: prefix + "/bid/findById",
+			method: "get",
+			params: { id: id},
+		});
+	}
+	remove(id) {
+		return request({
+			url: prefix + "/bid/remove",
+			method: "get",
+			params: { id: id },
+		});
+	}
+
+	bidList(params) {
+		return request({
+			url: prefix + "/bid/bidList",
+			method: "get",
+			params: params,
+		});
+	}
+
+}

+ 53 - 0
src/api/jy/TenderService.js

@@ -0,0 +1,53 @@
+import request from "@/utils/httpRequest";
+import { BUSINESS_PATH as prefix } from "../AppPath";
+
+export default class TenderService {
+	findPageList(params) {
+		return request({
+			url: prefix + "/tender/list",
+			method: "get",
+			params: params,
+		});
+	}
+
+	save(param) {
+		return request({
+			url: prefix + "/tender/save",
+			method: "post",
+			data: param,
+		});
+	}
+
+	findById(id) {
+		return request({
+			url: prefix + "/tender/findById",
+			method: "get",
+			params: { id: id},
+		});
+	}
+	remove(id) {
+		return request({
+			url: prefix + "/tender/remove",
+			method: "get",
+			params: { id: id },
+		});
+	}
+
+	copyToLeader(id) {
+		return request({
+			url: prefix + "/tender/copyToLeader",
+			method: "get",
+			params: { id: id },
+		});
+	}
+
+	exportFile(params) {
+		return request({
+			url: prefix + "/tender/export",
+			method: "get",
+			params: params,
+			responseType: "blob",
+		});
+	}
+
+}

+ 14 - 2
src/views/dashboard/widgets/components/MyFlowCopyList.vue

@@ -71,12 +71,18 @@
 		</vxe-pager>
 	</el-card>
 	<MonthlyForm ref="monthlyForm" @refreshList="refreshList"></MonthlyForm>
+	<TenderForm ref="tenderForm" @refreshList="refreshList"></TenderForm>
+	<BidForm ref="bidForm" @refreshList="refreshList"></BidForm>
+
 </template>
 
 <script>
 import flowCopyService from "@/api/flowable/flowCopyService";
 import taskService from "@/api/flowable/taskService";
 import MonthlyForm from '@/views/jy/monthly/MonthlyForm'
+import TenderForm from "@/views/jy/tender/TenderForm";
+import BidForm from "@/views/jy/tender/BidForm";
+
 import pick from "lodash.pick";
 export default {
 	title: "抄送事项",
@@ -87,7 +93,9 @@ export default {
 		h: 15,
 	},
 	components: {
-		MonthlyForm
+		MonthlyForm,
+		TenderForm,
+		BidForm
 	},
 	data() {
 		return {
@@ -152,7 +160,11 @@ export default {
 		},
 		// 查看
 		detail(row) {
-			if (row.procInsName.includes("月报")){
+			if (row.procInsName.includes("已中标")){
+				this.$refs.bidForm.init('view',row.procInsId)
+			}else if (row.procInsName.includes("投标批次")){
+				this.$refs.tenderForm.init('view',row.procInsId)
+			}else if (row.procInsName.includes("月报")){
 				this.$refs.monthlyForm.init('view',row.procInsId)
 			}else {
 				taskService

+ 12 - 2
src/views/flowable/extension/FlowCopyList.vue

@@ -162,6 +162,8 @@
 			@doSubmit="selectUser">
 		</user-select2>
 		<MonthlyForm ref="monthlyForm" @refreshList="refreshList"></MonthlyForm>
+		<TenderForm ref="tenderForm" @refreshList="refreshList"></TenderForm>
+		<BidForm ref="bidForm" @refreshList="refreshList"></BidForm>
 	</div>
 </template>
 
@@ -172,6 +174,8 @@ import taskService from "@/api/flowable/taskService";
 import flowCopyService from "@/api/flowable/flowCopyService";
 import UserSelect2 from '@/components/userSelect2/UserSelectDialog';
 import MonthlyForm from '@/views/jy/monthly/MonthlyForm'
+import TenderForm from "@/views/jy/tender/TenderForm";
+import BidForm from "@/views/jy/tender/BidForm";
 
 
 export default {
@@ -197,7 +201,9 @@ export default {
 	},
 	components: {
 		UserSelect2,
-		MonthlyForm
+		MonthlyForm,
+		TenderForm,
+		BidForm
 	},
 	mounted() {
 		this.$nextTick(() => {
@@ -253,7 +259,11 @@ export default {
 			});
 		},
 		detail(row) {
-			if (row.procInsName.includes("月报")){
+			if (row.procInsName.includes("已中标")){
+				this.$refs.bidForm.init('view',row.procInsId)
+			}else if (row.procInsName.includes("投标批次")){
+				this.$refs.tenderForm.init('view',row.procInsId)
+			}else if (row.procInsName.includes("月报")){
 				this.$refs.monthlyForm.init('view',row.procInsId)
 			}else {
 				taskService

+ 664 - 0
src/views/jy/tender/BidForm.vue

@@ -0,0 +1,664 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog
+			:title="title"
+			:close-on-click-modal="false"
+			draggable
+			width="1500px"
+			@close="close"
+			@keyup.enter.native="doSubmit"
+			v-model="visible"
+			append-to-body
+		>
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
+					 label-width="110px" @submit.native.prevent>
+
+				<el-divider content-position="left"><i class="el-icon-document"></i> 基础信息</el-divider>
+				<el-row :gutter="20">
+					<el-col :span="12">
+						<el-form-item label="批次" prop="batch"
+									  :rules="[{required: true, message: '批次不能为空', trigger: 'blur'}
+                 ]">
+							<el-input v-model="inputForm.batch" @focus="openTenderForm()" placeholder="请填写批次">
+								<el-button slot="append" icon="el-icon-search" @click="openTenderForm()"></el-button>
+							</el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="创建人" prop="createName">
+							<el-input v-model="inputForm.createName" :disabled="true"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="创建人部门" prop="officeName">
+							<SelectTree
+								:disabled="true"
+								ref="officeTree"
+								:props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+
+								:url="`/system-server/sys/office/treeData?type=2`"
+								:value="inputForm.officeName"
+								:accordion="true"
+								size="default"
+								@getValue="(value) => {inputForm.officeName=value}"/>
+							<!--            <el-input v-model="inputForm.handledByOffice" :disabled="true"></el-input>-->
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="报名截止时间" prop="applicationDeadline" :rules="[{required: true, message:'请选择报名截止时间', trigger:'blur'}]">
+							<el-date-picker
+								v-model="inputForm.applicationDeadline"
+								:disabled="true"
+								type="datetime"
+								format="YYYY-MM-DD HH:mm:ss"
+								value-format="YYYY-MM-DD HH:mm:ss"
+								placement="bottom-start"
+								style="width: 100%"
+								placeholder="选择日期">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="截标时间" prop="bidClosingTime" :rules="[{required: true, message:'请选择截标时间', trigger:'blur'}]">
+							<el-date-picker
+								v-model="inputForm.bidClosingTime"
+								:disabled="true"
+								type="datetime"
+								format="YYYY-MM-DD HH:mm:ss"
+								value-format="YYYY-MM-DD HH:mm:ss"
+								placement="bottom-start"
+								style="width: 100%"
+								placeholder="选择日期">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+				</el-row>
+				<el-row :gutter="20">
+					<el-col :span="24">
+						<el-form-item label="备注" prop="remarks">
+							<el-input v-model="inputForm.remarks"
+									  type="textarea"
+									  :rows="5"
+									  maxlength="500"
+									  placeholder="请输入备注"
+									  show-word-limit>
+							</el-input>
+						</el-form-item>
+					</el-col>
+				</el-row>
+
+				<div v-if="commonJS.isNotEmpty(inputForm.batch)">
+					<el-divider content-position="left"><i class="el-icon-document"></i>
+						投标详情
+					</el-divider>
+					<el-row  :gutter="15" >
+						<el-col :span="24">
+							<vxe-table
+								border
+								show-footer
+								show-overflow
+								:footer-method="footerMethod"
+								ref="detailTable"
+								class="vxe-table-element"
+								:data="inputForm.tenderList"
+								style="margin-left: 5em"
+								:key="clientTableKey"
+								highlight-current-row
+								:edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: '-'}"
+								:edit-rules="validRules"
+							>
+								<vxe-table-column align="center" field="createName" title="投标人" :edit-render="{}" :rules="[{required: true, message:'请选择投标人', trigger:'blur'}]">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.createName" @focus="userPullListForm(scope.$rowIndex)"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column align="center" field="officeName" title="投标部门" :edit-render="{}">
+									<template v-slot:edit="scope">
+										<el-input :disabled='true' v-model="scope.row.officeName" ></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column align="center" field="purchaseNumber" title="采购申请号" :edit-render="{}" :rules="[{required: true, message:'请输入采购申请号', trigger:'blur'}]">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.purchaseNumber"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column align="center" field="subscaleNumber" title="分标编号" :edit-render="{}" :rules="[{required: true, message:'请输入分标编号', trigger:'blur'}]">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.subscaleNumber"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column align="center" field="subscaleName" title="分标名称" :edit-render="{}" :rules="[{required: true, message:'请输入分标名称', trigger:'blur'}]">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.subscaleName"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column align="center" field="packageNumber" title="包号" :edit-render="{}" :rules="[{required: true, message:'请输入包号', trigger:'blur'}]">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.packageNumber"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column align="center" field="sectionName" title="招标项目标段名称" :edit-render="{}" :rules="[{required: true, message:'请输入招标项目标段名称', trigger:'blur'}]">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.sectionName"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column align="center" field="money" title="采购金额(元)" :edit-render="{}" :rules="[{required: true, message:'请输入采购金额', trigger:'blur'}]">
+									<template v-slot:edit="scope">
+										<el-input @change="changeValue" maxlength="15" v-model="scope.row.money" @blur="scope.row.money = twoDecimalPlaces(scope.row.money)"></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column align="center" field="remarks" title="备注" :edit-render="{}">
+									<template v-slot:edit="scope">
+										<el-input v-model="scope.row.remarks" ></el-input>
+									</template>
+								</vxe-table-column>
+								<vxe-table-column title="操作" width="180">
+									<template #default="scope">
+										<vxe-button size="small" v-if="method === 'bidAdd'" status="primary" :disabled="false" @click="bidCheck(scope.$rowIndex)">中标</vxe-button>
+										<vxe-button status="primary" size="small" v-if="method==='view'" :disabled="false" @click="seeFileInfo(scope.$rowIndex)">查看文件详情</vxe-button>
+									</template>
+								</vxe-table-column>
+							</vxe-table>
+						</el-col>
+					</el-row>
+				</div>
+
+
+				<el-divider content-position="left"><i class="el-icon-document"></i>
+					中标详情
+					<el-button style="margin-left: 20px" type="primary" @click="insertEvent('detail')" plain>
+						新增
+					</el-button>
+				</el-divider>
+				<el-row  :gutter="15" >
+					<el-col :span="24">
+						<vxe-table
+							border
+							show-footer
+							show-overflow
+							:footer-method="footerMethod"
+							ref="bidTable"
+							class="vxe-table-element"
+							:data="inputForm.bidDetails"
+							style="margin-left: 5em"
+							:key="bidTableKey"
+							highlight-current-row
+							:edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: '-'}"
+							:edit-rules="validRules"
+						>
+							<vxe-table-column align="center" field="createName" title="投标人" :edit-render="{}" :rules="[{required: true, message:'请选择投标人', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.createName" @focus="userPullListForm(scope.$rowIndex)"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="officeName" title="投标部门" :edit-render="{}">
+								<template v-slot:edit="scope">
+									<el-input :disabled='true' v-model="scope.row.officeName" ></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="purchaseNumber" title="采购申请号" :edit-render="{}" :rules="[{required: true, message:'请输入采购申请号', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.purchaseNumber"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="subscaleNumber" title="分标编号" :edit-render="{}" :rules="[{required: true, message:'请输入分标编号', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.subscaleNumber"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="subscaleName" title="分标名称" :edit-render="{}" :rules="[{required: true, message:'请输入分标名称', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.subscaleName"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="packageNumber" title="包号" :edit-render="{}" :rules="[{required: true, message:'请输入包号', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.packageNumber"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="sectionName" title="招标项目标段名称" :edit-render="{}" :rules="[{required: true, message:'请输入招标项目标段名称', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.sectionName"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="money" title="采购金额(元)" :edit-render="{}" :rules="[{required: true, message:'请输入采购金额', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input @change="changeValue" maxlength="15" v-model="scope.row.money" @blur="scope.row.money = twoDecimalPlaces(scope.row.money)"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="remarks" title="备注" :edit-render="{}">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.remarks" ></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column title="操作" width="180">
+								<template #default="scope">
+									<vxe-button status="primary" size="small" v-show="method === 'view'" :disabled="false" @click="seeFileInfo2(scope.$rowIndex)">查看附件</vxe-button>
+									<vxe-button status="primary" size="small" v-if="method !== 'view'" @click="sss2(scope.$rowIndex)">上传附件</vxe-button>
+									<vxe-button status="danger" size="small" v-if="method !== 'view'" @click="removeEvent(scope.row,scope.$rowIndex,'detail')">删除</vxe-button>
+								</template>
+							</vxe-table-column>
+						</vxe-table>
+					</el-col>
+				</el-row>
+
+
+			</el-form>
+			<!-- 附件 -->
+			<UpLoadComponent ref="uploadComponent"></UpLoadComponent>
+			<MaterialManagementDialog ref="materialManagementDialog" @getUpload="getUpload"></MaterialManagementDialog>
+			<UserPullForm ref="userPullForm" @getProgramForUser="getProgramForUser"></UserPullForm>
+			<TenderChooseForm ref="tenderChooseForm" @getProject="getTender"></TenderChooseForm>
+			<template #footer>
+		  <span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+	import SelectTree from '@/components/treeSelect/treeSelect.vue'
+	import MaterialManagementDialog from '@/views/materialManagement/file/MaterialManagementDialog'
+	import TenderService from '@/api/jy/TenderService'
+	import BidService from '@/api/jy/BidService'
+	import UpLoadComponent from '@/views/common/UpLoadComponent'
+	import UserPullForm from '@/views/finance/invoice/UserPullForm'
+	import TenderChooseForm from "./TenderChooseForm";
+	import XEUtils from 'xe-utils'
+	export default {
+		data () {
+			return {
+				validRules: {
+					createName: [
+						{required: true, message: '投标人不能为空'}
+					],
+					purchaseNumber: [
+						{required: true, message: '采购申请号不能为空'}
+					],
+					subscaleNumber: [
+						{required: true, message: '分标编号不能为空'}
+					],
+					subscaleName: [
+						{required: true, message: '分标名称不能为空'}
+					],
+					packageNumber: [
+						{required: true, message: '包号不能为空'}
+					],
+					sectionName: [
+						{required: true, message: '招标项目标段名称不能为空'}
+					],
+					money: [
+						{required: true, message: '采购金额不能为空'}
+					]
+				},
+				title: '',
+				method: '',
+				visible: false,
+				loading: false,
+				inputForm: {
+					tenderId:'',//投标id
+					id:'',
+					totalMoney: '',  // 采购金额总价
+					tenderList: [], //投标详情
+					batch: '', //批次
+					createName: '',
+					officeName: '',
+					applicationDeadline: '', //报名截止时间
+					bidClosingTime: '', // 截标时间
+					createById: '',
+					remarks: '',
+					files: [], // 附件信息
+					bidDetails:[] //中标详情
+				},
+				clientTableKey: '',
+				bidTableKey: '',
+			}
+		},
+		TenderService: null,
+		BidService: null,
+		created () {
+			this.tenderService = new TenderService()
+			this.bidService = new BidService()
+		},
+		components: {
+			SelectTree,
+			MaterialManagementDialog,
+			UpLoadComponent,
+			UserPullForm,
+			TenderChooseForm
+		},
+		computed: {
+			createName () {
+				return this.$store.state.user.name
+			},
+			officeName () {
+				return this.$store.state.user.office.name
+			},
+			bidMan () {
+				return this.$store.state.user.id
+			},
+
+		},
+		methods: {
+			init (method, id) {
+				console.log('method', method)
+				this.method = method
+				console.log('this.method', this.method)
+				this.inputForm = {
+					tenderId:'',//投标id
+					id:'',
+					totalMoney: '',  // 采购金额总价
+					tenderList: [],
+					batch: '', //批次
+					createName: this.$store.state.user.name,
+					officeName: this.$store.state.user.office.id,
+					applicationDeadline: '', //报名截止时间
+					bidClosingTime: '', // 截标时间
+					createById: this.$store.state.user.id,
+					remarks: '',
+					files: [], // 附件信息
+					bidDetails:[] //中标详情
+				}
+				if (method === 'add') {
+					this.title = `新建中标信息`
+				} else if (method === 'edit') {
+					this.inputForm.id = id
+					this.title = '修改中标信息'
+				} else if (method === 'view') {
+					this.inputForm.id = id
+					this.title = '查看中标信息'
+				} else if (method === 'bidAdd') {
+					this.inputForm.tenderId = id
+					this.title = `新建中标信息`
+					this.getDetails(id)
+				}
+				this.visible = true
+				this.loading = false
+				this.$nextTick(() => {
+					if (method === 'edit' || method === 'view') { // 修改或者查看
+						this.loading = true
+						this.$refs.inputForm.resetFields()
+						this.bidService.findById(this.inputForm.id).then((data) => {
+							this.inputForm = this.recover(this.inputForm, data)
+							if (this.commonJS.isEmpty(this.inputForm.createName)) {
+								this.inputForm.createName = this.$store.state.user.name
+							}
+							if (this.commonJS.isEmpty(this.inputForm.officeName)) {
+								this.inputForm.officeName = this.$store.state.user.office.name
+							}
+							console.log('id',this.inputForm)
+							this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'tenderBidFile')
+							this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+							this.loading = false
+						})
+					}
+				})
+			},
+			getProgramForUser (rows) {
+				this.inputForm.tenderList[this.indexRow].bidMan = rows[0].id
+				this.inputForm.tenderList[this.indexRow].createName = rows[0].name
+				// this.inputForm.tenderList[this.indexRow].deptId = rows[0].parentId
+				this.inputForm.tenderList[this.indexRow].officeName = rows[0].officeName
+				this.indexRow = ''
+				this.$forceUpdate()
+			},
+			getUpload (p, index) {
+				p.then((list) => {
+					// list为返回数据
+					this.inputForm.bidDetails[index].bidFiles = list
+					this.inputForm.bidDetails[index].fileNumber = list.length
+					this.bidTableKey = Math.random()
+				})
+			},
+			twoDecimalPlaces (num) {
+				let str = num.toString()
+				var len1 = str.substr(0, 1)
+				var len2 = str.substr(1, 1)
+				// eslint-disable-next-line eqeqeq
+				if (str.length > 1 && len1 == 0 && len2 != '.') {
+					str = str.substr(1, 1)
+				}
+				// eslint-disable-next-line eqeqeq
+				if (len1 == '.') {
+					str = ''
+				}
+				// eslint-disable-next-line eqeqeq
+				if (str.indexOf('.') != -1) {
+					var str_ = str.substr(str.indexOf('.') + 1)
+					// eslint-disable-next-line eqeqeq
+					if (str_.indexOf('.') != -1) {
+						str = str.substr(0, str.indexOf('.') + str_.indexOf('.') + 1)
+					}
+					if (str_.length > 2) {
+						this.$message.warning(`金额小数点后只能输入两位,请正确输入!`)
+						return (str = '')
+					}
+				}
+				// eslint-disable-next-line no-useless-escape
+				str = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
+				return str
+			},
+			// 采购人下拉弹窗
+			userPullListForm (rowIndex) {
+				this.indexRow = rowIndex
+				this.$refs.userPullForm.init()
+			},
+			footerMethod ({ columns, data }) {
+				const footerData = [
+					columns.map((column, columnIndex) => {
+						if (columnIndex === 0) {
+							return '采购总价'
+						}
+						if (['money'].includes(column.property)) {
+							// eslint-disable-next-line no-undef
+							this.inputForm.totalMoney = XEUtils.sum(data, column.property)
+							return XEUtils.sum(data, column.property)
+						}
+						return null
+					})
+				]
+				return footerData
+			},
+			seeFileInfo (index) {
+				if (this.commonJS.isEmpty(this.inputForm.tenderList[index].bidFiles)) {
+					this.inputForm.tenderList[index].bidFiles = []
+				}
+				this.$refs.materialManagementDialog.newUpload('view', this.inputForm.tenderList[index].bidFiles, null, null, null, null, null, false, index)
+			},
+			sss (index) {
+				if (this.commonJS.isEmpty(this.inputForm.tenderList[index].bidFiles)) {
+					this.inputForm.tenderList[index].bidFiles = []
+				}
+				this.$refs.materialManagementDialog.newUpload(null, this.inputForm.tenderList[index].bidFiles, null, null, null, null, null, false, index)
+			},
+			// 表单提交
+			doSubmit () {
+				this.$refs['inputForm'].validate((valid) => {
+					if (valid) {
+						this.loading = true
+						if (this.$refs.uploadComponent.checkProgress()) {
+							this.loading = false
+							return
+						}
+						if (this.commonJS.isEmpty(this.inputForm.files)) {
+							this.loading = false
+							this.inputForm.files = []
+						}
+						if (this.commonJS.isEmpty(this.inputForm.bidDetails)) {
+							this.$message.error('至少填写一条中标详情信息')
+							this.loading = false
+							return
+						} else {
+							let i = this.inputForm.bidDetails.length
+							for (let j = 0; j < i; j++) {
+								let k = j + 1
+								if (this.commonJS.isEmpty(this.inputForm.bidDetails[j].createName)) {
+									this.$message.error('中标详情第' + k + '行请选择采购人')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.bidDetails[j].purchaseNumber)) {
+									this.$message.error('中标详情第' + k + '行请输入采购申请号')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.bidDetails[j].subscaleNumber)) {
+									this.$message.error('中标详情第' + k + '行请输入分标编号')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.bidDetails[j].subscaleName)) {
+									this.$message.error('中标详情第' + k + '行请输入分标名称')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.bidDetails[j].packageNumber)) {
+									this.$message.error('中标详情第' + k + '行请输入包号')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.bidDetails[j].sectionName)) {
+									this.$message.error('中标详情第' + k + '行请输入招标项目标段名称')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.bidDetails[j].money)) {
+									this.$message.error('中标详情第' + k + '行请输入采购金额')
+									this.loading = false
+									return
+								}
+							}
+						}
+						this.inputForm.files = this.$refs.uploadComponent.getDataList()
+						this.bidService.save(this.inputForm).then((data) => {
+							// eslint-disable-next-line no-undef
+							// callback(data.businessTable, data.businessId, this.inputForm)
+							// this.$refs.inputForm.resetFields()
+							this.$emit('refreshList')
+							this.loading = false
+							this.close()
+						}).catch(() => {
+							this.$refs.inputForm.resetFields()
+							this.loading = false
+						})
+					}
+				})
+			},
+			close () {
+				this.$refs.inputForm.resetFields()
+				this.inputForm.detailInfos = []
+				this.inputForm.amountInfos = []
+				this.$refs.uploadComponent.clearUpload()
+				this.visible = false
+			},
+			// 删除
+			removeEvent (row, rowIndex, type) {
+				if (type === 'detail') {
+					this.$refs.bidTable.remove(row)
+					this.inputForm.bidDetails.splice(rowIndex, 1)
+				}
+				if (type === 'amount') {
+					this.$refs.amountTable.remove(row)
+					this.inputForm.amountInfos.splice(rowIndex, 1)
+				}
+			},
+			// 新增
+			async insertEvent (type) {
+				if (type === 'detail') {
+					await this.$refs.bidTable.insert().then((data) => {
+						data.bidMan = this.bidMan
+						data.createName = this.createName
+						data.officeName = this.officeName
+						this.inputForm.bidDetails.push(data)
+						this.bidTableKey = Math.random()
+					})
+				}
+				if (type === 'amount') {
+					await this.$refs.amountTable.insert().then((data) => {
+						this.inputForm.amountInfos.push(data)
+					})
+				}
+			},
+			bidCheck (index) {
+				//  将采购详情中的采购类型,商品名称,商品数量,商品单价,商品总结,带到入库详情中
+				// eslint-disable-next-line no-unused-vars
+				let param = {
+					createName: this.createName,
+					bidMan: this.bidMan,
+					officeName: this.officeName,
+					purchaseNumber: this.inputForm.tenderList[index].purchaseNumber,
+					subscaleNumber: this.inputForm.tenderList[index].subscaleNumber,
+					subscaleName: this.inputForm.tenderList[index].subscaleName,
+					packageNumber: this.inputForm.tenderList[index].packageNumber,
+					sectionName: this.inputForm.tenderList[index].sectionName,
+					money: this.inputForm.tenderList[index].money,
+					remarks: this.inputForm.tenderList[index].remarks,
+				}
+				this.inputForm.bidDetails.push(param)
+				this.bidTableKey = Math.random()
+			},
+			getDetails(id){
+				this.tenderService.findById(id).then((data) => {
+					this.inputForm.batch = data.batch
+					this.inputForm.applicationDeadline = data.applicationDeadline
+					this.inputForm.createName = data.createName
+					this.inputForm.officeName = data.officeName
+					this.inputForm.bidClosingTime = data.bidClosingTime
+					this.inputForm.tenderList = data.tenderList
+					this.inputForm.bidDetails = []
+				})
+				this.$forceUpdate()
+			},
+			seeFileInfo2 (index) {
+				if (this.commonJS.isEmpty(this.inputForm.bidDetails[index].bidFiles)) {
+					this.inputForm.bidDetails[index].bidFiles = []
+				}
+				this.$refs.materialManagementDialog.newUpload('view', this.inputForm.bidDetails[index].bidFiles, null, null, null, null, null, false, index)
+			},
+			sss2 (index) {
+				if (this.commonJS.isEmpty(this.inputForm.bidDetails[index].bidFiles)) {
+					this.inputForm.bidDetails[index].bidFiles = []
+				}
+				this.$refs.materialManagementDialog.newUpload(null, this.inputForm.bidDetails[index].bidFiles, null, null, null, null, null, false, index)
+			},
+			//获取投标批次
+			openTenderForm(){
+				this.$refs.tenderChooseForm.init();
+			},
+			getTender(row){
+				this.inputForm.batch = row.batch
+				this.inputForm.tenderId = row.id
+				this.inputForm.applicationDeadline = row.applicationDeadline
+				this.inputForm.createName = row.createName
+				this.inputForm.officeName = row.officeName
+				this.inputForm.bidClosingTime = row.bidClosingTime
+				this.tenderService.findById(row.id).then((data) => {
+					this.inputForm.tenderList = data.tenderList
+
+				})
+			}
+
+
+
+
+
+		}
+	}
+</script>
+
+<style>
+	.el-divider__text {
+		font-size: 16px;
+		font-weight: bold;
+	}
+	.vxe-pulldown--panel {
+		z-index: 9997 !important
+	}
+</style>

+ 276 - 0
src/views/jy/tender/BidList.vue

@@ -0,0 +1,276 @@
+<template>
+	<div class="page">
+		<el-form :inline="true" v-if="searchVisible" class="query-form m-b-10" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+			<!-- 搜索框-->
+			<el-form-item label="批次" prop="batch">
+				<el-input v-model="searchForm.batch" placeholder="请输入批次" clearable></el-input>
+			</el-form-item>
+			<el-form-item label="创建人" prop="createById">
+				<UserSelect :limit='1' :modelValue="searchForm.createById" @update:modelValue='(value, label) => {searchForm.createById = value}'></UserSelect>
+			</el-form-item>
+			<el-form-item label="采购金额(元)" prop="totalMoneys">
+				<InputNumber :disabled="false" :precision="num" :value="searchForm.totalMoneys"
+							 @changefrom="(val)=>{searchForm.totalMoneys[0]=val}"
+							 @changeto="(val)=>{searchForm.totalMoneys[1]=val}"
+				></InputNumber>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="采购申请号" prop="purchaseNumber">
+				<el-input v-model="searchForm.purchaseNumber" placeholder="请输入采购申请号" clearable></el-input>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="分标编号" prop="subscaleNumber">
+				<el-input v-model="searchForm.subscaleNumber" placeholder="请输入分标编号" clearable></el-input>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="分标名称" prop="subscaleName">
+				<el-input v-model="searchForm.subscaleName" placeholder="请输入分标名称" clearable></el-input>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="创建时间" prop="dates">
+				<el-date-picker
+					placement="bottom-start"
+					format="YYYY-MM-DD HH:mm:ss"
+					value-format="YYYY-MM-DD HH:mm:ss"
+					v-model="searchForm.dates"
+					type="datetimerange"
+					range-separator="至"
+					start-placeholder="开始日期"
+					end-placeholder="结束日期">
+				</el-date-picker>
+			</el-form-item>
+
+			<el-form-item>
+				<el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
+				<el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
+				<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+			</el-form-item>
+		</el-form>
+		<div class="jp-table top" style="">
+			<vxe-toolbar :refresh="{query: refreshList}" custom>
+				<template #buttons>
+					<el-button v-if="hasPermission('tender:info:add')" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
+				</template>
+				<template #tools>
+					<vxe-button
+						text
+						type="primary"
+						:title="searchVisible ? '收起检索' : '展开检索'"
+						icon="vxe-icon-search"
+						class="tool-btn"
+						@click="searchVisible = !searchVisible"
+					></vxe-button>
+				</template>
+			</vxe-toolbar>
+			<div style="height: calc(100% - 90px)">
+				<vxe-table
+					:key="tableKey"
+					border="inner"
+					auto-resize
+					resizable
+					height="auto"
+					:loading="loading"
+					ref="clientTable"
+					show-header-overflow
+					show-overflow
+					highlight-hover-row
+					:menu-config="{}"
+					@sort-change="sortChangeHandle"
+					:sort-config="{remote:true}"
+					:data="dataList"
+					:checkbox-config="{}">
+					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+					<vxe-column min-width="160" align="center" title="批次" field="batch">
+						<template #default="scope">
+							<el-link  type="primary" :underline="false" @click="view(scope.row.basicId)">{{scope.row.batch}}</el-link>
+						</template>
+					</vxe-column>
+					<vxe-column min-width="160" align="center" title="采购申请号" field="purchaseNumber"></vxe-column>
+					<vxe-column min-width="160" align="center" title="分标编号" field="subscaleNumber"></vxe-column>
+					<vxe-column min-width="160" align="center" title="分标名称" field="subscaleName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="包号" field="packageNumber"></vxe-column>
+					<vxe-column min-width="160" align="center" title="招标项目标段名称" field="sectionName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="采购金额(元)" field="money"></vxe-column>
+					<vxe-column min-width="160" align="center" title="创建人" field="createName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="创建人部门" field="officeName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="创建时间" field="createTime"></vxe-column>
+
+					<vxe-column title="操作" width="150px" fixed="right" align="center">
+						<template  #default="scope">
+							<el-button v-if="hasPermission('tender:info:edit')&& scope.row.createById === $store.state.user.id" text type="primary" size="small" @click="edit(scope.row.basicId)">修改</el-button>
+							<el-button v-else-if="hasPermission('tender:info:edit')&&isAdmin" text type="primary" size="small" @click="edit(scope.row.basicId)">修改</el-button>
+							<el-button v-if="hasPermission('tender:info:del')&& scope.row.createById === $store.state.user.id" size="small" text type="primary" @click="del(scope.row.basicId)">删除</el-button>
+							<el-button v-else-if="hasPermission('tender:info:del')&&isAdmin" size="small" text type="primary" @click="del(scope.row.basicId)">删除</el-button>
+						</template>
+					</vxe-column>
+				</vxe-table>
+				<vxe-pager
+					background
+					:current-page="tablePage.currentPage"
+					:page-size="tablePage.pageSize"
+					:total="tablePage.total"
+					:page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+					:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+					@page-change="currentChangeHandle">
+				</vxe-pager>
+				<TenderForm ref="tenderForm" @refreshList="refreshList"></TenderForm>
+				<BidForm ref="bidForm" @refreshList="refreshList"></BidForm>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import UserSelect from '@/components/userSelect'
+	import InputNumber from '@/views/cw/workContract/InputNumber.vue'
+	import SelectTree from '@/components/treeSelect/treeSelect.vue'
+	import BidService from '@/api/jy/BidService'
+	import pick from 'lodash.pick'
+	import userService from '@/api/sys/userService'
+	import TenderForm from "./TenderForm";
+	import BidForm from "./BidForm";
+	export default {
+		data () {
+			return {
+				searchVisible: true,
+				showHideItem: false,
+				showHideIcon: 'el-icon-arrow-down',
+				showHideName: '展示',
+				num: 0,
+				searchForm: {
+					batch:'',
+					totalMoneys:[],
+					createById: '',
+					purchaseNumber:'',
+					subscaleNumber:'',
+					subscaleName:'',
+					dates:[]
+				},
+				dataList: [],
+				tablePage: {
+					total: 0,
+					currentPage: 1,
+					pageSize: 10,
+					orders: []
+				},
+				tableKey: '',
+				loading: false,
+				processDefinitionAuditId: '',
+				procDefAuditKey: '',
+				isAdmin: false,
+				createName: '',
+				create: ''
+			}
+		},
+		BidService: null,
+		created () {
+			this.bidService = new BidService()
+		},
+		components: {
+			InputNumber,
+			SelectTree,
+			UserSelect,
+			TenderForm,
+			BidForm
+		},
+		computed: {
+			userName () {
+				return this.$store.state.user.name
+			},
+			user () {
+				this.createName = this.$store.state.user.name
+				return this.$store.state.user
+			}
+		},
+		mounted () {
+			this.refreshList()
+		},
+		activated () {
+			this.refreshList()
+		},
+		methods: {
+			showHide () {
+				if (this.showHideItem === false) {
+					this.showHideItem = true
+					this.showHideIcon = 'el-icon-arrow-up'
+					this.showHideName = '隐藏'
+				} else {
+					this.showHideItem = false
+					this.showHideIcon = 'el-icon-arrow-down'
+					this.showHideName = '展示'
+				}
+			},
+			// 新增
+			add () {
+				this.$refs.bidForm.init('add', '')
+			},
+			// 修改
+			edit (id) {
+				console.log('id',id)
+				id = id || this.$refs.clientTable.getCheckboxRecords().map(item => {
+					return item.id
+				})[0]
+				this.$refs.bidForm.init('edit', id)
+			},
+			// 查看
+			view (id) {
+				this.$refs.bidForm.init('view', id)
+			},
+			// 查询当前用户是否是管理员用户
+			checkIsAdmin () {
+				userService.is().then((data) => {
+					this.isAdmin = data
+				})
+			},
+			// 获取数据列表
+			refreshList () {
+				this.loading = true
+				this.bidService.findPageList({
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm
+				}).then((data) => {
+					this.dataList = data.records
+					this.tablePage.total = data.total
+					this.tableKey = Math.random()
+					this.loading = false
+				})
+				this.checkIsAdmin()
+			},
+			// 当前页
+			currentChangeHandle ({ currentPage, pageSize }) {
+				this.tablePage.currentPage = currentPage
+				this.tablePage.pageSize = pageSize
+				this.refreshList()
+			},
+			// 排序
+			sortChangeHandle (column) {
+				this.tablePage.orders = []
+				if (column.order != null) {
+					this.tablePage.orders.push({column: this.$utils.toLine(column.property), asc: column.order === 'asc'})
+				}
+				this.refreshList()
+			},
+			// 删除
+			del (id) {
+				let ids = id || this.$refs.clientTable.getCheckboxRecords().map(item => {
+					return item.id
+				}).join(',')
+				this.$confirm(`确定删除所选项吗?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					this.loading = true
+					this.bidService.remove(ids).then((data) => {
+						this.$message.success(data)
+						this.refreshList()
+						this.loading = false
+					})
+				})
+			},
+			resetSearch () {
+				this.$refs.searchForm.resetFields()
+				this.refreshList()
+			},
+
+		}
+	}
+</script>

+ 146 - 0
src/views/jy/tender/SeeBidList.vue

@@ -0,0 +1,146 @@
+<template>
+  <div>
+    <el-dialog
+      title="中标记录"
+      :close-on-click-modal="false"
+	  draggable
+      width="1100px"
+      height="500px"
+      @close="close"
+      append-to-body
+      v-model="visible">
+      <div style="height: calc(100% - 80px);">
+
+        <vxe-table
+          border="inner"
+          auto-resize
+          resizable
+          height="400px"
+          :loading="loading"
+          ref="projectTable"
+          show-header-overflow
+          show-overflow
+          highlight-hover-row
+          :menu-config="{}"
+          :print-config="{}"
+          :sort-config="{remote:true}"
+          :data="dataList"
+          :row-config="{isCurrent: true}"
+          :radio-config="{trigger: 'row'}"
+        >
+          <vxe-column type="seq" width="60" title="序号"></vxe-column>
+			<vxe-column min-width="160" align="center" title="批次" field="batch">
+				<template #default="scope">
+					<el-link  type="primary" :underline="false" @click="view(scope.row.basicId)">{{scope.row.batch}}</el-link>
+				</template>
+			</vxe-column>
+			<vxe-column min-width="160" align="center" title="采购申请号" field="purchaseNumber"></vxe-column>
+			<vxe-column min-width="160" align="center" title="分标编号" field="subscaleNumber"></vxe-column>
+			<vxe-column min-width="160" align="center" title="分标名称" field="subscaleName"></vxe-column>
+			<vxe-column min-width="160" align="center" title="包号" field="packageNumber"></vxe-column>
+			<vxe-column min-width="160" align="center" title="招标项目标段名称" field="sectionName"></vxe-column>
+			<vxe-column min-width="160" align="center" title="采购金额(元)" field="money"></vxe-column>
+
+        </vxe-table>
+        <vxe-pager
+          background
+          :current-page="tablePage.currentPage"
+          :page-size="tablePage.pageSize"
+          :total="tablePage.total"
+          :page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+          :layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+          @page-change="currentChangeHandle">
+        </vxe-pager>
+      </div>
+		<template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			</span>
+		</template>
+    </el-dialog>
+    <BidForm ref="bidForm"></BidForm>
+  </div>
+</template>
+
+<script>
+	import BidService from '@/api/jy/BidService'
+	import BidForm from "./BidForm";
+  export default {
+    data () {
+      return {
+        title: '',
+        method: '',
+        visible: false,
+        loading: false,
+        tablePage: {
+          total: 0,
+          currentPage: 1,
+          pageSize: 10,
+          orders: []
+        },
+        tableKey: '',
+        dataList: [],
+        searchForm: {
+          purchaseSketch: '',
+          purchaseId: '',
+          contractDates: [],
+          // 查入库记录所需的状态数组
+          statusTwo: []
+        }
+      }
+    },
+	  BidService: null,
+    created () {
+      this.bidService = new BidService()
+    },
+    components: {
+		BidForm,
+    },
+    methods: {
+      // 查看
+      view (id) {
+        this.$refs.bidForm.init('view', id)
+      },
+      init (id) {
+        this.visible = true
+        this.searchForm.tenderId = id
+        this.list()
+      },
+      list () {
+        this.loading = true
+        // eslint-disable-next-line no-unused-vars
+        // this.searchForm.createId = this.$store.state.user.id
+        this.bidService.bidList({
+          'current': this.tablePage.currentPage,
+          'size': this.tablePage.pageSize,
+          'orders': this.tablePage.orders,
+          ...this.searchForm
+        }).then((data) => {
+          this.dataList = data.records
+          this.tablePage.total = data.total
+          this.tableKey = Math.random()
+          this.loading = false
+        })
+      },
+      // 当前页
+      currentChangeHandle ({currentPage, pageSize}) {
+        this.tablePage.currentPage = currentPage
+        this.tablePage.pageSize = pageSize
+        this.list()
+      },
+      resetSearch () {
+        this.$refs.searchForm.resetFields()
+        this.list()
+      },
+      close () {
+        this.visible = false
+      }
+    }
+  }
+</script>
+<style scoped>
+  /deep/ .el-dialog__body {
+    padding-top: 0px;
+    padding-bottom: 15px;
+  }
+</style>

+ 164 - 0
src/views/jy/tender/TenderChooseForm.vue

@@ -0,0 +1,164 @@
+<template>
+	<div>
+		<el-dialog
+			title="选择投标信息"
+			:close-on-click-modal="false"
+			draggable
+			width="1100px"
+			height="500px"
+			@close="close"
+			append-to-body
+			v-model="visible">
+			<div style="height: calc(100% - 80px);">
+				<el-form :inline="true" class="query-form" ref="searchForm" :model="searchForm" @submit.native.prevent>
+					<!-- 搜索框-->
+					<el-form-item label="批次" prop="batch">
+						<el-input v-model="searchForm.batch" placeholder="请输入批次" clearable></el-input>
+					</el-form-item>
+					<el-form-item label="投标时间" prop="dates">
+						<el-date-picker
+							placement="bottom-start"
+							format="YYYY-MM-DD HH:mm:ss"
+							value-format="YYYY-MM-DD HH:mm:ss"
+							v-model="searchForm.dates"
+							type="datetimerange"
+							range-separator="至"
+							start-placeholder="开始日期"
+							end-placeholder="结束日期">
+						</el-date-picker>
+					</el-form-item>
+
+					<el-form-item>
+						<el-button type="primary" @click="list()" icon="el-icon-search">查询</el-button>
+						<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+					</el-form-item>
+				</el-form>
+
+				<vxe-table
+					border="inner"
+					auto-resize
+					resizable
+					height="400px"
+					:loading="loading"
+					ref="projectTable"
+					show-header-overflow
+					show-overflow
+					highlight-hover-row
+					:menu-config="{}"
+					:print-config="{}"
+					:sort-config="{remote:true}"
+					:data="dataList"
+					:row-config="{isCurrent: true}"
+					:radio-config="{trigger: 'row'}"
+				>
+					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+					<vxe-column type="radio" width="60px"></vxe-column>
+					<vxe-column min-width="160" align="center" title="批次" field="batch"></vxe-column>
+					<vxe-column min-width="160" align="center" title="采购金额(元)" field="totalMoney"></vxe-column>
+					<vxe-column min-width="160" align="center" title="报名截止时间" field="applicationDeadline"></vxe-column>
+					<vxe-column min-width="160" align="center" title="截标时间" field="bidClosingTime"></vxe-column>
+					<vxe-column min-width="160" align="center" title="创建人" field="createName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="创建人部门" field="officeName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="创建时间" field="createTime"></vxe-column>
+
+				</vxe-table>
+				<vxe-pager
+					background
+					:current-page="tablePage.currentPage"
+					:page-size="tablePage.pageSize"
+					:total="tablePage.total"
+					:page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+					:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+					@page-change="currentChangeHandle">
+				</vxe-pager>
+			</div>
+			<template #footer>
+			<span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="getProject()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+	import TenderService from '@/api/jy/TenderService'
+	export default {
+		data () {
+			return {
+				title: '',
+				method: '',
+				visible: false,
+				loading: false,
+				tablePage: {
+					total: 0,
+					currentPage: 1,
+					pageSize: 10,
+					orders: []
+				},
+				dataList: [],
+				searchForm: {
+					batch: '',
+					dates: []
+				}
+			}
+		},
+		TenderService: null,
+		created () {
+			this.tenderService = new TenderService()
+		},
+		components: {
+		},
+		methods: {
+			init () {
+				this.visible = true
+				this.list()
+			},
+			// 表单提交
+			getProject () {
+				let row = this.$refs.projectTable.getRadioRecord()
+				if (this.commonJS.isEmpty(row)) {
+					this.$message.error('请选择一条数据')
+					return
+				}
+				this.close()
+				this.$emit('getProject', row)
+			},
+			list () {
+				this.loading = true
+				this.searchForm.createById = this.$store.state.user.id
+				this.tenderService.findPageList({
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm
+				}).then((data) => {
+					this.dataList = data.records
+					this.tablePage.total = data.total
+					this.loading = false
+				})
+			},
+			// 当前页
+			currentChangeHandle ({currentPage, pageSize}) {
+				this.tablePage.currentPage = currentPage
+				this.tablePage.pageSize = pageSize
+				this.list()
+			},
+			resetSearch () {
+				this.$refs.searchForm.resetFields()
+				this.list()
+			},
+			close () {
+				this.$refs.searchForm.resetFields()
+				this.visible = false
+			}
+		}
+	}
+</script>
+<style scoped>
+	/deep/ .el-dialog__body {
+		padding-top: 0px;
+		padding-bottom: 15px;
+	}
+</style>

+ 512 - 0
src/views/jy/tender/TenderForm.vue

@@ -0,0 +1,512 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog
+			:title="title"
+			:close-on-click-modal="false"
+			draggable
+			width="1500px"
+			@close="close"
+			@keyup.enter.native="doSubmit"
+			v-model="visible"
+			append-to-body
+		>
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :class="method==='view'?'readonly':''"  :disabled="method==='view'"
+					 label-width="110px" @submit.native.prevent>
+
+				<el-divider content-position="left"><i class="el-icon-document"></i> 基础信息</el-divider>
+				<el-row :gutter="20">
+					<el-col :span="12">
+						<el-form-item label="批次" prop="batch"
+									  :rules="[{required: true, message: '批次不能为空', trigger: 'blur'}
+                 ]">
+							<el-input v-model="inputForm.batch" placeholder="请填写批次"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="创建人" prop="createName">
+							<el-input v-model="inputForm.createName" :disabled="true"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="创建人部门" prop="officeName">
+							<SelectTree
+								:disabled="true"
+								ref="officeTree"
+								:props="{
+                  value: 'id',             // ID字段名
+                  label: 'name',         // 显示名称
+                  children: 'children'    // 子级字段名
+                }"
+
+								:url="`/system-server/sys/office/treeData?type=2`"
+								:value="inputForm.officeName"
+								:accordion="true"
+								size="default"
+								@getValue="(value) => {inputForm.officeName=value}"/>
+							<!--            <el-input v-model="inputForm.handledByOffice" :disabled="true"></el-input>-->
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="报名截止时间" prop="applicationDeadline" :rules="[{required: true, message:'请选择报名截止时间', trigger:'blur'}]">
+							<el-date-picker
+								v-model="inputForm.applicationDeadline"
+								type="datetime"
+								format="YYYY-MM-DD HH:mm:ss"
+								value-format="YYYY-MM-DD HH:mm:ss"
+								placement="bottom-start"
+								style="width: 100%"
+								placeholder="选择日期">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="截标时间" prop="bidClosingTime" :rules="[{required: true, message:'请选择截标时间', trigger:'blur'}]">
+							<el-date-picker
+								v-model="inputForm.bidClosingTime"
+								type="datetime"
+								format="YYYY-MM-DD HH:mm:ss"
+								value-format="YYYY-MM-DD HH:mm:ss"
+								placement="bottom-start"
+								style="width: 100%"
+								placeholder="选择日期">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+				</el-row>
+				<el-row :gutter="20">
+					<el-col :span="24">
+						<el-form-item label="备注" prop="remarks">
+							<el-input v-model="inputForm.remarks"
+									  type="textarea"
+									  :rows="5"
+									  maxlength="500"
+									  placeholder="请输入备注"
+									  show-word-limit>
+							</el-input>
+						</el-form-item>
+					</el-col>
+				</el-row>
+
+				<el-divider content-position="left"><i class="el-icon-document"></i>
+					投标详情
+					<el-button style="margin-left: 20px" type="primary" @click="insertEvent('detail')" plain>
+						新增
+					</el-button>
+				</el-divider>
+				<el-row  :gutter="15" >
+					<el-col :span="24">
+						<vxe-table
+							border
+							show-footer
+							show-overflow
+							:footer-method="footerMethod"
+							ref="detailTable"
+							class="vxe-table-element"
+							:data="inputForm.tenderList"
+							style="margin-left: 5em"
+							:key="clientTableKey"
+							highlight-current-row
+							:edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: true, icon: '-'}"
+							:edit-rules="validRules"
+						>
+							<vxe-table-column align="center" field="createName" title="投标人" :edit-render="{}" :rules="[{required: true, message:'请选择投标人', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.createName" @focus="userPullListForm(scope.$rowIndex)"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="officeName" title="投标部门" :edit-render="{}">
+								<template v-slot:edit="scope">
+									<el-input :disabled='true' v-model="scope.row.officeName" ></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="purchaseNumber" title="采购申请号" :edit-render="{}" :rules="[{required: true, message:'请输入采购申请号', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.purchaseNumber"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="subscaleNumber" title="分标编号" :edit-render="{}" :rules="[{required: true, message:'请输入分标编号', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.subscaleNumber"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="subscaleName" title="分标名称" :edit-render="{}" :rules="[{required: true, message:'请输入分标名称', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.subscaleName"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="packageNumber" title="包号" :edit-render="{}" :rules="[{required: true, message:'请输入包号', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.packageNumber"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="sectionName" title="招标项目标段名称" :edit-render="{}" :rules="[{required: true, message:'请输入招标项目标段名称', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.sectionName"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="money" title="采购金额(元)" :edit-render="{}" :rules="[{required: true, message:'请输入采购金额', trigger:'blur'}]">
+								<template v-slot:edit="scope">
+									<el-input @change="changeValue" maxlength="15" v-model="scope.row.money" @blur="scope.row.money = twoDecimalPlaces(scope.row.money)"></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column align="center" field="remarks" title="备注" :edit-render="{}">
+								<template v-slot:edit="scope">
+									<el-input v-model="scope.row.remarks" ></el-input>
+								</template>
+							</vxe-table-column>
+							<vxe-table-column title="操作" width="180">
+								<template #default="scope">
+									<vxe-button status="danger" size="small" v-if="method!=='view'" @click="removeEvent(scope.row,scope.$rowIndex,'detail')">删除</vxe-button>
+									<vxe-button status="primary" size="small" v-if="method!=='view'" @click="sss(scope.$rowIndex)">上传附件</vxe-button>
+									<vxe-button status="primary" size="small" v-if="method==='view'" :disabled="false" @click="seeFileInfo(scope.$rowIndex)">查看文件详情</vxe-button>
+									<!--              <el-button  v-if="formReadOnly" :disabled="false" type="primary" @click="seeFileInfo(scope.$rowIndex)">查看文件详情</el-button>-->
+								</template>
+							</vxe-table-column>
+						</vxe-table>
+					</el-col>
+				</el-row>
+
+			</el-form>
+			<!-- 附件 -->
+			<UpLoadComponent ref="uploadComponent"></UpLoadComponent>
+			<MaterialManagementDialog ref="materialManagementDialog" @getUpload="getUpload"></MaterialManagementDialog>
+			<UserPullForm ref="userPullForm" @getProgramForUser="getProgramForUser"></UserPullForm>
+			<template #footer>
+		  <span class="dialog-footer">
+			  <el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+			  <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
+			</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+	import SelectTree from '@/components/treeSelect/treeSelect.vue'
+	import MaterialManagementDialog from '@/views/materialManagement/file/MaterialManagementDialog'
+	import TenderService from '@/api/jy/TenderService'
+	import UpLoadComponent from '@/views/common/UpLoadComponent'
+	import UserPullForm from '@/views/finance/invoice/UserPullForm'
+	import XEUtils from 'xe-utils'
+	export default {
+		data () {
+			return {
+				validRules: {
+					createName: [
+						{required: true, message: '投标人不能为空'}
+					],
+					purchaseNumber: [
+						{required: true, message: '采购申请号不能为空'}
+					],
+					subscaleNumber: [
+						{required: true, message: '分标编号不能为空'}
+					],
+					subscaleName: [
+						{required: true, message: '分标名称不能为空'}
+					],
+					packageNumber: [
+						{required: true, message: '包号不能为空'}
+					],
+					sectionName: [
+						{required: true, message: '招标项目标段名称不能为空'}
+					],
+					money: [
+						{required: true, message: '采购金额不能为空'}
+					]
+				},
+				title: '',
+				method: '',
+				visible: false,
+				loading: false,
+				inputForm: {
+					id:'',
+					totalMoney: '',  // 采购金额总价
+					tenderList: [],
+					batch: '', //批次
+					createName: '',
+					officeName: '',
+					applicationDeadline: '', //报名截止时间
+					bidClosingTime: '', // 截标时间
+					createById: '',
+					remarks: '',
+					files: [] // 附件信息
+				},
+				clientTableKey: '',
+			}
+		},
+		TenderService: null,
+		created () {
+			this.tenderService = new TenderService()
+		},
+		components: {
+			SelectTree,
+			MaterialManagementDialog,
+			UpLoadComponent,
+			UserPullForm
+		},
+		computed: {
+			createName () {
+				return this.$store.state.user.name
+			},
+			officeName () {
+				return this.$store.state.user.office.name
+			},
+			bidMan () {
+				return this.$store.state.user.id
+			},
+
+		},
+		methods: {
+			init (method, id) {
+				console.log('method', method)
+				this.method = method
+				console.log('this.method', this.method)
+				this.inputForm = {
+					id:'',
+					totalMoney: '',  // 采购金额总价
+					tenderList: [],
+					batch: '', //批次
+					createName: this.$store.state.user.name,
+					officeName: this.$store.state.user.office.id,
+					applicationDeadline: '', //报名截止时间
+					bidClosingTime: '', // 截标时间
+					createById: this.$store.state.user.id,
+					remarks: '',
+					files: [] // 附件信息
+				}
+				if (method === 'add') {
+					this.title = `新建投标信息`
+				} else if (method === 'edit') {
+					this.inputForm.id = id
+					this.title = '修改投标信息'
+				} else if (method === 'view') {
+					this.inputForm.id = id
+					this.title = '查看投标信息'
+				}
+				this.visible = true
+				this.loading = false
+				this.$nextTick(() => {
+					if (method === 'edit' || method === 'view') { // 修改或者查看
+						this.loading = true
+						this.$refs.inputForm.resetFields()
+						this.tenderService.findById(this.inputForm.id).then((data) => {
+							this.inputForm = this.recover(this.inputForm, data)
+							if (this.commonJS.isEmpty(this.inputForm.createName)) {
+								this.inputForm.createName = this.$store.state.user.name
+							}
+							if (this.commonJS.isEmpty(this.inputForm.officeName)) {
+								this.inputForm.officeName = this.$store.state.user.office.name
+							}
+							console.log('id',this.inputForm)
+							this.$refs.uploadComponent.newUpload(method, this.inputForm.files, 'bidFile')
+							this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+							this.loading = false
+						})
+					}
+				})
+			},
+			getProgramForUser (rows) {
+				this.inputForm.tenderList[this.indexRow].bidMan = rows[0].id
+				this.inputForm.tenderList[this.indexRow].createName = rows[0].name
+				// this.inputForm.tenderList[this.indexRow].deptId = rows[0].parentId
+				this.inputForm.tenderList[this.indexRow].officeName = rows[0].officeName
+				this.indexRow = ''
+				this.$forceUpdate()
+			},
+			getUpload (p, index) {
+				p.then((list) => {
+					// list为返回数据
+					this.inputForm.tenderList[index].bidFiles = list
+					this.inputForm.tenderList[index].fileNumber = list.length
+					this.clientTableKey = Math.random()
+				})
+			},
+			twoDecimalPlaces (num) {
+				let str = num.toString()
+				var len1 = str.substr(0, 1)
+				var len2 = str.substr(1, 1)
+				// eslint-disable-next-line eqeqeq
+				if (str.length > 1 && len1 == 0 && len2 != '.') {
+					str = str.substr(1, 1)
+				}
+				// eslint-disable-next-line eqeqeq
+				if (len1 == '.') {
+					str = ''
+				}
+				// eslint-disable-next-line eqeqeq
+				if (str.indexOf('.') != -1) {
+					var str_ = str.substr(str.indexOf('.') + 1)
+					// eslint-disable-next-line eqeqeq
+					if (str_.indexOf('.') != -1) {
+						str = str.substr(0, str.indexOf('.') + str_.indexOf('.') + 1)
+					}
+					if (str_.length > 2) {
+						this.$message.warning(`金额小数点后只能输入两位,请正确输入!`)
+						return (str = '')
+					}
+				}
+				// eslint-disable-next-line no-useless-escape
+				str = str.replace(/[^\d^\.]+/g, '') // 保留数字和小数点
+				return str
+			},
+			// 采购人下拉弹窗
+			userPullListForm (rowIndex) {
+				this.indexRow = rowIndex
+				this.$refs.userPullForm.init()
+			},
+			footerMethod ({ columns, data }) {
+				const footerData = [
+					columns.map((column, columnIndex) => {
+						if (columnIndex === 0) {
+							return '采购总价'
+						}
+						if (['money'].includes(column.property)) {
+							// eslint-disable-next-line no-undef
+							this.inputForm.totalMoney = XEUtils.sum(data, column.property)
+							return XEUtils.sum(data, column.property)
+						}
+						return null
+					})
+				]
+				return footerData
+			},
+			seeFileInfo (index) {
+				if (this.commonJS.isEmpty(this.inputForm.tenderList[index].bidFiles)) {
+					this.inputForm.tenderList[index].bidFiles = []
+				}
+				this.$refs.materialManagementDialog.newUpload('view', this.inputForm.tenderList[index].bidFiles, null, null, null, null, null, false, index)
+			},
+			sss (index) {
+				if (this.commonJS.isEmpty(this.inputForm.tenderList[index].bidFiles)) {
+					this.inputForm.tenderList[index].bidFiles = []
+				}
+				this.$refs.materialManagementDialog.newUpload(null, this.inputForm.tenderList[index].bidFiles, null, null, null, null, null, false, index)
+			},
+			// 表单提交
+			doSubmit () {
+				this.$refs['inputForm'].validate((valid) => {
+					if (valid) {
+						this.loading = true
+						if (this.$refs.uploadComponent.checkProgress()) {
+							this.loading = false
+							return
+						}
+						if (this.commonJS.isEmpty(this.inputForm.files)) {
+							this.loading = false
+							this.inputForm.files = []
+						}
+						if (this.commonJS.isEmpty(this.inputForm.tenderList)) {
+							this.$message.error('至少填写一条投标详情信息')
+							this.loading = false
+							return
+						} else {
+							let i = this.inputForm.tenderList.length
+							for (let j = 0; j < i; j++) {
+								let k = j + 1
+								if (this.commonJS.isEmpty(this.inputForm.tenderList[j].createName)) {
+									this.$message.error('投标详情第' + k + '行请选择采购人')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.tenderList[j].purchaseNumber)) {
+									this.$message.error('投标详情第' + k + '行请输入采购申请号')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.tenderList[j].subscaleNumber)) {
+									this.$message.error('投标详情第' + k + '行请输入分标编号')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.tenderList[j].subscaleName)) {
+									this.$message.error('投标详情第' + k + '行请输入分标名称')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.tenderList[j].packageNumber)) {
+									this.$message.error('投标详情第' + k + '行请输入包号')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.tenderList[j].sectionName)) {
+									this.$message.error('投标详情第' + k + '行请输入招标项目标段名称')
+									this.loading = false
+									return
+								}
+								if (this.commonJS.isEmpty(this.inputForm.tenderList[j].money)) {
+									this.$message.error('投标详情第' + k + '行请输入采购金额')
+									this.loading = false
+									return
+								}
+							}
+						}
+						this.inputForm.files = this.$refs.uploadComponent.getDataList()
+						this.tenderService.save(this.inputForm).then((data) => {
+							// eslint-disable-next-line no-undef
+							// callback(data.businessTable, data.businessId, this.inputForm)
+							// this.$refs.inputForm.resetFields()
+							this.$emit('refreshList')
+							this.loading = false
+							this.close()
+						}).catch(() => {
+							this.$refs.inputForm.resetFields()
+							this.loading = false
+						})
+					}
+				})
+			},
+			close () {
+				this.$refs.inputForm.resetFields()
+				this.inputForm.detailInfos = []
+				this.inputForm.amountInfos = []
+				this.$refs.uploadComponent.clearUpload()
+				this.visible = false
+			},
+			// 删除
+			removeEvent (row, rowIndex, type) {
+				if (type === 'detail') {
+					this.$refs.detailTable.remove(row)
+					this.inputForm.tenderList.splice(rowIndex, 1)
+				}
+				if (type === 'amount') {
+					this.$refs.amountTable.remove(row)
+					this.inputForm.amountInfos.splice(rowIndex, 1)
+				}
+			},
+			// 新增
+			async insertEvent (type) {
+				if (type === 'detail') {
+					await this.$refs.detailTable.insert().then((data) => {
+						data.bidMan = this.bidMan
+						data.createName = this.createName
+						data.officeName = this.officeName
+						this.inputForm.tenderList.push(data)
+						this.clientTableKey = Math.random()
+					})
+				}
+				if (type === 'amount') {
+					await this.$refs.amountTable.insert().then((data) => {
+						this.inputForm.amountInfos.push(data)
+					})
+				}
+			},
+
+
+
+
+
+
+
+		}
+	}
+</script>
+
+<style>
+	.el-divider__text {
+		font-size: 16px;
+		font-weight: bold;
+	}
+	.vxe-pulldown--panel {
+		z-index: 9997 !important
+	}
+</style>

+ 352 - 0
src/views/jy/tender/TenderList.vue

@@ -0,0 +1,352 @@
+<template>
+	<div class="page">
+		<el-form :inline="true" v-if="searchVisible" class="query-form m-b-10" ref="searchForm" :model="searchForm" @keyup.enter.native="refreshList()" @submit.native.prevent>
+			<!-- 搜索框-->
+			<el-form-item label="批次" prop="batch">
+				<el-input v-model="searchForm.batch" placeholder="请输入批次" clearable></el-input>
+			</el-form-item>
+			<el-form-item label="创建人" prop="createById">
+				<UserSelect :limit='1' :modelValue="searchForm.createById" @update:modelValue='(value, label) => {searchForm.createById = value}'></UserSelect>
+			</el-form-item>
+			<el-form-item label="采购金额(元)" prop="totalMoneys">
+				<InputNumber :disabled="false" :precision="num" :value="searchForm.totalMoneys"
+							 @changefrom="(val)=>{searchForm.totalMoneys[0]=val}"
+							 @changeto="(val)=>{searchForm.totalMoneys[1]=val}"
+				></InputNumber>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="报名截止时间" prop="deadlineDates">
+				<el-date-picker
+					placement="bottom-start"
+					format="YYYY-MM-DD HH:mm:ss"
+					value-format="YYYY-MM-DD HH:mm:ss"
+					v-model="searchForm.deadlineDates"
+					type="datetimerange"
+					range-separator="至"
+					start-placeholder="开始日期"
+					end-placeholder="结束日期">
+				</el-date-picker>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="截标时间" prop="closingDates">
+				<el-date-picker
+					placement="bottom-start"
+					format="YYYY-MM-DD HH:mm:ss"
+					value-format="YYYY-MM-DD HH:mm:ss"
+					v-model="searchForm.closingDates"
+					type="datetimerange"
+					range-separator="至"
+					start-placeholder="开始日期"
+					end-placeholder="结束日期">
+				</el-date-picker>
+			</el-form-item>
+			<el-form-item v-if="showHideItem" label="创建时间" prop="dates">
+				<el-date-picker
+					placement="bottom-start"
+					format="YYYY-MM-DD HH:mm:ss"
+					value-format="YYYY-MM-DD HH:mm:ss"
+					v-model="searchForm.dates"
+					type="datetimerange"
+					range-separator="至"
+					start-placeholder="开始日期"
+					end-placeholder="结束日期">
+				</el-date-picker>
+			</el-form-item>
+
+			<el-form-item>
+				<el-button type="default" @click="showHide" :icon="showHideIcon">{{showHideName}}</el-button>
+				<el-button type="primary" @click="refreshList()" icon="el-icon-search">查询</el-button>
+				<el-button @click="resetSearch()" icon="el-icon-refresh-right">重置</el-button>
+			</el-form-item>
+		</el-form>
+		<div class="jp-table top" style="">
+			<vxe-toolbar ref="toolbarRef" :refresh="{query: refreshList}" custom>
+				<template #buttons>
+					<el-button v-if="hasPermission('tender:info:add')" type="primary" icon="el-icon-plus" @click="add()">新建</el-button>
+				</template>
+				<template #tools>
+					<vxe-button
+						text
+						type="primary"
+						:title="searchVisible ? '收起检索' : '展开检索'"
+						icon="vxe-icon-search"
+						class="tool-btn"
+						@click="searchVisible = !searchVisible"
+					></vxe-button>
+				</template>
+			</vxe-toolbar>
+			<div style="height: calc(100% - 90px)">
+				<vxe-table
+					:key="tableKey"
+					border="inner"
+					auto-resize
+					resizable
+					height="auto"
+					:loading="loading"
+					ref="clientTable"
+					show-header-overflow
+					show-overflow
+					highlight-hover-row
+					:menu-config="{}"
+					@sort-change="sortChangeHandle"
+					:export-config="{
+									remote: true,
+									filename: `嘉溢投标数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									sheetName: `嘉溢投标数据${moment(new Date()).format('YYYY-MM-DD')}`,
+									exportMethod: exportMethod,
+									types: ['xls'],
+									modes: ['current', 'selected', 'all']
+								  }"
+					:sort-config="{remote:true}"
+					:data="dataList"
+					:checkbox-config="{}">
+					<vxe-column type="seq" width="60" title="序号"></vxe-column>
+					<vxe-column min-width="160" align="center" title="批次" field="batch">
+						<template #default="scope">
+							<el-link  type="primary" :underline="false" @click="view(scope.row.id)">{{scope.row.batch}}</el-link>
+						</template>
+					</vxe-column>
+					<vxe-column min-width="160" align="center" title="采购金额(元)" field="totalMoney"></vxe-column>
+					<vxe-column min-width="160" align="center" title="报名截止时间" field="applicationDeadline"></vxe-column>
+					<vxe-column min-width="160" align="center" title="截标时间" field="bidClosingTime"></vxe-column>
+					<vxe-column min-width="160" align="center" title="创建人" field="createName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="创建人部门" field="officeName"></vxe-column>
+					<vxe-column min-width="160" align="center" title="创建时间" field="createTime"></vxe-column>
+
+					<vxe-column title="操作" width="150px" fixed="right" align="center">
+						<template  #default="scope">
+							<el-button v-if="hasPermission('tender:info:edit')&& scope.row.createById === $store.state.user.id" text type="primary" size="small" @click="edit(scope.row.id)">修改</el-button>
+							<el-button v-else-if="hasPermission('tender:info:edit')&&isAdmin" text type="primary" size="small" @click="edit(scope.row.id)">修改</el-button>
+							<el-button v-if="hasPermission('tender:info:del')&& scope.row.createById === $store.state.user.id" size="small" text type="primary" @click="del(scope.row.id)">删除</el-button>
+							<el-button v-else-if="hasPermission('tender:info:del')&&isAdmin" size="small" text type="primary" @click="del(scope.row.id)">删除</el-button>
+							<el-button v-if="hasPermission('tender:info:edit')&& scope.row.createById === $store.state.user.id" size="small" text type="primary" @click="copyToLeader(scope.row)">抄送</el-button>
+							<el-button v-if="hasPermission('tender:info:edit')" text type="primary" size="small" @click="seeBid(scope.row.id)">中标记录</el-button>
+							<el-button v-if="hasPermission('tender:info:edit')" text type="primary" size="small" @click="bidCheck(scope.row.id)">中标</el-button>
+						</template>
+					</vxe-column>
+				</vxe-table>
+				<vxe-pager
+					background
+					:current-page="tablePage.currentPage"
+					:page-size="tablePage.pageSize"
+					:total="tablePage.total"
+					:page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+					:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
+					@page-change="currentChangeHandle">
+				</vxe-pager>
+				<TenderForm ref="tenderForm" @refreshList="refreshList"></TenderForm>
+				<BidForm ref="bidForm" @refreshList="refreshList"></BidForm>
+				<SeeBidList ref="seeBidList" @refreshList="refreshList"></SeeBidList>
+			</div>
+		</div>
+	</div>
+</template>
+
+<script>
+	import UserSelect from '@/components/userSelect'
+	import InputNumber from '@/views/cw/workContract/InputNumber.vue'
+	import SelectTree from '@/components/treeSelect/treeSelect.vue'
+	import TenderService from '@/api/jy/TenderService'
+	import pick from 'lodash.pick'
+	import userService from '@/api/sys/userService'
+	import TenderForm from "./TenderForm";
+	import BidForm from "./BidForm";
+	import SeeBidList from "./SeeBidList";
+	export default {
+		data () {
+			return {
+				searchVisible: true,
+				showHideItem: false,
+				showHideIcon: 'el-icon-arrow-down',
+				showHideName: '展示',
+				num: 0,
+				searchForm: {
+					batch:'',
+					createById:'',
+					totalMoneys:[],
+					deadlineDates:[],
+					closingDates:[],
+					dates:[]
+				},
+				dataList: [],
+				tablePage: {
+					total: 0,
+					currentPage: 1,
+					pageSize: 10,
+					orders: []
+				},
+				tableKey: '',
+				loading: false,
+				processDefinitionAuditId: '',
+				procDefAuditKey: '',
+				isAdmin: false,
+				createName: '',
+				create: ''
+			}
+		},
+		TenderService: null,
+		created () {
+			this.tenderService = new TenderService()
+		},
+		components: {
+			InputNumber,
+			SelectTree,
+			UserSelect,
+			TenderForm,
+			BidForm,
+			SeeBidList
+		},
+		computed: {
+			userName () {
+				return this.$store.state.user.name
+			},
+			user () {
+				this.createName = this.$store.state.user.name
+				return this.$store.state.user
+			}
+		},
+		mounted () {
+			this.$nextTick(() => {
+				// 将表格和工具栏进行关联
+				const $table = this.$refs.clientTable;
+				const $toolbar = this.$refs.toolbarRef;
+				$table.connect($toolbar);
+			});
+			this.refreshList()
+		},
+		activated () {
+			this.refreshList()
+		},
+		methods: {
+			showHide () {
+				if (this.showHideItem === false) {
+					this.showHideItem = true
+					this.showHideIcon = 'el-icon-arrow-up'
+					this.showHideName = '隐藏'
+				} else {
+					this.showHideItem = false
+					this.showHideIcon = 'el-icon-arrow-down'
+					this.showHideName = '展示'
+				}
+			},
+			// 新增
+			add () {
+				this.$refs.tenderForm.init('add', '')
+			},
+			// 修改
+			edit (id) {
+				console.log('id',id)
+				id = id || this.$refs.clientTable.getCheckboxRecords().map(item => {
+					return item.id
+				})[0]
+				this.$refs.tenderForm.init('edit', id)
+			},
+			// 查看
+			view (id) {
+				this.$refs.tenderForm.init('view', id)
+			},
+			// 查询当前用户是否是管理员用户
+			checkIsAdmin () {
+				userService.is().then((data) => {
+					this.isAdmin = data
+				})
+			},
+			// 获取数据列表
+			refreshList () {
+				this.loading = true
+				this.tenderService.findPageList({
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm
+				}).then((data) => {
+					this.dataList = data.records
+					this.tablePage.total = data.total
+					this.tableKey = Math.random()
+					this.loading = false
+				})
+				this.checkIsAdmin()
+			},
+			// 当前页
+			currentChangeHandle ({ currentPage, pageSize }) {
+				this.tablePage.currentPage = currentPage
+				this.tablePage.pageSize = pageSize
+				this.refreshList()
+			},
+			// 排序
+			sortChangeHandle (column) {
+				this.tablePage.orders = []
+				if (column.order != null) {
+					this.tablePage.orders.push({column: this.$utils.toLine(column.property), asc: column.order === 'asc'})
+				}
+				this.refreshList()
+			},
+			// 删除
+			del (id) {
+				let ids = id || this.$refs.clientTable.getCheckboxRecords().map(item => {
+					return item.id
+				}).join(',')
+				this.$confirm(`确定删除所选项吗?`, '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					this.loading = true
+					this.tenderService.remove(ids).then((data) => {
+						this.$message.success(data)
+						this.refreshList()
+						this.loading = false
+					})
+				})
+			},
+			resetSearch () {
+				this.$refs.searchForm.resetFields()
+				this.refreshList()
+			},
+			copyToLeader(row){
+				this.$confirm('确定将'+row.batch+'进行抄送?', '提示', {
+					confirmButtonText: '确定',
+					cancelButtonText: '取消',
+					type: 'warning'
+				}).then(() => {
+					this.loading = true
+					this.tenderService.copyToLeader(row.id).then((data) => {
+						this.$message.success(data)
+						this.refreshList()
+						this.loading = false
+					})
+				})
+			},
+			bidCheck(id){
+				this.$refs.bidForm.init('bidAdd', id)
+			},
+			seeBid(id){
+				this.$refs.seeBidList.init(id)
+			},
+			// 自定义服务端导出
+			exportMethod ({ options }) {
+				// 传给服务端的参数
+				const params = {
+					'current': this.tablePage.currentPage,
+					'size': this.tablePage.pageSize,
+					'orders': this.tablePage.orders,
+					...this.searchForm,
+					filename: options.filename,
+					sheetName: options.sheetName,
+					isHeader: options.isHeader,
+					original: options.original,
+					mode: options.mode,
+					selectIds: options.mode === 'selected' ? options.map(item => item.id) : [],
+					exportFields: options.columns.map(column => column.property)
+				}
+				return this.tenderService.exportFile(params).then((res) => {
+					// 将二进制流文件写入excel表,以下为重要步骤
+					this.$utils.downloadExcel(res, options.filename+ ".xls")
+				}).catch(function (err) {
+					if (err.response) {
+						console.log(err.response)
+					}
+				})
+			},
+
+		}
+	}
+</script>