index.vue 14 KB

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