投标管理
This commit is contained in:
		| @ -5,7 +5,7 @@ VITE_APP_TITLE = 煤科建管平台 | |||||||
| VITE_APP_ENV = 'development' | VITE_APP_ENV = 'development' | ||||||
|  |  | ||||||
| # 开发环境 | # 开发环境 | ||||||
| VITE_APP_BASE_API = 'http://192.168.110.180:8899' | VITE_APP_BASE_API = 'http://192.168.110.149:8899' | ||||||
|  |  | ||||||
| # 无人机接口地址 | # 无人机接口地址 | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										31
									
								
								src/api/bidding/appointment/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								src/api/bidding/appointment/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,31 @@ | |||||||
|  | import request from '@/utils/request'; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询招标人员列表 | ||||||
|  |  * @param query | ||||||
|  |  * @returns {*} | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | export const biddingGetUser = (query) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingUser/getUser', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | // 新增招投标人员 | ||||||
|  | export const AddbiddingUser = (data) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingUser', | ||||||
|  |     method: 'post', | ||||||
|  |     data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  | // 新增招投标人员 | ||||||
|  | export const biddingUserList = (projectId) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingUser/list', | ||||||
|  |     method: 'get', | ||||||
|  |     params: { projectId } | ||||||
|  |   }); | ||||||
|  | }; | ||||||
							
								
								
									
										63
									
								
								src/api/bidding/biddingLimitList/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								src/api/bidding/biddingLimitList/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | import request from '@/utils/request'; | ||||||
