OrderInquiry.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <template>
  2. <div>
  3. <el-row>
  4. <el-form :inline="true" :model="formInline" class="demo-form-inline" label-width="130px" size="small">
  5. <el-form-item label="车牌号">
  6. <el-input v-model="formInline.licencePlate" placeholder="车牌号" clearable></el-input>
  7. </el-form-item>
  8. <el-form-item label="救援起点">
  9. <el-input v-model="formInline.rescueStarting" placeholder="救援起点" clearable></el-input>
  10. </el-form-item>
  11. <el-form-item label="救援终点">
  12. <el-input v-model="formInline.rescuePosition" placeholder="救援终点" clearable></el-input>
  13. </el-form-item>
  14. <el-form-item label="订单状态">
  15. <el-select v-model="formInline.orderState" placeholder="订单状态" clearable>
  16. <el-option v-for="val in oderStateoptions" :key="val.label" :label="val.dictTag" :value="val.dictValue" ></el-option>
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item label="服务类型">
  20. <el-select v-model="formInline.serveCode" placeholder="服务类型" clearable>
  21. <el-option v-for="val in rescueTypeoptions" :key="val.label" :label="val.dictTag" :value="val.dictValue" ></el-option>
  22. </el-select>
  23. </el-form-item>
  24. <el-form-item>
  25. <el-button type="primary" @click="findPage">查询</el-button>
  26. </el-form-item>
  27. </el-form>
  28. </el-row>
  29. <kt-common-table
  30. :tableHeights="700"
  31. :SerialShow="false"
  32. :data="pageResult"
  33. :columns="columns"
  34. button2Name="详情"
  35. permsButton2="sys:orderInquiry1:detail"
  36. @handleButton2="handleButton"
  37. @findPage="findPage"
  38. ></kt-common-table>
  39. <el-dialog
  40. title="提示"
  41. :visible.sync="dialogVisible"
  42. width="50%"
  43. :before-close="handleClose">
  44. <div style="width: 100%; height: 400px" id="map" ></div>
  45. <span slot="footer" class="dialog-footer">
  46. <el-button @click="dialogVisible = false">关闭</el-button>
  47. </span>
  48. </el-dialog>
  49. </div>
  50. </template>
  51. <script>
  52. import KtCommonTable from "@/views/Core/KtCommonTable.vue"; //表格组件
  53. import AMapLoader from '@amap/amap-jsapi-loader';
  54. window._AMapSecurityConfig = {
  55. securityJsCode: 'd62687dd438cfadd859bbab66d8e41a2', //安全密钥
  56. }
  57. export default {
  58. components: {
  59. KtCommonTable
  60. },
  61. data() {
  62. return {
  63. pageRequest: {
  64. pageNum: 1,
  65. pageSize: 20
  66. },
  67. formInline:{},
  68. pageResult: [],
  69. columns: [
  70. //数据列
  71. { prop: "id", label: "订单ID",},
  72. { prop: "licencePlate", label: "车牌号", },
  73. { prop: "orderState", label: "订单状态" },
  74. {
  75. prop: "phoneNumber",
  76. label: "联系人电话",
  77. },
  78. { prop: "rescueStarting", label: "救援起点" },
  79. { prop: "rescuePosition", label: "救援终点" },
  80. { prop: "rescueScene", label: "救援场景" },
  81. { prop: "rescueSum", label: "救援金额" },
  82. { prop: "rescueUser", label: "救援联系人" },
  83. { prop: "serveCode", label: "服务类型" },
  84. ],
  85. oderStateoptions:[],
  86. rescueTypeoptions:[],
  87. dialogVisible:false,
  88. arrmap: [],
  89. mapCenter:[]
  90. };
  91. },
  92. created() {
  93. //获取所有下拉框数据
  94. this.getDictItems("oderState");
  95. this.getDictItems("rescueType");
  96. },
  97. async mounted(){
  98. await AMapLoader.load({
  99. key: '262c17c813cdaab1bf93bfeb9873a6c8',
  100. version: '2.0',
  101. plugins: ['AMap.Geolocation', 'AMap.Marker']
  102. })
  103. },
  104. updated() {
  105. if(this.dialogVisible){
  106. this.initMap();
  107. }
  108. },
  109. methods: {
  110. initMap(){
  111. this. map = new AMap.Map('map', {
  112. zoom: 13, // 缩放级别
  113. viewMode: '3D',
  114. // resizeEnable: true,
  115. center:this.mapCenter, // 中心点坐标
  116. });
  117. this.addMarkers()
  118. },
  119. addMarkers(){
  120. this.arrmap.forEach(marker => {
  121. const [longitude, latitude]= marker.lnglat;
  122. const markerObj= new window.AMap.Marker({position:[longitude,latitude],title: marker.title,
  123. direction: 'right',
  124. offset: new AMap.Pixel(10, 0),
  125. map: this.map,
  126. // icon: '//a.amap.com/jsapi_demos/static/demo-center/icons/poi-marker-default.png',
  127. });
  128. markerObj.setLabel({
  129. direction: 'right',
  130. offset: new AMap.Pixel(10, 0), //设置文本标注偏移量
  131. content: marker.title, //设置文本标注内容
  132. });
  133. markerObj.on('click',()=>{console.log(marker.title);});
  134. });
  135. },
  136. handleButton({row,index}){
  137. if(row.startingLatitude&& row.startingLongitude && row.positionLatitude && row.positionLongitude){
  138. this.arrmap=[
  139. {
  140. lnglat:[row.startingLatitude,row.startingLongitude],
  141. title:row.rescueStarting,
  142. },{
  143. lnglat:[row.positionLatitude,row.positionLongitude],
  144. title:row.rescuePosition,
  145. },
  146. ]
  147. let latitude= (row.startingLatitude+ row.positionLatitude) / 2
  148. let longitude= (row.startingLongitude+ row.positionLongitude) / 2
  149. this.mapCenter=[latitude,longitude]
  150. }
  151. this.dialogVisible = true
  152. },
  153. handleClose(){
  154. this.dialogVisible = false
  155. },
  156. getDictItems: function(typeName) {
  157. let that = this;
  158. this.$api.insCompany.dicType(typeName)
  159. .then(function(res) {
  160. that[typeName + "options"] = res.data.ddList; // 把获取到的数据赋给this.data
  161. })
  162. .catch(function(error) {
  163. that[typeName + "options"] = [];
  164. });
  165. },
  166. findPage(data) {
  167. if (data && data.pageRequest) {
  168. this.pageRequest.pageNum = data.pageRequest.pageNum;
  169. this.pageRequest.pageSize = data.pageRequest.pageSize;
  170. }
  171. this.$api.one.rescueOrderPage({...this.pageRequest,...this.formInline}).then(res => {
  172. if(res.code==200){
  173. this.pageResult = res.data;
  174. }
  175. });
  176. }
  177. }
  178. };
  179. </script>