index.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488
  1. <template>
  2. <div class="app-container">
  3. <!-- <headerdiv ref="headerDiv" :currentindexP = currentindexNew></headerdiv> -->
  4. <div class="divtitle">
  5. <img src="~@/assets/images/icon.png" style="width:1.8rem;height:1.8rem;margin-top:0.3rem"/>
  6. <div style="font-size:1.6rem;font-family: Adobe Heiti Std;font-weight: normal;color: #DFEEF3;margin-left:1rem">{{divtitle}}</div>
  7. </div>
  8. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="6.8rem" style="margin-top:1rem">
  9. <el-row>
  10. <el-col :span="18">
  11. <el-form-item>
  12. <el-button type="primary" size="mini" @click="getincidentExport">导出</el-button>
  13. <!-- <el-button type="primary" size="mini" @click="handleQuery">批量导出</el-button> -->
  14. </el-form-item>
  15. </el-col>
  16. <el-col :span="6">
  17. <el-input
  18. v-model="queryParams.name"
  19. placeholder="请输入事件名称"
  20. clearable
  21. size="small"
  22. style="width:30rem"
  23. />
  24. <el-button type="primary" size="mini" @click="handleQuery">确定</el-button>
  25. </el-col>
  26. </el-row>
  27. </el-form>
  28. <el-table v-loading="loading" :data="documentList" @selection-change="handleSelectionChange" stripe
  29. class="my_table"
  30. :row-class-name="tableRowClassName"
  31. :header-cell-style="{background:'#24A3B3 50%',color: '#C5D0D4'}">
  32. <el-table-column label="序号" align="center" type='index' />
  33. <!-- <el-table-column label="区域" align="center" prop="area" /> -->
  34. <el-table-column label="区域" align="center" prop="area">
  35. <template slot-scope="scope">
  36. <dict-tag :options="dict.type.tl_xun_area" :value="scope.row.area"/>
  37. </template>
  38. </el-table-column>
  39. <el-table-column label="位置" align="center" prop="address" />
  40. <el-table-column label="上报时间" align="center" prop="happenTime" />
  41. <el-table-column label="事件等级" align="center" class-name="small-padding fixed-width">
  42. <template slot-scope="scope">
  43. <div :class='"color_"+scope.row.incLevel'>
  44. {{getLevel(scope.row.incLevel)}}
  45. </div>
  46. </template>
  47. </el-table-column>
  48. <el-table-column label="状态" align="center" class-name="small-padding fixed-width">
  49. <template slot-scope="scope">
  50. <div>
  51. {{getStatus(scope.row.status)}}
  52. </div>
  53. </template>
  54. </el-table-column>
  55. <el-table-column label="事件名称" align="center" prop="name" />
  56. <el-table-column label="事件描述" align="center" prop="detail" />
  57. <el-table-column label="相关图片" align="center" class-name="small-padding fixed-width">
  58. <template slot-scope="scope">
  59. {{getCount(scope.row.pics)+getCount(scope.row.dealPics)}}
  60. </template>
  61. </el-table-column>
  62. <el-table-column label="上报人" align="center" prop="createByName" />
  63. <el-table-column label="接收人" align="center" prop="acceptUserName" />
  64. <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
  65. <template slot-scope="scope">
  66. <el-button
  67. size="mini"
  68. type="text"
  69. @click="openDetail(scope.row)"
  70. >查看详细</el-button>
  71. </template>
  72. </el-table-column>
  73. </el-table>
  74. <pagination
  75. v-show="total>0"
  76. :total="total"
  77. :page.sync="queryParams.pageNum"
  78. :limit.sync="queryParams.pageSize"
  79. @pagination="getList"
  80. />
  81. <el-dialog
  82. :title="title"
  83. :visible.sync="dialogVisible"
  84. v-if='dialogVisible'
  85. width="90%"
  86. >
  87. <div style="height:80vh">
  88. <el-col :span="8">
  89. <div style="padding-left:10rem">
  90. <div style="font-size: 1.6rem;
  91. font-family: Microsoft YaHei;
  92. font-weight: 400;
  93. color: #3DFFEA;
  94. line-height: 36px;">
  95. 基本信息
  96. </div>
  97. <div style="font-size: 16px;
  98. font-family: Microsoft YaHei;
  99. font-weight: 400;
  100. color: #C5D0D4;
  101. line-height: 36px;
  102. margin-top:10rem">
  103. <el-row type="flex" class="row-bg">
  104. <el-col :span="5"><div style="float:right">区域:</div></el-col>
  105. <el-col :span="19"><div style="padding-left:2rem">{{getAreaName(detailObj.area)}}</div></el-col>
  106. </el-row>
  107. <el-row type="flex" class="row-bg" style="margin-top:2rem">
  108. <el-col :span="5"><div style="float:right">位置:</div></el-col>
  109. <el-col :span="19"><div style="padding-left:2rem">{{detailObj.address}}</div></el-col>
  110. </el-row>
  111. <el-row type="flex" class="row-bg" style="margin-top:2rem">
  112. <el-col :span="5"><div style="float:right">上报时间:</div></el-col>
  113. <el-col :span="19"><div style="padding-left:2rem">{{detailObj.happenTime}}</div></el-col>
  114. </el-row>
  115. <el-row type="flex" class="row-bg" style="margin-top:2rem">
  116. <el-col :span="5"><div style="float:right">状态:</div></el-col>
  117. <el-col :span="19">
  118. <div style="padding-left:2rem">
  119. <div>
  120. {{getStatus(detailObj.status)}}
  121. </div>
  122. </div></el-col>
  123. </el-row>
  124. <el-row type="flex" class="row-bg" style="margin-top:2rem">
  125. <el-col :span="5"><div style="float:right">事件等级:</div></el-col>
  126. <el-col :span="19">
  127. <div style="padding-left:2rem">
  128. <div :class='"color_"+detailObj.incLevel'>
  129. {{getLevel(detailObj.incLevel)}}
  130. </div>
  131. </div></el-col>
  132. </el-row>
  133. <el-row type="flex" class="row-bg" style="margin-top:2rem">
  134. <el-col :span="5"><div style="float:right">事件名称:</div></el-col>
  135. <el-col :span="19"><div style="padding-left:2rem">{{detailObj.name}}</div></el-col>
  136. </el-row>
  137. <el-row type="flex" class="row-bg" style="margin-top:2rem">
  138. <el-col :span="5"><div style="float:right">事件描述:</div></el-col>
  139. <el-col :span="19"><div style="padding-left:2rem">{{detailObj.detail}}</div></el-col>
  140. </el-row>
  141. <el-row type="flex" class="row-bg" style="margin-top:2rem">
  142. <el-col :span="5"><div style="float:right">上报人:</div></el-col>
  143. <el-col :span="19"><div style="padding-left:2rem">{{detailObj.createByName}}</div></el-col>
  144. </el-row>
  145. <el-row type="flex" class="row-bg" style="margin-top:2rem">
  146. <el-col :span="5"><div style="float:right">接收人:</div></el-col>
  147. <el-col :span="19"><div style="padding-left:2rem">{{detailObj.acceptUserName}}</div></el-col>
  148. </el-row>
  149. </div>
  150. </div>
  151. </el-col>
  152. <el-col :span="16">
  153. <div>
  154. <div style="font-size: 1.6rem;
  155. font-family: Microsoft YaHei;
  156. font-weight: 400;
  157. color: #3DFFEA;
  158. line-height: 36px;">
  159. 相关图片
  160. </div>
  161. <div style="padding-top:2rem;padding-left:5rem">
  162. <img :src='getImage()' style="width: 88.7rem;height: 50.7rem;"/>
  163. </div>
  164. <div v-if="detailObj.pics" style="display:flex; flex-direction: row;margin-top:3rem;padding-left:5rem">
  165. <div v-for="(pic,index) in detailObj.picList.split(',')">
  166. <div :class='selectindex === index?"imgSelect":""' v-if="pic !== ''" @click="selectImg(index)" style="margin-left:1rem">
  167. <img :src='getImageUrl(pic)' style="width: 11.7rem;height: 8.7rem;"/>
  168. </div>
  169. </div>
  170. <!-- <div v-for="(pic,index) in detailObj.dealPics.split(',')">
  171. <div :class='selectindex === index?"imgSelect":""' @click="selectImg(index)" style="margin-left:1rem">
  172. <img :src='getImageUrl(pic)' style="width: 11.7rem;height: 8.7rem;"/>
  173. </div>
  174. </div> -->
  175. </div>
  176. </div>
  177. </el-col>
  178. </div>
  179. <!-- <span slot="footer" class="dialog-footer">
  180. <el-button @click="dialogVisible = false">取 消</el-button>
  181. <el-button type="primary" @click="dialogVisible = false">确 定</el-button>
  182. </span> -->
  183. </el-dialog>
  184. </div>
  185. </template>
  186. <script>
  187. import { getincidentList,getincidentExport } from "@/api/qdtl/data";
  188. import { listWork } from "@/api/qdtl/work";
  189. import { listDocument } from '@/api/qdtl/document'
  190. import headerdiv from '@/components/HeaderDiv/index.vue'
  191. import mapdiv from "@/components/map/index.vue"
  192. import addDocument from '@/views/qdtl/document/add.vue'
  193. export default {
  194. name: "Location",
  195. dicts: ['tl_xun_area'],
  196. data() {
  197. return {
  198. pageList:[],
  199. picImage:'',
  200. detailObj:{},
  201. // 遮罩层
  202. loading: false,
  203. divtitle:'隐患上报列表',
  204. // 选中数组
  205. ids: [],
  206. // 非单个禁用
  207. single: true,
  208. // 非多个禁用
  209. multiple: true,
  210. // 显示搜索条件
  211. showSearch: true,
  212. // 总条数
  213. total: 0,
  214. // 巡检点管理表格数据
  215. documentList: [],
  216. // 弹出层标题
  217. title: "",
  218. // 是否显示弹出层
  219. open: false,
  220. dialogVisible:false,
  221. isEdit:'true',
  222. selectUser:[],
  223. userList:[],
  224. dateRange:'',
  225. dateRangeArry:[],
  226. // 查询参数
  227. queryParams: {
  228. pageNum: 1,
  229. pageSize: 10,
  230. },
  231. // 表单参数
  232. form: {},
  233. selectindex:0,
  234. formObj:{},
  235. pointArry:{
  236. locations:'',
  237. type:''
  238. },
  239. scheduleList:[],
  240. // 表单校验
  241. rules: {
  242. }
  243. };
  244. },
  245. components:{
  246. mapdiv,
  247. headerdiv,
  248. addDocument
  249. },
  250. created() {
  251. this.getList();
  252. // this.handleAdd();
  253. // this.dialogVisible = false;
  254. // this.getAreaList();
  255. },
  256. mounted() {
  257. this.dialogVisible = true;
  258. this.dialogVisible = false;
  259. },
  260. methods: {
  261. getincidentExport(){
  262. this.download('/qdtl/incident/export', {
  263. ...this.queryParams
  264. }, `location_${new Date().getTime()}.xlsx`)
  265. // getincidentExport(this.queryParams).then(response =>{
  266. // console.log(response);
  267. // })
  268. },
  269. selectImg(index){
  270. //console.log(index);
  271. //this.detailObj.index = index;
  272. this.selectindex=index;
  273. this.picImage = this.detailObj.picList.split(',')[index];
  274. console.log(this.picImage);
  275. //console.log(this.detailObj.index);
  276. },
  277. getAreaName(id){
  278. console.log(this.dict.type.tl_xun_area);
  279. for(var index in this.dict.type.tl_xun_area){
  280. if(this.dict.type.tl_xun_area[index].value == id){
  281. return this.dict.type.tl_xun_area[index].label
  282. }
  283. }
  284. },
  285. getImage (){
  286. return process.env.VUE_APP_BASE_API+this.picImage
  287. },
  288. getImageUrl(pic){
  289. return process.env.VUE_APP_BASE_API+pic
  290. },
  291. openDetail(obj){
  292. //console.log(obj);
  293. this.dialogVisible = true
  294. this.detailObj = obj
  295. console.log(this.detailObj.dealPics);
  296. this.detailObj.picList = this.detailObj.pics+','+this.detailObj.dealPics
  297. this.picImage = this.detailObj.pics.split(',')[0];
  298. this.selectindex = 0;
  299. console.log(this.picImage);
  300. },
  301. getStatus(status){
  302. if(status == 1){
  303. return '未处理'
  304. }else{
  305. return '已处理'
  306. }
  307. },
  308. getLevel(level){
  309. if(level == 0){
  310. return '紧急'
  311. }else if(level == 1){
  312. return '一般'
  313. }else if(level == 2){
  314. return '重大'
  315. }
  316. },
  317. getCount(data){
  318. if(data){
  319. return data.split(',').length
  320. }else{
  321. return 0
  322. }
  323. },
  324. /** 查询巡检点管理列表 */
  325. getList() {
  326. // this.loading = true;
  327. getincidentList(this.queryParams).then(response =>{
  328. console.log(response);
  329. this.documentList = response.rows
  330. this.total = response.total
  331. })
  332. },
  333. // 取消按钮
  334. cancel() {
  335. this.open = false;
  336. this.reset();
  337. },
  338. // 表单重置
  339. reset() {
  340. this.form = {
  341. id: null,
  342. locationCode: null,
  343. locationName: null,
  344. detail: null,
  345. deviceIds: null,
  346. areaId: null,
  347. lnglat: null,
  348. remark: null,
  349. delFlag: null,
  350. createBy: null,
  351. createTime: null,
  352. updateBy: null,
  353. updateTime: null
  354. };
  355. this.resetForm("form");
  356. },
  357. /** 搜索按钮操作 */
  358. handleQuery() {
  359. this.getList();
  360. },
  361. /** 重置按钮操作 */
  362. resetQuery() {
  363. this.resetForm("queryForm");
  364. this.handleQuery();
  365. },
  366. // 多选框选中数据
  367. handleSelectionChange(selection) {
  368. this.ids = selection.map(item => item.id)
  369. this.single = selection.length!==1
  370. this.multiple = !selection.length
  371. },
  372. /** 新增按钮操作 */
  373. handleAdd() {
  374. this.formObj = {};
  375. this.dialogVisible = true;
  376. this.title = "新增公文";
  377. },
  378. /** 修改按钮操作 */
  379. handleUpdate(row) {
  380. this.formObj = row;
  381. this.title = "修改公文";
  382. this.dialogVisible = true
  383. // console.log(this.$refs.documentDiv.queryParams);
  384. // getLocation(id).then(response => {
  385. // this.form = response.data;
  386. // this.open = true;
  387. // this.title = "修改巡检点管理";
  388. // this.openMap();
  389. // });
  390. },
  391. /** 提交按钮 */
  392. submitForm() {
  393. this.$refs["form"].validate(valid => {
  394. if (valid) {
  395. if (this.form.id != null) {
  396. if(this.$refs.mapv.locations.length > 0){
  397. this.form.lnglat = this.$refs.mapv.locations.join(',');
  398. }
  399. updateLocation(this.form).then(response => {
  400. this.$modal.msgSuccess("修改成功");
  401. this.open = false;
  402. this.getList();
  403. });
  404. } else {
  405. this.form.lnglat = this.$refs.mapv.locations.join(',');
  406. addLocation(this.form).then(response => {
  407. this.$modal.msgSuccess("新增成功");
  408. this.open = false;
  409. this.getList();
  410. });
  411. }
  412. }
  413. });
  414. },
  415. /** 删除按钮操作 */
  416. handleDelete(row) {
  417. const ids = row.id || this.ids;
  418. this.$modal.confirm('是否确认删除巡检点管理编号为"' + ids + '"的数据项?').then(function() {
  419. return delLocation(ids);
  420. }).then(() => {
  421. this.getList();
  422. this.$modal.msgSuccess("删除成功");
  423. }).catch(() => {});
  424. },
  425. /** 导出按钮操作 */
  426. handleExport() {
  427. this.download('qdtl/location/export', {
  428. ...this.queryParams
  429. }, `location_${new Date().getTime()}.xlsx`)
  430. },
  431. tableRowClassName({ row, rowIndex }) {
  432. if ((rowIndex + 1) % 2 === 0) {
  433. return "warning-row";
  434. } else {
  435. return "success-row";
  436. }
  437. },
  438. }
  439. };
  440. </script>
  441. <style scoped>
  442. .divtitle{
  443. background: url("~@/assets/images/title2@2x.png") no-repeat;
  444. background-size: 100% 100%;
  445. width:100%;
  446. height:3.9rem;
  447. padding-top:0.8rem;
  448. padding-left:3rem;
  449. display: inline-flex;
  450. }
  451. .color_1{
  452. color: #C5D0D4;
  453. }
  454. .color_0{
  455. color: #FF7400;
  456. }
  457. .color_2{
  458. color: #F4002D;
  459. }
  460. .imgSelect{
  461. background: #041824;
  462. border: 1px solid rgba(66,255,231,0.46);
  463. opacity: 0.84;
  464. }
  465. </style>