invoiceRecord.vue 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. <template>
  2. <div class="mobile-invoice mobile-content mobile-content-long invoice-record" @click="showFilterInvoiceType = false">
  3. <div class="order-nav">
  4. <nuxt-link to="/mobile/center/user/invoice" tag="div"><span>发票信息</span></nuxt-link>
  5. <nuxt-link to="/mobile/center/user/invoice/waitinvoice" tag="div"><span>待开票订单</span></nuxt-link>
  6. <div class="active"><span>开票记录</span></div>
  7. </div>
  8. <div class="search-content mi-search-content">
  9. <input type="text" v-model="filterParams.keyword" @keyup.13="onFilter" placeholder="订单号/发票抬头/收票人/联系电话">
  10. <span @click="onFilter"><i class="iconfont icon-sousuo"></i></span>
  11. </div>
  12. <div class="mi-list-content">
  13. <div class="mi-lc-filters clearfix">
  14. <span class="multi-check inline-block" :class="{active: filterParams.status === 101}" @click="setFilter('status', 101)">待开票</span>
  15. <span class="multi-check inline-block" :class="{active: filterParams.status === 102}" @click="setFilter('status', 102)">已开票</span>
  16. <div class="com-select-wrap fr" @click.stop="showFilterInvoiceType = !showFilterInvoiceType">{{filterParams.invoicetype === 1206 ? '普票' : filterParams.invoicetype === 1205 ? '专票' : '全部'}}
  17. <ul class="select-list" v-show="showFilterInvoiceType">
  18. <li @click.stop="setFilter('invoicetype', null)" v-show="filterParams.invoicetype">全部</li>
  19. <li @click.stop="setFilter('invoicetype', 1206)" v-show="filterParams.invoicetype != 1206">普票</li>
  20. <li @click.stop="setFilter('invoicetype', 1205)" v-show="filterParams.invoicetype != 1205">专票</li>
  21. </ul>
  22. </div>
  23. </div>
  24. <ul class="mi-list" v-if="invoiceList.length">
  25. <li v-for="inv in invoiceList">
  26. <div class="line">
  27. <span class="inline-block title">
  28. 类型:
  29. </span>
  30. <span class="inline-block content">
  31. <i class="inv" :class="{'spec-inv' : inv.invoicetype === 1205}">{{inv.invoicetype === 1206 ? '普票' : '专票'}}</i>
  32. </span>
  33. </div>
  34. <div class="line">
  35. <span class="inline-block title">
  36. 申请时间:
  37. </span>
  38. <span class="inline-block content">{{inv.createTime | date}}</span>
  39. </div>
  40. <div class="line">
  41. <span class="inline-block title">
  42. 状态:
  43. </span>
  44. <span class="inline-block content">{{inv.status == 101 ? '待开票' : '已开票'}}</span>
  45. </div>
  46. <div class="line">
  47. <span class="inline-block title">
  48. 商家名称:
  49. </span>
  50. <nuxt-link :to="`/mobile/shop/${inv.storeid}`" class="inline-block content link">{{inv.sellername}}</nuxt-link>
  51. </div>
  52. <div class="line">
  53. <span class="inline-block title">
  54. 订单号:
  55. </span>
  56. <span class="inline-block content link">
  57. <nuxt-link class="block" :key="id" :to="`/mobile/order/details?uuid=${baseUtils.enidfilter(id)}&type=buyer`" v-for="id in inv.orderids.split(',')">
  58. {{id}}
  59. </nuxt-link>
  60. </span>
  61. </div>
  62. <div class="line">
  63. <span class="inline-block title">
  64. 可开票金额:
  65. </span>
  66. <span class="inline-block content price">¥{{inv.price || 0}}</span>
  67. </div>
  68. <div class="line">
  69. <span class="inline-block title">
  70. 发票抬头:
  71. </span>
  72. <span class="inline-block content">{{inv.invoicetitle}}</span>
  73. </div>
  74. <template v-if="inv.invoicetype == 1205">
  75. <div class="line">
  76. <span class="inline-block title">
  77. 单位地址:
  78. </span>
  79. <span class="inline-block content">{{inv.billInfo.companyAddress || '-'}}</span>
  80. </div>
  81. <div class="line">
  82. <span class="inline-block title">
  83. 单位电话:
  84. </span>
  85. <span class="inline-block content">{{inv.billInfo.companyPhone || '-'}}</span>
  86. </div>
  87. <div class="line">
  88. <span class="inline-block title">
  89. 税务登记号:
  90. </span>
  91. <span class="inline-block content">{{inv.billInfo.companyTaxNumber || '-'}}</span>
  92. </div>
  93. <div class="line">
  94. <span class="inline-block title">
  95. 开户银行:
  96. </span>
  97. <span class="inline-block content">{{inv.billInfo.bankName || '-'}}</span>
  98. </div>
  99. <div class="line">
  100. <span class="inline-block title">
  101. 开户银行账户:
  102. </span>
  103. <span class="inline-block content">{{inv.billInfo.bankAccount || '-'}}</span>
  104. </div>
  105. </template>
  106. <div class="line">
  107. <span class="inline-block title">
  108. 收票人:
  109. </span>
  110. <span class="inline-block content">{{inv.receiverName}}</span>
  111. </div>
  112. <div class="line">
  113. <span class="inline-block title">
  114. 联系电话:
  115. </span>
  116. <span class="inline-block content">{{inv.recTel}}</span>
  117. </div>
  118. <div class="line">
  119. <span class="inline-block title">
  120. 收票地址:
  121. </span>
  122. <span class="inline-block content">{{inv.invoiceAddress}}</span>
  123. </div>
  124. </li>
  125. </ul>
  126. <empty-status
  127. :text="'暂无开票信息'"
  128. :showLink="false"
  129. v-else></empty-status>
  130. </div>
  131. <remind-box :title="remindText" :timeoutCount="timeoutCount"></remind-box>
  132. <pull-up :searchMore="fetching" :allPage="invoices.data.totalPages" :page="page" @pullUpAction="onPullUp"></pull-up>
  133. </div>
  134. </template>
  135. <script>
  136. import { RemindBox, PullUp, EmptyStatus } from '~components/mobile/common'
  137. export default {
  138. layout: 'mobile',
  139. middleware: 'authenticated',
  140. data () {
  141. return {
  142. remindText: '',
  143. timeoutCount: '',
  144. invoiceList: [],
  145. isChange: false,
  146. page: 1,
  147. count: 10,
  148. filterParams: {
  149. invoicetype: '',
  150. keyword: '',
  151. // 101为待开票, 102为已开票
  152. status: null
  153. },
  154. showFilterInvoiceType: false
  155. }
  156. },
  157. components: {
  158. RemindBox,
  159. PullUp,
  160. EmptyStatus
  161. },
  162. fetch ({store}) {
  163. return Promise.all([
  164. store.dispatch('invoice/getInvoices', {count: 10, page: 1, role: 'BUYER', sorting: {'createTime': 'DESC'}})
  165. ])
  166. },
  167. watch: {
  168. '$store.state.invoice.data.invoices.data': {
  169. handler: function (val) {
  170. if (val && val.content) {
  171. if (this.isChange) {
  172. this.invoiceList = []
  173. this.isChange = false
  174. }
  175. let arr = this.baseUtils.deepCopy(val.content)
  176. arr.forEach(item => {
  177. item.billInfo = item.billInfo ? JSON.parse(item.billInfo) : {}
  178. })
  179. this.invoiceList = [...this.invoiceList, ...arr]
  180. }
  181. },
  182. immediate: true
  183. }
  184. },
  185. computed: {
  186. invoices () {
  187. return this.$store.state.invoice.data.invoices
  188. },
  189. fetching () {
  190. return this.invoices.fetching
  191. }
  192. },
  193. methods: {
  194. setRemindText: function (str) {
  195. this.remindText = str
  196. this.timeoutCount++
  197. },
  198. initParams () {
  199. this.page = 1
  200. this.filterParams.invoicetype = null
  201. this.filterParams.keyword = null
  202. },
  203. reloadList () {
  204. return this.$store.dispatch('invoice/getInvoices',
  205. {count: this.count,
  206. page: this.page,
  207. role: 'BUYER',
  208. sorting: {'createTime': 'DESC'},
  209. invoicetype: this.filterParams.invoicetype,
  210. keyword: this.filterParams.keyword,
  211. status: this.filterParams.status
  212. })
  213. },
  214. onPullUp () {
  215. this.page++
  216. this.reloadList()
  217. },
  218. onFilter () {
  219. this.isChange = true
  220. this.page = 1
  221. return this.reloadList()
  222. },
  223. setInvoiceType (type) {
  224. this.filterParams.invoicetype = type
  225. this.showFilterInvoiceType = false
  226. this.onFilter()
  227. },
  228. setFilter (type, val) {
  229. if (type === 'invoicetype') {
  230. this.showFilterInvoiceType = false
  231. this.filterParams.invoicetype = val
  232. } else if (type === 'status') {
  233. this.filterParams.status = val === this.filterParams.status ? null : val
  234. }
  235. this.onFilter()
  236. }
  237. }
  238. }
  239. </script>
  240. <style lang="scss" scoped>
  241. @import '~assets/scss/mobileInvoice';
  242. .invoice-record {
  243. .mi-list {
  244. padding-bottom: .68rem !important;
  245. }
  246. }
  247. .order-nav {
  248. background: #fff;
  249. div {
  250. height: 0.82rem;
  251. line-height: 0.82rem;
  252. display: inline-block;
  253. width: 33.3%;
  254. text-align: center;
  255. font-size: .28rem;
  256. color: #666;
  257. &.active span{
  258. color: #3f84f6;
  259. border-bottom: 0.04rem solid #3f84f6;
  260. padding-bottom: 0.2rem;
  261. }
  262. }
  263. }
  264. </style>