移动端
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 

508 行
15 KiB

  1. <template>
  2. <div>
  3. <van-nav-bar
  4. title="竞价大厅"
  5. left-arrow
  6. fixed
  7. placeholder
  8. @click-left="onClickLeft"
  9. />
  10. <van-search
  11. v-model="value"
  12. shape="round"
  13. background="#fff"
  14. placeholder="请输入搜索关键词"
  15. @search="onSearch"
  16. />
  17. <van-row>
  18. <van-dropdown-menu>
  19. <van-dropdown-item v-model="value1" :options="projectTypeOption" @change="tabChange"/>
  20. <van-dropdown-item :value="value2" :title="value2">
  21. <van-tree-select
  22. :active-id.sync="activeId"
  23. :items="deptListOption"
  24. :main-active-index.sync="activeIndex"
  25. :max="1"
  26. @click-item="clickItem"
  27. @click-nav="clickNav"
  28. />
  29. </van-dropdown-item>
  30. <van-dropdown-item v-model="value3" :options="option3" @change="tabChange"/>
  31. </van-dropdown-menu>
  32. </van-row>
  33. <p class="biddingProcessTitle">
  34. <img src="../../../static/images/title_icon.png" alt="">
  35. 竞价流程
  36. </p>
  37. <div class="biddingProcessContent">
  38. <div class="content_li">
  39. <div class="biddingProcess">
  40. <i></i>
  41. <div></div>
  42. </div>
  43. <p class="biddingProcess_text">查看项目</p>
  44. </div>
  45. <div class="content_li">
  46. <div class="biddingProcess">
  47. <div></div>
  48. <i></i>
  49. <div></div>
  50. </div>
  51. <p class="biddingProcess_text">注册报名</p>
  52. </div>
  53. <div class="content_li">
  54. <div class="biddingProcess">
  55. <div></div>
  56. <i></i>
  57. <div></div>
  58. </div>
  59. <p class="biddingProcess_text">交保证金</p>
  60. </div>
  61. <div class="content_li">
  62. <div class="biddingProcess">
  63. <div></div>
  64. <i></i>
  65. <div></div>
  66. </div>
  67. <p class="biddingProcess_text">资质审核</p>
  68. </div>
  69. <div class="content_li">
  70. <div class="biddingProcess">
  71. <div></div>
  72. <i></i>
  73. <div></div>
  74. </div>
  75. <p class="biddingProcess_text">参与竞价</p>
  76. </div>
  77. <div class="content_li">
  78. <div class="biddingProcess">
  79. <div></div>
  80. <i></i>
  81. <div></div>
  82. </div>
  83. <p class="biddingProcess_text">成交确认</p>
  84. </div>
  85. <div class="content_li">
  86. <div class="biddingProcess" style="justify-content: left;">
  87. <div></div>
  88. <i></i>
  89. </div>
  90. <p class="biddingProcess_text">结算交割</p>
  91. </div>
  92. </div>
  93. <!-- <van-pull-refresh v-model="refreshing" @refresh="onRefresh">-->
  94. <van-list
  95. v-model="loading"
  96. :finished="finished"
  97. finished-text="没有更多了"
  98. @load="getList"
  99. >
  100. <div class="list_li" v-for="(item,index) in infoList" :key="index" @click="goDetail(item.id)">
  101. <div class="list_li_tt">
  102. <p>{{item.content}}</p>
  103. </div>
  104. <div class="list_li_time">
  105. <p>
  106. <span style="color: #848484">当前价:</span>
  107. <!--自由竞价竞价中-->
  108. <span :style="{'font-size':'14px',color: {'未开始': '#007E72','已结束': '#848484','竞价中': '#c21F3a',}[item.projectShowStatus]}" v-if="item.biddingType=='自由竞价'&&item.deadline>0">*</span>
  109. <!--自由竞价竞价结束(有人出价)-->
  110. <span :style="{'font-size':'14px',color: {'未开始': '#007E72','已结束': '#848484','竞价中': '#c21F3a',}[item.projectShowStatus]}" v-if="(item.biddingType=='自由竞价'&&item.deadline<=0)&&item.money">{{item.money}}{{item.priceUnit}}</span>
  111. <!--自由竞价竞价结束(无人出价)-->
  112. <span :style="{'font-size':'14px',color: {'未开始': '#007E72','已结束': '#848484','竞价中': '#c21F3a',}[item.projectShowStatus]}" v-if="(item.biddingType=='自由竞价'&&item.deadline<=0)&&!item.money">暂无出价</span>
  113. <!--阶梯竞价竞价中(有人出价)-->
  114. <span :style="{'font-size':'14px',color: {'未开始': '#007E72','已结束': '#848484','竞价中': '#c21F3a',}[item.projectShowStatus]}" v-if="(item.biddingType!='自由竞价'&&item.deadline>0)&&item.money">{{item.money}}{{item.priceUnit}}</span>
  115. <!--阶梯竞价竞价中(无人出价)-->
  116. <span :style="{'font-size':'14px',color: {'未开始': '#007E72','已结束': '#848484','竞价中': '#c21F3a',}[item.projectShowStatus]}" v-if="(item.biddingType!='自由竞价'&&item.deadline>0)&&!item.money">暂无出价</span>
  117. <!--阶梯竞价竞价结束(有人出价)-->
  118. <span :style="{'font-size':'14px',color: {'未开始': '#007E72','已结束': '#848484','竞价中': '#c21F3a',}[item.projectShowStatus]}" v-if="(item.biddingType!='自由竞价'&&item.deadline<=0)&&item.money">{{item.money}}{{item.priceUnit}}</span>
  119. <!--阶梯竞价竞价结束(无人出价)-->
  120. <span :style="{'font-size':'14px',color: {'未开始': '#007E72','已结束': '#848484','竞价中': '#c21F3a',}[item.projectShowStatus]}" v-if="(item.biddingType!='自由竞价'&&item.deadline<=0)&&!item.money">暂无出价</span>
  121. </p>
  122. <p :style="{
  123. color: {
  124. '未开始': '#007E72',
  125. '已结束': '#848484',
  126. '竞价中': '#c21F3a',
  127. }[item.projectShowStatus]}">{{item.projectShowStatus}}</p>
  128. </div>
  129. <div class="list_li_time">
  130. <p>
  131. <span style="color: #848484">竞价时间:{{item.biddingStartTime}}~{{item.biddingStopSetime}}</span>
  132. </p>
  133. </div>
  134. </div>
  135. <!-- <van-row v-for="(item,index) in infoList" :key="index" :title="item" @click="goDetail(item.id)">-->
  136. <!-- <van-col span="13" class="biddingProcessListLeftCol">-->
  137. <!-- <span >{{item.content}}</span>-->
  138. <!-- </van-col>-->
  139. <!-- <van-col span="11" class="biddingProcessListRightCol">-->
  140. <!-- <van-count-down :time="item.deadline">-->
  141. <!-- <template #default="timeData">-->
  142. <!-- <span style="color: #666666">距竞价结束</span><span>{{timeData.days}}天{{timeData.hours}}时{{timeData.minutes}}分{{timeData.seconds}}秒</span>-->
  143. <!-- </template>-->
  144. <!-- </van-count-down>-->
  145. <!-- <van-row>-->
  146. <!-- </van-row>-->
  147. <!-- </van-col>-->
  148. <!-- </van-row>-->
  149. </van-list>
  150. <!-- </van-pull-refresh>-->
  151. </div>
  152. </template>
  153. <script>
  154. import {getBiddingList, getDeptList} from "../../api/biddingHall";
  155. export default {
  156. name: "biddingHallApply",
  157. data() {
  158. return {
  159. //标的物类型
  160. projectTypeOption:[{text:'标的物类型',value:''}],
  161. input: '',
  162. iconList: {
  163. bjd: "../../static/images/11.png",
  164. bzj:"../../static/images/22.png",
  165. cj:"../../static/images/33.png",
  166. jcxx:"../../static/images/44.png",
  167. k:"../../static/images/55.png",
  168. xmjflc:"../../static/images/66.png",
  169. zj:"../../static/images/77.png",
  170. },
  171. iconWidthHeight:"0.4rem",
  172. infoList:[],
  173. value1: '',
  174. value2: '标的物位置',
  175. activeId: null,
  176. activeIndex: 0,
  177. value3: '',
  178. value:"",
  179. info:[],
  180. //标的物所在地
  181. deptListOption: [],
  182. option3: [
  183. { text: '竞价状态', value: '' },
  184. { text: '正在报名', value: '正在报名' },
  185. { text: '等待竞价', value: '等待竞价' },
  186. { text: '正在竞价', value: '正在竞价' },
  187. { text: '等待成交', value: '等待成交' },
  188. { text: '已经成交', value: '已经成交' },
  189. ],
  190. loading: false,
  191. finished: false,
  192. refreshing: false,
  193. queryParams : {
  194. pageNum:1,
  195. pageSize:10
  196. }
  197. }
  198. },
  199. created(){
  200. this.getDicts("project_type").then(response => {
  201. response.data.map(item => {
  202. this.projectTypeOption.push({ value:item.dictValue, text: item.dictLabel});
  203. });
  204. });
  205. getDeptList().then(response => {
  206. response.data.map(item => {
  207. this.deptListOption.push({text: item.deptName,children: [],id:item.deptId})
  208. });
  209. console.log(this.deptListOption)
  210. if(response.data.length > 0){
  211. getDeptList(response.data[0].deptId).then(res => {
  212. let list = []
  213. res.data.map(i =>{
  214. list.push({text:i.deptName,children:[],id:i.deptId})
  215. })
  216. if(list.length==0){
  217. list.push({text:response.data[0].deptName,id:response.data[0].deptId})
  218. }else{
  219. this.$set(this.deptListOption[0], "children", list);
  220. }
  221. });
  222. }
  223. });
  224. },
  225. methods:{
  226. goDetail(id){
  227. console.log(id)
  228. this.$router.push({path:'project/projectDetail',query:{id:id}})
  229. },
  230. getList(){
  231. this.queryParams.deptId = this.activeId;
  232. this.queryParams.projectNumber = this.value1;
  233. this.queryParams.projectShowStatus = this.value3;
  234. getBiddingList(this.queryParams).then(response =>{
  235. response.rows.map(item => {
  236. if(item.biddingStopTime != null || item.biddingStartTime != null){
  237. var endTimes=item.biddingStopTime.substring(0,10).split('-');
  238. var biddingStopTime=endTimes[1]+'/'+endTimes[2]+'/'+endTimes[0]+' '+item.biddingStopTime.substring(10,19);
  239. var startTimes=item.biddingStartTime.substring(0,10).split('-');
  240. var biddingStartTime=startTimes[1]+'/'+startTimes[2]+'/'+startTimes[0]+' '+item.biddingStartTime.substring(10,19);
  241. var nowTime = Date.parse(new Date());
  242. var leftTime = Date.parse(biddingStopTime)-nowTime;
  243. var rightTime = Date.parse(biddingStartTime)-nowTime;
  244. console.log(biddingStopTime)
  245. console.log(leftTime)
  246. if(leftTime>0){
  247. console.log('进行中')
  248. item.timeType = '进行中'
  249. }
  250. if(leftTime<0){
  251. console.log('已结束')
  252. item.timeType = '已结束'
  253. }
  254. if(rightTime>0){
  255. console.log('未开始')
  256. item.timeType = '未开始'
  257. }
  258. }
  259. if (item.biddingStopTime!=""){
  260. let time = 0
  261. let endDate = Date.parse(item.biddingStopTime);
  262. let nowDate = Date.parse(new Date());
  263. if(endDate>nowDate){
  264. time = endDate-nowDate>0?endDate-nowDate:0
  265. }
  266. console.log(time)
  267. this.infoList.push({
  268. content:item.projectName,
  269. biddingType:item.biddingType,
  270. deadline:time,
  271. currentPrice:item.price,
  272. priceUnit:item.unit,
  273. id:item.id,
  274. money:item.money,
  275. projectShowStatus:item.projectShowStatus,
  276. biddingStopTime:item.biddingStopTime,
  277. biddingStartTime:item.biddingStartTime,
  278. biddingStopSetime:item.biddingStopSetime
  279. })
  280. }else{
  281. this.infoList.push({
  282. content:item.projectName,
  283. biddingType:item.biddingType,
  284. deadline:0,
  285. currentPrice:item.price,
  286. priceUnit:item.unit,
  287. id:item.id,
  288. money:item.money,
  289. projectShowStatus:item.projectShowStatus,
  290. biddingStopTime:item.biddingStopTime,
  291. biddingStartTime:item.biddingStartTime,
  292. biddingStopSetime:item.biddingStopSetime
  293. })
  294. }
  295. })
  296. if(this.infoList.length >= response.total){
  297. this.finished = true;
  298. return;
  299. }else{
  300. this.loading = false;
  301. this.queryParams.pageNum += 1 ;
  302. }
  303. });
  304. },
  305. clickNav(index){
  306. console.log(index)
  307. getDeptList(this.deptListOption[index].id).then(res => {
  308. let list = []
  309. res.data.map(i =>{
  310. list.push({text:i.deptName,children:[],id:i.deptId})
  311. })
  312. if(list.length==0){
  313. list.push({text:this.deptListOption[index].deptName,id:this.deptListOption[index].id})
  314. }else{
  315. this.$set(this.deptListOption[index], "children", list);
  316. }
  317. });
  318. },
  319. clickItem(data){
  320. console.log(data)
  321. this.infoList = [];
  322. this.queryParams.pageNum = 1;
  323. if(data.text==this.value2){
  324. this.activeId=1
  325. this.value2='标的物位置'
  326. }else{
  327. this.value2=data.text
  328. }
  329. this.getList()
  330. },
  331. tabChange(){
  332. this.infoList = [];
  333. this.queryParams.pageNum = 1;
  334. this.finished = false;
  335. this.getList()
  336. },
  337. onSearch(val) {
  338. this.loading = true;
  339. if(this.infoList.length>0){
  340. let newList = []
  341. for(let j = 0 ;j<this.infoList.length;j++){
  342. if(this.infoList[j].content.indexOf(val)>-1){
  343. newList.push(this.infoList[j]);
  344. }
  345. }
  346. this.infoList = newList
  347. }
  348. if(val==""){
  349. this.getList()
  350. }
  351. this.loading = false;
  352. },
  353. onL() {
  354. this.refreshing = true;
  355. this.loading = false;
  356. this.getList()
  357. this.refreshing = false;
  358. },
  359. onRefresh() {
  360. // 清空列表数据
  361. this.finished = false;
  362. // 重新加载数据
  363. // 将 loading 设置为 true,表示处于加载状态
  364. this.loading = true;
  365. this.onL();
  366. },
  367. },
  368. }
  369. </script>
  370. <style scoped lang="scss">
  371. .list_li{
  372. width: 94%;
  373. background: #ffffff;
  374. border-radius: 8PX;
  375. margin: 10PX auto 0;
  376. padding: 3vw 5%;
  377. .list_li_tt{
  378. display: flex;
  379. justify-content: space-between;
  380. padding-bottom: 10PX;
  381. border-bottom: 1PX solid rgb(239,239,239);
  382. align-items: center;
  383. p{
  384. line-height: 22PX;
  385. &:nth-child(1){
  386. color: #333333;
  387. font-weight: bold;
  388. font-size: 16PX;
  389. display: -webkit-box;
  390. -webkit-box-orient: vertical;
  391. -webkit-line-clamp: 1;
  392. word-break: break-all;
  393. overflow: hidden;
  394. }
  395. &:nth-child(2){
  396. flex-shrink: 0;
  397. margin-left: 15PX;
  398. }
  399. }
  400. }
  401. .list_li_time{
  402. display: flex;
  403. align-items: center;
  404. justify-content: space-between;
  405. margin-top: 10PX;
  406. }
  407. }
  408. .van-search__content{
  409. border:1px solid #007E72;
  410. }
  411. /*>>> .van-dropdown-menu__title{*/
  412. /* font-size: 14PX;*/
  413. /*}*/
  414. .biddingProcess {
  415. margin: 0 auto;
  416. display: flex;
  417. align-items: center;
  418. justify-content: right;
  419. div{
  420. width: calc(50% - 4PX);
  421. border-top: 1PX solid #c4c4c4;
  422. }
  423. i{
  424. width: 8PX;
  425. height: 8PX;
  426. display: block;
  427. background: #c4c4c4;
  428. border-radius: 50%;
  429. }
  430. }
  431. .biddingProcess_img{
  432. width:100%;
  433. height:100%;
  434. }
  435. .biddingProcessTitle{
  436. background-color:#007E72;
  437. color:#fff;
  438. text-align: center;
  439. line-height: 0.8rem;
  440. font-size: 14PX;
  441. display: flex;
  442. align-items: center;
  443. justify-content: center;
  444. padding: 5PX 0;
  445. img{
  446. margin-right: 5PX;
  447. width: 18PX;
  448. }
  449. }
  450. .biddingProcess_text{
  451. /*font-size: 1vh;*/
  452. margin-top: 10PX;
  453. color: #848484;
  454. }
  455. .biddingProcessContent{
  456. padding:0.4rem 0;
  457. background-color: #ffffff;
  458. text-align: center;
  459. display: flex;
  460. align-items: flex-start;
  461. justify-content: center;
  462. .content_li{
  463. width: 15%;
  464. }
  465. }
  466. .biddingProcessListLeftCol{
  467. padding:10px 0.25rem 10px 0.3rem;
  468. }
  469. .biddingProcessListLeftCol span{
  470. font-size: 0.38rem;
  471. }
  472. .biddingProcessListRightCol
  473. {
  474. padding:10px 0.3rem 10px 0.25rem;
  475. }
  476. .biddingProcessListRightCol span{
  477. color: #c21F3a;
  478. font-size: 12PX;
  479. }
  480. </style>