inTransit.vue 15 KB

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