noinvoice.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421
  1. <template>
  2. <div class="trueinvoice">
  3. <!-- 头部细节部分 -->
  4. <div class="title">
  5. <el-row>
  6. <el-col :span="24">
  7. <div class="top">
  8. <el-select v-model="companyName" filterable placeholder="请选择公司名称">
  9. <el-option
  10. v-for="item in companyList"
  11. :key="item.companyName"
  12. :label="item.companyName"
  13. :value="item.companyName">
  14. </el-option>
  15. </el-select>
  16. <el-input placeholder="运单编号" class="input-demo" v-model="billNum"></el-input>
  17. <el-input placeholder="车牌号" class="input-demo" v-model="plateNumber"></el-input>
  18. </div>
  19. </el-col>
  20. </el-row>
  21. <el-row>
  22. <el-col :span="24">
  23. <div class="top">
  24. <label style="margin-left: 1%;">是否历史运单:</label>
  25. <el-select v-model="hisFlag" placeholder="请选择">
  26. <el-option
  27. v-for="item in optionone"
  28. :key="item.value"
  29. :label="item.label"
  30. :value="item.value">
  31. </el-option>
  32. </el-select>
  33. <!-- <label style="margin-left: 1%;">运单状态:</label>
  34. <el-select v-model="status" placeholder="请选择"> -->
  35. <!-- <el-option></el-option> -->
  36. <!-- <el-option
  37. v-for="item in option"
  38. :key="item.value"
  39. :label="item.label"
  40. :value="item.value">
  41. </el-option>
  42. </el-select> -->
  43. <!-- <el-input placeholder="税号" class="theinput" v-model="taxPlayerCode"></el-input>
  44. <el-input placeholder="运单状态" class="theinput" v-model="status"></el-input> -->
  45. <el-button type="success" style="margin-left: 1%;" @click="firstLoadData">查询</el-button>
  46. <el-button type="success" style="margin-left: 1%;" @click="makeInvoice" v-loading.fullscreen.lock="fullscreenLoading">开票</el-button>
  47. <!-- <el-button type="info" style="margin-left: 1%;">重置</el-button> -->
  48. </div>
  49. </el-col>
  50. </el-row>
  51. </div>
  52. <!-- 头部细节部分结束 -->
  53. <!-- 表格部分 -->
  54. <!-- 表格部分 -->
  55. <template>
  56. <el-table
  57. class="table"
  58. v-loading="loading"
  59. ref="multipleTable"
  60. :data="usertabletwo"
  61. :height="heightt"
  62. border
  63. tooltip-effect="dark" @selection-change="handleSelectionChange">
  64. <el-table-column
  65. type="selection"
  66. width="55">
  67. </el-table-column>
  68. <el-table-column
  69. label="运单编号"
  70. prop="billNum"
  71. show-overflow-tooltip>
  72. </el-table-column>
  73. <el-table-column
  74. prop="taxplayerCode"
  75. label="税号"
  76. show-overflow-tooltip>
  77. </el-table-column>
  78. <el-table-column
  79. label="车牌号码"
  80. prop="plateNum"
  81. show-overflow-tooltip>
  82. </el-table-column>
  83. <el-table-column
  84. label="车牌颜色"
  85. show-overflow-tooltip>
  86. <template slot-scope="scope">
  87. <span v-if="scope.row.plateColor == 0">蓝色</span>
  88. <span v-else-if="scope.row.plateColor == 1">黄色</span>
  89. <span v-else-if="scope.row.plateColor == 2">黑色</span>
  90. <span v-else-if="scope.row.plateColor == 3">白色</span>
  91. <span v-else-if="scope.row.plateColor == 4">渐变绿色</span>
  92. <span v-else-if="scope.row.plateColor == 5">黄绿渐变色</span>
  93. <span v-else-if="scope.row.plateColor == 6">蓝白渐变色</span>
  94. <span v-else-if="scope.row.plateColor == 9">未确定</span>
  95. </template>
  96. </el-table-column>
  97. <el-table-column
  98. prop="startTime"
  99. label="运单开始时间"
  100. show-overflow-tooltip>
  101. </el-table-column>
  102. <el-table-column
  103. prop="sourceAddr"
  104. label="运单开始地址"
  105. show-overflow-tooltip>
  106. </el-table-column>
  107. <el-table-column
  108. prop="destAddr"
  109. label="运单目的地址"
  110. show-overflow-tooltip>
  111. </el-table-column>
  112. <el-table-column
  113. prop="predictEndTime"
  114. label="运单预计完成时间"
  115. show-overflow-tooltip>
  116. </el-table-column>
  117. <el-table-column
  118. prop="fee"
  119. label="运单费用(元)"
  120. show-overflow-tooltip>
  121. <template slot-scope="scope" show-overflow-tooltip>
  122. <span>{{scope.row.fee / 100}}</span>
  123. </template>
  124. </el-table-column>
  125. <el-table-column
  126. label="运单状态"
  127. show-overflow-tooltip>
  128. <template slot-scope="scope">
  129. <span v-if="scope.row.billwayStatus == 1" style="color: green">未结束</span>
  130. <span v-else-if="scope.row.billwayStatus == 2" style="color: green">开票中</span>
  131. <span v-else-if="scope.row.billwayStatus == 3" style="color: green">开票完成</span>
  132. <span v-else-if="scope.row.billwayStatus == 4" style="color: red">超时运单</span>
  133. </template>
  134. </el-table-column>
  135. </el-table>
  136. </template>
  137. <div class="blocks">
  138. <el-pagination
  139. @size-change="handleSize"
  140. @current-change="handleCurrent"
  141. :current-page="currenttwo"
  142. :page-sizes="[6, 8, 10]"
  143. :page-size="pagesizetwo"
  144. layout="total, sizes, prev, pager, next, jumper"
  145. :total="totaltwo">
  146. </el-pagination>
  147. </div>
  148. </div>
  149. </template>
  150. <script>
  151. import FileSaver from 'file-saver'
  152. import XLSX from 'xlsx'
  153. export default{
  154. data() {
  155. return {
  156. loading: false,
  157. hisFlag: ``,
  158. billNum: ``,
  159. plateNumber: ``,
  160. batchNumber: ``,
  161. hightt: `0px`,
  162. billStartTime: ``,
  163. multipleSelection: [],
  164. billEndTime: ``,
  165. createStartTime: ``,
  166. createEndTime: ``,
  167. // taxPlayerCode: '',
  168. // status: '',
  169. currenttwo: 1,
  170. pagesizetwo: 8,
  171. totaltwo: 0,
  172. // batch: '',
  173. companyList: [],
  174. companyName: ``,
  175. usertabletwo: [],
  176. customerName: ``,
  177. optionone: [{
  178. value: `0`,
  179. label: `实时运单`
  180. }, {
  181. value: `1`,
  182. label: `历史运单`
  183. }]
  184. }
  185. },
  186. created() {
  187. this.heightt = tableHeight // eslint-disable-line
  188. this.customerName = sessionStorage.getItem(`userName`)
  189. this.initCompanyList()
  190. },
  191. methods: {
  192. firstLoadData() {
  193. this.currenttwo = 1
  194. this.pagesizetwo = 8
  195. this.loadDataCar()
  196. },
  197. // 列表展示
  198. async loadDataCar() {
  199. const formData = new FormData()
  200. formData.append(`current`, this.currenttwo)
  201. formData.append(`size`, this.pagesizetwo)
  202. formData.append(`isSuccess`, 1)
  203. formData.append(`customerName`, this.customerName)
  204. formData.append(`companyName`, this.companyName)
  205. formData.append(`billNum`, this.billNum)
  206. formData.append(`billwayStatus`, 2)
  207. formData.append(`plateNumber`, this.plateNumber)
  208. formData.append(`hisFlag`, this.hisFlag)
  209. // formData.append('batchNumber', this.batchNumber);
  210. // formData.append('billStartTime', this.billStartTime);
  211. // formData.append('billEndTime', this.billEndTime);
  212. // formData.append('createStartTime', this.createStartTime);
  213. // formData.append('createEndTime', this.createEndTime);
  214. // formData.append('isSuccess', 1);
  215. const response = await this.$http.post(`noCar/findBillWay`, formData)
  216. if (response.data.code == 0) {
  217. this.loading = false
  218. this.usertabletwo = response.data.data.records
  219. this.totaltwo = response.data.data.total
  220. }
  221. },
  222. async initCompanyList() {
  223. const response = await this.$http.post(`lowerService/customeRecQueryList`, {'customerName': sessionStorage.getItem(`userName`)})
  224. if (response.data.code == 0) {
  225. this.companyList = response.data.data
  226. } if (this.companyList == null || typeof this.companyList == `undefined` || this.companyList == `` || this.companyList.length == 0) {
  227. this.companyList = [{'companyName': `.`}]
  228. }
  229. this.companyName = this.companyList[0][`companyName`]
  230. this.loadDataCar()
  231. },
  232. formartNum(wb) {
  233. var sheet = wb[`Sheets`][`Sheet1`]
  234. var replaceTemp = []
  235. for (var i in sheet) {
  236. if (sheet[i][`v`] == `运单费用(元)`) {
  237. replaceTemp.push(i.replace(/[0-9]/g, ``))
  238. continue
  239. }
  240. if (replaceTemp.includes(i.replace(/[0-9]/g, ``))) {
  241. sheet[i][`t`] = `n`
  242. }
  243. }
  244. },
  245. // 查看
  246. async exportExcel() {
  247. const loading = this.$loading({
  248. lock: true,
  249. text: `系统正在努力接收中,过程大概需要几分钟的时间,请您耐心等待...`,
  250. spinner: `el-icon-loading`,
  251. background: `rgba(0, 0, 0, 0.7)`
  252. })
  253. let curr = this.currenttwo
  254. let pagesize1 = this.pagesizetwo
  255. this.currenttwo = 1
  256. this.pagesizetwo = this.totaltwo
  257. await this.loadDataCar()
  258. // 设置当前日期
  259. let time = new Date()
  260. let year = time.getFullYear()
  261. let month = time.getMonth() + 1
  262. let day = time.getDate()
  263. let name = `历史运单上传列表_` + year + `` + month + `` + day
  264. /* generate workbook object from table */
  265. // .table要导出的是哪一个表格
  266. var wb = XLSX.utils.table_to_book(document.querySelector(`.ttt`), { raw: true })
  267. this.formartNum(wb)
  268. /* get binary string as output */
  269. var wbout = XLSX.write(wb, {
  270. bookType: `xlsx`,
  271. bookSST: true,
  272. type: `array`
  273. })
  274. try {
  275. // name+'.xlsx'表示导出的excel表格名字
  276. FileSaver.saveAs(
  277. new Blob([wbout], { type: `application/octet-stream` }),
  278. name + `.xlsx`
  279. )
  280. } catch (e) {
  281. }
  282. this.currenttwo = curr
  283. this.pagesizetwo = pagesize1
  284. this.loadDataCar()
  285. loading.close()
  286. return wbout
  287. },
  288. // 导出功能
  289. exportOut() {
  290. var url = `http://invoice.back.jkcredit.com/carFreeCarrierBill/billExport?&userId=${this.formUserList.userId}`
  291. window.location.href = url
  292. },
  293. handleSelectionChange(value) {
  294. this.multipleSelection = value
  295. },
  296. // 批量开票
  297. async makeInvoice() {
  298. const formData = new FormData()
  299. formData.append(`noCarWayBillStr`, JSON.stringify(this.multipleSelection))
  300. const response = await this.$http.post(`noCar/updateStatus`, formData)
  301. if (response.data.code == 0) {
  302. this.loadDataCar()
  303. this.$message({
  304. type: `success`,
  305. message: `更新成功`
  306. })
  307. } else {
  308. this.$message({
  309. type: `error`,
  310. message: `更新失败`
  311. })
  312. }
  313. // this.fullscreenLoading = true;
  314. // this.formList.userId = Number(this.formUserList.userId);
  315. // for(var i = 0; i < this.multipleSelection.length; i++) {
  316. // this.formList.nums.push(this.multipleSelection[i].num);
  317. // }
  318. // const formData = new FormData();
  319. // formData.append('userId', this.formList.userId);
  320. // formData.append('nums', this.formList.nums);
  321. // const response = await this.$http.post(`numInvoice/nums`, formData);
  322. // if (response.data.code == 0) {
  323. // this.$message({
  324. // type: 'success',
  325. // message: '开票成功'
  326. // })
  327. // this.fullscreenLoading = false;
  328. // this.loadDataCar();
  329. // this.formList.nums = [];
  330. // }else{
  331. // this.fullscreenLoading = false;
  332. // this.$message({
  333. // type: 'error',
  334. // message: '开票失败'
  335. // })
  336. // }
  337. },
  338. // 分页方法
  339. handleSize(val) {
  340. this.pagesizetwo = val
  341. this.loadDataCar()
  342. },
  343. handleCurrent(val) {
  344. this.currenttwo = val
  345. this.loadDataCar()
  346. }
  347. }
  348. }
  349. </script>
  350. <style>
  351. .trueinvoice {
  352. border: 1px solid #d9d9d9;
  353. border-radius: 10px;
  354. }
  355. .trueinvoice .upload-demo {
  356. display: inline-block;
  357. }
  358. .trueinvoice .title {
  359. font-size: 5px;
  360. margin-bottom: 20px;
  361. }
  362. .trueinvoice .top {
  363. padding-top: 20px;
  364. padding-left: 20px;
  365. }
  366. .trueinvoice .text {
  367. display: inline-block;
  368. color: #000;
  369. font-size: 16px ;
  370. margin-left: 1%;
  371. }
  372. .trueinvoice .tou {
  373. font-size: 20px;
  374. height: 30px;
  375. line-height: 30px;
  376. padding-top: 15px;
  377. }
  378. .trueinvoice .line {
  379. margin-top: 15px;
  380. margin-bottom: 15px;
  381. width: 100%;
  382. height: 2px;
  383. background-color: #d9d9d9;
  384. }
  385. .trueinvoice .theinput {
  386. display: inline-block;
  387. width: 20%;
  388. }
  389. .trueinvoice .styleType {
  390. margin-top: 20px;
  391. margin-bottom: 20px;
  392. }
  393. .trueinvoice .input-demo {
  394. display: inline-block;
  395. width: 20%;
  396. margin-left: 1%;
  397. }
  398. .trueinvoice .block {
  399. font-size: 5px;
  400. text-align: center;
  401. margin-top: 15px;
  402. margin-bottom: 20px;
  403. }
  404. .trueinvoice .blocks {
  405. font-size: 5px;
  406. text-align: center;
  407. margin-top: 20px;
  408. padding-bottom: 20px;
  409. }
  410. </style>