|  | import { AxiosPromise } from 'axios'; | ||||||
|  | import { BiddingLimitListVO, BiddingLimitListForm, BiddingLimitListQuery } from '@/api/bidding/biddingLimitList/types'; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询成本-投标列表 | ||||||
|  |  * @param query | ||||||
|  |  * @returns {*} | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | export const listBiddingLimitList = (query?: BiddingLimitListQuery): AxiosPromise<BiddingLimitListVO[]> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingLimitList/list', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询成本-投标详细 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const getBiddingLimitList = (id: string | number): AxiosPromise<BiddingLimitListVO> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingLimitList/' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 新增成本-投标 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const addBiddingLimitList = (data: BiddingLimitListForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingLimitList', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 修改成本-投标 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const updateBiddingLimitList = (data: BiddingLimitListForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingLimitList', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 删除成本-投标 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const delBiddingLimitList = (id: string | number | Array<string | number>) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingLimitList/' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
							
								
								
									
										201
									
								
								src/api/bidding/biddingLimitList/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										201
									
								
								src/api/bidding/biddingLimitList/types.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,201 @@ | |||||||
|  | export interface BiddingLimitListVO { | ||||||
|  |   /** | ||||||
|  |    * 主键ID | ||||||
|  |    */ | ||||||
|  |   id: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目Id | ||||||
|  |    */ | ||||||
|  |   projectId: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 版本号 | ||||||
|  |    */ | ||||||
|  |   versions: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 表名 | ||||||
|  |    */ | ||||||
|  |   sheet: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 子ID | ||||||
|  |    */ | ||||||
|  |   sid: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 父ID | ||||||
|  |    */ | ||||||
|  |   pid: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 编号 | ||||||
|  |    */ | ||||||
|  |   num: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 名称 | ||||||
|  |    */ | ||||||
|  |   name: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 规格 | ||||||
|  |    */ | ||||||
|  |   specification: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单位 | ||||||
|  |    */ | ||||||
|  |   unit: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 数量 | ||||||
|  |    */ | ||||||
|  |   quantity: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单价 | ||||||
|  |    */ | ||||||
|  |   unitPrice: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 备注 | ||||||
|  |    */ | ||||||
|  |   remark: string; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface BiddingLimitListForm extends BaseEntity { | ||||||
|  |   /** | ||||||
|  |    * 主键ID | ||||||
|  |    */ | ||||||
|  |   id?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目Id | ||||||
|  |    */ | ||||||
|  |   projectId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 版本号 | ||||||
|  |    */ | ||||||
|  |   versions?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 表名 | ||||||
|  |    */ | ||||||
|  |   sheet?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 子ID | ||||||
|  |    */ | ||||||
|  |   sid?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 父ID | ||||||
|  |    */ | ||||||
|  |   pid?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 编号 | ||||||
|  |    */ | ||||||
|  |   num?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 名称 | ||||||
|  |    */ | ||||||
|  |   name?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 规格 | ||||||
|  |    */ | ||||||
|  |   specification?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单位 | ||||||
|  |    */ | ||||||
|  |   unit?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 数量 | ||||||
|  |    */ | ||||||
|  |   quantity?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单价 | ||||||
|  |    */ | ||||||
|  |   unitPrice?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 备注 | ||||||
|  |    */ | ||||||
|  |   remark?: string; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface BiddingLimitListQuery extends PageQuery { | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目Id | ||||||
|  |    */ | ||||||
|  |   projectId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 版本号 | ||||||
|  |    */ | ||||||
|  |   versions?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 表名 | ||||||
|  |    */ | ||||||
|  |   sheet?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 子ID | ||||||
|  |    */ | ||||||
|  |   sid?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 父ID | ||||||
|  |    */ | ||||||
|  |   pid?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 编号 | ||||||
|  |    */ | ||||||
|  |   num?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 名称 | ||||||
|  |    */ | ||||||
|  |   name?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 规格 | ||||||
|  |    */ | ||||||
|  |   specification?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单位 | ||||||
|  |    */ | ||||||
|  |   unit?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 数量 | ||||||
|  |    */ | ||||||
|  |   quantity?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 单价 | ||||||
|  |    */ | ||||||
|  |   unitPrice?: number; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 日期范围参数 | ||||||
|  |      */ | ||||||
|  |     params?: any; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										63
									
								
								src/api/bidding/biddingUser/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								src/api/bidding/biddingUser/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | import request from '@/utils/request'; | ||||||
|  | import { AxiosPromise } from 'axios'; | ||||||
|  | import { BiddingUserVO, BiddingUserForm, BiddingUserQuery } from '@/api/bidding/biddingUser/types'; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询招投标人员列表 | ||||||
|  |  * @param query | ||||||
|  |  * @returns {*} | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | export const listBiddingUser = (query?: BiddingUserQuery): AxiosPromise<BiddingUserVO[]> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingUser/list', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询招投标人员详细 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const getBiddingUser = (id: string | number): AxiosPromise<BiddingUserVO> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingUser/' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 新增招投标人员 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const addBiddingUser = (data: BiddingUserForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingUser', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 修改招投标人员 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const updateBiddingUser = (data: BiddingUserForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingUser', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 删除招投标人员 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const delBiddingUser = (id: string | number | Array<string | number>) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/biddingUser/' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
							
								
								
									
										71
									
								
								src/api/bidding/biddingUser/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/api/bidding/biddingUser/types.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,71 @@ | |||||||
|  | export interface BiddingUserVO { | ||||||
|  |   /** | ||||||
|  |    *  | ||||||
|  |    */ | ||||||
|  |   id: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目id | ||||||
|  |    */ | ||||||
|  |   projectId: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 招投标人员id | ||||||
|  |    */ | ||||||
|  |   userId: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 招投标人员姓名 | ||||||
|  |    */ | ||||||
|  |   userName: string; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface BiddingUserForm extends BaseEntity { | ||||||
|  |   /** | ||||||
|  |    *  | ||||||
|  |    */ | ||||||
|  |   id?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目id | ||||||
|  |    */ | ||||||
|  |   projectId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 招投标人员id | ||||||
|  |    */ | ||||||
|  |   userId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 招投标人员姓名 | ||||||
|  |    */ | ||||||
|  |   userName?: string; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface BiddingUserQuery extends PageQuery { | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目id | ||||||
|  |    */ | ||||||
|  |   projectId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 招投标人员id | ||||||
|  |    */ | ||||||
|  |   userId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 招投标人员姓名 | ||||||
|  |    */ | ||||||
|  |   userName?: string; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 日期范围参数 | ||||||
|  |      */ | ||||||
|  |     params?: any; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										63
									
								
								src/api/bidding/listOfWinningBids/index.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										63
									
								
								src/api/bidding/listOfWinningBids/index.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,63 @@ | |||||||
|  | import request from '@/utils/request'; | ||||||
|  | import { AxiosPromise } from 'axios'; | ||||||
|  | import { ListOfWinningBidsVO, ListOfWinningBidsForm, ListOfWinningBidsQuery } from '@/api/bidding/listOfWinningBids/types'; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询中标项目一览列表 | ||||||
|  |  * @param query | ||||||
|  |  * @returns {*} | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | export const listListOfWinningBids = (query?: ListOfWinningBidsQuery): AxiosPromise<ListOfWinningBidsVO[]> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/listOfWinningBids/list', | ||||||
|  |     method: 'get', | ||||||
|  |     params: query | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 查询中标项目一览详细 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const getListOfWinningBids = (id: string | number): AxiosPromise<ListOfWinningBidsVO> => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/listOfWinningBids/' + id, | ||||||
|  |     method: 'get' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 新增中标项目一览 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const addListOfWinningBids = (data: ListOfWinningBidsForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/listOfWinningBids', | ||||||
|  |     method: 'post', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 修改中标项目一览 | ||||||
|  |  * @param data | ||||||
|  |  */ | ||||||
|  | export const updateListOfWinningBids = (data: ListOfWinningBidsForm) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/listOfWinningBids', | ||||||
|  |     method: 'put', | ||||||
|  |     data: data | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** | ||||||
|  |  * 删除中标项目一览 | ||||||
|  |  * @param id | ||||||
|  |  */ | ||||||
|  | export const delListOfWinningBids = (id: string | number | Array<string | number>) => { | ||||||
|  |   return request({ | ||||||
|  |     url: '/bidding/listOfWinningBids/' + id, | ||||||
|  |     method: 'delete' | ||||||
|  |   }); | ||||||
|  | }; | ||||||
							
								
								
									
										296
									
								
								src/api/bidding/listOfWinningBids/types.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										296
									
								
								src/api/bidding/listOfWinningBids/types.ts
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,296 @@ | |||||||
|  | export interface ListOfWinningBidsVO { | ||||||
|  |   /** | ||||||
|  |    *  | ||||||
|  |    */ | ||||||
|  |   id: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目id | ||||||
|  |    */ | ||||||
|  |   projectId: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目状态 | ||||||
|  |    */ | ||||||
|  |   projectStatus: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目名称 | ||||||
|  |    */ | ||||||
|  |   projectName: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 中标价(原币) | ||||||
|  |    */ | ||||||
|  |   winningBidOriginal: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 汇率 | ||||||
|  |    */ | ||||||
|  |   exchangeRate: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 币种 | ||||||
|  |    */ | ||||||
|  |   currency: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 所属主体 | ||||||
|  |    */ | ||||||
|  |   subject: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 中标价 | ||||||
|  |    */ | ||||||
|  |   winningBid: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 中标日期 | ||||||
|  |    */ | ||||||
|  |   bidWinningDate: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 投标保证金 | ||||||
|  |    */ | ||||||
|  |   bidDeposit: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 是否退还 | ||||||
|  |    */ | ||||||
|  |   whetherSendBack: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 建设单位(客户) | ||||||
|  |    */ | ||||||
|  |   construction: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 总造价 | ||||||
|  |    */ | ||||||
|  |   totalCost: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 立项申请人 | ||||||
|  |    */ | ||||||
|  |   projectApplicant: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 立项部门 | ||||||
|  |    */ | ||||||
|  |   projectApplicantDept: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 立项申请日期 | ||||||
|  |    */ | ||||||
|  |   projectApplicantTime: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 流程状态 | ||||||
|  |    */ | ||||||
|  |   processStatus: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目编号 | ||||||
|  |    */ | ||||||
|  |   projectNumbering: string; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface ListOfWinningBidsForm extends BaseEntity { | ||||||
|  |   /** | ||||||
|  |    *  | ||||||
|  |    */ | ||||||
|  |   id?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目id | ||||||
|  |    */ | ||||||
|  |   projectId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目状态 | ||||||
|  |    */ | ||||||
|  |   projectStatus?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目名称 | ||||||
|  |    */ | ||||||
|  |   projectName?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 中标价(原币) | ||||||
|  |    */ | ||||||
|  |   winningBidOriginal?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 汇率 | ||||||
|  |    */ | ||||||
|  |   exchangeRate?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 币种 | ||||||
|  |    */ | ||||||
|  |   currency?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 所属主体 | ||||||
|  |    */ | ||||||
|  |   subject?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 中标价 | ||||||
|  |    */ | ||||||
|  |   winningBid?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 中标日期 | ||||||
|  |    */ | ||||||
|  |   bidWinningDate?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 投标保证金 | ||||||
|  |    */ | ||||||
|  |   bidDeposit?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 是否退还 | ||||||
|  |    */ | ||||||
|  |   whetherSendBack?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 建设单位(客户) | ||||||
|  |    */ | ||||||
|  |   construction?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 总造价 | ||||||
|  |    */ | ||||||
|  |   totalCost?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 立项申请人 | ||||||
|  |    */ | ||||||
|  |   projectApplicant?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 立项部门 | ||||||
|  |    */ | ||||||
|  |   projectApplicantDept?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 立项申请日期 | ||||||
|  |    */ | ||||||
|  |   projectApplicantTime?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 流程状态 | ||||||
|  |    */ | ||||||
|  |   processStatus?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目编号 | ||||||
|  |    */ | ||||||
|  |   projectNumbering?: string; | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | export interface ListOfWinningBidsQuery extends PageQuery { | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目id | ||||||
|  |    */ | ||||||
|  |   projectId?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目状态 | ||||||
|  |    */ | ||||||
|  |   projectStatus?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目名称 | ||||||
|  |    */ | ||||||
|  |   projectName?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 中标价(原币) | ||||||
|  |    */ | ||||||
|  |   winningBidOriginal?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 汇率 | ||||||
|  |    */ | ||||||
|  |   exchangeRate?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 币种 | ||||||
|  |    */ | ||||||
|  |   currency?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 所属主体 | ||||||
|  |    */ | ||||||
|  |   subject?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 中标价 | ||||||
|  |    */ | ||||||
|  |   winningBid?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 中标日期 | ||||||
|  |    */ | ||||||
|  |   bidWinningDate?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 投标保证金 | ||||||
|  |    */ | ||||||
|  |   bidDeposit?: string | number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 是否退还 | ||||||
|  |    */ | ||||||
|  |   whetherSendBack?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 建设单位(客户) | ||||||
|  |    */ | ||||||
|  |   construction?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 总造价 | ||||||
|  |    */ | ||||||
|  |   totalCost?: number; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 立项申请人 | ||||||
|  |    */ | ||||||
|  |   projectApplicant?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 立项部门 | ||||||
|  |    */ | ||||||
|  |   projectApplicantDept?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 立项申请日期 | ||||||
|  |    */ | ||||||
|  |   projectApplicantTime?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 流程状态 | ||||||
|  |    */ | ||||||
|  |   processStatus?: string; | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 项目编号 | ||||||
|  |    */ | ||||||
|  |   projectNumbering?: string; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 日期范围参数 | ||||||
|  |      */ | ||||||
|  |     params?: any; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										318
									
								
								src/views/biddingManagemen/appointment/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										318
									
								
								src/views/biddingManagemen/appointment/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,318 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="p-6 bg-gray-50 main"> | ||||||
|  |     <div class="appWidth1 mx-auto mt-38 bg-white rounded-xl shadow-sm overflow-hidden transition-all duration-300 hover:shadow-md"> | ||||||
|  |       <!-- 表单标题区域 --> | ||||||
|  |       <div class="bg-gradient-to-r from-blue-500 to-blue-600 text-white p-6"> | ||||||
|  |         <h2 class="text-2xl font-bold flex items-center"><i class="el-icon-user-circle mr-3"></i>人员配置</h2> | ||||||
|  |         <p class="text-blue-100 mt-2 opacity-90">请配置投标管理人员信息</p> | ||||||
|  |         <!-- ,带 <span class="text-red-300">*</span> 为必填项 --> | ||||||
|  |         <el-button | ||||||
|  |           @click="isDisabled = false" | ||||||
|  |           class="px-8 py-2.5 transition-all duration-300 font-medium" | ||||||
|  |           v-if="isDisabled" | ||||||
|  |           v-hasPermi="['cailiaoshebei:purchaseUser:addOrUpdate']" | ||||||
|  |         > | ||||||
|  |           点击编辑 | ||||||
|  |         </el-button> | ||||||
|  |       </div> | ||||||
|  |  | ||||||
|  |       <!-- 表单内容区域 --> | ||||||
|  |       <el-form ref="leaveFormRef" :model="form" :rules="rules" label-width="120px" class="p-6 pt30 space-y-6 h75" :disabled="isDisabled"> | ||||||
|  |         <!-- 设计负责人 --> | ||||||
|  |         <div class="fonts w60% ma"> | ||||||
|  |           <el-form-item label="招投标专员" prop="userId" class="mb-4"> | ||||||
|  |             <el-select | ||||||
|  |               v-model="form.userId" | ||||||
|  |               placeholder="请选择招投标专员" | ||||||
|  |               class="w-full transition-all duration-300 border-gray-300 focus:border-blue-400 focus:ring-1 focus:ring-blue-400" | ||||||
|  |             > | ||||||
|  |               <el-option v-for="item in userList" :key="item.userId" :label="item.userName" :value="item.userId" /> | ||||||
|  |             </el-select> | ||||||
|  |           </el-form-item> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|  |         <!-- 提交按钮区域 --> | ||||||
|  |         <div class="flex justify-center space-x-6 mt-8 pt-6 border-t border-gray-100" v-if="!isDisabled"> | ||||||
|  |           <el-button | ||||||
|  |             type="primary" | ||||||
|  |             @click="submitForm" | ||||||
|  |             icon="Check" | ||||||
|  |             class="px-8 py-2.5 transition-all duration-300 transform hover:scale-105 bg-blue-500 hover:bg-blue-600 text-white font-medium" | ||||||
|  |             v-hasPermi="['cailiaoshebei:purchaseUser:addOrUpdate']" | ||||||
|  |           > | ||||||
|  |             确认提交 | ||||||
|  |           </el-button> | ||||||
|  |           <el-button @click="resetForm" icon="Refresh" class="px-8 py-2.5 transition-all duration-300 border-gray-300 hover:bg-gray-100 font-medium"> | ||||||
|  |             重置 | ||||||
|  |           </el-button> | ||||||
|  |         </div> | ||||||
|  |       </el-form> | ||||||
|  |     </div> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup name="PersonnelForm" lang="ts"> | ||||||
|  | import { ref, reactive, computed, onMounted, toRefs } from 'vue'; | ||||||
|  | import { getCurrentInstance } from 'vue'; | ||||||
|  | import type { ComponentInternalInstance } from 'vue'; | ||||||
|  | import { useUserStoreHook } from '@/store/modules/user'; | ||||||
|  | import { ElMessage, ElLoading } from 'element-plus'; | ||||||
|  | import { biddingGetUser, AddbiddingUser, biddingUserList } from '@/api/bidding/appointment'; | ||||||
|  |  | ||||||
|  | // 获取当前实例 | ||||||
|  | const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||||
|  | // 获取用户 store | ||||||
|  | const userStore = useUserStoreHook(); | ||||||
|  | // 从 store 中获取当前选中的项目 | ||||||
|  | const currentProject = computed(() => userStore.selectedProject); | ||||||
|  | // 专业字典数据 | ||||||
|  | const { des_user_major } = toRefs<any>(proxy?.useDict('des_user_major')); | ||||||
|  | const isDisabled = ref(false); | ||||||
|  |  | ||||||
|  | // 表单数据 | ||||||
|  | const form = reactive({ | ||||||
|  |   id: null, | ||||||
|  |   projectId: currentProject.value?.id, | ||||||
|  |   userId: null // 设计负责人 | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | // 表单验证规则 | ||||||
|  | const rules = reactive({ | ||||||
|  |   userId: [{ required: true, message: '请选择招投标专员', trigger: 'change' }] | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | // 用户列表 | ||||||
|  | const userList = ref([]); | ||||||
|  |  | ||||||
|  | // 表单引用 | ||||||
|  | const leaveFormRef = ref(); | ||||||
|  |  | ||||||
|  | /** 查询当前部门的所有用户 */ | ||||||
|  | const getDeptAllUser = async (deptId: any) => { | ||||||
|  |   const res = await biddingGetUser({}); | ||||||
|  |   userList.value = res.data; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 查询当前表单数据并回显 */ | ||||||
|  | const getBiddingUser = async () => { | ||||||
|  |   if (!currentProject.value?.id) return; | ||||||
|  |   const loading = ElLoading.service({ | ||||||
|  |     lock: true, | ||||||
|  |     text: '加载配置数据中...', | ||||||
|  |     background: 'rgba(255, 255, 255, 0.7)' | ||||||
|  |   }); | ||||||
|  |   try { | ||||||
|  |     const res = await biddingUserList(currentProject.value?.id); | ||||||
|  |     if (res.code == 200) { | ||||||
|  |       if (!res.data) { | ||||||
|  |         resetForm(); | ||||||
|  |         form.id = null; | ||||||
|  |         isDisabled.value = false; | ||||||
|  |         return; | ||||||
|  |       } | ||||||
|  |       Object.assign(form, res.data); | ||||||
|  |       isDisabled.value = true; | ||||||
|  |     } | ||||||
|  |   } catch (error) { | ||||||
|  |     ElMessage.error('获取配置数据失败'); | ||||||
|  |     // 添加默认空项 | ||||||
|  |   } finally { | ||||||
|  |     loading.close(); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 提交表单 */ | ||||||
|  | const submitForm = async () => { | ||||||
|  |   if (!leaveFormRef.value) return; | ||||||
|  |   try { | ||||||
|  |     // 表单验证 | ||||||
|  |     await leaveFormRef.value.validate(); | ||||||
|  |     let userName = userList.value.find((item) => item.userId === form.userId)?.userName; | ||||||
|  |     const data = { | ||||||
|  |       projectId: currentProject.value?.id, | ||||||
|  |       userId: form.userId, | ||||||
|  |       userName, | ||||||
|  |       id: form.id | ||||||
|  |     }; | ||||||
|  |     // 提交到后端 | ||||||
|  |     const res = await AddbiddingUser(data); | ||||||
|  |     if (res.code === 200) { | ||||||
|  |       ElMessage.success('提交成功'); | ||||||
|  |       isDisabled.value = true; | ||||||
|  |     } else { | ||||||
|  |       ElMessage.error(res.msg || '提交失败'); | ||||||
|  |     } | ||||||
|  |   } catch (error) { | ||||||
|  |     ElMessage.error('请完善表单信息后再提交'); | ||||||
|  |   } finally { | ||||||
|  |     // 关闭加载状态 | ||||||
|  |     ElLoading.service().close(); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 重置表单 */ | ||||||
|  | const resetForm = () => { | ||||||
|  |   if (leaveFormRef.value) { | ||||||
|  |     leaveFormRef.value.resetFields(); | ||||||
|  |   } | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | // 页面挂载时初始化数据 | ||||||
|  | onMounted(() => { | ||||||
|  |   // 先获取用户列表,再加载表单数据 | ||||||
|  |   getDeptAllUser(userStore.deptId).then(() => { | ||||||
|  |     getBiddingUser(); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | //监听项目id刷新数据 | ||||||
|  | const listeningProject = watch( | ||||||
|  |   () => currentProject.value?.id, | ||||||
|  |   (nid, oid) => { | ||||||
|  |     getDeptAllUser(userStore.deptId).then(() => { | ||||||
|  |       getBiddingUser(); | ||||||
|  |     }); | ||||||
|  |   } | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | onUnmounted(() => { | ||||||
|  |   listeningProject(); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <style lang="scss"> | ||||||
|  | .main { | ||||||
|  |   height: calc(100vh - 90px); | ||||||
|  | } | ||||||
|  | .appWidth1 { | ||||||
|  |   width: 50vw; | ||||||
|  |   max-width: 1200px; | ||||||
|  |   .el-select__wrapper { | ||||||
|  |     width: 16vw !important; | ||||||
|  |   } | ||||||
|  |   .el-button--small { | ||||||
|  |     margin-bottom: 10px; | ||||||
|  |   } | ||||||
|  |   .fonts { | ||||||
|  |     .el-form-item--default .el-form-item__label { | ||||||
|  |       font-size: 18px !important; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 自定义动画 | ||||||
|  | @keyframes fadeIn { | ||||||
|  |   from { | ||||||
|  |     opacity: 0; | ||||||
|  |     transform: translateY(10px); | ||||||
|  |   } | ||||||
|  |   to { | ||||||
|  |     opacity: 1; | ||||||
|  |     transform: translateY(0); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .animate-fadeIn { | ||||||
|  |   animation: fadeIn 0.3s ease-out forwards; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 表单样式优化 | ||||||
|  | ::v-deep .el-form { | ||||||
|  |   --el-form-item-margin-bottom: 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ::v-deep .el-form-item { | ||||||
|  |   margin-bottom: 0; | ||||||
|  |  | ||||||
|  |   &__label { | ||||||
|  |     font-weight: 500; | ||||||
|  |     color: #4e5969; | ||||||
|  |     padding: 0 0 8px 0; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   &__content { | ||||||
|  |     padding: 0; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ::v-deep .el-select { | ||||||
|  |   width: 100%; | ||||||
|  |  | ||||||
|  |   .el-input__inner { | ||||||
|  |     border-radius: 6px; | ||||||
|  |     transition: all 0.3s ease; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   &:hover .el-input__inner { | ||||||
|  |     border-color: #66b1ff; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   &.el-select-focus .el-input__inner { | ||||||
|  |     border-color: #409eff; | ||||||
|  |     box-shadow: 0 0 0 2px rgba(64, 158, 255, 0.2); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | ::v-deep .el-button { | ||||||
|  |   border-radius: 6px; | ||||||
|  |   padding: 8px 16px; | ||||||
|  |  | ||||||
|  |   &--primary { | ||||||
|  |     background-color: #409eff; | ||||||
|  |     border-color: #409eff; | ||||||
|  |  | ||||||
|  |     &:hover { | ||||||
|  |       background-color: #66b1ff; | ||||||
|  |       border-color: #66b1ff; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   &--danger { | ||||||
|  |     background-color: #f56c6c; | ||||||
|  |     border-color: #f56c6c; | ||||||
|  |  | ||||||
|  |     &:hover { | ||||||
|  |       background-color: #f78989; | ||||||
|  |       border-color: #f78989; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     &:disabled { | ||||||
|  |       background-color: #ffcccc; | ||||||
|  |       border-color: #ffbbbb; | ||||||
|  |       cursor: not-allowed; | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 响应式网格布局 | ||||||
|  | .grid { | ||||||
|  |   display: grid; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .grid-cols-1 { | ||||||
|  |   grid-template-columns: repeat(1, minmax(0, 1fr)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .md\:grid-cols-2 { | ||||||
|  |   grid-template-columns: repeat(2, minmax(0, 1fr)); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | .gap-4 { | ||||||
|  |   gap: 1rem; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | // 适配小屏幕 | ||||||
|  | @media (max-width: 768px) { | ||||||
|  |   .appWidth1 { | ||||||
|  |     width: 95vw; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   ::v-deep .el-form { | ||||||
|  |     padding: 4px; | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   ::v-deep .el-form-item__label { | ||||||
|  |     width: 100px; | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | </style> | ||||||
							
								
								
									
										342
									
								
								src/views/biddingManagemen/listOfWinningBids/index.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										342
									
								
								src/views/biddingManagemen/listOfWinningBids/index.vue
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,342 @@ | |||||||
|  | <template> | ||||||
|  |   <div class="p-2"> | ||||||
|  |     <transition :enter-active-class="proxy?.animate.searchAnimate.enter" :leave-active-class="proxy?.animate.searchAnimate.leave"> | ||||||
|  |       <div v-show="showSearch" class="mb-[10px]"> | ||||||
|  |         <el-card shadow="hover"> | ||||||
|  |           <el-form ref="queryFormRef" :model="queryParams" :inline="true" label-width="110px"> | ||||||
|  |             <el-form-item label="项目名称" prop="projectName"> | ||||||
|  |               <el-input v-model="queryParams.projectName" placeholder="请输入项目名称" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="建设单位" prop="construction"> | ||||||
|  |               <el-input v-model="queryParams.construction" placeholder="请输入建设单位" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item label="立项申请人" prop="projectApplicant"> | ||||||
|  |               <el-input v-model="queryParams.projectApplicant" placeholder="请输入立项申请人" clearable @keyup.enter="handleQuery" /> | ||||||
|  |             </el-form-item> | ||||||
|  |             <el-form-item> | ||||||
|  |               <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button> | ||||||
|  |               <el-button icon="Refresh" @click="resetQuery">重置</el-button> | ||||||
|  |             </el-form-item> | ||||||
|  |           </el-form> | ||||||
|  |         </el-card> | ||||||
|  |       </div> | ||||||
|  |     </transition> | ||||||
|  |     <el-card shadow="never"> | ||||||
|  |       <template #header> | ||||||
|  |         <el-row :gutter="10" class="mb8"> | ||||||
|  |           <el-col :span="1.5"> | ||||||
|  |             <el-button type="primary" plain icon="Plus" @click="handleAdd" v-hasPermi="['bidding:listOfWinningBids:add']">新增</el-button> | ||||||
|  |           </el-col> | ||||||
|  |           <right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar> | ||||||
|  |         </el-row> | ||||||
|  |       </template> | ||||||
|  |  | ||||||
|  |       <el-table v-loading="loading" :data="listOfWinningBidsList" @selection-change="handleSelectionChange"> | ||||||
|  |         <!-- <el-table-column type="selection" width="55" align="center" /> --> | ||||||
|  |         <el-table-column label="序号" align="center" type="index" width="60" /> | ||||||
|  |         <el-table-column label="项目状态" align="center" prop="projectStatus" /> | ||||||
|  |         <el-table-column label="项目名称" align="center" prop="projectName" /> | ||||||
|  |         <el-table-column label="中标价" align="center" prop="winningBidOriginal" /> | ||||||
|  |         <el-table-column label="汇率" align="center" prop="exchangeRate" /> | ||||||
|  |         <el-table-column label="币种" align="center" prop="currency" /> | ||||||
|  |         <el-table-column label="所属主体" align="center" prop="subject" /> | ||||||
|  |         <el-table-column label="中标价" align="center" prop="winningBid" /> | ||||||
|  |         <el-table-column label="中标日期" align="center" prop="bidWinningDate" width="180"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <span>{{ parseTime(scope.row.bidWinningDate, '{y}-{m}-{d}') }}</span> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |         <el-table-column label="投标保证金" align="center" prop="bidDeposit" width="120" /> | ||||||
|  |         <el-table-column label="是否退还" align="center" prop="whetherSendBack" /> | ||||||
|  |         <el-table-column label="建设单位" align="center" prop="construction" /> | ||||||
|  |         <el-table-column label="总造价" align="center" prop="totalCost" /> | ||||||
|  |         <el-table-column label="立项申请人" align="center" prop="projectApplicant" width="120" /> | ||||||
|  |         <el-table-column label="立项部门" align="center" prop="projectApplicantDept" /> | ||||||
|  |         <el-table-column label="立项申请日期" align="center" prop="projectApplicantTime" width="160"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <span>{{ parseTime(scope.row.projectApplicantTime, '{y}-{m}-{d}') }}</span> | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |         <el-table-column label="流程状态" align="center" prop="processStatus" /> | ||||||
|  |         <el-table-column label="项目编号" align="center" prop="projectNumbering" /> | ||||||
|  |         <el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right" width="200"> | ||||||
|  |           <template #default="scope"> | ||||||
|  |             <el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['bidding:listOfWinningBids:edit']" | ||||||
|  |               >修改</el-button | ||||||
|  |             > | ||||||
|  |             <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['bidding:listOfWinningBids:remove']"> | ||||||
|  |               删除</el-button | ||||||
|  |             > | ||||||
|  |           </template> | ||||||
|  |         </el-table-column> | ||||||
|  |       </el-table> | ||||||
|  |       <pagination v-show="total > 0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" /> | ||||||
|  |     </el-card> | ||||||
|  |     <!-- 添加或修改中标项目一览对话框 --> | ||||||
|  |     <el-dialog :title="dialog.title" v-model="dialog.visible" width="800px" append-to-body> | ||||||
|  |       <el-form ref="listOfWinningBidsFormRef" :model="form" :rules="rules" label-width="110px"> | ||||||
|  |         <el-row :gutter="24"> | ||||||
|  |           <el-col :span="12"> | ||||||
|  |             <el-form-item label="项目名称" prop="projectName"> <el-input v-model="form.projectName" placeholder="请输入项目名称" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12"> | ||||||
|  |             <el-form-item label="中标价" prop="winningBidOriginal"> | ||||||
|  |               <el-input v-model="form.winningBidOriginal" placeholder="请输入中标价" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12"> | ||||||
|  |             <el-form-item label="汇率" prop="exchangeRate"> <el-input v-model="form.exchangeRate" placeholder="请输入汇率" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12"> | ||||||
|  |             <el-form-item label="币种" prop="currency"> <el-input v-model="form.currency" placeholder="请输入币种" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12"> | ||||||
|  |             <el-form-item label="所属主体" prop="subject"> <el-input v-model="form.subject" placeholder="请输入所属主体" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12" | ||||||
|  |             ><el-form-item label="中标价" prop="winningBid"> <el-input v-model="form.winningBid" placeholder="请输入中标价" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12" | ||||||
|  |             ><el-form-item label="中标日期" prop="bidWinningDate"> | ||||||
|  |               <el-date-picker | ||||||
|  |                 clearable | ||||||
|  |                 v-model="form.bidWinningDate" | ||||||
|  |                 type="date" | ||||||
|  |                 format="YYYY-MM-DD" | ||||||
|  |                 value-format="YYYY-MM-DD" | ||||||
|  |                 placeholder="请选择中标日期" | ||||||
|  |               > | ||||||
|  |               </el-date-picker> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12"> | ||||||
|  |             <el-form-item label="投标保证金" prop="bidDeposit"> <el-input v-model="form.bidDeposit" placeholder="请输入投标保证金" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12"> | ||||||
|  |             <el-form-item label="是否退还" prop="whetherSendBack"> | ||||||
|  |               <el-input v-model="form.whetherSendBack" placeholder="请输入是否退还" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12" | ||||||
|  |             ><el-form-item label="建设单位" prop="construction"> <el-input v-model="form.construction" placeholder="请输入建设单位" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12"> | ||||||
|  |             <el-form-item label="总造价" prop="totalCost"> <el-input v-model="form.totalCost" placeholder="请输入总造价" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12"> | ||||||
|  |             <el-form-item label="立项申请人" prop="projectApplicant"> | ||||||
|  |               <el-input v-model="form.projectApplicant" placeholder="请输入立项申请人" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12" | ||||||
|  |             ><el-form-item label="立项部门" prop="projectApplicantDept"> | ||||||
|  |               <el-input v-model="form.projectApplicantDept" placeholder="请输入立项部门" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12" | ||||||
|  |             ><el-form-item label="立项申请日期" prop="projectApplicantTime"> | ||||||
|  |               <el-date-picker | ||||||
|  |                 clearable | ||||||
|  |                 v-model="form.projectApplicantTime" | ||||||
|  |                 type="date" | ||||||
|  |                 format="YYYY-MM-DD" | ||||||
|  |                 value-format="YYYY-MM-DD" | ||||||
|  |                 placeholder="请选择立项申请日期" | ||||||
|  |               > | ||||||
|  |               </el-date-picker> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |           <el-col :span="12" | ||||||
|  |             ><el-form-item label="项目编号" prop="projectNumbering"> | ||||||
|  |               <el-input v-model="form.projectNumbering" placeholder="请输入项目编号" /> </el-form-item | ||||||
|  |           ></el-col> | ||||||
|  |         </el-row> | ||||||
|  |       </el-form> | ||||||
|  |       <template #footer> | ||||||
|  |         <div class="dialog-footer"> | ||||||
|  |           <el-button :loading="buttonLoading" type="primary" @click="submitForm">确 定</el-button> | ||||||
|  |           <el-button @click="cancel">取 消</el-button> | ||||||
|  |         </div> | ||||||
|  |       </template> | ||||||
|  |     </el-dialog> | ||||||
|  |   </div> | ||||||
|  | </template> | ||||||
|  |  | ||||||
|  | <script setup name="ListOfWinningBids" lang="ts"> | ||||||
|  | import { | ||||||
|  |   listListOfWinningBids, | ||||||
|  |   getListOfWinningBids, | ||||||
|  |   delListOfWinningBids, | ||||||
|  |   addListOfWinningBids, | ||||||
|  |   updateListOfWinningBids | ||||||
|  | } from '@/api/bidding/listOfWinningBids'; | ||||||
|  | import { ListOfWinningBidsVO, ListOfWinningBidsQuery, ListOfWinningBidsForm } from '@/api/bidding/listOfWinningBids/types'; | ||||||
|  | import { useUserStoreHook } from '@/store/modules/user'; | ||||||
|  | const { proxy } = getCurrentInstance() as ComponentInternalInstance; | ||||||
|  | // 获取用户 store | ||||||
|  | const userStore = useUserStoreHook(); | ||||||
|  | // 从 store 中获取当前选中的项目 | ||||||
|  | const currentProject = computed(() => userStore.selectedProject); | ||||||
|  | const listOfWinningBidsList = ref<ListOfWinningBidsVO[]>([]); | ||||||
|  | const buttonLoading = ref(false); | ||||||
|  | const loading = ref(true); | ||||||
|  | const showSearch = ref(true); | ||||||
|  | const ids = ref<Array<string | number>>([]); | ||||||
|  | const single = ref(true); | ||||||
|  | const multiple = ref(true); | ||||||
|  | const total = ref(0); | ||||||
|  |  | ||||||
|  | const queryFormRef = ref<ElFormInstance>(); | ||||||
|  | const listOfWinningBidsFormRef = ref<ElFormInstance>(); | ||||||
|  |  | ||||||
|  | const dialog = reactive<DialogOption>({ | ||||||
|  |   visible: false, | ||||||
|  |   title: '' | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const initFormData: ListOfWinningBidsForm = { | ||||||
|  |   id: undefined, | ||||||
|  |   projectId: currentProject.value?.id, | ||||||
|  |   projectStatus: undefined, | ||||||
|  |   projectName: undefined, | ||||||
|  |   winningBidOriginal: undefined, | ||||||
|  |   exchangeRate: undefined, | ||||||
|  |   currency: undefined, | ||||||
|  |   subject: undefined, | ||||||
|  |   winningBid: undefined, | ||||||
|  |   bidWinningDate: undefined, | ||||||
|  |   bidDeposit: undefined, | ||||||
|  |   whetherSendBack: undefined, | ||||||
|  |   construction: undefined, | ||||||
|  |   totalCost: undefined, | ||||||
|  |   projectApplicant: undefined, | ||||||
|  |   projectApplicantDept: undefined, | ||||||
|  |   projectApplicantTime: undefined, | ||||||
|  |   processStatus: undefined, | ||||||
|  |   projectNumbering: undefined | ||||||
|  | }; | ||||||
|  | const data = reactive<PageData<ListOfWinningBidsForm, ListOfWinningBidsQuery>>({ | ||||||
|  |   form: { ...initFormData }, | ||||||
|  |   queryParams: { | ||||||
|  |     pageNum: 1, | ||||||
|  |     pageSize: 10, | ||||||
|  |     projectId: currentProject.value?.id, | ||||||
|  |     projectStatus: undefined, | ||||||
|  |     projectName: undefined, | ||||||
|  |     winningBidOriginal: undefined, | ||||||
|  |     exchangeRate: undefined, | ||||||
|  |     currency: undefined, | ||||||
|  |     subject: undefined, | ||||||
|  |     winningBid: undefined, | ||||||
|  |     bidWinningDate: undefined, | ||||||
|  |     bidDeposit: undefined, | ||||||
|  |     whetherSendBack: undefined, | ||||||
|  |     construction: undefined, | ||||||
|  |     totalCost: undefined, | ||||||
|  |     projectApplicant: undefined, | ||||||
|  |     projectApplicantDept: undefined, | ||||||
|  |     projectApplicantTime: undefined, | ||||||
|  |     processStatus: undefined, | ||||||
|  |     projectNumbering: undefined, | ||||||
|  |     params: {} | ||||||
|  |   }, | ||||||
|  |   rules: { | ||||||
|  |     id: [{ required: true, message: '不能为空', trigger: 'blur' }], | ||||||
|  |     projectId: [{ required: true, message: '项目id不能为空', trigger: 'blur' }] | ||||||
|  |   } | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const { queryParams, form, rules } = toRefs(data); | ||||||
|  |  | ||||||
|  | /** 查询中标项目一览列表 */ | ||||||
|  | const getList = async () => { | ||||||
|  |   loading.value = true; | ||||||
|  |   const res = await listListOfWinningBids(queryParams.value); | ||||||
|  |   listOfWinningBidsList.value = res.rows; | ||||||
|  |   total.value = res.total; | ||||||
|  |   loading.value = false; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 取消按钮 */ | ||||||
|  | const cancel = () => { | ||||||
|  |   reset(); | ||||||
|  |   dialog.visible = false; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 表单重置 */ | ||||||
|  | const reset = () => { | ||||||
|  |   form.value = { ...initFormData }; | ||||||
|  |   listOfWinningBidsFormRef.value?.resetFields(); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 搜索按钮操作 */ | ||||||
|  | const handleQuery = () => { | ||||||
|  |   queryParams.value.pageNum = 1; | ||||||
|  |   getList(); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 重置按钮操作 */ | ||||||
|  | const resetQuery = () => { | ||||||
|  |   queryFormRef.value?.resetFields(); | ||||||
|  |   handleQuery(); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 多选框选中数据 */ | ||||||
|  | const handleSelectionChange = (selection: ListOfWinningBidsVO[]) => { | ||||||
|  |   ids.value = selection.map((item) => item.id); | ||||||
|  |   single.value = selection.length != 1; | ||||||
|  |   multiple.value = !selection.length; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 新增按钮操作 */ | ||||||
|  | const handleAdd = () => { | ||||||
|  |   reset(); | ||||||
|  |   dialog.visible = true; | ||||||
|  |   dialog.title = '添加中标项目一览'; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 修改按钮操作 */ | ||||||
|  | const handleUpdate = async (row?: ListOfWinningBidsVO) => { | ||||||
|  |   reset(); | ||||||
|  |   const _id = row?.id || ids.value[0]; | ||||||
|  |   const res = await getListOfWinningBids(_id); | ||||||
|  |   Object.assign(form.value, res.data); | ||||||
|  |   dialog.visible = true; | ||||||
|  |   dialog.title = '修改中标项目一览'; | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 提交按钮 */ | ||||||
|  | const submitForm = () => { | ||||||
|  |   listOfWinningBidsFormRef.value?.validate(async (valid: boolean) => { | ||||||
|  |     if (valid) { | ||||||
|  |       buttonLoading.value = true; | ||||||
|  |       if (form.value.id) { | ||||||
|  |         await updateListOfWinningBids(form.value).finally(() => (buttonLoading.value = false)); | ||||||
|  |       } else { | ||||||
|  |         await addListOfWinningBids(form.value).finally(() => (buttonLoading.value = false)); | ||||||
|  |       } | ||||||
|  |       proxy?.$modal.msgSuccess('操作成功'); | ||||||
|  |       dialog.visible = false; | ||||||
|  |       await getList(); | ||||||
|  |     } | ||||||
|  |   }); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 删除按钮操作 */ | ||||||
|  | const handleDelete = async (row?: ListOfWinningBidsVO) => { | ||||||
|  |   const _ids = row?.id || ids.value; | ||||||
|  |   await proxy?.$modal.confirm('是否确认删除中标项目一览编号为"' + _ids + '"的数据项?').finally(() => (loading.value = false)); | ||||||
|  |   await delListOfWinningBids(_ids); | ||||||
|  |   proxy?.$modal.msgSuccess('删除成功'); | ||||||
|  |   await getList(); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | /** 导出按钮操作 */ | ||||||
|  | const handleExport = () => { | ||||||
|  |   proxy?.download( | ||||||
|  |     'bidding/listOfWinningBids/export', | ||||||
|  |     { | ||||||
|  |       ...queryParams.value | ||||||
|  |     }, | ||||||
|  |     `listOfWinningBids_${new Date().getTime()}.xlsx` | ||||||
|  |   ); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | onMounted(() => { | ||||||
|  |   getList(); | ||||||
|  | }); | ||||||
|  | </script> | ||||||
		Reference in New Issue
	
	Block a user