index.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. <template>
  2. <div class="order-wrapper">
  3. <div class="order-nav">
  4. <div :class="activeType === 'all' ? 'active': ''" @click="ChangeList('all')"><span>全部</span></div>
  5. <div :class="activeType === 'done' ? 'active': ''" @click="ChangeList('done')"><span>待评标</span></div>
  6. <div :class="activeType === 'todo' ? 'active' : ''" @click="ChangeList('todo')"><span>待投标</span></div>
  7. <div :class="activeType === 'waiting' ? 'active' : ''" @click="ChangeList('waiting')"><span>待发布</span></div>
  8. </div>
  9. <div class="search-content search-content2">
  10. <input type="text" placeholder="单据编号/客户名称/物料名称" v-model="filterParams.keyword" @keyup.13="searchOrderlist">
  11. <span @click="searchOrderlist">
  12. <i class="iconfont icon-sousuo"></i>
  13. </span>
  14. </div>
  15. <div class="filters-wrap">
  16. <base-filter
  17. v-for="filterOption in filterOptions"
  18. :key="filterOption.selectOption"
  19. :selectItems="filterOption.selectItems"
  20. :defaultVal="filterOption.defaultVal"
  21. :selectOption="filterOption.selectOption"
  22. @selectAction="onSelectAction"
  23. @valueAction="onValueAction"
  24. :title="filterOption.title">
  25. </base-filter>
  26. </div>
  27. <ul class="order-list-wrap" id="b2border-wrapper" v-show="orderList.length > 0">
  28. <li v-for="item in orderList" @click="lookItem(item)">
  29. <div class="list-title">
  30. <span v-if="!isUnread(item.id)" style="color:#15B262;margin-right:.5rem;">已读</span>
  31. <span v-if="isUnread(item.id)" style="color:#DE4545;margin-right:.5rem;">未读</span>
  32. <span>{{item.date | time}}</span>
  33. <span class="leave-active" v-if="item.status === '已结标'">已结标</span>
  34. <span class="leave-active" v-if="item.status === '待评标' && item.overdue === 1 && item.result !== 1">待评标</span>
  35. <span class="leave-active" v-if="(item.status === '待评标' && item.overdue !== 1) || (item.status === '待投标' && item.overdue !== 1)">待投标</span>
  36. <span class="leave-active" v-if="(item.status === '待评标' && item.overdue === 1 && item.result === 1) || (item.status === '待投标' && item.overdue === 1) || item.status === '流标'">流标</span>
  37. <span class="leave-active" v-if="item.status === '待发布'">待发布</span>
  38. </div>
  39. <div class="list-content">
  40. <div class="item">
  41. <span>标题:</span>
  42. <label v-html="item.title || '-'"></label>
  43. </div>
  44. <div class="item">
  45. <span>单号:</span>
  46. <label v-html="item.code" style="color: #3F84F6;font-weight: 500"></label>
  47. </div>
  48. <div class="item">
  49. <span>招标类型:</span>
  50. <label v-html="item.ifOpen === 1 ? '公开招标' : '指定招标'" style="color: #333;font-weight: 500"></label>
  51. </div>
  52. <div class="item">
  53. <span>币别:</span>
  54. <label v-html="item.currency || '-'" style="color: #333;font-weight: 500"></label>
  55. </div>
  56. <div class="item">
  57. <span>支付方式:</span>
  58. <label v-html="item.payment || '-'" style="color: #333;font-weight: 500"></label>
  59. </div>
  60. <div class="item">
  61. <span>联系人:</span>
  62. <label v-html="item.user || '-'" style="color: #333;font-weight: 500"></label>
  63. </div>
  64. <div class="item">
  65. <span>联系电话:</span>
  66. <label v-html="item.userTel || '-'" style="color: #333;font-weight: 500"></label>
  67. </div>
  68. <div class="item">
  69. <span>投标截止时间:</span>
  70. <label style="color: #333;font-weight: 500">{{item.endDate | timeDay}}</label>
  71. </div>
  72. <div class="item">
  73. <span>公布结果时间:</span>
  74. <label style="color: #333;font-weight: 500">{{item.publishDate | timeDay}}</label>
  75. </div>
  76. </div>
  77. </li>
  78. </ul>
  79. <div v-if="orderList.length === 0" class="com-none-state">
  80. <img src="/images/mobile/@2x/search-empty.png">
  81. <p>抱歉,暂无订单消息</p>
  82. <nuxt-link to="/">返回首页</nuxt-link>
  83. </div>
  84. <pull-up :fixId="'b2border-wrapper'"
  85. :allPage="allPage"
  86. :page="page"
  87. :FixedEl="true"
  88. @pullUpAction="getMoreSearch"></pull-up>
  89. <modal-wrapper :showModal="showModal" :title="'评标单'" @closeAction="showModal = false">
  90. <div class="btob_invoice_modal">
  91. <div class="btob_invoice_modal_title">
  92. <span>单据信息</span>
  93. <span class="block" v-if="modalObj.status === '已结标'">已结标</span>
  94. <span class="block" v-if="modalObj.status === '待评标' && modalObj.overdue === 1 && modalObj.result !== 1">待评标</span>
  95. <span class="block" v-if="(modalObj.status === '待评标' && modalObj.overdue !== 1) || (modalObj.status === '待投标' && modalObj.overdue !== 1)">待投标</span>
  96. <span class="block" v-if="(modalObj.status === '待评标' && modalObj.overdue === 1 && modalObj.result === 1) || (modalObj.status === '待投标' && modalObj.overdue === 1) || modalObj.status === '流标'">流标</span>
  97. <span class="block" v-if="modalObj.status === '待发布'">待发布</span>
  98. </div>
  99. <div class="btob_invoice_modal_content">
  100. <div><span>招标标题:</span>{{modalObj.title}}</div>
  101. <div><span>联系人:</span>{{modalObj.user}}</div>
  102. <div><span>联系电话:</span>{{modalObj.userTel}}</div>
  103. <div><span>收货地址:</span>{{modalObj.shipAddress}}</div>
  104. <div><span>投标截止时间:</span>{{modalObj.endDate | timeDay}}</div>
  105. <div><span>公布结果时间:</span>{{modalObj.publishDate |timeDay}}</div>
  106. <div><span>交易币别:</span>{{modalObj.currency}}</div>
  107. <div><span>是否含税:</span>{{modalObj.ifTax === 1 ? '是' : '否'}}</div>
  108. <div><span>付款方式:</span>{{modalObj.payment}}</div>
  109. <div><span>证照要求:</span>{{modalObj.certificate || '无'}}</div>
  110. </div>
  111. </div>
  112. </modal-wrapper>
  113. </div>
  114. </template>
  115. <script>
  116. import { RemindBox, PullUp } from '~components/mobile/common'
  117. import { ModalWrapper, BaseFilter } from '~components/mobile/base'
  118. export default {
  119. name: 'sample',
  120. layout: 'mobile',
  121. middleware: 'authenticated',
  122. data() {
  123. return {
  124. filterOptions: [
  125. {
  126. title: '交易时间',
  127. selectOption: 'date',
  128. selectItems: [{
  129. key: '30天',
  130. val: 1
  131. }, {
  132. key: '90天',
  133. val: 2
  134. }, {
  135. key: '180天',
  136. val: 3
  137. }, {
  138. key: '自定义',
  139. val: 4
  140. }],
  141. defaultVal: 1
  142. }
  143. ],
  144. filterParams: {
  145. keyword: ''
  146. },
  147. unreadCode: '',
  148. activeType: 'all',
  149. page: 1,
  150. orderList: [],
  151. allPage: 0,
  152. modalObj: {},
  153. showModal: false,
  154. isUser: false
  155. }
  156. },
  157. created() {
  158. this.getResource()
  159. this.getUnreadIds()
  160. this.getHasUser()
  161. },
  162. methods: {
  163. lookItem(bill) {
  164. this.showModal = true
  165. // if (this.isUnread(bill.id)) {
  166. // let lists = []
  167. // lists[0] = bill.id
  168. // let _then = this
  169. // this.$http.post(`/sale/sample/setRead`, lists)
  170. // .then(() => {
  171. // _then.getHasUser()
  172. // })
  173. // }
  174. this.$http.get(`/tender/purc/${bill.id}/info`)
  175. .then(res => {
  176. this.modalObj = bill
  177. this.modalObj.sends = res.data
  178. })
  179. },
  180. isUnread (id) {
  181. for (let i in this.unreadCode) {
  182. if (id === this.unreadCode[i]) {
  183. return true
  184. }
  185. }
  186. },
  187. setSelect (type, val, isReload) {
  188. if (type === 'date') {
  189. if (val) {
  190. this.filterParams.fromDate = val.fromDate
  191. this.filterParams.endDate = val.toDate
  192. } else {
  193. this.filterParams.fromDate = null
  194. this.filterParams.endDate = null
  195. }
  196. } else {
  197. this.filterParams[type] = val
  198. }
  199. isReload && this.filterRecord()
  200. },
  201. initFilterParams () {
  202. this.filterParams = {
  203. keyword: '',
  204. fromDate: '',
  205. endDate: ''
  206. }
  207. },
  208. filterRecord () {
  209. this.page = 1
  210. this.getResource(true)
  211. },
  212. onSelectAction (selectObj) {
  213. this.setSelect(selectObj.key, selectObj.value, true)
  214. },
  215. onValueAction (selectObj) {
  216. this.setSelect(selectObj.key, selectObj.value, false)
  217. },
  218. getHasUser () {
  219. this.$http.get('/btob/account/role/isUser').then(res => {
  220. this.isUser = res.data.isUser
  221. })
  222. },
  223. getUnreadIds () {
  224. this.$http.get('/tender/getUnreadIds/purc')
  225. .then(res => {
  226. this.unreadCode = res.data.content
  227. })
  228. },
  229. getResource(Reset) {
  230. this.$http.get('/tender/purc/info/search', {params: {
  231. _state: this.activeType !== 'all' ? this.activeType : null,
  232. count: 10,
  233. page: this.page,
  234. searchFilter: this.filterParams,
  235. sorting: {'id': 'desc'}
  236. }}).then(res => {
  237. if (Reset) {
  238. this.orderList = []
  239. }
  240. this.orderList.push(...res.data.content)
  241. this.allPage = Math.floor(res.data.totalElement / 10)
  242. })
  243. },
  244. ChangeList(_tp) {
  245. this.activeType = _tp
  246. this.getResource(true)
  247. },
  248. getMoreSearch() {
  249. this.page++
  250. this.getResource()
  251. },
  252. searchOrderlist() {
  253. this.page = 1
  254. this.getResource(true)
  255. }
  256. },
  257. components: {
  258. RemindBox, PullUp, ModalWrapper, BaseFilter
  259. },
  260. filters: {
  261. timeDay: function(time) {
  262. if (typeof time === 'number') {
  263. if (!time) {
  264. return '无'
  265. } else {
  266. let d = new Date(time)
  267. let year = d.getFullYear()
  268. let month = d.getMonth() + 1
  269. let day = d.getDate() < 10 ? '0' + d.getDate() : '' + d.getDate()
  270. return year + '-' + month + '-' + day
  271. }
  272. }
  273. },
  274. toFixedNum: function (num) {
  275. return num ? parseFloat(num).toFixed(2) : '-'
  276. }
  277. }
  278. }
  279. </script>
  280. <style scoped lang="scss">
  281. @mixin overFlowHidden {
  282. overflow: hidden;
  283. text-overflow: ellipsis;
  284. white-space: nowrap;
  285. }
  286. @mixin lineHeight($value) {
  287. height: $value;
  288. line-height: $value;
  289. }
  290. .order-wrapper {
  291. background: #f1f3f6;
  292. margin: 1.26rem 0 0.98rem 0;
  293. height: calc(100vh - 1.26rem - 0.98rem);
  294. /*padding-bottom: 0.96rem;*/
  295. .filters-wrap{
  296. background: #fff;
  297. margin: 0 auto .13rem;
  298. width: 7.1rem;
  299. overflow: hidden;
  300. padding: .1rem;
  301. }
  302. .order-tab {
  303. background: #3f84f6;
  304. padding-bottom: 0.2rem;
  305. .order-tab-wrapper {
  306. border: solid 1px #ffffff;
  307. width: 7.06rem;
  308. margin: 0 auto;
  309. border-radius: 0.04rem;
  310. line-height: 0.72rem;
  311. height: 0.72rem;
  312. overflow: hidden;
  313. div {
  314. color: #ffffff;
  315. font-size: 0.28rem;
  316. text-align: center;
  317. width: 50%;
  318. &.active {
  319. background-color: #ffffff;
  320. color: #3f84f6;
  321. }
  322. }
  323. }
  324. }
  325. .order-nav {
  326. background: #fff;
  327. div {
  328. height: 0.82rem;
  329. line-height: 0.82rem;
  330. display: inline-block;
  331. width: 25%;
  332. text-align: center;
  333. font-size: .28rem;
  334. color: #666;
  335. &.active span{
  336. color: #3f84f6;
  337. border-bottom: 0.04rem solid #3f84f6;
  338. padding-bottom: 0.2rem;
  339. }
  340. }
  341. }
  342. .search-content2 {
  343. text-align: center;
  344. padding: .25rem 0 0 0;
  345. margin-top: 0 !important;
  346. margin-bottom:.25rem;
  347. input {
  348. width: 7.1rem;
  349. border: 1px solid #376ff3;
  350. }
  351. span {
  352. /*height: .46rem;*/
  353. /*line-height: .46rem;*/
  354. }
  355. }
  356. .order-list-wrap {
  357. height: calc(90vh - 1.26rem - 0.96rem - 0.84rem - 1rem - 0.92rem);
  358. overflow-y: scroll;
  359. margin-top: 0.2rem;
  360. li {
  361. background: #fff;
  362. width: 7.1rem;
  363. margin: 0 auto 0.2rem;
  364. border-radius: 0.04rem;
  365. border: 1px solid #e4e4e4;
  366. padding: 0 0.24rem;
  367. .list-title {
  368. @include lineHeight(0.91rem);
  369. @include overFlowHidden();
  370. font-size: 0.28rem;
  371. color: #3a3a3a;
  372. .over-active{
  373. @include lineHeight(.4rem);
  374. padding:.05rem;
  375. margin:0 .5rem;
  376. background: #989A9C;
  377. color:#fff;
  378. border-radius:.05rem;
  379. }
  380. .leave-active{
  381. @include lineHeight(.4rem);
  382. padding:.05rem;
  383. margin:0 .5rem;
  384. background: #15B262;
  385. color:#fff;
  386. border-radius:.05rem;
  387. }
  388. }
  389. .list-bottom{
  390. @include lineHeight(1rem);
  391. text-align: center;
  392. font-size: 0.26rem;
  393. color: #333;
  394. }
  395. .list-content {
  396. padding-top: 0.23rem;
  397. border-top: 1px solid #d3d3d3;
  398. .item {
  399. font-size: 0.28rem;
  400. color: #333;
  401. @include overFlowHidden();
  402. margin-bottom: 0.15rem;
  403. span {
  404. color: #666;
  405. }
  406. &.pric {
  407. color: #e6353d;
  408. }
  409. }
  410. }
  411. }
  412. }
  413. .com-none-state{
  414. background: #f1f3f6
  415. }
  416. .btob_invoice_modal {
  417. padding: 0 0.24rem;
  418. .btob_invoice_modal_title {
  419. line-height: 0.72rem;
  420. border-top:1px solid #D3D3D3;
  421. border-bottom:1px solid #D3D3D3;
  422. span {
  423. font-size: 0.28rem;
  424. color: #3F84F6;
  425. border-left: 0.06rem solid #3F84F6;
  426. padding-left: 0.15rem;
  427. height: 0.18rem;
  428. &.block{
  429. float:right;
  430. border:none;
  431. }
  432. }
  433. &:nth-child(1) {
  434. border-top: 0;
  435. }
  436. }
  437. .btob_invoice_modal_content {
  438. @include overFlowHidden();
  439. padding-top: 0.15rem;
  440. font-size: 0.28rem;
  441. color: #151515;
  442. line-height: 0.5rem;
  443. padding-bottom: 0.15rem;
  444. div{
  445. text-indent:-1.4rem;
  446. margin-left:1.4rem;
  447. white-space:normal;
  448. }
  449. span {
  450. color: #666666;
  451. }
  452. &.btob_invoice_modal_content2 {
  453. border-bottom:1px solid #D3D3D3;
  454. &:nth-last-of-type(1) {
  455. border-bottom: 0px
  456. }
  457. }
  458. }
  459. }
  460. }
  461. </style>