移动端
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

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