inTransit.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446
  1. <template>
  2. <!-- 在途运输信息选择页面 -->
  3. <div class="inTransit">
  4. <el-form :inline="true">
  5. <el-form-item>
  6. <label class="el-form-item__label" style="width: auto;">时间段</label>
  7. <el-date-picker
  8. v-model="dateValue"
  9. type="daterange"
  10. range-separator="至"
  11. start-placeholder="开始日期"
  12. end-placeholder="结束日期">
  13. </el-date-picker>
  14. </el-form-item>
  15. <el-form-item>
  16. <span class="el-form-item__span" style="width: auto;">产品分类</span>
  17. <el-input v-model="inputValue" placeholder="请输入内容"></el-input>
  18. </el-form-item>
  19. <el-form-item>
  20. <span class="el-form-item__span" style="width: auto;">车牌号</span>
  21. <el-input v-model="capacityNumber1" placeholder="请输入内容"></el-input>
  22. </el-form-item>
  23. <el-form-item>
  24. <span class="el-form-item__span" style="width: auto;">收货单位</span>
  25. <el-input v-model="consigneeCompanyName1" placeholder="请输入内容"></el-input>
  26. </el-form-item>
  27. <el-form-item>
  28. <span class="el-form-item__span" style="width: auto;">承运单位</span>
  29. <el-input v-model="carrierName" placeholder="请输入内容"></el-input>
  30. </el-form-item>
  31. <el-form-item>
  32. <span class="el-form-item__span" style="width: auto;">门岗名称</span>
  33. <el-input v-model="gatepostName" placeholder="请输入内容"></el-input>
  34. </el-form-item>
  35. <el-form-item>
  36. <label class="el-form-item__label" style="width: auto;">报警类型</label>
  37. <el-select v-model="exceptionType" placeholder="报警类型">
  38. <el-option
  39. v-for="item in exceptionTypes"
  40. :key="item.value"
  41. :label="item.label"
  42. :value="item.value">
  43. </el-option>
  44. </el-select>
  45. </el-form-item>
  46. <el-form-item>
  47. <el-button type="primary" @click="onSearch"><i class="el-icon-search"></i>查询</el-button>
  48. <el-button type="primary" @click="exportData">导出</el-button>
  49. </el-form-item>
  50. </el-form>
  51. <!-- 执行中 -->
  52. <el-tabs v-model="activeName" >
  53. <el-tab-pane label="执行中" name="first">
  54. <mergeRowTable ref="tab" v-bind.sync="option">
  55. <el-table-column fixed="right" label="操作" width="110">
  56. <template slot-scope="scope">
  57. <el-button @click="click(scope.row)" type="text" size="small" style="font-size: 17px"
  58. >实时轨迹</el-button
  59. >
  60. </template>
  61. </el-table-column>
  62. </mergeRowTable>
  63. </el-tab-pane>
  64. <!-- 已结束 -->
  65. <el-tab-pane label="已结束" name="second">
  66. <mergeRowTable ref="tab2" v-bind.sync="option2">
  67. <el-table-column fixed="right" label="操作" width="220">
  68. <template slot-scope="scope">
  69. <el-button @click="historyclick(scope.row)" type="text" size="small" style="font-size: 17px">历史轨迹</el-button>
  70. <!-- <el-button @click="allDistanceclick(scope.row.orderNumber)" type="text" size="small" style="font-size: 17px">总距离</el-button> -->
  71. </template>
  72. </el-table-column>
  73. </mergeRowTable>
  74. </el-tab-pane>
  75. <!-- 有异常 -->
  76. <el-tab-pane label="有异常" name="third">
  77. <mergeRowTable ref="tab3" :span-method="objectSpanMethod" v-bind.sync="option3">
  78. <el-table-column fixed="right" label="操作" width="220">
  79. <template slot-scope="scope">
  80. <el-button @click="click(scope.row)" type="text" size="small" style="font-size: 17px"
  81. >实时轨迹</el-button
  82. >
  83. <el-button @click="inTransitAlarmclick(scope.row.orderNumber)" type="text" size="small" style="font-size: 17px">运输报警</el-button>
  84. </template>
  85. </el-table-column>
  86. </mergeRowTable>
  87. </el-tab-pane>
  88. </el-tabs>
  89. <div style="height: 100%">
  90. <vxe-modal width="1237" height="731" v-model="value7" show-zoom resize>
  91. <template #default>
  92. <PathView v-bind.sync="pathOption"></PathView>
  93. </template>
  94. </vxe-modal>
  95. </div>
  96. <!-- <div style="height: 100%">
  97. <vxe-modal width="1237" height="731" v-model="value6" show-zoom resize>
  98. <template #default>
  99. <inTransitOrderMileage v-bind.sync="mileOption"></inTransitOrderMileage>
  100. </template>
  101. </vxe-modal>
  102. </div> -->
  103. <div style="height: 100%">
  104. <vxe-modal width="1237" height="731" v-model="value5" show-zoom resize>
  105. <template #default>
  106. <dilTable ref="tableAlarm" v-bind.sync="optionAlarm"></dilTable>
  107. </template>
  108. </vxe-modal>
  109. </div>
  110. </div>
  111. </template>
  112. <script>
  113. import { sjTime } from "@/utils/sharedJsFile";
  114. import PathView from "./mapTest.vue"
  115. export default {
  116. name: "inTransit",
  117. components: {
  118. PathView,
  119. },
  120. data() {
  121. return {
  122. exceptionTypes:[{
  123. value: '全部类型',
  124. label: '全部类型'
  125. }, {
  126. value: '离线',
  127. label: '离线'
  128. },{
  129. value: '停车',
  130. label: '停车'
  131. },{
  132. value: '偏离',
  133. label: '偏离'
  134. }],
  135. inputValues:[{
  136. value: '螺纹钢',
  137. label: '螺纹钢'
  138. }, {
  139. value: '微粉',
  140. label: '微粉'
  141. },{
  142. value: '带钢',
  143. label: '带钢'
  144. },{
  145. value: '钢坯',
  146. label: '钢坯'
  147. },{
  148. value: '其他',
  149. label: '其他'
  150. }],
  151. gatepostNames1: [{
  152. value: '信钢北门出口',
  153. label: '信钢北门出口'
  154. }, {
  155. value: '科创微粉出口',
  156. label: '科创微粉出口'
  157. },{
  158. value: '象屿库',
  159. label: '象屿库'
  160. },{
  161. value: '智同库',
  162. label: '智同库'
  163. },{
  164. value: '中联厂出口',
  165. label: '中联厂出口'
  166. }],
  167. dateValue:[new Date(), new Date()],
  168. inputValue:"螺纹钢",
  169. exceptionType:"全部类型",
  170. selectOrderNumber:"",
  171. capacityNumber1:"",
  172. carrierName:"",
  173. gatepostName:"",
  174. value7:false,
  175. value6:false,
  176. value5:false,
  177. dialogVisible:false,
  178. consigneeCompanyName1:"",
  179. status: "",
  180. state: "",
  181. activeName: "first",
  182. option: {
  183. // 表格请求数据的地址
  184. requestUrl: "/api/v1/otms/getInTransitTransportation?apiId=468",
  185. comparison:"orderNumber",
  186. columnIndexs:[2,1,5,6,7,8,12,13],
  187. },
  188. option2: {
  189. // 表格请求数据的地址
  190. requestUrl: "/api/v1/otms/getFinishTruckOrderInfo?apiId=468",
  191. comparison:"orderNumber",
  192. columnIndexs:[2,1,5,6,7,8,12,13],
  193. },
  194. optionAlarm:{
  195. requestUrl: "",
  196. },
  197. pathOption:{
  198. orderNumber:'',
  199. capacityNumber:'',
  200. startPointName:'',
  201. endPointName:'',
  202. },
  203. mileOption:{
  204. orderNumber:''
  205. },
  206. alarmOption:{
  207. orderNumber:''
  208. },
  209. option3: {
  210. // 表格请求数据的地址
  211. requestUrl: "/api/v1/otms/getHaveAbnormalTruckOrderInfo?apiId=468",
  212. comparison:"orderNumber",
  213. columnIndexs:[2,1,5,6,7,8,12,13],
  214. }
  215. };
  216. },
  217. mounted() {
  218. console.log("nijfdsojfosafj")
  219. this.restaurants = this.loadAll();
  220. // this.onSearch();
  221. },
  222. methods: {
  223. //记录每一行的合并数
  224. getSpanArr(data) {
  225. //每次调用方法初始化
  226. this.spanArr = [];
  227. for (var i = 0; i < data.length; i++) {
  228. if (i === 0) {
  229. this.spanArr.push(1);
  230. this.pos = 0;
  231. } else {
  232. // 判断当前元素与上一个元素是否相同
  233. if (data[i].orderNumber === data[i - 1].orderNumber) {
  234. this.spanArr[this.pos] += 1;
  235. this.spanArr.push(0);
  236. } else {
  237. this.spanArr.push(1);
  238. this.pos = i;
  239. }
  240. }
  241. }
  242. },
  243. objectSpanMethod({ row, column, rowIndex, columnIndex }) {
  244. if (
  245. columnIndex == 0 ||
  246. columnIndex == 1 ||
  247. columnIndex == 7 ||
  248. columnIndex == 8 ||
  249. columnIndex == 9 ||
  250. columnIndex == 10 ||
  251. columnIndex == 11 ||
  252. columnIndex == 12 ||
  253. columnIndex == 13 ||
  254. columnIndex == 14
  255. ) {
  256. const _row = this.spanArr[rowIndex];
  257. const _col = _row > 0 ? 1 : 0;
  258. return {
  259. rowspan: _row,
  260. colspan: _col
  261. };
  262. }
  263. },
  264. showPathView(data){
  265. this.dialogVisible=!this.dialogVisible;
  266. this.selectOrderNumber=data.orderNumber;
  267. },
  268. querySearch(queryString, cb) {
  269. var restaurants = this.restaurants;
  270. var results = queryString
  271. ? restaurants.filter(this.createFilter(queryString))
  272. : restaurants;
  273. cb(results);
  274. },
  275. querySearch2(queryString, cb) {
  276. var restaurants = [
  277. { value: "信钢北门出口"},
  278. { value: "科创微粉出口"},
  279. { value: "象屿库"},
  280. { value: "智同库"},
  281. ];
  282. var results = queryString
  283. ? restaurants.filter(this.createFilter(queryString))
  284. : restaurants;
  285. cb(results);
  286. },
  287. querySearch3(queryString, cb) {
  288. var restaurants = [
  289. { value: "离线"},
  290. { value: "停车"},
  291. { value: "偏离"},
  292. { value: "全部类型"},
  293. ];
  294. var results = queryString
  295. ? restaurants.filter(this.createFilter(queryString))
  296. : restaurants;
  297. cb(results);
  298. },
  299. createFilter(queryString) {
  300. return (restaurant) => {
  301. return (
  302. restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) ===
  303. 0
  304. );
  305. };
  306. },
  307. loadAll() {
  308. return [
  309. { value: "螺纹钢"},
  310. { value: "微粉"},
  311. { value: "带钢"},
  312. { value: "钢坯"},
  313. { value: "其他"},
  314. ];
  315. },
  316. exportData(){
  317. let tHeader = [];
  318. let filterVal = [];
  319. if(this.activeName=="first"){
  320. this.$refs.tab.dataColumnData.filter( (item,i) =>{
  321. tHeader.push(item.label);
  322. filterVal.push(item.prop);
  323. } )
  324. this.export2Excel(tHeader,filterVal,this.$refs.tab.dataTabel,'执行中表格');
  325. }else if(this.activeName=="second"){
  326. this.$refs.tab2.dataColumnData.filter( (item,i) =>{
  327. tHeader.push(item.label);
  328. filterVal.push(item.prop);
  329. } )
  330. this.export2Excel(tHeader,filterVal,this.$refs.tab2.dataTabel,'已完成表格');
  331. } else if(this.activeName=="third"){
  332. this.$refs.tab3.dataColumnData.filter( (item,i) =>{
  333. tHeader.push(item.label);
  334. filterVal.push(item.prop);
  335. } )
  336. this.export2Excel(tHeader,filterVal,this.$refs.tab3.dataTabel,'有异常表格');
  337. }
  338. },
  339. export2Excel(tHeader,filterVal,dataTabel,exeName) {
  340. var that = this;
  341. this.downloadLoading = true
  342. require.ensure([], () => {
  343. const { export_json_to_excel } = require("@/assets/excel/Export2Excel.js"); //这里必须使用绝对路径,使用@/+存放export2Excel的路径
  344. console.log("export_json_to_excel",export_json_to_excel)
  345. let list = dataTabel;
  346. let data = that.formatJson(filterVal, list);
  347. export_json_to_excel(tHeader, data, exeName); // 导出的表格名称
  348. });
  349. },
  350. //3.格式转换
  351. formatJson(filterVal, jsonData) {
  352. return jsonData.map((v) => filterVal.map((j) => v[j]));
  353. },
  354. onSearch(){
  355. if(this.activeName=="first"){
  356. //改变执行中条件
  357. console.log(this.$refs.tab)
  358. console.log("this.$refs.tab")
  359. this.$refs.tab.setDataRequestQuery({"startTime":sjTime(this.dateValue[0]),
  360. "endTime": sjTime(this.dateValue[1]),
  361. "materialNames": this.inputValue,
  362. "capacityNumbers": this.capacityNumber1,
  363. "carrierNames":this.carrierName,
  364. "outGatepostNames":this.gatepostName,
  365. "consigneeCompanyNames": this.consigneeCompanyName1});
  366. }
  367. if(this.activeName=="second"){
  368. //改变已完成条件
  369. this.$refs.tab2.setDataRequestQuery({"startTime":sjTime(this.dateValue[0]),
  370. "endTime": sjTime(this.dateValue[1]),
  371. "materialNames": this.inputValue,
  372. "capacityNumbers": this.capacityNumber1,
  373. "carrierNames":this.carrierName,
  374. "outGatepostNames":this.gatepostName,
  375. "consigneeCompanyNames": this.consigneeCompanyName1});
  376. }
  377. if(this.activeName=="third"){
  378. //改变有异常条件
  379. this.$refs.tab3.setDataRequestQuery({"startTime":sjTime(this.dateValue[0]),
  380. "endTime": sjTime(this.dateValue[1]),
  381. "materialNames": this.inputValue,
  382. "capacityNumber1": this.capacityNumber1,
  383. "carrierName1":this.carrierName,
  384. "abnormalType":this.exceptionType=="全部类型"?"":this.exceptionType,
  385. "outGatepostNames":this.gatepostName,
  386. "consigneeCompanyName1": this.consigneeCompanyName1});
  387. }
  388. },
  389. //other
  390. click(row) {
  391. this.pathOption.orderNumber=row.orderNumber;
  392. this.pathOption.capacityNumber=row.capacityNumber;
  393. this.pathOption.startPointName="达钢集团"+row.outGatepostName,
  394. this.pathOption.endPointName=row.deliveryAddress,
  395. this.value7=true;
  396. },
  397. historyclick(row){
  398. this.pathOption.orderNumber=row.orderNumber;
  399. this.pathOption.capacityNumber=row.capacityNumber;
  400. this.pathOption.startPointName="达钢集团"+row.outGatepostName,
  401. this.pathOption.endPointName=row.deliveryAddress,
  402. console.log(this.pathOption,"this.pathOption")
  403. this.value7=true;
  404. },
  405. allDistanceclick(orderNumber){
  406. //this.$router.push("/offsite/inTransitOrderMileage?orderNumber="+orderNumber);
  407. this.mileOption.orderNumber=orderNumber;
  408. this.value6=true;
  409. },
  410. inTransitAlarmclick(orderNumber){
  411. this.optionAlarm.requestUrl="/api/v1/otms/getTransportAbnormalInfo?apiId=472&orderNumbers="+orderNumber;
  412. this.value5=true;
  413. },
  414. },
  415. };
  416. </script>
  417. <style lang='scss' scoped>
  418. .el-input {
  419. width: 150px;
  420. margin-left: 5px;
  421. }
  422. span.el-form-item__span {
  423. float: left;
  424. margin-top: 7px;
  425. }
  426. .homeworkPath {
  427. .top {
  428. padding: 20px 30px;
  429. }
  430. }
  431. </style>