From 2e41623f7fd7fd4f01b08cda81012edc9c573d91 Mon Sep 17 00:00:00 2001
From: guanqb <18720758508@163.com>
Date: Tue, 28 Feb 2023 14:18:49 +0800
Subject: [PATCH] Merge branch 'master' of http://192.168.0.105:10010/r/srs-police-web
---
vue.config.js | 15
package-lock.json | 41
src/views/houseStatistic/houseStatistic.vue | 361 ++
src/api/realEstate/realEstate.js | 50
src/views/range/range.vue | 9
src/views/system/user.vue | 1958 +++++++--------
src/api/houseStatistic/houseStatistic.js | 50
src/api/system/dept.js | 8
src/util/store.js | 1
src/views/community/community.vue | 14
src/page/login/userlogin.vue | 4
src/components/map/dcSearchMap.vue | 192 +
src/components/map/mapBox.vue | 171
src/permission.js | 278 +-
src/api/policePost/policePost.js | 62
src/views/system/dept.vue | 10
src/store/modules/user.js | 566 ++--
src/views/realEstate/realEstate.vue | 392 +++
src/views/security/security.vue | 325 +
src/components/map/searchMap.vue | 139 +
src/views/scheduling/scheduling.vue | 594 ++--
src/components/map/searchMapBox.vue | 360 ++
src/views/policePost/policePost.vue | 323 ++
src/styles/element-ui.scss | 1
src/views/securityManage/securityManage.vue | 10
src/option/user/info.js | 38
src/views/villagePersonInfo/villagePersonInfo.vue | 354 ++
src/api/security/security.js | 42
src/api/villagePersonInfo/villagePersonInfo.js | 50
src/views/policeman/policeman.vue | 500 ++-
src/main.js | 150
src/views/securityManageCar/securityManageCar.vue | 10
package.json | 1
src/page/index/top/index.vue | 2
src/App.vue | 37
src/components/map/dcMap.vue | 168 +
36 files changed, 5,074 insertions(+), 2,212 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index e78fa44..b069114 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2495,6 +2495,16 @@
"dev": true,
"optional": true
},
+ "bindings": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
+ "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "file-uri-to-path": "1.0.0"
+ }
+ },
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz",
@@ -4684,6 +4694,15 @@
"safer-buffer": "^2.1.0"
}
},
+ "echarts": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.1.tgz",
+ "integrity": "sha512-9ltS3M2JB0w2EhcYjCdmtrJ+6haZcW6acBolMGIuf01Hql1yrIV01L1aRj7jsaaIULJslEP9Z3vKlEmnJaWJVQ==",
+ "requires": {
+ "tslib": "2.3.0",
+ "zrender": "5.4.1"
+ }
+ },
"ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz",
@@ -5572,6 +5591,13 @@
}
}
}
+ },
+ "file-uri-to-path": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
+ "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
+ "dev": true,
+ "optional": true
},
"filesize": {
"version": "3.6.1",
@@ -12711,6 +12737,11 @@
"integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==",
"dev": true
},
+ "tslib": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz",
+ "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg=="
+ },
"tty-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz",
@@ -13367,6 +13398,7 @@
"dev": true,
"optional": true,
"requires": {
+ "bindings": "^1.5.0",
"nan": "^2.12.1"
}
},
@@ -13693,6 +13725,7 @@
"dev": true,
"optional": true,
"requires": {
+ "bindings": "^1.5.0",
"nan": "^2.12.1"
}
},
@@ -14218,6 +14251,14 @@
"dev": true
}
}
+ },
+ "zrender": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.1.tgz",
+ "integrity": "sha512-M4Z05BHWtajY2241EmMPHglDQAJ1UyHQcYsxDNzD9XLSkPDqMq4bB28v9Pb4mvHnVQ0GxyTklZ/69xCFP6RXBA==",
+ "requires": {
+ "tslib": "2.3.0"
+ }
}
}
}
diff --git a/package.json b/package.json
index df00d4e..5125594 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
"babel-polyfill": "^6.26.0",
"classlist-polyfill": "^1.2.0",
"crypto-js": "^4.0.0",
+ "echarts": "^5.4.1",
"element-ui": "^2.15.6",
"js-base64": "^2.5.1",
"js-cookie": "^2.2.0",
diff --git a/src/App.vue b/src/App.vue
index 1697360..7a2c8f1 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,30 +1,29 @@
<template>
- <div id="app">
- <router-view />
- </div>
+ <div id="app">
+ <router-view />
+ </div>
</template>
<script>
export default {
- name: "app",
- data() {
- return {};
- },
- watch: {},
- created() {
-
- },
- methods: {},
- computed: {}
-};
+ name: "app",
+ data () {
+ return {}
+ },
+ watch: {},
+ created () { },
+ methods: {},
+ computed: {}
+}
</script>
<style lang="scss">
#app {
- width: 100%;
- height: 100%;
- overflow: hidden;
+ width: 100%;
+ height: 100%;
+ overflow: hidden;
}
-.avue--detail .el-col{
- margin-bottom: 0;
+
+.avue--detail .el-col {
+ margin-bottom: 0;
}
</style>
diff --git a/src/api/houseStatistic/houseStatistic.js b/src/api/houseStatistic/houseStatistic.js
new file mode 100644
index 0000000..1636787
--- /dev/null
+++ b/src/api/houseStatistic/houseStatistic.js
@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+ return request({
+ url: '/api/houseStatistic/houseStatistic/list',
+ method: 'get',
+ params: {
+ ...params,
+ current,
+ size,
+ }
+ })
+}
+
+export const getDetail = (id) => {
+ return request({
+ url: '/api/houseStatistic/houseStatistic/detail',
+ method: 'get',
+ params: {
+ id
+ }
+ })
+}
+
+export const remove = (ids) => {
+ return request({
+ url: '/api/houseStatistic/houseStatistic/remove',
+ method: 'post',
+ params: {
+ ids,
+ }
+ })
+}
+
+export const add = (row) => {
+ return request({
+ url: '/api/houseStatistic/houseStatistic/submit',
+ method: 'post',
+ data: row
+ })
+}
+
+export const update = (row) => {
+ return request({
+ url: '/api/houseStatistic/houseStatistic/submit',
+ method: 'post',
+ data: row
+ })
+}
+
diff --git a/src/api/policePost/policePost.js b/src/api/policePost/policePost.js
new file mode 100644
index 0000000..31b1435
--- /dev/null
+++ b/src/api/policePost/policePost.js
@@ -0,0 +1,62 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+ return request({
+ url: '/api/policePost/policePost/list',
+ method: 'get',
+ params: {
+ ...params,
+ current,
+ size,
+ }
+ })
+}
+
+export const getPage = (current, size, params) => {
+ return request({
+ url: '/api/policePost/policePost/page',
+ method: 'get',
+ params: {
+ ...params,
+ current,
+ size,
+ }
+ })
+}
+
+export const getDetail = (id) => {
+ return request({
+ url: '/api/policePost/policePost/detail',
+ method: 'get',
+ params: {
+ id
+ }
+ })
+}
+
+export const remove = (ids) => {
+ return request({
+ url: '/api/policePost/policePost/remove',
+ method: 'post',
+ params: {
+ ids,
+ }
+ })
+}
+
+export const add = (row) => {
+ return request({
+ url: '/api/policePost/policePost/submit',
+ method: 'post',
+ data: row
+ })
+}
+
+export const update = (row) => {
+ return request({
+ url: '/api/policePost/policePost/submit',
+ method: 'post',
+ data: row
+ })
+}
+
diff --git a/src/api/realEstate/realEstate.js b/src/api/realEstate/realEstate.js
new file mode 100644
index 0000000..e35e824
--- /dev/null
+++ b/src/api/realEstate/realEstate.js
@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+ return request({
+ url: '/api/realEstate/realEstate/list',
+ method: 'get',
+ params: {
+ ...params,
+ current,
+ size,
+ }
+ })
+}
+
+export const getDetail = (id) => {
+ return request({
+ url: '/api/realEstate/realEstate/detail',
+ method: 'get',
+ params: {
+ id
+ }
+ })
+}
+
+export const remove = (ids) => {
+ return request({
+ url: '/api/realEstate/realEstate/remove',
+ method: 'post',
+ params: {
+ ids,
+ }
+ })
+}
+
+export const add = (row) => {
+ return request({
+ url: '/api/realEstate/realEstate/submit',
+ method: 'post',
+ data: row
+ })
+}
+
+export const update = (row) => {
+ return request({
+ url: '/api/realEstate/realEstate/submit',
+ method: 'post',
+ data: row
+ })
+}
+
diff --git a/src/api/security/security.js b/src/api/security/security.js
index 7e6cbf7..44d9025 100644
--- a/src/api/security/security.js
+++ b/src/api/security/security.js
@@ -67,3 +67,45 @@
})
}
+//http://192.168.0.112:18080/sf3d/area/getAoiByPt?lng=117.9471794&lat=28.4474852&height=0&tolerance=10&adcode=361102
+export const getAoiByPt = (row) =>{
+ return request({
+ url:'http://192.168.0.112:18080/sf3d/area/getAoiByPt',
+ method:'get',
+ data:row
+ })
+}
+
+//192.168.0.112:9091/zhs/bs/search?ak=ebf48ecaa1fd436fa3d40c4600aa051f®ion=361100&query=公安局&ids=61743e28bbf11700e9fc4ef03dd8bea9
+export const searchByQuery = (ak, region, query, ids) => {
+ return request({
+ url: '/bsapi/zhs/bs/search',
+ method: 'get',
+ params: {
+ ak,
+ region,
+ query,
+ ids
+ }
+ })
+}
+
+//http://{IP}:{PORT}/zhs/bs/search?ak=***&query= 万 达 商 场
+// ®ion=440300®ion_type=circle&page_size=3&page_num=1&infos=1&radius=500&location=113.841901,22.628249
+export const searchByLonLat = (ak, query,region,region_type,page_size,page_num,infos,radius,location) => {
+ return request({
+ url: '/bsapi/zhs/bs/search',
+ method: 'get',
+ params: {
+ ak,
+ query,
+ region,
+ region_type,
+ page_size,
+ page_num,
+ infos,
+ radius,
+ location
+ }
+ })
+}
diff --git a/src/api/system/dept.js b/src/api/system/dept.js
index af5c6e7..adffb72 100644
--- a/src/api/system/dept.js
+++ b/src/api/system/dept.js
@@ -79,3 +79,11 @@
})
}
+export const getPoliceStationTree = (params) => {
+ return request({
+ url: '/api/blade-system/dept/getPoliceStationTree',
+ method: 'get',
+ params: params
+ })
+}
+
diff --git a/src/api/villagePersonInfo/villagePersonInfo.js b/src/api/villagePersonInfo/villagePersonInfo.js
new file mode 100644
index 0000000..a5715bc
--- /dev/null
+++ b/src/api/villagePersonInfo/villagePersonInfo.js
@@ -0,0 +1,50 @@
+import request from '@/router/axios';
+
+export const getPage = (current, size, params) => {
+ return request({
+ url: '/api/villagePersonInfo/villagePersonInfo/page',
+ method: 'get',
+ params: {
+ ...params,
+ current,
+ size,
+ }
+ })
+}
+
+export const getDetail = (id) => {
+ return request({
+ url: '/api/villagePersonInfo/villagePersonInfo/detail',
+ method: 'get',
+ params: {
+ id
+ }
+ })
+}
+
+export const remove = (ids) => {
+ return request({
+ url: '/api/villagePersonInfo/villagePersonInfo/remove',
+ method: 'post',
+ params: {
+ ids,
+ }
+ })
+}
+
+export const add = (row) => {
+ return request({
+ url: '/api/villagePersonInfo/villagePersonInfo/submit',
+ method: 'post',
+ data: row
+ })
+}
+
+export const update = (row) => {
+ return request({
+ url: '/api/villagePersonInfo/villagePersonInfo/submit',
+ method: 'post',
+ data: row
+ })
+}
+
diff --git a/src/components/map/dcMap.vue b/src/components/map/dcMap.vue
new file mode 100644
index 0000000..2ba3fcf
--- /dev/null
+++ b/src/components/map/dcMap.vue
@@ -0,0 +1,168 @@
+<template>
+ <div>
+ <div id="viewer-container" :style="{ height: isDetail ? '95vh' : '40vh', width: '100%' }"></div>
+ <div style="position: absolute;right:45%;top:-1%;z-index: 999999">
+ <p style="margin-top: 10px" v-if="!isDetail">
+ <el-button type="primary" size="small" @click="draw('polygon')">绘制区域</el-button>
+ <el-button size="small" @click="clearDraw">重置</el-button>
+ </p>
+ </div>
+ </div>
+</template>
+
+<script>
+export default {
+ name: "dcMap",
+ props: ['isDetail', 'range'],
+ data () {
+ return {
+ polygonLayer: null,
+ polyLineLayer: null,
+ polygon: null,
+ polyLine: null,
+ //绘制工具
+ plotTool: null,
+ coordinates: []
+ }
+ },
+ created () {
+
+ },
+ mounted () {
+ let self = this
+ global.DC.ready(() => {
+ initViewer()
+ })
+
+ function initViewer () {
+ //配置viewer
+ global.viewer = new global.DC.Viewer('viewer-container', {
+ contextOptions: {
+ webgl: {
+ alpha: true,
+ stencil: true,
+ preserveDrawingBuffer: true
+ }
+ },
+ sceneMode: 2
+ })
+
+ //加载地图
+ // global.viewer.imageryLayers.addImageryProvider(
+ // new global.DC.Namespace.Cesium.UrlTemplateImageryProvider({
+ // url: 'https://webmap-tile.sf-express.com/MapTileService/rt?fetchtype=static&x={x}&y={y}&z={z}&project=sfmap&pic_size=256&pic_type=png8&data_name=361100&data_format=merged-dat&data_type=normal',
+ // format: 'image/jpeg',
+ // show: true,
+ // maximumLevel: 18
+ // })
+ // )
+
+ global.viewer.imageryLayers.addImageryProvider(
+ new global.DC.Namespace.Cesium.WebMapTileServiceImageryProvider({
+ url: "http://10.141.11.8:8090/MapTileService/wmts?STORETYPE=merged-dat&PROJECTION=4326",
+ layer: "wmts_4326_361100",
+ style: "default",
+ format: "image/png",
+ tileMatrixSetID: "c",
+ tileMatrixLabels: new Array(18).fill(0).map((v, i) => i + 1),
+ tilingScheme: new global.DC.Namespace.Cesium.GeographicTilingScheme(),
+ })
+ )
+
+ //添加图层
+ self.polygonLayer = new global.DC.VectorLayer('polygonLayer')
+ global.viewer.addLayer(self.polygonLayer)
+
+ //添加图层
+ self.polyLineLayer = new global.DC.VectorLayer('polyLineLayer')
+ global.viewer.addLayer(self.polyLineLayer)
+
+ self.plotTool = new global.DC.Plot(global.viewer)
+
+ //初始化定位
+ global.viewer.camera.setView({
+ // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
+ // fromDegrees()方法,将经纬度和高程转换为世界坐标
+ destination: global.DC.Namespace.Cesium.Cartesian3.fromDegrees(
+ //设置坐标为上饶市信州区
+ 117.966460, 28.431002, 5000.0
+ ),
+ orientation: {
+ // 指向
+ heading: global.DC.Namespace.Cesium.Math.toRadians(0, 0),
+ // 视角
+ pitch: global.DC.Namespace.Cesium.Math.toRadians(-90),
+ roll: 0.0
+ }
+ })
+ }
+
+ if (this.isDetail) {
+ this.showPolyLine(this.range)
+ }
+
+ },
+ methods: {
+ //开始绘画
+ draw (type) {
+ if (this.polygon) {
+ this.clearDraw()
+ }
+
+ this.plotTool && this.plotTool.draw(type, overlay => {
+ if (overlay) {
+ this.polygonLayer.addOverlay(overlay)
+ overlay.positions.forEach(e => {
+ this.coordinates.push([e.lng, e.lat])
+ })
+ let toData = this.doData(this.coordinates)
+ this.$emit('toData', toData)
+ }
+ })
+ },
+ //重置
+ clearDraw () {
+ this.polygonLayer.clear()
+ },
+ //转换成数据库数据
+ doData (val) {
+ let str = "LINESTRING("
+ for (let k = 0; k < val.length; k++) {
+ str += `${val[k][0]} ${val[k][1]}`
+ if (k != val.length - 1) {
+ str += ","
+ }
+ }
+ str = str + "," + `${val[0][0]} ${val[0][1]}`
+ str += ")"
+ // console.log(str)
+ return '\'' + str + '\''
+ },
+ //回显多边形
+ showPolygon (positions) {
+ let viewer = global.viewer
+ positions = positions.replaceAll(",", ";").replaceAll(" ", ",")
+ this.polygon = new global.DC.Polygon(positions)
+ this.polygon.setStyle({
+ material: global.DC.Color.RED
+ })
+ this.polygonLayer.addOverlay(this.polygon)
+ viewer.flyTo(this.polygonLayer)
+ },
+ //回显线
+ showPolyLine (positions) {
+ let viewer = global.viewer
+ positions = positions.replaceAll(",", ";").replaceAll(" ", ",")
+ this.polyLine = new global.DC.Polyline(positions)
+ this.polyLine.setStyle({
+ material: global.DC.Color.RED
+ })
+ this.polyLineLayer.addOverlay(this.polyLine)
+ viewer.flyTo(this.polyLineLayer)
+ }
+ }
+}
+</script>
+
+<style scoped>
+</style>
diff --git a/src/components/map/dcSearchMap.vue b/src/components/map/dcSearchMap.vue
new file mode 100644
index 0000000..a0beb6f
--- /dev/null
+++ b/src/components/map/dcSearchMap.vue
@@ -0,0 +1,192 @@
+<template>
+ <div>
+ <div id="search-viewer-container" style="height: 50vh; width: 100%"></div>
+ </div>
+</template>
+
+<script>
+
+let pointLayer = null
+export default {
+ name: "dcSearchMap",
+ props: ['isDetail', 'point'],
+ data() {
+ return {
+ currentPoint: null,
+ //绘制工具
+ plotTool: null,
+ coordinates: []
+ }
+ },
+ created() {
+
+ },
+ mounted() {
+
+ },
+ methods: {
+ init() {
+ let self = this
+ if (global.searchViewer != null) {
+ global.searchViewer = null
+ }
+
+ global.DC.ready(() => {
+ initViewer()
+ })
+
+ function initViewer() {
+ //配置viewer
+ global.searchViewer = new global.DC.Viewer('search-viewer-container', {
+ contextOptions: {
+ webgl: {
+ alpha: true,
+ stencil: true,
+ preserveDrawingBuffer: true
+ }
+ },
+ sceneMode: 2
+ })
+
+ //加载地图
+ // global.searchViewer.imageryLayers.addImageryProvider(
+ // new global.DC.Namespace.Cesium.UrlTemplateImageryProvider({
+ // url: 'https://webmap-tile.sf-express.com/MapTileService/rt?fetchtype=static&x={x}&y={y}&z={z}&project=sfmap&pic_size=256&pic_type=png8&data_name=361100&data_format=merged-dat&data_type=normal',
+ // format: 'image/jpeg',
+ // show: true,
+ // maximumLevel: 18
+ // })
+ // )
+
+ global.searchViewer.imageryLayers.addImageryProvider(
+ new global.DC.Namespace.Cesium.WebMapTileServiceImageryProvider({
+ url: "http://10.141.11.8:8090/MapTileService/wmts?STORETYPE=merged-dat&PROJECTION=4326",
+ layer: "wmts_4326_361100",
+ style: "default",
+ format: "image/png",
+ tileMatrixSetID: "c",
+ tileMatrixLabels: new Array(18).fill(0).map((v, i) => i + 1),
+ tilingScheme: new global.DC.Namespace.Cesium.GeographicTilingScheme(),
+ })
+ )
+
+ //添加图层
+ pointLayer = new global.DC.VectorLayer('polygonLayer')
+ global.searchViewer.addLayer(pointLayer)
+
+ self.plotTool = new global.DC.Plot(global.searchViewer, {
+ icon_center: "/img/dwicon.jpeg", // 自定义的中心点图标
+ icon_anchor: "/img/dwicon.jpeg", //自定义的锚点图标
+ icon_midAnchor: "/img/dwicon.jpeg", //自定义的中心锚点图标
+ icon_size: [12, 12],//自定义的中心锚点大小
+ clampToModel: false // 点位是否获取模型表面坐标
+ })
+
+ //初始化定位
+ global.searchViewer.camera.setView({
+ // Cesium的坐标是以地心为原点,一向指向南美洲,一向指向亚洲,一向指向北极州
+ // fromDegrees()方法,将经纬度和高程转换为世界坐标
+ destination: global.DC.Namespace.Cesium.Cartesian3.fromDegrees(
+ //设置坐标为上饶市信州区
+ 117.966460, 28.431002, 5000.0
+ ),
+ orientation: {
+ // 指向
+ heading: global.DC.Namespace.Cesium.Math.toRadians(0, 0),
+ // 视角
+ pitch: global.DC.Namespace.Cesium.Math.toRadians(-90),
+ roll: 0.0
+ }
+ })
+
+ }
+
+ this.showPoint(this.point)
+
+ this.draw()
+
+ },
+ //开始绘画
+ draw() {
+ const self = this
+ if (this.polygon) {
+ this.clearDraw()
+ }
+ //鼠标左键事件
+ let leftClick = function (event) {
+ if (self.currentPoint) {
+ pointLayer.removeOverlay(self.currentPoint)
+ self.currentPoint = null
+ }
+ let point = new global.DC.Billboard(new global.DC.Position(event.wgs84SurfacePosition.lng, event.wgs84SurfacePosition.lat), 'img/dwicon.jpeg')
+ // point.setStyle({
+ // pixelSize: 10,
+ // color: global.DC.Color.RED, //颜色
+ // outlineColor: global.DC.Color.WHITE, //边框颜色
+ // outlineWidth: 2, //边框大小,
+ // })
+ self.currentPoint = point
+ pointLayer.addOverlay(point)
+ let pointLonLat = [event.wgs84SurfacePosition.lng, event.wgs84SurfacePosition.lat]
+ self.$emit("getMapData", pointLonLat)
+ }
+ //添加鼠标左键事件
+ global.searchViewer.on(global.DC.MouseEventType.LEFT_DOWN, leftClick)
+ },
+ //重置
+ clearDraw() {
+ this.polygonLayer.clear()
+ },
+ //转换成数据库数据
+ doData(val) {
+ let str = "LINESTRING("
+ for (let k = 0; k < val.length; k++) {
+ str += `${val[k][0]} ${val[k][1]}`
+ if (k != val.length - 1) {
+ str += ","
+ }
+ }
+ str = str + "," + `${val[0][0]} ${val[0][1]}`
+ str += ")"
+ // console.log(str)
+ return '\'' + str + '\''
+ },
+ //回显点
+ showPoint(positions) {
+ let viewer = global.searchViewer
+ if (positions) {
+ let pointData = ""
+ let pointArray = []
+ pointData = positions.match(/\(([^)]*)\)/)
+ pointArray = pointData[1].split(" ")
+
+ let position = new global.DC.Position(pointArray[0], pointArray[1])
+ let point = new global.DC.Billboard(position, 'img/dwicon.jpeg')
+ // point.setStyle({
+ // pixelSize: 10,
+ // color: global.DC.Color.RED, //颜色
+ // outlineColor: global.DC.Color.WHITE, //边框颜色
+ // outlineWidth: 2, //边框大小,
+ // })
+ this.currentPoint = point
+ pointLayer.addOverlay(point)
+ viewer.flyTo(pointLayer)
+ }
+ },
+ setView(points) {
+ if (points) {
+ let position = new global.DC.Position(Number(points.lng), Number(points.lat), 2000, 0, -90, 0)
+ let point = new global.DC.Billboard(position, 'img/dwicon.jpeg')
+ this.currentPoint = point
+ pointLayer.clear()
+ pointLayer.addOverlay(point)
+ global.searchViewer.flyToPosition(
+ new global.DC.Position(Number(points.lng), Number(points.lat), 2000, 0, -90, 0)
+ )
+ }
+ }
+ }
+}
+</script>
+
+<style scoped></style>
diff --git a/src/components/map/mapBox.vue b/src/components/map/mapBox.vue
index 872acff..67a5ce4 100644
--- a/src/components/map/mapBox.vue
+++ b/src/components/map/mapBox.vue
@@ -1,10 +1,10 @@
<template>
<div>
- <div id='map' :style="{height:isDetail?'90vh':'40vh',width:'100%'}">
+ <div id='map' :style="{ height: isDetail ? '90vh' : '40vh', width: '100%' }" ref="MapContent">
<div style="position: absolute;right:40%;top:-1%;z-index: 999999">
<p style="margin-top: 10px" v-if="!isDetail">
- <el-button type="primary" size="small" @click="point()">绘制路线</el-button>
- <el-button size="small" @click="clearDraw()">重置</el-button>
+ <el-button type="primary" size="small" @click="point()">绘制区域</el-button>
+ <el-button size="small" @click="clearDraw()">重置</el-button>
</p>
</div>
<!--画线后的提示-->
@@ -21,18 +21,18 @@
import VectorSource from 'ol/source/Vector'
import Cluster from 'ol/source/Cluster'
import {Vector as VectorLayer, Tile as TileLayer} from 'ol/layer'
-import LineString from "ol/geom/LineString";
-import Point from 'ol/geom/Point';
-import Icon from 'ol/style/Icon';
+import LineString from "ol/geom/LineString"
+import Point from 'ol/geom/Point'
+import Icon from 'ol/style/Icon'
import {Style, Fill as StyleFill, Stroke as StyleStroke, Text as StyleText, Circle as StyleCircle} from 'ol/style'
import {Circle as GeomCircle, Point as GeomPoint, LineString as GeomLineString, Polygon as GeomPolygon} from 'ol/geom'
import Draw from 'ol/interaction/Draw'
-import XYZ from "ol/source/XYZ";
+import XYZ from "ol/source/XYZ"
import 'ol/ol.css'
export default {
name: 'mapBox',
- props:['routeRange','isDetail'],
+ props: ['routeRange', 'isDetail', "searchMap"],
data() {
return {
map: null,
@@ -44,15 +44,16 @@
draw: null,
drawLayer: null,
lineVector: null,
- pointVector:null,
+ pointVector: null,
+ polygonVector: null,
coordinates: [],// 保存绘画坐标地址 [[115.90490549080435, 28.746101718722358],[115.93151300423209, 28.741123538790717]]
toData: null,// 保存数据库格式坐标地址
- showTip:false,
+ showTip: false,
tipPosition: {//提示的位置
w: 200,
h: 10,
},
- tipTitle:null
+ tipTitle: null
}
},
methods: {
@@ -72,7 +73,7 @@
],
view: new View({
// 设置中心点,默认南昌,用于规划南昌市的路线
- center: [115.9032747077233, 28.67433116990186],
+ center: [117.951478782, 28.447896798],
projection: 'EPSG:4326',
// 设置缩放倍数
zoom: 13,
@@ -80,6 +81,7 @@
maxZoom: 19
})
})
+
_this.lineVector = new VectorLayer({
//layer所对应的source
source: new VectorSource({
@@ -92,8 +94,15 @@
wrapX: false // 禁止横向无限重复(底图渲染的时候会横向无限重复),设置了这个属性,可以让绘制的图形不跟随底图横向无限重复
}),
})
+ _this.polygonVector = new VectorLayer({
+ //layer所对应的source
+ source: new VectorSource({
+ wrapX: false // 禁止横向无限重复(底图渲染的时候会横向无限重复),设置了这个属性,可以让绘制的图形不跟随底图横向无限重复
+ }),
+ })
_this.map.addLayer(_this.lineVector)
_this.map.addLayer(_this.pointVector)
+ _this.map.addLayer(_this.polygonVector)
//在地图上回显线或点
_this.startAdd(_this.routeRange)
},
@@ -116,41 +125,41 @@
// toData = 'LINESTRING(115.90505364627936 28.740342332731327,115.9119724729309 28.74040302419318,115.90766337913915 28.73566909016844)'
if (toData) {
// 将数据库点坐标数据转换
- let entityData = "";
- let entityArr = [];
- entityData = toData.match(/\(([^)]*)\)/);
+ let entityData = ""
+ let entityArr = []
+ entityData = toData.match(/\(([^)]*)\)/)
if (entityData && entityData != "") {
- entityData = entityData[1].split(",");
+ entityData = entityData[1].split(",")
for (let j = 0; j < entityData.length; j++) {
entityArr.push([
Number(entityData[j].split(" ")[0]),
Number(entityData[j].split(" ")[1]),
- ]);
+ ])
}
}
// let lineCoords = [[115.90490549080435, 28.746101718722358],[115.93151300423209, 28.741123538790717],[115.90696542732779, 28.73408542233564],[115.90696542732779, 28.73408542233564]]
let lineCoords = entityArr
- let view = this.map.getView();
+ let view = this.map.getView()
view.setCenter([
lineCoords[Math.ceil(lineCoords.length / 2)][0],
lineCoords[Math.ceil(lineCoords.length / 2)][1],
- ]);
- view.setZoom(14.5);
+ ])
+ view.setZoom(14.5)
let feature_LineString = new Feature({
geometry: new LineString(lineCoords),
- });
- feature_LineString.setStyle(this.styleFunction());// 设置样式
- this.lineVector.getSource().addFeature(feature_LineString);
+ })
+ feature_LineString.setStyle(this.styleFunction())// 设置样式
+ this.lineVector.getSource().addFeature(feature_LineString)
}
},
// 添加点
- addPoint(pointLonLat){
+ addPoint(pointLonLat) {
// pointLonLat = POINT(115.87531914674 28.8603307485585)
- if (pointLonLat){
+ if (pointLonLat) {
let pointData = ""
let pointArray = []
- pointData = pointLonLat.match(/\(([^)]*)\)/);
+ pointData = pointLonLat.match(/\(([^)]*)\)/)
pointArray = pointData[1].split(" ")
//设置点
let feature_Point = new Feature({
@@ -164,53 +173,63 @@
// imgSize: [250,320],
scale: 0.2
}),
- });
- feature_Point.setStyle(style);
- this.pointVector.getSource().addFeature(feature_Point);
- let center = [Number(pointArray[0]), Number(pointArray[1])];
- let view = this.map.getView();
- view.setZoom(16);
+ })
+ feature_Point.setStyle(style)
+ this.pointVector.getSource().addFeature(feature_Point)
+ let center = [Number(pointArray[0]), Number(pointArray[1])]
+ let view = this.map.getView()
+ view.setZoom(16)
view.animate({
center: center,
duration: 5,
- });
+ })
}
},
// 将点坐标集合转换为数据库数据
doData(val) {
- let str = "LINESTRING(";
+ let str = "LINESTRING("
for (let k = 0; k < val.length; k++) {
- str += `${val[k][0]} ${val[k][1]}`;
+ str += `${val[k][0]} ${val[k][1]}`
if (k != val.length - 1) {
- str += ",";
+ str += ","
}
}
- str += ")";
+ str = str + "," + `${val[0][0]} ${val[0][1]}`
+ str += ")"
// console.log(str)
- return '\''+str+'\'';
+ return '\'' + str + '\''
},
// 开始绘制
point() {
let _this = this
_this.coordinates = []
_this.map.removeInteraction(_this.draw)
- _this.lineVector.getSource().clear()
+ _this.polygonVector.getSource().clear()
//提示
- if(!_this.showTip){
+ if (!_this.showTip) {
_this.showTip = true
}
_this.tipTitle = "单击左键或者右键开始绘画"
+
//提示器
- $("#map").off("mousemove").mousemove(function (e) {
- _this.setTipPosition(e.offsetX, e.offsetY, 5, 5);
- })
- $("#map").off("mousedown").mousedown(function () {
+ function mapMousemove(e) {
+ _this.setTipPosition(e.offsetX, e.offsetY, 5, 5)
+ }
+
+ this.$refs.MapContent.addEventListener('mousemove', mapMousemove)
+
+ // this.$refs.MapContent.removeEventListener('mousemove', mapMousemove)
+
+ function mapMousedown() {
_this.tipTitle = "可继续,或选择最终位置双击结束绘画"
- })
+ }
+
+ this.$refs.MapContent.addEventListener('mousedown', mapMousedown)
+ // this.$refs.MapContent.removeEventListener('mousedown', mapMousedown)
_this.draw = new Draw({
- source: _this.lineVector.getSource(),
- type: 'LineString',
+ source: _this.polygonVector.getSource(),
+ type: 'Polygon',
style: new Style({
stroke: new StyleStroke({
color: "red",
@@ -227,16 +246,17 @@
// 结束事件
_this.draw.on('drawend', function () {
- _this.map.removeInteraction(_this.draw);
- _this.lineVector.setStyle(_this.styleFunction())// 路线画好之后的样式
+ _this.map.removeInteraction(_this.draw)
+ _this.polygonVector.setStyle(_this.styleFunction())// 路线画好之后的样式
// 将点坐标集合转换为数据库数据
let toData = _this.doData(_this.coordinates)
// 传值给父组件
- _this.$emit('toData',toData)
+ _this.$emit('toData', toData)
//隐藏提示
- _this.tipTitle = null;
+ _this.tipTitle = null
_this.showTip = false
})
+
},
// 设置统一控制点击事件,需要画图方式在此处切换
handleClick(point) {
@@ -263,7 +283,7 @@
this.linePoints.push(point)
let featureLine = new Feature({
geometry: new GeomLineString(this.linePoints),
- });
+ })
// 添加线的样式
let lineStyle = new Style({
@@ -274,8 +294,8 @@
color: 'rgba(255, 0, 0)',
width: 4,
}),
- });
- featureLine.setStyle(lineStyle);
+ })
+ featureLine.setStyle(lineStyle)
let source = new VectorSource()
source.addFeature(featureLine)
@@ -299,7 +319,7 @@
let feature = new Feature({
geometry: new GeomPolygon([this.polygonPoints]),
attributes: null
- });
+ })
// 添加线的样式
let lineStyle = new Style({
fill: new StyleFill({
@@ -309,9 +329,9 @@
color: 'rgba(255, 0, 0)',
width: 4,
}),
- });
- feature.setStyle(lineStyle);
- let source = new VectorSource();
+ })
+ feature.setStyle(lineStyle)
+ let source = new VectorSource()
source.addFeature(feature)
let vectorLayer = new VectorLayer({
source: source
@@ -320,12 +340,12 @@
},
// 设置聚合点
addMarker() {
- let source = new VectorSource();
+ let source = new VectorSource()
// 随机创建200个要素,后台点位取出后按此格式处理
for (let i = 1; i <= 200; i++) {
- let coordinates = [115.90 + Math.random() * 0.05, 28.64 + Math.random() * 0.05];
- let feature = new Feature(new GeomPoint(coordinates));
- source.addFeature(feature);
+ let coordinates = [115.90 + Math.random() * 0.05, 28.64 + Math.random() * 0.05]
+ let feature = new Feature(new GeomPoint(coordinates))
+ source.addFeature(feature)
}
// 聚合
@@ -337,7 +357,7 @@
let clusters = new VectorLayer({
source: clusterSource,
style: function (feature) {
- let size = feature.get('features').length;
+ let size = feature.get('features').length
let style = new Style({
image: new StyleCircle({
radius: 20,
@@ -355,20 +375,23 @@
})
})
})
- return style;
+ return style
}
- });
+ })
this.map.addLayer(clusters)
},
// 重置图层
- clearDraw(){
+ clearDraw() {
let _this = this
_this.coordinates = []
_this.map.removeInteraction(_this.draw)
_this.lineVector.getSource().clear()
_this.showTip = false
_this.tipTitle = null
+
+ // 传值给父组件
+ _this.$emit('toData', "")
},
// 获取新的 layer 图层对象
getLayer() {
@@ -394,14 +417,16 @@
// 设置提示位置
setTipPosition(x, y, n, m) {
let _this = this
- _this.tipPosition.w = x + n;
- _this.tipPosition.h = y + m;
+ _this.tipPosition.w = x + n
+ _this.tipPosition.h = y + m
},
- startAdd(routeRange){
- if (routeRange.startsWith("LINESTRING")){
- this.addLineDraw(routeRange)
- }else {
- this.addPoint(routeRange)
+ startAdd(routeRange) {
+ if (routeRange) {
+ if (routeRange.startsWith("LINESTRING")) {
+ this.addLineDraw(routeRange)
+ } else if (routeRange.startsWith("POINT")) {
+ this.addPoint(routeRange)
+ }
}
}
},
diff --git a/src/components/map/searchMap.vue b/src/components/map/searchMap.vue
new file mode 100644
index 0000000..14e55d0
--- /dev/null
+++ b/src/components/map/searchMap.vue
@@ -0,0 +1,139 @@
+<template>
+ <div class="basic-container">
+ <div class="search-line">
+ <el-select
+ class="search-input"
+ v-model="queryString"
+ filterable
+ remote
+ reserve-keyword
+ placeholder="请输入关键词"
+ :remote-method="remoteMethod"
+ :loading="loading"
+ @change="selectChange">
+ <el-option
+ v-for="item in searchList"
+ :key="item.uid"
+ :label="item.address"
+ :value="JSON.stringify(item)">
+ </el-option>
+ </el-select>
+ <!-- <el-button class="search-button" @click="getAddressByQuery">查询</el-button>-->
+ </div>
+ <!-- <search-map-box ref="OpenLayersMap" @getMapData="getMapData" :route-range="point" :is-detail="true"></search-map-box>-->
+ <dc-search-map ref="dcSearchMap" @getMapData="getMapData" :point="point"></dc-search-map>
+ </div>
+</template>
+
+<script>
+import SearchMapBox from "@/components/map/searchMapBox";
+import {getAoiByPt, search, searchByLonLat, searchByQuery} from "@/api/security/security";
+import data from "@/views/util/data";
+import DcSearchMap from "@/components/map/dcSearchMap";
+
+export default {
+ name: "searchMap",
+ components: {DcSearchMap, SearchMapBox},
+ props: ['pointLonLat'],
+ data() {
+ return {
+ ak: "ebf48ecaa1fd436fa3d40c4600aa051f",
+ region: "361100",
+ longitude: "",
+ latitude: "",
+ queryString: "",
+ point: "",
+ searchList: [],
+ loading: false,
+ }
+ },
+ watch: {
+ longitude: {
+ handler(newVal) {
+ if (newVal) {
+ this.getAddressByLonLat()
+ }
+ }
+ }
+ },
+ created() {
+ this.point = this.pointLonLat
+ },
+ mounted() {
+ this.$refs.dcSearchMap.init()
+ },
+ methods: {
+ getMapData(data) {
+ this.longitude = data[0]
+ this.latitude = data[1]
+ this.$emit("getLonLat", data)
+
+ },
+ remoteMethod(data) {
+ this.queryString = data
+ this.getAddressByQuery()
+ },
+ getAddressByQuery() {
+ let ak = this.ak
+ let region = this.region
+ let query = this.queryString
+ searchByQuery(ak, region, query).then(res => {
+ let dataList = res.data.result
+ this.searchList = dataList
+ })
+ },
+ getAddressByLonLat() {
+ let ak = this.ak
+ let query = ""
+ let region = this.region
+ let region_type = "circle"
+ let page_size = "1"
+ let page_num = "1"
+ let infos = 1
+ let radius = 100
+ let location = this.longitude + " " + this.latitude
+ searchByLonLat(ak, query, region, region_type, page_size, page_num, infos, radius, location).then(res => {
+ let data = res.data.result[0]
+ if(data!=undefined){
+ this.queryString = data.address
+ this.$emit("getAddress", this.queryString)
+ let point = [data.location.lng,data.location.lat]
+ this.$emit("getLonLat", point)
+ //清空
+ this.searchList = []
+ //触发搜索
+ this.getAddressByQuery()
+ }else{
+ this.queryString = [];
+ //清空
+ this.searchList = []
+ this.$emit("getAddress", '')
+ this.$emit("getLonLat", ['',''])
+ }
+
+ })
+ },
+ selectChange(data) {
+ let selectData = JSON.parse(data)
+
+ this.$emit("getLonLat", [selectData.location.lng, selectData.location.lat])
+ this.$emit("getAddress", selectData.address)
+
+ this.$refs.dcSearchMap.setView(selectData.location)
+ }
+ }
+}
+</script>
+
+<style scoped>
+.search-line {
+ display: flex;
+ width: 1286px;
+}
+
+.search-input {
+ margin-bottom: 2%;
+ width: 100%;
+}
+
+</style>
diff --git a/src/components/map/searchMapBox.vue b/src/components/map/searchMapBox.vue
new file mode 100644
index 0000000..34b580a
--- /dev/null
+++ b/src/components/map/searchMapBox.vue
@@ -0,0 +1,360 @@
+<template>
+ <div>
+ <div id='searchMap' style="height: 50vh; width: 100%" ref="MapContent">
+ </div>
+ </div>
+</template>
+
+<script>
+import {Feature, Map, View} from "ol";
+import {Tile as TileLayer, Vector as VectorLayer} from "ol/layer";
+import XYZ from "ol/source/XYZ";
+import VectorSource from "ol/source/Vector";
+import {Circle as StyleCircle, Fill as StyleFill, Stroke as StyleStroke, Style, Text as StyleText} from "ol/style";
+import Point from "ol/geom/Point";
+import Icon from "ol/style/Icon";
+import Draw from "ol/interaction/Draw";
+import {Circle as GeomCircle, LineString as GeomLineString, Point as GeomPoint, Polygon as GeomPolygon} from "ol/geom";
+import Cluster from "ol/source/Cluster";
+
+export default {
+ name: "searchMapBox",
+ props: ['routeRange'],
+ data() {
+ return {
+ map: null,
+ points: [],
+ featurePoint:null,
+ // 线条点数组
+ linePoints: [],
+ // 多边形数组
+ polygonPoints: [],
+ draw: null,
+ drawLayer: null,
+ pointVector: null,
+ coordinates: [],// 保存绘画坐标地址 [[115.90490549080435, 28.746101718722358],[115.93151300423209, 28.741123538790717]]
+ toData: null,// 保存数据库格式坐标地址
+ showTip: false,
+ tipTitle: null
+ }
+ },
+ methods: {
+
+ createMap() {
+ let _this = this
+ //初始化地图
+ _this.map = new Map({
+ target: 'searchMap',
+ layers: [
+ new TileLayer({
+ source: new XYZ({
+ url: "https://webmap-tile.sf-express.com/MapTileService/rt?fetchtype=static&x={x}&y={y}&z={z}&project=sfmap&pic_size=256&pic_type=png8&data_name=361100&data_format=merged-dat&data_type=normal", // 行政区划
+ })
+ }),
+
+ ],
+ view: new View({
+ // 设置中心点
+ //117.951478782, 28.447896798, 5000
+ center: [117.951478782, 28.447896798],
+ projection: 'EPSG:4326',
+ // 设置缩放倍数
+ zoom: 13,
+ minZoom: 8,
+ maxZoom: 19
+ })
+ })
+
+ _this.pointVector = new VectorLayer({
+ //layer所对应的source
+ source: new VectorSource({
+ wrapX: false // 禁止横向无限重复(底图渲染的时候会横向无限重复),设置了这个属性,可以让绘制的图形不跟随底图横向无限重复
+ }),
+ style: new Style({
+ image: new Icon({
+ src: "/img/dwicon.jpeg",
+ anchor: [0.48, 1],
+ // imgSize: [250,320],
+ scale: 0.13
+ }),
+ })
+ })
+ _this.map.addLayer(_this.pointVector)
+ // 在地图上回显线或点
+ if (this.routeRange) {
+ _this.startAdd(_this.routeRange)
+ }
+ this.point()
+ },
+ // 绘画之后的样式
+ styleFunction() {
+ // 绘画之后的样式
+ let styles = [
+ new Style({
+ fill: new StyleFill({color: "rgba(255, 255, 255, 0.2)"}),
+ stroke: new StyleStroke({
+ color: 'rgb(252, 94, 32)',
+ width: 5
+ })
+ })
+ ]
+ return styles
+ },
+ // 添加点
+ addPoint(pointLonLat) {
+ // pointLonLat = POINT(115.87531914674 28.8603307485585)
+ if (pointLonLat) {
+ let pointData = ""
+ let pointArray = []
+ pointData = pointLonLat.match(/\(([^)]*)\)/)
+ pointArray = pointData[1].split(" ")
+ //设置点
+ let feature_Point = new Feature({
+ geometry: new Point([Number(pointArray[0]), Number(pointArray[1])])
+ })
+ //点样式
+ let style = new Style({
+ image: new Icon({
+ src: "/img/dwicon.jpeg",
+ anchor: [0.48, 1],
+ // imgSize: [250,320],
+ scale: 0.13
+ }),
+ })
+ this.featurePoint = feature_Point
+ feature_Point.setStyle(style)
+ this.pointVector.getSource().addFeature(feature_Point)
+ let center = [Number(pointArray[0]), Number(pointArray[1])]
+ let view = this.map.getView()
+ view.setZoom(16)
+ view.animate({
+ center: center,
+ duration: 5,
+ })
+ }
+ },
+ // 将点坐标集合转换为数据库数据
+ doData(val) {
+ let str = "LINESTRING("
+ for (let k = 0; k < val.length; k++) {
+ str += `${val[k][0]} ${val[k][1]}`
+ if (k != val.length - 1) {
+ str += ","
+ }
+ }
+ str = str + "," + `${val[0][0]} ${val[0][1]}`
+ str += ")"
+ // console.log(str)
+ return '\'' + str + '\''
+ },
+ // 开始绘制
+ point() {
+ let _this = this
+ _this.coordinates = []
+ _this.map.removeInteraction(_this.draw)
+ // _this.pointVector.getSource().clear()
+
+ _this.draw = new Draw({
+ source: _this.pointVector.getSource(),
+ type: 'Point',
+ })
+ _this.map.addInteraction(_this.draw)
+ // 点击事件
+ _this.map.on('click', function (e) {
+ if (_this.featurePoint != null){
+ _this.pointVector.getSource().removeFeature(_this.featurePoint)
+ }
+
+ if (_this.coordinates.length > 0) {
+ let featureArray = _this.pointVector.getSource().getFeatures()
+ for (let i = 0; i < featureArray.length -1; i++) {
+ _this.pointVector.getSource().removeFeature(featureArray[i])
+ }
+ _this.coordinates = []
+ }
+ // 将点坐标保存集合
+ _this.coordinates.push(e.coordinate)
+ _this.$emit("getMapData", _this.coordinates)
+ })
+
+ },
+ // 设置统一控制点击事件,需要画图方式在此处切换
+ handleClick(point) {
+ // 绘制连线
+ this.drawLineString(point)
+ // 绘制点
+ // this.drawPoint(point)
+ // 绘制圆形
+ // this.drawCircle(point)
+ // 绘制多边形
+ // this.drawPolygon(point)
+ },
+ // 绘制点位
+ drawPoint(center) {
+ let vectorLayer = this.getLayer()
+
+ let point = new GeomPoint(center)
+ let feature = new Feature(point)
+ vectorLayer.getSource().addFeature(feature)
+ this.map.addLayer(vectorLayer)
+ },
+ // 绘制连线
+ drawLineString(point) {
+ this.linePoints.push(point)
+ let featureLine = new Feature({
+ geometry: new GeomLineString(this.linePoints),
+ })
+
+ // 添加线的样式
+ let lineStyle = new Style({
+ fill: new StyleFill({
+ color: 'rgba(1, 210, 241, 0.1)'
+ }),
+ stroke: new StyleStroke({
+ color: 'rgba(255, 0, 0)',
+ width: 4,
+ }),
+ })
+ featureLine.setStyle(lineStyle)
+
+ let source = new VectorSource()
+ source.addFeature(featureLine)
+ let layer = new VectorLayer()
+ layer.setSource(source)
+ this.map.addLayer(layer)
+ },
+ // 绘制区域圆形
+ drawCircle(center) {
+ let vectorLayer = this.getLayer()
+
+ // 设置半径
+ let circle = new GeomCircle(center, 0.003)// 新建圆对象
+ let feature = new Feature(circle)// 新建Feature对象 并将circle传入
+ vectorLayer.getSource().addFeature(feature)// 将Feature对象填入图层源
+ this.map.addLayer(vectorLayer) // 将图层添至地图对象
+ },
+ // 画多边形
+ drawPolygon(point) {
+ this.polygonPoints.push(point)
+ let feature = new Feature({
+ geometry: new GeomPolygon([this.polygonPoints]),
+ attributes: null
+ })
+ // 添加线的样式
+ let lineStyle = new Style({
+ fill: new StyleFill({
+ color: 'rgba(1, 210, 241, 0.1)'
+ }),
+ stroke: new StyleStroke({
+ color: 'rgba(255, 0, 0)',
+ width: 4,
+ }),
+ })
+ feature.setStyle(lineStyle)
+ let source = new VectorSource()
+ source.addFeature(feature)
+ let vectorLayer = new VectorLayer({
+ source: source
+ })
+ this.map.addLayer(vectorLayer)
+ },
+ // 设置聚合点
+ addMarker() {
+ let source = new VectorSource()
+ // 随机创建200个要素,后台点位取出后按此格式处理
+ for (let i = 1; i <= 200; i++) {
+ let coordinates = [115.90 + Math.random() * 0.05, 28.64 + Math.random() * 0.05]
+ let feature = new Feature(new GeomPoint(coordinates))
+ source.addFeature(feature)
+ }
+
+ // 聚合
+ let clusterSource = new Cluster({
+ source: source,
+ distance: 50
+ })
+
+ let clusters = new VectorLayer({
+ source: clusterSource,
+ style: function (feature) {
+ let size = feature.get('features').length
+ let style = new Style({
+ image: new StyleCircle({
+ radius: 20,
+ stroke: new StyleStroke({
+ color: 'white'
+ }),
+ fill: new StyleFill({
+ color: '#AAD3DF'
+ })
+ }),
+ text: new StyleText({
+ text: size.toString(),
+ fill: new StyleFill({
+ color: 'black'
+ })
+ })
+ })
+ return style
+ }
+ })
+
+ this.map.addLayer(clusters)
+ },
+ // 重置图层
+ clearDraw() {
+ let _this = this
+ _this.coordinates = []
+ _this.map.removeInteraction(_this.draw)
+ _this.pointVector.getSource().clear()
+
+ // 传值给父组件
+ _this.$emit('toData', "")
+ },
+ // 获取新的 layer 图层对象
+ getLayer() {
+ return new VectorLayer({
+ source: new VectorSource({
+ features: ''
+ }),
+ // 设置样式,但不完全兼容
+ // style: function (feature) {
+ // let style = new Style({
+ // stroke: new StyleStroke({
+ // color: '#E80000',
+ // width: 2
+ // }),
+ // fill: new StyleFill({
+ // color: 'rgba(0,0,0,0)'
+ // })
+ // })
+ // return style
+ // }
+ })
+ },
+
+ startAdd(routeRange) {
+ if (routeRange.startsWith("POINT")) {
+ this.addPoint(routeRange)
+ }
+ },
+
+ setView(point){
+ let view = this.map.getView()
+ let center = [point.lng,point.lat]
+ view.setZoom(20)
+ view.animate({
+ center: center,
+ duration: 5,
+ })
+ }
+ },
+ mounted() {
+ this.createMap()
+ }
+}
+</script>
+
+<style scoped>
+
+</style>
diff --git a/src/main.js b/src/main.js
index 99e08a1..e6dd761 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,90 +1,102 @@
-import Vue from 'vue';
-import axios from './router/axios';
-import VueAxios from 'vue-axios';
-import App from './App';
-import router from './router/router';
-import './permission'; // 权限
-import './error'; // 日志
-import './cache';//页面缓存
-import store from './store';
+/*
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-02-06 10:34:02
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2023-02-07 10:39:07
+ * @FilePath: \srs-police-web\src\main.js
+ * @Description:
+ *
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
+ */
+import Vue from 'vue'
+import axios from './router/axios'
+import VueAxios from 'vue-axios'
+import App from './App'
+import router from './router/router'
+import './permission' // 权限
+import './error' // 日志
+import './cache'//页面缓存
+import store from './store'
import { loadStyle } from './util/util'
-import * as urls from '@/config/env';
-import Element from 'element-ui';
+import * as urls from '@/config/env'
+import Element from 'element-ui'
import {
- iconfontUrl,
- iconfontVersion
-} from '@/config/env';
-import i18n from './lang'; // Internationalization
-import './styles/common.scss';
-import basicBlock from './components/basic-block/main';
-import basicContainer from './components/basic-container/main';
-import thirdRegister from './components/third-register/main';
-import flowDesign from './components/flow-design/main';
-import avueUeditor from 'avue-plugin-ueditor';
-import website from '@/config/website';
-import crudCommon from '@/mixins/crud';
+ iconfontUrl,
+ iconfontVersion
+} from '@/config/env'
+import i18n from './lang' // Internationalization
+import './styles/common.scss'
+import basicBlock from './components/basic-block/main'
+import basicContainer from './components/basic-container/main'
+import thirdRegister from './components/third-register/main'
+import flowDesign from './components/flow-design/main'
+import avueUeditor from 'avue-plugin-ueditor'
+import website from '@/config/website'
+import crudCommon from '@/mixins/crud'
// 业务组件
-import tenantPackage from './views/system/tenantpackage';
+import tenantPackage from './views/system/tenantpackage'
+import * as echarts from 'echarts'
+Vue.prototype.$echarts = echarts
+import DC from '@dvgis/dc-sdk/dist/dc.base.min' //基础包
+import DcCore from '@dvgis/dc-sdk/dist/dc.core.min' //核心包
+import DcChart from '@dvgis/dc-sdk/dist/dc.chart.min' //chart包
+import DcMapv from '@dvgis/dc-sdk/dist/dc.mapv.min' //mapv包
+import DcS3M from '@dvgis/dc-sdk/dist/dc.s3m.min' //s3m包
+import '@dvgis/dc-sdk/dist/dc.core.min.css' // 主要样式
+
+global.DC = DC // 将DC提升到全局变量,方便在工程中直接使用
+global.viewer = null // 将viewer提升到全局变量,方便在工程中直接使用
+global.searchViewer = null // 将viewer提升到全局变量,方便在工程中直接使用
+
+global.echarts = echarts // 将DC提升到全局变量,方便在工程中直接使用
+
+DC.use(DcCore) // 安装DC核心库
+DC.use(DcChart) // 安装DC图标库,使用前确保echarts为全局函数
+DC.use(DcMapv) // 安装Mapv库
+DC.use(DcS3M) // 安装DcS3M库
// 注册全局crud驱动
-window.$crudCommon = crudCommon;
+window.$crudCommon = crudCommon
// 加载Vue拓展
-Vue.use(router);
-Vue.use(VueAxios, axios);
+Vue.use(router)
+Vue.use(VueAxios, axios)
Vue.use(Element, {
- i18n: (key, value) => i18n.t(key, value)
-});
+ i18n: (key, value) => i18n.t(key, value)
+})
Vue.use(window.AVUE, {
- size: 'small',
- tableSize: 'small',
- calcHeight: 65,
- i18n: (key, value) => i18n.t(key, value)
-});
+ size: 'small',
+ tableSize: 'small',
+ calcHeight: 65,
+ i18n: (key, value) => i18n.t(key, value)
+})
// 注册全局容器
-Vue.component('basicContainer', basicContainer);
-Vue.component('basicBlock', basicBlock);
-Vue.component('thirdRegister', thirdRegister);
-Vue.component('avueUeditor', avueUeditor);
-Vue.component('flowDesign', flowDesign);
-Vue.component('tenantPackage', tenantPackage);
+Vue.component('basicContainer', basicContainer)
+Vue.component('basicBlock', basicBlock)
+Vue.component('thirdRegister', thirdRegister)
+Vue.component('avueUeditor', avueUeditor)
+Vue.component('flowDesign', flowDesign)
+Vue.component('tenantPackage', tenantPackage)
// 加载相关url地址
Object.keys(urls).forEach(key => {
- Vue.prototype[key] = urls[key];
-});
+ Vue.prototype[key] = urls[key]
+})
// 加载NutFlow
-Vue.use(window.WfDesignBase);
+Vue.use(window.WfDesignBase)
// 加载website
-Vue.prototype.website = website;
+Vue.prototype.website = website
// 动态加载阿里云字体库
iconfontVersion.forEach(ele => {
- loadStyle(iconfontUrl.replace('$key', ele));
-});
+ loadStyle(iconfontUrl.replace('$key', ele))
+})
-Vue.config.productionTip = false;
-
-//import Cookies from 'js-cookie'
-// 携带token跳转页面设置
-
-//const tokenLength = window.location.href.indexOf('=');
-//if(tokenLength>0){
-// //取“=”之后的token
- // let z = window.location.href.substring(tokenLength + 1)
- // // 把token存进B系统
- // let obj = {
- // dataType: typeof (z),
- // content: z,
- // datetime: new Date().getTime()
- // }
- // window.localStorage.setItem('saber-token', JSON.stringify(obj));
- // Cookies.set('saber-access-token', z)
-//}
+Vue.config.productionTip = false
new Vue({
- router,
- store,
- i18n,
- render: h => h(App)
-}).$mount('#app');
+ router,
+ store,
+ i18n,
+ render: h => h(App)
+}).$mount('#app')
diff --git a/src/option/user/info.js b/src/option/user/info.js
index d2fcbe0..2aba446 100644
--- a/src/option/user/info.js
+++ b/src/option/user/info.js
@@ -5,24 +5,26 @@
{
label: '个人信息',
prop: 'info',
- column: [{
- label: '头像',
- type: 'upload',
- listType: 'picture-img',
- propsHttp: {
- res: 'data',
- url: 'link',
- },
- canvasOption: {
- text: ' ',
- ratio: 0.1
- },
- action: '/api/blade-resource/oss/endpoint/put-file',
- tip: '只能上传jpg/png用户头像,且不超过500kb',
- span: 12,
- row: true,
- prop: 'avatar'
- }, {
+ column: [
+ // {
+ // label: '头像',
+ // type: 'upload',
+ // listType: 'picture-img',
+ // propsHttp: {
+ // res: 'data',
+ // url: 'link',
+ // },
+ // canvasOption: {
+ // text: ' ',
+ // ratio: 0.1
+ // },
+ // action: '/api/blade-resource/oss/endpoint/put-file',
+ // tip: '只能上传jpg/png用户头像,且不超过500kb',
+ // span: 12,
+ // row: true,
+ // prop: 'avatar'
+ // },
+ {
label: '姓名',
span: 12,
row: true,
diff --git a/src/page/index/top/index.vue b/src/page/index/top/index.vue
index 0f95e84..22b943a 100644
--- a/src/page/index/top/index.vue
+++ b/src/page/index/top/index.vue
@@ -83,7 +83,7 @@
</div>
</el-tooltip>
<img class="top-bar__img"
- :src="userInfo.avatar">
+ src="/icon.png">
<el-dropdown>
<span class="el-dropdown-link">
{{userInfo.userName}}
diff --git a/src/page/login/userlogin.vue b/src/page/login/userlogin.vue
index a70c2c6..bd76685 100644
--- a/src/page/login/userlogin.vue
+++ b/src/page/login/userlogin.vue
@@ -88,9 +88,9 @@
//角色ID
roleId: "",
//用户名
- username: "admin",
+ username: "",
//密码
- password: "admin",
+ password: "",
//账号类型
type: "account",
//验证码的值
diff --git a/src/permission.js b/src/permission.js
index ebf9bcf..11aebbf 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -2,9 +2,9 @@
* 全站权限配置
*
*/
-import md5 from 'js-md5'
-import request from '@/router/axios';
-import { Message } from 'element-ui'
+// import md5 from 'js-md5'
+// import request from '@/router/axios'
+// import { Message } from 'element-ui'
import router from './router/router'
import store from './store'
@@ -12,144 +12,150 @@
import { getToken } from '@/util/auth'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style
-NProgress.configure({ showSpinner: false });
-const lockPage = store.getters.website.lockPage; //锁屏页
+NProgress.configure({ showSpinner: false })
+const lockPage = store.getters.website.lockPage //锁屏页
router.beforeEach((to, from, next) => {
- var tag = false;
- // if (to.fullPath.indexOf("token") > 0) {
- // tag = true;
- // }
- const meta = to.meta || {};
- const isMenu = meta.menu === undefined ? to.query.menu : meta.menu;
- store.commit('SET_IS_MENU', isMenu === undefined);
- if (getToken()) {
- if (store.getters.isLock && to.path !== lockPage) { //如果系统激活锁屏,全部跳转到锁屏页
- next({ path: lockPage })
- } else if (to.path === '/login') { //如果登录成功访问登录页跳转到主页
- next({ path: '/' })
- } else {
- //如果用户信息为空则获取用户信息,获取用户信息失败,跳转到登录页
- // if (store.getters.token.length === 0 && tag==false) {
- if (store.getters.token.length === 0) {
- store.dispatch('FedLogOut').then(() => {
- next({ path: '/login' })
- })
- } else {
- const value = to.query.src || to.fullPath;
- const label = to.query.name || to.name;
- const meta = to.meta || router.$avueRouter.meta || {};
- const i18n = to.query.i18n;
- if (to.query.target) {
- window.open(value)
- } else if (meta.isTab !== false && !validatenull(value) && !validatenull(label)) {
- // } else if (meta.isTab !== false && !validatenull(value) && !validatenull(label) && tag==false) {
- store.commit('ADD_TAG', {
- label: label,
- value: value,
- params: to.params,
- query: to.query,
- meta: (() => {
- if (!i18n) {
- return meta
- }
- return {
- i18n: i18n
- }
- })(),
- group: router.$avueRouter.group || []
- });
- }
- next()
- }
+ let hrefIdx = window.location.href.indexOf('token=') // url中是否携带token
+
+ var tag = false
+ if (to.fullPath.indexOf("token") > 0) {
+ tag = true
}
- } else {
- //判断是否需要认证,没有登录访问去登录页
- if (meta.isAuth === false) {
- next()
- } else {
- console.log(to.path,66666)
- if (to.path == '/security/security') {
- // console.log('进入首页-----')
- var a = to.query.securitySupervisionSystem;
- if (a == undefined || typeof a != "string") {
- // console.log("无securitySupervisionSystem参数 跳回登入");
- next('/login');
- next('/login');
- return;
- }
- // console.log("有securitySupervisionSystem参数");
- try {
- // console.log("判断securitySupervisionSystem是否能被JSOn解码");
- var obj = JSON.parse(a);
- if (typeof obj == "object" && obj && obj.tokenMY == '987654321S') {
- debugger
- var data = {
- tenantId: obj.data.dip,
- username: obj.data.rese,
- password: md5(obj.data.sap),
- grant_type: 'password',
- scope: 'all',
- type: 'account'
- };
- request({
- url: '/api/blade-auth/oauth/token',
- method: 'post',
- headers: {
- 'Authorization': 'Basic c2FiZXI6c2FiZXJfc2VjcmV0',
- "Tenant-Id": "000000"
- },
- params: data
- }).then(res => {
- const data = res.data;
- if (data.error_description) {
- // console.log("登入失败");
- Message({
- message: data.error_description,
- type: 'error'
+ const meta = to.meta || {}
+ const isMenu = meta.menu === undefined ? to.query.menu : meta.menu
+ store.commit('SET_IS_MENU', isMenu === undefined)
+
+ if (hrefIdx > -1) {
+ let token = window.location.href.slice(hrefIdx + 6)
+ store.commit('SET_TOKEN', token)
+ }
+
+ if (getToken()) {
+ if (store.getters.isLock && to.path !== lockPage) { //如果系统激活锁屏,全部跳转到锁屏页
+ next({ path: lockPage })
+ } else if (to.path === '/login') { //如果登录成功访问登录页跳转到主页
+ next({ path: '/' })
+ } else {
+ //如果用户信息为空则获取用户信息,获取用户信息失败,跳转到登录页
+ if (store.getters.token.length === 0 && tag == false) {
+ // if (store.getters.token.length === 0) {
+ store.dispatch('FedLogOut').then(() => {
+ next({ path: '/login' })
})
- next('/login');
- next('/login');
- return;
- } else {
- // console.log("登入成功");
- store.commit('SET_TOKEN', data.access_token);
- store.commit('SET_REFRESH_TOKEN', data.refresh_token);
- store.commit('SET_TENANT_ID', data.tenant_id);
- store.commit('SET_USER_INFO', data);
- store.commit('DEL_ALL_TAG');
- store.commit('CLEAR_LOCK');
- next(to.path);
- return;
- }
- })
- return;
- } else {
- // console.log("成功解码 不是对象");
- next('/login');
- next('/login');
- return;
- }
- } catch {
- // console.log('不是Json对象 跳回登入');
- next('/login');
- next('/login');
- return;
+ } else {
+ const value = to.query.src || to.fullPath
+ const label = to.query.name || to.name
+ const meta = to.meta || router.$avueRouter.meta || {}
+ const i18n = to.query.i18n
+ if (to.query.target) {
+ window.open(value)
+ // } else if (meta.isTab !== false && !validatenull(value) && !validatenull(label)) {
+ } else if (meta.isTab !== false && !validatenull(value) && !validatenull(label) && tag == false) {
+ store.commit('ADD_TAG', {
+ label: label,
+ value: value,
+ params: to.params,
+ query: to.query,
+ meta: (() => {
+ if (!i18n) {
+ return meta
+ }
+ return {
+ i18n: i18n
+ }
+ })(),
+ group: router.$avueRouter.group || []
+ })
+ }
+ next()
+ }
}
- }
- next('/login')
+ } else {
+ //判断是否需要认证,没有登录访问去登录页
+ if (meta.isAuth === false) {
+ next()
+ } else {
+ // console.log(to.path, 66666)
+ // if (to.path == '/security/security') {
+ // // console.log('进入首页-----')
+ // var a = to.query.securitySupervisionSystem
+ // if (a == undefined || typeof a != "string") {
+ // // console.log("无securitySupervisionSystem参数 跳回登入");
+ // next('/login')
+ // next('/login')
+ // return
+ // }
+ // // console.log("有securitySupervisionSystem参数");
+ // try {
+ // // console.log("判断securitySupervisionSystem是否能被JSOn解码");
+ // var obj = JSON.parse(a)
+ // if (typeof obj == "object" && obj && obj.tokenMY == '987654321S') {
+ // debugger
+ // var data = {
+ // tenantId: obj.data.dip,
+ // username: obj.data.rese,
+ // password: md5(obj.data.sap),
+ // grant_type: 'password',
+ // scope: 'all',
+ // type: 'account'
+ // }
+ // request({
+ // url: '/api/blade-auth/oauth/token',
+ // method: 'post',
+ // headers: {
+ // 'Authorization': 'Basic c2FiZXI6c2FiZXJfc2VjcmV0',
+ // "Tenant-Id": "000000"
+ // },
+ // params: data
+ // }).then(res => {
+ // const data = res.data
+ // if (data.error_description) {
+ // // console.log("登入失败");
+ // Message({
+ // message: data.error_description,
+ // type: 'error'
+ // })
+ // next('/login')
+ // next('/login')
+ // return
+ // } else {
+ // // console.log("登入成功");
+ // store.commit('SET_TOKEN', data.access_token)
+ // store.commit('SET_REFRESH_TOKEN', data.refresh_token)
+ // store.commit('SET_TENANT_ID', data.tenant_id)
+ // store.commit('SET_USER_INFO', data)
+ // store.commit('DEL_ALL_TAG')
+ // store.commit('CLEAR_LOCK')
+ // next(to.path)
+ // return
+ // }
+ // })
+ // return
+ // } else {
+ // // console.log("成功解码 不是对象");
+ // next('/login')
+ // return
+ // }
+ // } catch {
+ // // console.log('不是Json对象 跳回登入');
+ // next('/login')
+ // return
+ // }
+ // }
+ next('/login')
+ }
}
- }
})
router.afterEach(() => {
- NProgress.done();
- let title = store.getters.tag.label;
- let i18n = store.getters.tag.meta.i18n;
- title = router.$avueRouter.generateTitle(title, i18n);
- //判断登录页的情况
- if (router.history.current.fullPath === "/login") {
- title = "登录";
- }
- //根据当前的标签也获取label的值动态设置浏览器标题
- router.$avueRouter.setTitle(title);
-});
+ NProgress.done()
+ let title = store.getters.tag.label
+ let i18n = store.getters.tag.meta.i18n
+ title = router.$avueRouter.generateTitle(title, i18n)
+ //判断登录页的情况
+ if (router.history.current.fullPath === "/login") {
+ title = "登录"
+ }
+ //根据当前的标签也获取label的值动态设置浏览器标题
+ router.$avueRouter.setTitle(title)
+})
diff --git a/src/store/modules/user.js b/src/store/modules/user.js
index f92f525..5f8c871 100644
--- a/src/store/modules/user.js
+++ b/src/store/modules/user.js
@@ -1,301 +1,301 @@
-import {setToken, setRefreshToken, removeToken, removeRefreshToken} from '@/util/auth'
-import {Message} from 'element-ui'
-import {setStore, getStore} from '@/util/store'
-import {isURL, validatenull} from '@/util/validate'
-import {deepClone} from '@/util/util'
+import { setToken, setRefreshToken, removeToken, removeRefreshToken } from '@/util/auth'
+import { Message } from 'element-ui'
+import { setStore, getStore } from '@/util/store'
+import { isURL, validatenull } from '@/util/validate'
+import { deepClone } from '@/util/util'
import website from '@/config/website'
-import {loginByUsername, loginBySocial, loginBySso, getUserInfo, logout, refreshToken, getButtons} from '@/api/user'
-import {getTopMenu, getRoutes} from '@/api/system/menu'
+import { loginByUsername, loginBySocial, loginBySso, getUserInfo, logout, refreshToken, getButtons } from '@/api/user'
+import { getTopMenu, getRoutes } from '@/api/system/menu'
import md5 from 'js-md5'
-function addPath(ele, first) {
- const menu = website.menu;
- const propsConfig = menu.props;
- const propsDefault = {
- label: propsConfig.label || 'name',
- path: propsConfig.path || 'path',
- icon: propsConfig.icon || 'icon',
- children: propsConfig.children || 'children'
- }
- const icon = ele[propsDefault.icon];
- ele[propsDefault.icon] = validatenull(icon) ? menu.iconDefault : icon;
- const isChild = ele[propsDefault.children] && ele[propsDefault.children].length !== 0;
- if (!isChild) ele[propsDefault.children] = [];
- if (!isChild && first && !isURL(ele[propsDefault.path])) {
- ele[propsDefault.path] = ele[propsDefault.path] + '/index'
- } else {
- ele[propsDefault.children].forEach(child => {
- addPath(child);
- })
- }
+function addPath (ele, first) {
+ const menu = website.menu
+ const propsConfig = menu.props
+ const propsDefault = {
+ label: propsConfig.label || 'name',
+ path: propsConfig.path || 'path',
+ icon: propsConfig.icon || 'icon',
+ children: propsConfig.children || 'children'
+ }
+ const icon = ele[propsDefault.icon]
+ ele[propsDefault.icon] = validatenull(icon) ? menu.iconDefault : icon
+ const isChild = ele[propsDefault.children] && ele[propsDefault.children].length !== 0
+ if (!isChild) ele[propsDefault.children] = []
+ if (!isChild && first && !isURL(ele[propsDefault.path])) {
+ ele[propsDefault.path] = ele[propsDefault.path] + '/index'
+ } else {
+ ele[propsDefault.children].forEach(child => {
+ addPath(child)
+ })
+ }
}
const user = {
- state: {
- tenantId: getStore({name: 'tenantId'}) || '',
- userInfo: getStore({name: 'userInfo'}) || [],
- permission: getStore({name: 'permission'}) || {},
- roles: [],
- menuId: {},
- menu: getStore({name: 'menu'}) || [],
- menuAll: getStore({name: 'menuAll'}) || [],
- token: getStore({name: 'token'}) || '',
- refreshToken: getStore({name: 'refreshToken'}) || '',
- },
- actions: {
- //根据用户名登录
- LoginByUsername({commit}, userInfo) {
- return new Promise((resolve, reject) => {
- loginByUsername(userInfo.tenantId, userInfo.deptId, userInfo.roleId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key, userInfo.code).then(res => {
- const data = res.data;
- if (data.error_description) {
- Message({
- message: data.error_description,
- type: 'error'
+ state: {
+ tenantId: getStore({ name: 'tenantId' }) || '',
+ userInfo: getStore({ name: 'userInfo' }) || [],
+ permission: getStore({ name: 'permission' }) || {},
+ roles: [],
+ menuId: {},
+ menu: getStore({ name: 'menu' }) || [],
+ menuAll: getStore({ name: 'menuAll' }) || [],
+ token: getStore({ name: 'token' }) || '',
+ refreshToken: getStore({ name: 'refreshToken' }) || '',
+ },
+ actions: {
+ //根据用户名登录
+ LoginByUsername ({ commit }, userInfo) {
+ return new Promise((resolve, reject) => {
+ loginByUsername(userInfo.tenantId, userInfo.deptId, userInfo.roleId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key, userInfo.code).then(res => {
+ const data = res.data
+ if (data.error_description) {
+ Message({
+ message: data.error_description,
+ type: 'error'
+ })
+ } else {
+ commit('SET_TOKEN', data.access_token)
+ commit('SET_REFRESH_TOKEN', data.refresh_token)
+ commit('SET_TENANT_ID', data.tenant_id)
+ commit('SET_USER_INFO', data)
+ commit('DEL_ALL_TAG')
+ commit('CLEAR_LOCK')
+ }
+ resolve()
+ }).catch(error => {
+ reject(error)
+ })
})
- } else {
- commit('SET_TOKEN', data.access_token);
- commit('SET_REFRESH_TOKEN', data.refresh_token);
- commit('SET_TENANT_ID', data.tenant_id);
- commit('SET_USER_INFO', data);
- commit('DEL_ALL_TAG');
- commit('CLEAR_LOCK');
- }
- resolve();
- }).catch(error => {
- reject(error);
- })
- })
- },
- //根据手机号登录
- LoginByPhone({commit}, userInfo) {
- return new Promise((resolve) => {
- loginByUsername(userInfo.phone, userInfo.code).then(res => {
- const data = res.data.data;
- commit('SET_TOKEN', data);
- commit('DEL_ALL_TAG');
- commit('CLEAR_LOCK');
- resolve();
- })
- })
- },
- //根据第三方信息登录
- LoginBySocial({commit}, userInfo) {
- return new Promise((resolve) => {
- loginBySocial(userInfo.tenantId, userInfo.source, userInfo.code, userInfo.state).then(res => {
- const data = res.data;
- if (data.error_description) {
- Message({
- message: data.error_description,
- type: 'error'
+ },
+ //根据手机号登录
+ LoginByPhone ({ commit }, userInfo) {
+ return new Promise((resolve) => {
+ loginByUsername(userInfo.phone, userInfo.code).then(res => {
+ const data = res.data.data
+ commit('SET_TOKEN', data)
+ commit('DEL_ALL_TAG')
+ commit('CLEAR_LOCK')
+ resolve()
+ })
})
- } else {
- commit('SET_TOKEN', data.access_token);
- commit('SET_REFRESH_TOKEN', data.refresh_token);
- commit('SET_USER_INFO', data);
- commit('SET_TENANT_ID', data.tenant_id);
- commit('DEL_ALL_TAG');
- commit('CLEAR_LOCK');
- }
- resolve();
- })
- })
- },
- //根据单点信息登录
- LoginBySso({commit}, userInfo) {
- return new Promise((resolve) => {
- loginBySso(userInfo.state, userInfo.code).then(res => {
- const data = res.data;
- if (data.error_description) {
- Message({
- message: data.error_description,
- type: 'error'
+ },
+ //根据第三方信息登录
+ LoginBySocial ({ commit }, userInfo) {
+ return new Promise((resolve) => {
+ loginBySocial(userInfo.tenantId, userInfo.source, userInfo.code, userInfo.state).then(res => {
+ const data = res.data
+ if (data.error_description) {
+ Message({
+ message: data.error_description,
+ type: 'error'
+ })
+ } else {
+ commit('SET_TOKEN', data.access_token)
+ commit('SET_REFRESH_TOKEN', data.refresh_token)
+ commit('SET_USER_INFO', data)
+ commit('SET_TENANT_ID', data.tenant_id)
+ commit('DEL_ALL_TAG')
+ commit('CLEAR_LOCK')
+ }
+ resolve()
+ })
})
- } else {
- commit('SET_TOKEN', data.access_token);
- commit('SET_REFRESH_TOKEN', data.refresh_token);
- commit('SET_USER_INFO', data);
- commit('SET_TENANT_ID', data.tenant_id);
- commit('DEL_ALL_TAG');
- commit('CLEAR_LOCK');
- }
- resolve();
- })
- })
+ },
+ //根据单点信息登录
+ LoginBySso ({ commit }, userInfo) {
+ return new Promise((resolve) => {
+ loginBySso(userInfo.state, userInfo.code).then(res => {
+ const data = res.data
+ if (data.error_description) {
+ Message({
+ message: data.error_description,
+ type: 'error'
+ })
+ } else {
+ commit('SET_TOKEN', data.access_token)
+ commit('SET_REFRESH_TOKEN', data.refresh_token)
+ commit('SET_USER_INFO', data)
+ commit('SET_TENANT_ID', data.tenant_id)
+ commit('DEL_ALL_TAG')
+ commit('CLEAR_LOCK')
+ }
+ resolve()
+ })
+ })
+ },
+ //获取用户信息
+ GetUserInfo ({ commit }) {
+ return new Promise((resolve, reject) => {
+ getUserInfo().then((res) => {
+ const data = res.data.data
+ commit('SET_ROLES', data.roles)
+ resolve(data)
+ }).catch(err => {
+ reject(err)
+ })
+ })
+ },
+ //刷新token
+ refreshToken ({ state, commit }, userInfo) {
+ window.console.log('handle refresh token')
+ return new Promise((resolve, reject) => {
+ refreshToken(state.refreshToken, state.tenantId,
+ !validatenull(userInfo) ? userInfo.deptId : state.userInfo.dept_id,
+ !validatenull(userInfo) ? userInfo.roleId : state.userInfo.role_id
+ ).then(res => {
+ const data = res.data
+ commit('SET_TOKEN', data.access_token)
+ commit('SET_REFRESH_TOKEN', data.refresh_token)
+ commit('SET_USER_INFO', data)
+ resolve()
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ },
+ // 登出
+ LogOut ({ commit }) {
+ return new Promise((resolve, reject) => {
+ logout().then(() => {
+ commit('SET_TOKEN', '')
+ commit('SET_MENU', [])
+ commit('SET_MENU_ALL_NULL', [])
+ commit('SET_ROLES', [])
+ commit('SET_TAG_LIST', [])
+ commit('DEL_ALL_TAG')
+ commit('CLEAR_LOCK')
+ removeToken()
+ removeRefreshToken()
+ resolve()
+ }).catch(error => {
+ reject(error)
+ })
+ })
+ },
+ //注销session
+ FedLogOut ({ commit }) {
+ return new Promise(resolve => {
+ commit('SET_TOKEN', '')
+ commit('SET_MENU_ALL_NULL', [])
+ commit('SET_MENU', [])
+ commit('SET_ROLES', [])
+ commit('SET_TAG_LIST', [])
+ commit('DEL_ALL_TAG')
+ commit('CLEAR_LOCK')
+ removeToken()
+ removeRefreshToken()
+ resolve()
+ })
+ },
+ //获取顶部菜单
+ GetTopMenu () {
+ return new Promise(resolve => {
+ getTopMenu().then((res) => {
+ const data = res.data.data || []
+ resolve(data)
+ })
+ })
+ },
+ //获取系统菜单
+ GetMenu ({ commit, dispatch }, topMenuId) {
+ return new Promise(resolve => {
+ getRoutes(topMenuId).then((res) => {
+ const data = res.data.data
+ let menu = deepClone(data)
+ menu.forEach(ele => {
+ addPath(ele, true)
+ })
+ commit('SET_MENU_ALL', menu)
+ commit('SET_MENU', menu)
+ dispatch('GetButtons')
+ resolve(menu)
+ })
+ })
+ },
+ //获取系统按钮
+ GetButtons ({ commit }) {
+ return new Promise((resolve) => {
+ getButtons().then(res => {
+ const data = res.data.data
+ commit('SET_PERMISSION', data)
+ resolve()
+ })
+ })
+ },
},
- //获取用户信息
- GetUserInfo({commit}) {
- return new Promise((resolve, reject) => {
- getUserInfo().then((res) => {
- const data = res.data.data;
- commit('SET_ROLES', data.roles);
- resolve(data);
- }).catch(err => {
- reject(err);
- })
- })
- },
- //刷新token
- refreshToken({state, commit}, userInfo) {
- window.console.log('handle refresh token');
- return new Promise((resolve, reject) => {
- refreshToken(state.refreshToken, state.tenantId,
- !validatenull(userInfo) ? userInfo.deptId : state.userInfo.dept_id,
- !validatenull(userInfo) ? userInfo.roleId : state.userInfo.role_id
- ).then(res => {
- const data = res.data;
- commit('SET_TOKEN', data.access_token);
- commit('SET_REFRESH_TOKEN', data.refresh_token);
- commit('SET_USER_INFO', data);
- resolve();
- }).catch(error => {
- reject(error)
- })
- })
- },
- // 登出
- LogOut({commit}) {
- return new Promise((resolve, reject) => {
- logout().then(() => {
- commit('SET_TOKEN', '');
- commit('SET_MENU', []);
- commit('SET_MENU_ALL_NULL', []);
- commit('SET_ROLES', []);
- commit('SET_TAG_LIST', []);
- commit('DEL_ALL_TAG');
- commit('CLEAR_LOCK');
- removeToken();
- removeRefreshToken();
- resolve();
- }).catch(error => {
- reject(error)
- })
- })
- },
- //注销session
- FedLogOut({commit}) {
- return new Promise(resolve => {
- commit('SET_TOKEN', '');
- commit('SET_MENU_ALL_NULL', []);
- commit('SET_MENU', []);
- commit('SET_ROLES', []);
- commit('SET_TAG_LIST', []);
- commit('DEL_ALL_TAG');
- commit('CLEAR_LOCK');
- removeToken();
- removeRefreshToken();
- resolve();
- })
- },
- //获取顶部菜单
- GetTopMenu() {
- return new Promise(resolve => {
- getTopMenu().then((res) => {
- const data = res.data.data || [];
- resolve(data)
- })
- })
- },
- //获取系统菜单
- GetMenu({commit, dispatch}, topMenuId) {
- return new Promise(resolve => {
- getRoutes(topMenuId).then((res) => {
- const data = res.data.data
- let menu = deepClone(data);
- menu.forEach(ele => {
- addPath(ele, true);
- });
- commit('SET_MENU_ALL', menu)
- commit('SET_MENU', menu)
- dispatch('GetButtons');
- resolve(menu)
- })
- })
- },
- //获取系统按钮
- GetButtons({commit}) {
- return new Promise((resolve) => {
- getButtons().then(res => {
- const data = res.data.data;
- commit('SET_PERMISSION', data);
- resolve();
- })
- })
- },
- },
- mutations: {
- SET_TOKEN: (state, token) => {
- setToken(token);
- state.token = token;
- setStore({name: 'token', content: state.token})
- },
- SET_MENU_ID(state, menuId) {
- state.menuId = menuId;
- },
- SET_MENU_ALL: (state, menuAll) => {
- let menu = state.menuAll;
- menuAll.forEach(ele => {
- if (!menu.find(item => item.label === ele.label && item.path === ele.path)) {
- menu.push(ele);
- }
- })
- state.menuAll = menu
- setStore({ name: 'menuAll', content: state.menuAll })
- },
- SET_MENU_ALL_NULL: (state) => {
- state.menuAll = []
- setStore({ name: 'menuAll', content: state.menuAll })
- },
- SET_MENU: (state, menu) => {
- state.menu = menu
- setStore({ name: 'menu', content: state.menu })
- },
- SET_REFRESH_TOKEN: (state, refreshToken) => {
- setRefreshToken(refreshToken)
- state.refreshToken = refreshToken;
- setStore({name: 'refreshToken', content: state.refreshToken})
- },
- SET_TENANT_ID: (state, tenantId) => {
- state.tenantId = tenantId;
- setStore({name: 'tenantId', content: state.tenantId})
- },
- SET_USER_INFO: (state, userInfo) => {
- if (validatenull(userInfo.avatar)) {
- userInfo.avatar = "/img/bg/img-logo.png";
- }
- state.userInfo = userInfo;
- setStore({name: 'userInfo', content: state.userInfo})
- },
- SET_ROLES: (state, roles) => {
- state.roles = roles;
- },
- SET_PERMISSION: (state, permission) => {
- let result = [];
-
- function getCode(list) {
- list.forEach(ele => {
- if (typeof (ele) === 'object') {
- const chiildren = ele.children;
- const code = ele.code;
- if (chiildren) {
- getCode(chiildren)
- } else {
- result.push(code);
+ mutations: {
+ SET_TOKEN: (state, token) => {
+ setToken(token)
+ state.token = token
+ setStore({ name: 'token', content: state.token })
+ },
+ SET_MENU_ID (state, menuId) {
+ state.menuId = menuId
+ },
+ SET_MENU_ALL: (state, menuAll) => {
+ let menu = state.menuAll
+ menuAll.forEach(ele => {
+ if (!menu.find(item => item.label === ele.label && item.path === ele.path)) {
+ menu.push(ele)
+ }
+ })
+ state.menuAll = menu
+ setStore({ name: 'menuAll', content: state.menuAll })
+ },
+ SET_MENU_ALL_NULL: (state) => {
+ state.menuAll = []
+ setStore({ name: 'menuAll', content: state.menuAll })
+ },
+ SET_MENU: (state, menu) => {
+ state.menu = menu
+ setStore({ name: 'menu', content: state.menu })
+ },
+ SET_REFRESH_TOKEN: (state, refreshToken) => {
+ setRefreshToken(refreshToken)
+ state.refreshToken = refreshToken
+ setStore({ name: 'refreshToken', content: state.refreshToken })
+ },
+ SET_TENANT_ID: (state, tenantId) => {
+ state.tenantId = tenantId
+ setStore({ name: 'tenantId', content: state.tenantId })
+ },
+ SET_USER_INFO: (state, userInfo) => {
+ if (validatenull(userInfo.avatar)) {
+ userInfo.avatar = "/img/bg/img-logo.png"
}
- }
- })
- }
+ state.userInfo = userInfo
+ setStore({ name: 'userInfo', content: state.userInfo })
+ },
+ SET_ROLES: (state, roles) => {
+ state.roles = roles
+ },
+ SET_PERMISSION: (state, permission) => {
+ let result = []
- getCode(permission);
- state.permission = {};
- result.forEach(ele => {
- state.permission[ele] = true;
- });
- setStore({name: 'permission', content: state.permission})
+ function getCode (list) {
+ list.forEach(ele => {
+ if (typeof (ele) === 'object') {
+ const chiildren = ele.children
+ const code = ele.code
+ if (chiildren) {
+ getCode(chiildren)
+ } else {
+ result.push(code)
+ }
+ }
+ })
+ }
+
+ getCode(permission)
+ state.permission = {}
+ result.forEach(ele => {
+ state.permission[ele] = true
+ })
+ setStore({ name: 'permission', content: state.permission })
+ }
}
- }
}
export default user
diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss
index 0c96efa..e711002 100644
--- a/src/styles/element-ui.scss
+++ b/src/styles/element-ui.scss
@@ -265,6 +265,7 @@
//多行输入
.el-textarea__inner {
background-color: $inputB1 !important;
+ color: #fff !important;
}
// 数字type input
diff --git a/src/util/store.js b/src/util/store.js
index 0c59fca..6388ec2 100644
--- a/src/util/store.js
+++ b/src/util/store.js
@@ -55,7 +55,6 @@
} else if (obj.dataType == 'object') {
content = obj.content;
}
- console.log(content,9999)
return content;
}
/**
diff --git a/src/views/community/community.vue b/src/views/community/community.vue
index 04c7d85..6b05c2d 100644
--- a/src/views/community/community.vue
+++ b/src/views/community/community.vue
@@ -18,7 +18,7 @@
@size-change="sizeChange"
@refresh-change="refreshChange"
@on-load="onLoad">
- <template slot="menuLeft">
+ <!-- <template slot="menuLeft">
<el-button
size="small"
icon="el-icon-delete"
@@ -26,7 +26,7 @@
v-if="permission.community_delete"
@click="handleDelete">删 除
</el-button>
- </template>
+ </template> -->
</avue-crud>
</basic-container>
</template>
@@ -56,7 +56,11 @@
border: true,
index: true,
viewBtn: true,
- selection: true,
+ addBtn: false,
+ editBtn: false,
+ delBtn: false,
+ // selection: true,
+ menu:false,
dialogClickModal: false,
column: [
{
@@ -208,7 +212,6 @@
},
methods: {
rowSave(row, done, loading) {
- console.log(row,22222)
add(row).then(() => {
this.onLoad(this.page);
this.$message({
@@ -222,7 +225,6 @@
});
},
rowUpdate(row, index, done, loading) {
- console.log(row,22222)
update(row).then(() => {
this.onLoad(this.page);
this.$message({
@@ -277,7 +279,7 @@
beforeOpen(done, type) {
if (["edit", "view"].includes(type)) {
getDetails(this.form.id).then(res => {
- this.form = res.data.data;
+ this.form = res.data.data;
});
}
done();
diff --git a/src/views/houseStatistic/houseStatistic.vue b/src/views/houseStatistic/houseStatistic.vue
new file mode 100644
index 0000000..c7eb356
--- /dev/null
+++ b/src/views/houseStatistic/houseStatistic.vue
@@ -0,0 +1,361 @@
+<template>
+ <basic-container>
+ <avue-crud :option="option"
+ :table-loading="loading"
+ :data="data"
+ :page.sync="page"
+ :permission="permissionList"
+ :before-open="beforeOpen"
+ v-model="form"
+ ref="crud"
+ @row-update="rowUpdate"
+ @row-save="rowSave"
+ @row-del="rowDel"
+ @search-change="searchChange"
+ @search-reset="searchReset"
+ @selection-change="selectionChange"
+ @current-change="currentChange"
+ @size-change="sizeChange"
+ @refresh-change="refreshChange"
+ @on-load="onLoad">
+ <template slot="menuLeft">
+ <el-button type="success"
+ size="small"
+ plain
+ icon="el-icon-upload2"
+ @click="handleImport">导入
+ </el-button>
+ <el-button type="danger"
+ size="small"
+ icon="el-icon-delete"
+ plain
+ v-if="permission.houseStatistic_delete"
+ @click="handleDelete">删 除
+ </el-button>
+ </template>
+ </avue-crud>
+ <el-dialog title="房屋数据导入"
+ append-to-body
+ :visible.sync="excelBox"
+ width="555px">
+ <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
+ <template slot="excelTemplate">
+ <el-button type="primary" @click="handleTemplate">
+ 点击下载<i class="el-icon-download el-icon--right"></i>
+ </el-button>
+ </template>
+ </avue-form>
+ </el-dialog>
+ </basic-container>
+</template>
+
+<script>
+ import {getList, getDetail, add, update, remove} from "@/api/houseStatistic/houseStatistic";
+ import {mapGetters} from "vuex";
+ import {exportBlob} from "@/api/common";
+ import {getToken} from "@/util/auth";
+ import {downloadXls} from "@/util/util";
+
+ export default {
+ data() {
+ return {
+ form: {},
+ query: {},
+ loading: true,
+ page: {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0
+ },
+ selectionList: [],
+ excelBox: false,
+ excelForm: {},
+ excelOption: {
+ submitBtn: false,
+ emptyBtn: false,
+ column: [
+ {
+ label: '模板上传',
+ prop: 'excelFile',
+ type: 'upload',
+ drag: true,
+ loadText: '模板上传中,请稍等',
+ span: 24,
+ propsHttp: {
+ res: 'data'
+ },
+ tip: '请上传 .xls,.xlsx 标准格式文件',
+ action: "/api/houseStatistic/houseStatistic/import-house-statistic"
+ },
+ {
+ label: "数据覆盖",
+ prop: "isCovered",
+ type: "switch",
+ align: "center",
+ width: 80,
+ dicData: [
+ {
+ label: "否",
+ value: 0
+ },
+ {
+ label: "是",
+ value: 1
+ }
+ ],
+ value: 0,
+ slot: true,
+ rules: [
+ {
+ required: true,
+ message: "请选择是否覆盖",
+ trigger: "blur"
+ }
+ ]
+ },
+ {
+ label: '模板下载',
+ prop: 'excelTemplate',
+ formslot: true,
+ span: 24,
+ }
+ ]
+ },
+ option: {
+ height:'auto',
+ calcHeight: 30,
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 6,
+ border: true,
+ index: true,
+ viewBtn: true,
+ selection: true,
+ dialogClickModal: false,
+ //隐藏操作栏
+ menu:false,
+ column: [
+ {
+ label: "主键",
+ prop: "id",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "派出所id",
+ prop: "policeStationId",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "派出所名称",
+ prop: "policeStationName",
+ type: "input",
+ search:true,
+ searchLabelWidth:110,
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ },
+ {
+ label: "房屋类型id",
+ prop: "type",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "房屋类型名称",
+ prop: "typeName",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ },
+ {
+ label: "房屋数量",
+ prop: "num",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ },
+ {
+ label: "创建时间",
+ prop: "createTime",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ ]
+ },
+ data: []
+ };
+ },
+ computed: {
+ ...mapGetters(["permission"]),
+ permissionList() {
+ return {
+ addBtn: this.vaildData(this.permission.houseStatistic_add, false),
+ viewBtn: this.vaildData(this.permission.houseStatistic_view, false),
+ delBtn: this.vaildData(this.permission.houseStatistic_delete, false),
+ editBtn: this.vaildData(this.permission.houseStatistic_edit, false)
+ };
+ },
+ ids() {
+ let ids = [];
+ this.selectionList.forEach(ele => {
+ ids.push(ele.id);
+ });
+ return ids.join(",");
+ }
+ },
+ watch: {
+ 'excelForm.isCovered'() {
+ if (this.excelForm.isCovered !== '') {
+ const column = this.findObject(this.excelOption.column, "excelFile");
+ column.action = `/api/houseStatistic/houseStatistic/import-house-statistic?isCovered=${this.excelForm.isCovered}`;
+ }
+ }
+ },
+ methods: {
+ rowSave(row, done, loading) {
+ add(row).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ window.console.log(error);
+ });
+ },
+ rowUpdate(row, index, done, loading) {
+ update(row).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ console.log(error);
+ });
+ },
+ rowDel(row) {
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(row.id);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ });
+ },
+ handleDelete() {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据");
+ return;
+ }
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(this.ids);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ this.$refs.crud.toggleSelection();
+ });
+ },
+ beforeOpen(done, type) {
+ if (["edit", "view"].includes(type)) {
+ getDetail(this.form.id).then(res => {
+ this.form = res.data.data;
+ });
+ }
+ done();
+ },
+ searchReset() {
+ this.query = {};
+ this.onLoad(this.page);
+ },
+ searchChange(params, done) {
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ done();
+ },
+ selectionChange(list) {
+ this.selectionList = list;
+ },
+ selectionClear() {
+ this.selectionList = [];
+ this.$refs.crud.toggleSelection();
+ },
+ currentChange(currentPage){
+ this.page.currentPage = currentPage;
+ },
+ sizeChange(pageSize){
+ this.page.pageSize = pageSize;
+ },
+ refreshChange() {
+ this.onLoad(this.page, this.query);
+ },
+ onLoad(page, params = {}) {
+ this.loading = true;
+ getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+ const data = res.data.data;
+ this.page.total = data.total;
+ this.data = data.records;
+ this.loading = false;
+ this.selectionClear();
+ });
+ },
+ //下面为导入操作
+ handleImport() {
+ this.excelBox = true;
+ },
+ uploadAfter(res, done, loading, column) {
+ window.console.log(column);
+ this.excelBox = false;
+ this.refreshChange();
+ done();
+ },
+ handleTemplate() {
+ exportBlob(`/api/houseStatistic/houseStatistic/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => {
+ downloadXls(res.data, "房屋统计数据模板.xlsx");
+ })
+ },
+ }
+ };
+</script>
+
+<style>
+</style>
diff --git a/src/views/policePost/policePost.vue b/src/views/policePost/policePost.vue
new file mode 100644
index 0000000..0147674
--- /dev/null
+++ b/src/views/policePost/policePost.vue
@@ -0,0 +1,323 @@
+<template>
+ <basic-container>
+ <avue-crud :option="option"
+ :table-loading="loading"
+ :data="data"
+ :page.sync="page"
+ :permission="permissionList"
+ :before-open="beforeOpen"
+ v-model="form"
+ ref="crud"
+ @row-update="rowUpdate"
+ @row-save="rowSave"
+ @row-del="rowDel"
+ @search-change="searchChange"
+ @search-reset="searchReset"
+ @selection-change="selectionChange"
+ @current-change="currentChange"
+ @size-change="sizeChange"
+ @refresh-change="refreshChange"
+ @on-load="onLoad">
+ <template slot="menuLeft">
+ <el-button type="danger"
+ size="small"
+ icon="el-icon-delete"
+ plain
+ v-if="permission.policePost_delete"
+ @click="handleDelete">删 除
+ </el-button>
+ </template>
+ </avue-crud>
+ </basic-container>
+</template>
+
+<script>
+ import {getPage, getDetail, add, update, remove} from "@/api/policePost/policePost";
+ import {mapGetters} from "vuex";
+
+ export default {
+ data() {
+ return {
+ form: {},
+ query: {},
+ loading: true,
+ page: {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0
+ },
+ selectionList: [],
+ option: {
+ height:'auto',
+ calcHeight: 30,
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 6,
+ border: true,
+ index: true,
+ viewBtn: true,
+ selection: true,
+ dialogClickModal: false,
+ menuWidth:250,
+ column: [
+ {
+ label: "主键",
+ prop: "id",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "警务站名称",
+ labelWidth:100,
+ prop: "name",
+ type: "input",
+ search: true,
+ searchLabelWidth:120,
+ rules: [{
+ required: true,
+ message: "请输入警务站名称",
+ trigger: "blur"
+ }]
+ },
+ {
+ label: "单位编号",
+ prop: "unitCode",
+ type: "input",
+ search: true,
+ rules: [{
+ required: true,
+ message: "请选输入单位编号",
+ trigger: "blur"
+ }]
+ },
+ {
+ label: "关联派出所",
+ labelWidth:100,
+ prop: "policeStationId",
+ type: "tree",
+ multiple:true,
+ dicUrl: "api/blade-system/dept/lazy-list",
+ props:{
+ label:'deptName',
+ value:'id',
+ children:'children'
+ },
+ leafOnly:"false",
+ defaultExpandAll:true,
+ // checkStrictly:true,
+ // search: true,
+ searchSpan:6,
+ searchLabelWidth:120,
+ rules: [{
+ required: true,
+ message: "请选择关联派出所",
+ trigger: "blur"
+ }]
+ },
+ {
+ label: "创建人",
+ prop: "createUser",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "创建部门",
+ prop: "createDept",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "创建时间",
+ prop: "createTime",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "修改人",
+ prop: "updateUser",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "修改时间",
+ prop: "updateTime",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "状态",
+ prop: "status",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "是否已删除",
+ prop: "isDeleted",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ ]
+ },
+ data: []
+ };
+ },
+ computed: {
+ ...mapGetters(["permission"]),
+ permissionList() {
+ return {
+ addBtn: this.vaildData(this.permission.policePost_add, false),
+ viewBtn: this.vaildData(this.permission.policePost_view, false),
+ delBtn: this.vaildData(this.permission.policePost_delete, false),
+ editBtn: this.vaildData(this.permission.policePost_edit, false)
+ };
+ },
+ ids() {
+ let ids = [];
+ this.selectionList.forEach(ele => {
+ ids.push(ele.id);
+ });
+ return ids.join(",");
+ }
+ },
+ methods: {
+ rowSave(row, done, loading) {
+ row.policeStationId = row.policeStationId.toString()
+ add(row).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ window.console.log(error);
+ });
+ },
+ rowUpdate(row, index, done, loading) {
+ row.policeStationId = row.policeStationId.toString()
+ update(row).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ console.log(error);
+ });
+ },
+ rowDel(row) {
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(row.id);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ });
+ },
+ handleDelete() {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据");
+ return;
+ }
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(this.ids);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ this.$refs.crud.toggleSelection();
+ });
+ },
+ beforeOpen(done, type) {
+ if (["edit", "view"].includes(type)) {
+ getDetail(this.form.id).then(res => {
+ this.form = res.data.data;
+ });
+ }
+ done();
+ },
+ searchReset() {
+ this.query = {};
+ this.onLoad(this.page);
+ },
+ searchChange(params, done) {
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ done();
+ },
+ selectionChange(list) {
+ this.selectionList = list;
+ },
+ selectionClear() {
+ this.selectionList = [];
+ this.$refs.crud.toggleSelection();
+ },
+ currentChange(currentPage){
+ this.page.currentPage = currentPage;
+ },
+ sizeChange(pageSize){
+ this.page.pageSize = pageSize;
+ },
+ refreshChange() {
+ this.onLoad(this.page, this.query);
+ },
+ onLoad(page, params = {}) {
+ this.loading = true;
+ getPage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+ const data = res.data.data;
+ this.page.total = data.total;
+ this.data = data.records;
+ this.loading = false;
+ this.selectionClear();
+ });
+ }
+ }
+ };
+</script>
+
+<style>
+</style>
diff --git a/src/views/policeman/policeman.vue b/src/views/policeman/policeman.vue
index 91f5b32..24af777 100644
--- a/src/views/policeman/policeman.vue
+++ b/src/views/policeman/policeman.vue
@@ -1,241 +1,309 @@
<template>
<basic-container>
- <avue-crud :option="option"
- :table-loading="loading"
- :data="data"
- :page.sync="page"
- :permission="permissionList"
- :before-open="beforeOpen"
- v-model="form"
- ref="crud"
- @row-update="rowUpdate"
- @row-save="rowSave"
- @row-del="rowDel"
- @search-change="searchChange"
- @search-reset="searchReset"
- @selection-change="selectionChange"
- @current-change="currentChange"
- @size-change="sizeChange"
- @refresh-change="refreshChange"
- @on-load="onLoad">
+ <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :permission="permissionList"
+ :before-open="beforeOpen" v-model="form" ref="crud" @row-update="rowUpdate" @row-save="rowSave" @row-del="rowDel"
+ @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+ @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
<template slot="menuLeft">
- <el-button
- size="small"
- icon="el-icon-delete"
- plain
- v-if="permission.policeman_delete"
- @click="handleDelete">删 除
+ <el-button size="small" icon="el-icon-delete" plain v-if="permission.policeman_delete" @click="handleDelete">删 除
+ </el-button>
+ <el-button type="success" size="small" plain icon="el-icon-upload2" @click="handleImport">导入
</el-button>
</template>
</avue-crud>
+ <el-dialog title="数据导入" append-to-body :visible.sync="excelBox" width="555px">
+ <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
+ <template slot="excelTemplate">
+ <el-button type="primary" @click="handleTemplate">
+ 点击下载<i class="el-icon-download el-icon--right"></i>
+ </el-button>
+ </template>
+ </avue-form>
+ </el-dialog>
</basic-container>
</template>
<script>
- import {getPage, getDetail, add, update, remove} from "@/api/policeman/policeman";
- import {mapGetters} from "vuex";
+import { getPage, getDetail, add, update, remove } from "@/api/policeman/policeman";
+import { mapGetters } from "vuex";
+import { exportBlob } from "@/api/common";
+import { downloadXls } from "@/util/util";
+import { getToken } from "@/util/auth";
- export default {
- data() {
- return {
- form: {},
- query: {},
- loading: true,
- page: {
- pageSize: 10,
- currentPage: 1,
- total: 0
- },
- selectionList: [],
- option: {
- height:'auto',
- calcHeight: 30,
- tip: false,
- searchShow: true,
- searchMenuSpan: 6,
- border: true,
- index: true,
- viewBtn: true,
- selection: true,
- dialogClickModal: false,
- column: [
- {
- label: "警员名称",
- prop: "name",
- search: true,
- rules: [{
- required: true,
- message: "请输入警员名称",
- trigger: "blur"
- }]
+export default {
+ data() {
+ return {
+ form: {},
+ query: {},
+ loading: true,
+ page: {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0
+ },
+ selectionList: [],
+ excelBox: false,
+ excelForm: {},
+ excelOption: {
+ submitBtn: false,
+ emptyBtn: false,
+ column: [
+ {
+ label: '模板上传',
+ prop: 'excelFile',
+ type: 'upload',
+ drag: true,
+ loadText: '模板上传中,请稍等',
+ span: 24,
+ propsHttp: {
+ res: 'data'
},
- {
- label: "警员编号",
- prop: "serialNumber",
- },
- {
- label: "联系方式",
- prop: "contact",
- },
- {
- label: "所属单位",
- prop: "deptId",
- type: "tree",
- dicUrl: "api/blade-system/dept/lazy-list",
- props:{
- label:'deptName',
- value:'id',
- children:'children'
+ tip: '请上传 .xls,.xlsx 标准格式文件',
+ action: "/api/policeman/policeman/import-policeman"
+ },
+ {
+ label: "数据覆盖",
+ prop: "isCovered",
+ type: "switch",
+ align: "center",
+ width: 80,
+ dicData: [
+ {
+ label: "否",
+ value: 0
},
- search: true,
- searchSpan:4,
- rules: [{
+ {
+ label: "是",
+ value: 1
+ }
+ ],
+ value: 0,
+ slot: true,
+ rules: [
+ {
required: true,
- message: "请选择所属单位",
+ message: "请选择是否覆盖",
trigger: "blur"
- }]
- },
- ]
- },
- data: []
+ }
+ ]
+ },
+ {
+ label: '模板下载',
+ prop: 'excelTemplate',
+ formslot: true,
+ span: 24,
+ }
+ ]
+ },
+ option: {
+ height: 'auto',
+ calcHeight: 30,
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 6,
+ border: true,
+ index: true,
+ viewBtn: true,
+ addBtn: false,
+ editBtn: false,
+ selection: true,
+ dialogClickModal: false,
+ column: [
+ {
+ label: "警员名称",
+ prop: "name",
+ search: true,
+ searchSpan: 4,
+ rules: [{
+ required: true,
+ message: "请输入警员名称",
+ trigger: "blur"
+ }]
+ },
+ {
+ label: "警员编号",
+ prop: "serialNumber",
+ },
+ {
+ label: "联系方式",
+ prop: "contact",
+ },
+ {
+ label: "单位编号",
+ prop: "deptCode",
+ search: true,
+ searchSpan: 4,
+ },
+ {
+ label: "单位名称",
+ prop: "deptName",
+ search: true,
+ searchSpan: 4,
+ },
+ ]
+ },
+ data: []
+ };
+ },
+ computed: {
+ ...mapGetters(["userInfo", "permission"]),
+ permissionList() {
+ return {
+ addBtn: this.vaildData(this.permission.policeman_add, false),
+ viewBtn: this.vaildData(this.permission.policeman_view, false),
+ delBtn: this.vaildData(this.permission.policeman_delete, false),
+ editBtn: this.vaildData(this.permission.policeman_edit, false)
};
},
- computed: {
- ...mapGetters(["userInfo","permission"]),
- permissionList() {
- return {
- addBtn: this.vaildData(this.permission.policeman_add, false),
- viewBtn: this.vaildData(this.permission.policeman_view, false),
- delBtn: this.vaildData(this.permission.policeman_delete, false),
- editBtn: this.vaildData(this.permission.policeman_edit, false)
- };
- },
- ids() {
- let ids = [];
- this.selectionList.forEach(ele => {
- ids.push(ele.id);
- });
- return ids.join(",");
+ ids() {
+ let ids = [];
+ this.selectionList.forEach(ele => {
+ ids.push(ele.id);
+ });
+ return ids.join(",");
+ }
+ },
+ watch: {
+ 'excelForm.isCovered'() {
+ if (this.excelForm.isCovered !== '') {
+ const column = this.findObject(this.excelOption.column, "excelFile");
+ column.action = `/api/policeman/policeman/import-policeman?isCovered=${this.excelForm.isCovered}`;
}
},
- methods: {
- rowSave(row, done, loading) {
- add(row).then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- done();
- }, error => {
- loading();
- window.console.log(error);
- });
- },
- rowUpdate(row, index, done, loading) {
- update(row).then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- done();
- }, error => {
- loading();
- console.log(error);
- });
- },
- rowDel(row) {
- this.$confirm("确定将选择数据删除?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- })
- .then(() => {
- return remove(row.id);
- })
- .then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- });
- },
- handleDelete() {
- if (this.selectionList.length === 0) {
- this.$message.warning("请选择至少一条数据");
- return;
- }
- this.$confirm("确定将选择数据删除?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- })
- .then(() => {
- return remove(this.ids);
- })
- .then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- this.$refs.crud.toggleSelection();
- });
- },
- beforeOpen(done, type) {
- if (["edit", "view"].includes(type)) {
- getDetail(this.form.id).then(res => {
- this.form = res.data.data;
- });
- }
- done();
- },
- searchReset() {
- this.query = {};
+ },
+ methods: {
+ rowSave(row, done, loading) {
+ add(row).then(() => {
this.onLoad(this.page);
- },
- searchChange(params, done) {
- this.query = params;
- this.page.currentPage = 1;
- this.onLoad(this.page, params);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
done();
- },
- selectionChange(list) {
- this.selectionList = list;
- },
- selectionClear() {
- this.selectionList = [];
- this.$refs.crud.toggleSelection();
- },
- currentChange(currentPage){
- this.page.currentPage = currentPage;
- },
- sizeChange(pageSize){
- this.page.pageSize = pageSize;
- },
- refreshChange() {
- this.onLoad(this.page, this.query);
- },
- onLoad(page, params = {}) {
- this.loading = true;
-
- if (this.userInfo.role_name != "admin" && this.userInfo.role_name != "administrator"){
- params["jurisdiction"] = this.userInfo.dept_id;
- }
-
- getPage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
- const data = res.data.data;
- this.page.total = data.total;
- this.data = data.records;
- this.loading = false;
- this.selectionClear();
+ }, error => {
+ loading();
+ window.console.log(error);
+ });
+ },
+ rowUpdate(row, index, done, loading) {
+ update(row).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ console.log(error);
+ });
+ },
+ rowDel(row) {
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(row.id);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ });
+ },
+ handleDelete() {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据");
+ return;
+ }
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(this.ids);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ this.$refs.crud.toggleSelection();
+ });
+ },
+ beforeOpen(done, type) {
+ if (["edit", "view"].includes(type)) {
+ getDetail(this.form.id).then(res => {
+ this.form = res.data.data;
});
}
- }
- };
+ done();
+ },
+ searchReset() {
+ this.query = {};
+ this.onLoad(this.page);
+ },
+ searchChange(params, done) {
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ done();
+ },
+ selectionChange(list) {
+ this.selectionList = list;
+ },
+ selectionClear() {
+ this.selectionList = [];
+ this.$refs.crud.toggleSelection();
+ },
+ currentChange(currentPage) {
+ this.page.currentPage = currentPage;
+ },
+ sizeChange(pageSize) {
+ this.page.pageSize = pageSize;
+ },
+ refreshChange() {
+ this.onLoad(this.page, this.query);
+ },
+ onLoad(page, params = {}) {
+ this.loading = true;
+
+ if (this.userInfo.role_name != "admin" && this.userInfo.role_name != "administrator") {
+ params["jurisdiction"] = this.userInfo.dept_id;
+ }
+
+ getPage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+ const data = res.data.data;
+ this.page.total = data.total;
+ this.data = data.records;
+ this.loading = false;
+ this.selectionClear();
+ });
+ },
+ //下面为导入操作
+ handleImport() {
+ this.excelBox = true;
+ },
+ uploadAfter(res, done, loading, column) {
+ window.console.log(column);
+ this.excelBox = false;
+ this.refreshChange();
+ done();
+ },
+ handleTemplate() {
+ exportBlob(`/api/policeman/policeman/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => {
+ downloadXls(res.data, "警员信息数据模板.xlsx");
+ })
+ },
+ }
+
+};
</script>
-<style>
-</style>
+<style></style>
diff --git a/src/views/range/range.vue b/src/views/range/range.vue
index e8e20b3..3bab6eb 100644
--- a/src/views/range/range.vue
+++ b/src/views/range/range.vue
@@ -29,7 +29,7 @@
</template>
<template slot-scope="{type,size,row,index}" slot="menu">
<el-button icon="el-icon-view" :size="size" :type="type" @click="handleDetail(row)">地 图</el-button>
- <el-button icon="el-icon-edit" v-if="permission.range_edit" :size="size" :type="type" @click="$refs.crud.rowEdit(row,index)">编 辑</el-button>
+ <!-- <el-button icon="el-icon-edit" v-if="permission.range_edit" :size="size" :type="type" @click="$refs.crud.rowEdit(row,index)">编 辑</el-button> -->
<el-button icon="el-icon-delete" v-if="permission.range_delete" :size="size" :type="type" @click="$refs.crud.rowDel(row,index)">删 除</el-button>
</template>
</avue-crud>
@@ -41,7 +41,8 @@
size="60%"
direction="rtl"
:before-close="handleClose">
- <map-box v-if="isDetail" :is-detail="isDetail" :route-range="routeRange"></map-box>
+<!-- <map-box v-if="isDetail" :is-detail="isDetail" :route-range="routeRange"></map-box>-->
+ <dc-map ref="dcMap" v-if="isDetail" :is-detail="isDetail" :range="routeRange"></dc-map>
</el-drawer>
</basic-container>
</template>
@@ -50,9 +51,10 @@
import {getList, getDetail, add, update, remove} from "@/api/range/range";
import {mapGetters} from "vuex";
import MapBox from "@/components/map/mapBox";
+ import DcMap from "@/components/map/dcMap";
export default {
- components: {MapBox},
+ components: {DcMap, MapBox},
data() {
return {
form: {},
@@ -77,6 +79,7 @@
viewBtn: false,
delBtn: false,
editBtn: false,
+ addBtn: false,
selection: true,
excelBtn: true,
dialogClickModal: false,
diff --git a/src/views/realEstate/realEstate.vue b/src/views/realEstate/realEstate.vue
new file mode 100644
index 0000000..28b48c7
--- /dev/null
+++ b/src/views/realEstate/realEstate.vue
@@ -0,0 +1,392 @@
+<template>
+ <basic-container>
+ <avue-crud :option="option"
+ :table-loading="loading"
+ :data="data"
+ :page.sync="page"
+ :permission="permissionList"
+ :before-open="beforeOpen"
+ v-model="form"
+ ref="crud"
+ @row-update="rowUpdate"
+ @row-save="rowSave"
+ @row-del="rowDel"
+ @search-change="searchChange"
+ @search-reset="searchReset"
+ @selection-change="selectionChange"
+ @current-change="currentChange"
+ @size-change="sizeChange"
+ @refresh-change="refreshChange"
+ @on-load="onLoad">
+ <template slot="menuLeft">
+ <el-button type="success"
+ size="small"
+ plain
+ icon="el-icon-upload2"
+ @click="handleImport">导入
+ </el-button>
+ <el-button type="danger"
+ size="small"
+ icon="el-icon-delete"
+ plain
+ v-if="permission.realEstate_delete"
+ @click="handleDelete">删 除
+ </el-button>
+ </template>
+ </avue-crud>
+ <el-dialog title="楼盘数据导入"
+ append-to-body
+ :visible.sync="excelBox"
+ width="555px">
+ <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
+ <template slot="excelTemplate">
+ <el-button type="primary" @click="handleTemplate">
+ 点击下载<i class="el-icon-download el-icon--right"></i>
+ </el-button>
+ </template>
+ </avue-form>
+ </el-dialog>
+ </basic-container>
+</template>
+
+<script>
+ import {getList, getDetail, add, update, remove} from "@/api/realEstate/realEstate";
+ import {mapGetters} from "vuex";
+ import {exportBlob} from "@/api/common";
+ import {getToken} from "@/util/auth";
+ import {downloadXls} from "@/util/util";
+
+ export default {
+ data() {
+ return {
+ form: {},
+ query: {},
+ loading: true,
+ page: {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0
+ },
+ selectionList: [],
+ excelBox: false,
+ excelForm: {},
+ excelOption: {
+ submitBtn: false,
+ emptyBtn: false,
+ column: [
+ {
+ label: '模板上传',
+ prop: 'excelFile',
+ type: 'upload',
+ drag: true,
+ loadText: '模板上传中,请稍等',
+ span: 24,
+ propsHttp: {
+ res: 'data'
+ },
+ tip: '请上传 .xls,.xlsx 标准格式文件',
+ action: "/api/realEstate/realEstate/import-realEstate"
+ },
+ {
+ label: "数据覆盖",
+ prop: "isCovered",
+ type: "switch",
+ align: "center",
+ width: 80,
+ dicData: [
+ {
+ label: "否",
+ value: 0
+ },
+ {
+ label: "是",
+ value: 1
+ }
+ ],
+ value: 0,
+ slot: true,
+ rules: [
+ {
+ required: true,
+ message: "请选择是否覆盖",
+ trigger: "blur"
+ }
+ ]
+ },
+ {
+ label: '模板下载',
+ prop: 'excelTemplate',
+ formslot: true,
+ span: 24,
+ }
+ ]
+ },
+ option: {
+ height:'auto',
+ calcHeight: 30,
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 6,
+ border: true,
+ index: true,
+ viewBtn: true,
+ selection: true,
+ dialogClickModal: false,
+ menu:false,
+ column: [
+ {
+ label: "主键",
+ prop: "id",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "区",
+ prop: "county",
+ type: "input",
+ },
+
+ {
+ label: "类型",
+ prop: "type",
+ type: "input",
+ },
+ {
+ label: "小区名称",
+ prop: "aoi",
+ search:true,
+ type: "input",
+ },
+ {
+ label: "楼栋",
+ prop: "building",
+ type: "input",
+ },
+ {
+ label: "地址",
+ prop: "address",
+ type: "input",
+ },
+ {
+ label: "aoi-id",
+ prop: "aoiId",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ },
+ {
+ label: "楼栋id",
+ prop: "buildingId",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "x2000",
+ prop: "x2000",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ },
+ {
+ label: "y2000",
+ prop: "y2000",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ },
+ {
+ label: "bgId",
+ prop: "bgId",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ },
+ {
+ label: "创建时间",
+ prop: "createTime",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ },
+ {
+ label: "md5Id",
+ prop: "md5Id",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ },
+
+ ]
+ },
+ data: []
+ };
+ },
+ computed: {
+ ...mapGetters(["permission"]),
+ permissionList() {
+ return {
+ addBtn: this.vaildData(this.permission.realEstate_add, false),
+ viewBtn: this.vaildData(this.permission.realEstate_view, false),
+ delBtn: this.vaildData(this.permission.realEstate_delete, false),
+ editBtn: this.vaildData(this.permission.realEstate_edit, false)
+ };
+ },
+ ids() {
+ let ids = [];
+ this.selectionList.forEach(ele => {
+ ids.push(ele.id);
+ });
+ return ids.join(",");
+ }
+ },
+ watch: {
+ 'excelForm.isCovered'() {
+ if (this.excelForm.isCovered !== '') {
+ const column = this.findObject(this.excelOption.column, "excelFile");
+ column.action = `/api/realEstate/realEstate/import-realEstate?isCovered=${this.excelForm.isCovered}`;
+ }
+ }
+ },
+ methods: {
+ rowSave(row, done, loading) {
+ add(row).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ window.console.log(error);
+ });
+ },
+ rowUpdate(row, index, done, loading) {
+ update(row).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ console.log(error);
+ });
+ },
+ rowDel(row) {
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(row.id);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ });
+ },
+ handleDelete() {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据");
+ return;
+ }
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(this.ids);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ this.$refs.crud.toggleSelection();
+ });
+ },
+ beforeOpen(done, type) {
+ if (["edit", "view"].includes(type)) {
+ getDetail(this.form.id).then(res => {
+ this.form = res.data.data;
+ });
+ }
+ done();
+ },
+ searchReset() {
+ this.query = {};
+ this.onLoad(this.page);
+ },
+ searchChange(params, done) {
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ done();
+ },
+ selectionChange(list) {
+ this.selectionList = list;
+ },
+ selectionClear() {
+ this.selectionList = [];
+ this.$refs.crud.toggleSelection();
+ },
+ currentChange(currentPage){
+ this.page.currentPage = currentPage;
+ },
+ sizeChange(pageSize){
+ this.page.pageSize = pageSize;
+ },
+ refreshChange() {
+ this.onLoad(this.page, this.query);
+ },
+ onLoad(page, params = {}) {
+ this.loading = true;
+ getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+ const data = res.data.data;
+ this.page.total = data.total;
+ this.data = data.records;
+ this.loading = false;
+ this.selectionClear();
+ });
+ },
+ //下面为导入操作
+ handleImport() {
+ this.excelBox = true;
+ },
+ uploadAfter(res, done, loading, column) {
+ window.console.log(column);
+ this.excelBox = false;
+ this.refreshChange();
+ done();
+ },
+ handleTemplate() {
+ exportBlob(`/api/realEstate/realEstate/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => {
+ downloadXls(res.data, "楼盘统计数据模板.xlsx");
+ })
+ },
+ }
+ };
+</script>
+
+<style>
+</style>
diff --git a/src/views/scheduling/scheduling.vue b/src/views/scheduling/scheduling.vue
index f1b820b..c0dd957 100644
--- a/src/views/scheduling/scheduling.vue
+++ b/src/views/scheduling/scheduling.vue
@@ -1,283 +1,351 @@
<template>
<basic-container>
- <avue-crud :option="option"
- :table-loading="loading"
- :data="data"
- :page.sync="page"
- :permission="permissionList"
- :before-open="beforeOpen"
- v-model="form"
- ref="crud"
- @row-update="rowUpdate"
- @row-save="rowSave"
- @row-del="rowDel"
- @search-change="searchChange"
- @search-reset="searchReset"
- @selection-change="selectionChange"
- @current-change="currentChange"
- @size-change="sizeChange"
- @refresh-change="refreshChange"
- @on-load="onLoad">
+ <avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :permission="permissionList"
+ :before-open="beforeOpen" v-model="form" ref="crud" @row-update="rowUpdate" @row-save="rowSave" @row-del="rowDel"
+ @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+ @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
<template slot="menuLeft">
- <el-button
- size="small"
- icon="el-icon-delete"
- plain
- v-if="permission.scheduling_delete"
- @click="handleDelete">删 除
+ <el-button size="small" icon="el-icon-delete" plain v-if="permission.scheduling_delete" @click="handleDelete">删 除
+ </el-button>
+ <el-button type="success" size="small" plain icon="el-icon-upload2" @click="handleImport">导入
</el-button>
</template>
</avue-crud>
+ <el-dialog title="数据导入" append-to-body :visible.sync="excelBox" width="555px">
+ <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
+ <template slot="excelTemplate">
+ <el-button type="primary" @click="handleTemplate">
+ 点击下载<i class="el-icon-download el-icon--right"></i>
+ </el-button>
+ </template>
+ </avue-form>
+ </el-dialog>
</basic-container>
</template>
<script>
- import {getList, getDetail, add, update, remove, getPliceman} from "@/api/scheduling/scheduling";
- import {mapGetters} from "vuex";
+import { getList, getDetail, add, update, remove, getPliceman } from "@/api/scheduling/scheduling";
+import { mapGetters } from "vuex";
+import { exportBlob } from "@/api/common";
+import { downloadXls } from "@/util/util";
+import { getToken } from "@/util/auth";
- export default {
- data() {
- return {
- form: {},
- query: {},
- loading: true,
- page: {
- pageSize: 10,
- currentPage: 1,
- total: 0
- },
- selectionList: [],
- option: {
- height: 'auto',
- calcHeight: 30,
- dialogWidth: 950,
- tip: false,
- searchShow: true,
- searchMenuSpan: 6,
- border: true,
- index: true,
- viewBtn: true,
- selection: true,
- excelBtn: true,
- dialogClickModal: false,
- column: [
- {
- label: "值班员",
- prop: "person",
- search:true,
- type: "select",
- dicUrl: "/api/policeman/policeman/all",
- props: {
- label: "name",
- value: "id"
+export default {
+ data() {
+ return {
+ form: {},
+ query: {},
+ loading: true,
+ page: {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0
+ },
+ selectionList: [],
+ excelBox: false,
+ excelForm: {},
+ excelOption: {
+ submitBtn: false,
+ emptyBtn: false,
+ column: [
+ {
+ label: '模板上传',
+ prop: 'excelFile',
+ type: 'upload',
+ drag: true,
+ loadText: '模板上传中,请稍等',
+ span: 24,
+ propsHttp: {
+ res: 'data'
+ },
+ tip: '请上传 .xls,.xlsx 标准格式文件',
+ action: "/api/scheduling/scheduling/import-scheduling"
+ },
+ {
+ label: "数据覆盖",
+ prop: "isCovered",
+ type: "switch",
+ align: "center",
+ width: 80,
+ dicData: [
+ {
+ label: "否",
+ value: 0
+ },
+ {
+ label: "是",
+ value: 1
}
- },
- {
- label: "联系方式",
- prop: "contact",
- },
- {
- label: "值班岗位",
- prop: "station",
- row: true,
- span: 24
- },
- {
- label: "值班时间",
- prop: "startTime",
- type: "datetime",
- defaultTime: '00:00:00',
- format: "yyyy-MM-dd",
- valueFormat: "yyyy-MM-dd HH:mm:ss",
- rules: [{
+ ],
+ value: 0,
+ slot: true,
+ rules: [
+ {
required: true,
- message: "请选择值班时间",
+ message: "请选择是否覆盖",
trigger: "blur"
- }],
- },
- {
- label: "带班领导",
- prop: "leads",
- type: "select",
- dicUrl: "/api/policeman/policeman/all",
- props: {
- label: "name",
- value: "id"
}
- },
- {
- label: "联系方式",
- prop: "leadContact",
- },
- ]
- },
- data: [],
- policemanList: []
+ ]
+ },
+ {
+ label: '模板下载',
+ prop: 'excelTemplate',
+ formslot: true,
+ span: 24,
+ }
+ ]
+ },
+ option: {
+ height: 'auto',
+ calcHeight: 30,
+ dialogWidth: 950,
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 6,
+ border: true,
+ index: true,
+ viewBtn: true,
+ addBtn: false,
+ editBtn: false,
+ selection: true,
+ excelBtn: true,
+ dialogClickModal: false,
+ column: [
+ {
+ label: "值班单位",
+ prop: "dept",
+ row: true,
+ span: 24
+ },
+ {
+ label: "值班日期",
+ prop: "day",
+ type: "date",
+ format: "yyyy-MM-dd",
+ valueFormat: "yyyy-MM-dd",
+ rules: [{
+ required: true,
+ message: "请选择值班日期",
+ trigger: "blur"
+ }],
+ },
+ {
+ label: "值班员",
+ prop: "person",
+ search: true,
+ },
+ {
+ label: "联系方式",
+ prop: "contact",
+ },
+ {
+ label: "值班类型",
+ prop: "type",
+ },
+ {
+ label: "带班领导",
+ prop: "leads",
+ type: "select",
+ dicUrl: "/api/policeman/policeman/all",
+ props: {
+ label: "name",
+ value: "id"
+ }
+ },
+ {
+ label: "联系方式",
+ prop: "leadContact",
+ },
+
+ ]
+ },
+ data: [],
+ policemanList: []
+ };
+ },
+ computed: {
+ ...mapGetters(["permission"]),
+ permissionList() {
+ return {
+ addBtn: this.vaildData(this.permission.scheduling_add, false),
+ viewBtn: this.vaildData(this.permission.scheduling_view, false),
+ delBtn: this.vaildData(this.permission.scheduling_delete, false),
+ editBtn: this.vaildData(this.permission.scheduling_edit, false)
};
},
- computed: {
- ...mapGetters(["permission"]),
- permissionList() {
- return {
- addBtn: this.vaildData(this.permission.scheduling_add, false),
- viewBtn: this.vaildData(this.permission.scheduling_view, false),
- delBtn: this.vaildData(this.permission.scheduling_delete, false),
- editBtn: this.vaildData(this.permission.scheduling_edit, false)
- };
- },
- ids() {
- let ids = [];
- this.selectionList.forEach(ele => {
- ids.push(ele.id);
- });
- return ids.join(",");
- }
- },
- watch: {
- 'form.person': {
- handler(res) {
- this.policemanList.forEach(e => {
- if (res == e.id) {
- this.form.contact = e.contact
- }
- })
- }
- },
- 'form.leads': {
- handler(res) {
- this.policemanList.forEach(e => {
- if (res == e.id) {
- this.form.leadContact = e.contact
- }
- })
- }
- },
- },
- created() {
- this.getPolicemanAll();
- },
- methods: {
- rowSave(row, done, loading) {
- add(row).then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- done();
- }, error => {
- loading();
- window.console.log(error);
- });
- },
- rowUpdate(row, index, done, loading) {
- update(row).then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- done();
- }, error => {
- loading();
- console.log(error);
- });
- },
- rowDel(row) {
- this.$confirm("确定将选择数据删除?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- })
- .then(() => {
- return remove(row.id);
- })
- .then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- });
- },
- handleDelete() {
- if (this.selectionList.length === 0) {
- this.$message.warning("请选择至少一条数据");
- return;
- }
- this.$confirm("确定将选择数据删除?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- })
- .then(() => {
- return remove(this.ids);
- })
- .then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- this.$refs.crud.toggleSelection();
- });
- },
- beforeOpen(done, type) {
- if (["edit", "view"].includes(type)) {
- getDetail(this.form.id).then(res => {
- this.form = res.data.data;
- });
- }
- done();
- },
- searchReset() {
- this.query = {};
- this.onLoad(this.page);
- },
- searchChange(params, done) {
- this.query = params;
- this.page.currentPage = 1;
- this.onLoad(this.page, params);
- done();
- },
- selectionChange(list) {
- this.selectionList = list;
- },
- selectionClear() {
- this.selectionList = [];
- this.$refs.crud.toggleSelection();
- },
- currentChange(currentPage) {
- this.page.currentPage = currentPage;
- },
- sizeChange(pageSize) {
- this.page.pageSize = pageSize;
- },
- refreshChange() {
- this.onLoad(this.page, this.query);
- },
- onLoad(page, params = {}) {
- this.loading = true;
- getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
- const data = res.data.data;
- this.page.total = data.total;
- this.data = data.records;
- this.loading = false;
- this.selectionClear();
- });
- },
- getPolicemanAll() {
- getPliceman().then(res => {
- this.policemanList = res.data.data
- const securityIdColumn = this.findObject(this.option.column, "person")
- securityIdColumn.dicData = this.policemanList
- const securityIdColumns = this.findObject(this.option.column, "leads")
- securityIdColumns.dicData = this.policemanList
- })
- }
+ ids() {
+ let ids = [];
+ this.selectionList.forEach(ele => {
+ ids.push(ele.id);
+ });
+ return ids.join(",");
}
- };
+ },
+ watch: {
+ 'form.person': {
+ handler(res) {
+ this.policemanList.forEach(e => {
+ if (res == e.id) {
+ this.form.contact = e.contact
+ }
+ })
+ }
+ },
+ 'form.leads': {
+ handler(res) {
+ this.policemanList.forEach(e => {
+ if (res == e.id) {
+ this.form.leadContact = e.contact
+ }
+ })
+ }
+ },
+ 'excelForm.isCovered'() {
+ if (this.excelForm.isCovered !== '') {
+ const column = this.findObject(this.excelOption.column, "excelFile");
+ column.action = `/api/scheduling/scheduling/import-scheduling?isCovered=${this.excelForm.isCovered}`;
+ }
+ },
+ },
+ created() {
+ this.getPolicemanAll();
+ },
+ methods: {
+ rowSave(row, done, loading) {
+ add(row).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ window.console.log(error);
+ });
+ },
+ rowUpdate(row, index, done, loading) {
+ update(row).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ console.log(error);
+ });
+ },
+ rowDel(row) {
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(row.id);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ });
+ },
+ handleDelete() {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据");
+ return;
+ }
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(this.ids);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ this.$refs.crud.toggleSelection();
+ });
+ },
+ beforeOpen(done, type) {
+ if (["edit", "view"].includes(type)) {
+ getDetail(this.form.id).then(res => {
+ this.form = res.data.data;
+ });
+ }
+ done();
+ },
+ searchReset() {
+ this.query = {};
+ this.onLoad(this.page);
+ },
+ searchChange(params, done) {
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ done();
+ },
+ selectionChange(list) {
+ this.selectionList = list;
+ },
+ selectionClear() {
+ this.selectionList = [];
+ this.$refs.crud.toggleSelection();
+ },
+ currentChange(currentPage) {
+ this.page.currentPage = currentPage;
+ },
+ sizeChange(pageSize) {
+ this.page.pageSize = pageSize;
+ },
+ refreshChange() {
+ this.onLoad(this.page, this.query);
+ },
+ onLoad(page, params = {}) {
+ this.loading = true;
+ getList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+ const data = res.data.data;
+ this.page.total = data.total;
+ this.data = data.records;
+ this.loading = false;
+ this.selectionClear();
+ });
+ },
+ getPolicemanAll() {
+ getPliceman().then(res => {
+ this.policemanList = res.data.data
+ const securityIdColumn = this.findObject(this.option.column, "person")
+ securityIdColumn.dicData = this.policemanList
+ const securityIdColumns = this.findObject(this.option.column, "leads")
+ securityIdColumns.dicData = this.policemanList
+ })
+ },
+ //下面为导入操作
+ handleImport() {
+ this.excelBox = true;
+ },
+ uploadAfter(res, done, loading, column) {
+ window.console.log(column);
+ this.excelBox = false;
+ this.refreshChange();
+ done();
+ },
+ handleTemplate() {
+ exportBlob(`/api/scheduling/scheduling/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => {
+ downloadXls(res.data, "值班信息数据模板.xlsx");
+ })
+ },
+ }
+};
</script>
-<style>
-</style>
+<style></style>
diff --git a/src/views/security/security.vue b/src/views/security/security.vue
index a043517..80a4ea3 100644
--- a/src/views/security/security.vue
+++ b/src/views/security/security.vue
@@ -1,17 +1,28 @@
<template>
<basic-container>
<avue-crud :option="option" :table-loading="loading" :data="data" :page.sync="page" :permission="permissionList"
- :before-open="beforeOpen" v-model="form" ref="crud" @row-update="rowUpdate" @row-save="rowSave" @row-del="rowDel"
- @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
- @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+ :before-open="beforeOpen" v-model="form" ref="crud" @row-update="rowUpdate" @row-save="rowSave"
+ @row-del="rowDel" @search-change="searchChange" @search-reset="searchReset"
+ @selection-change="selectionChange" @current-change="currentChange" @size-change="sizeChange"
+ @refresh-change="refreshChange" @on-load="onLoad">
<template slot="menuLeft">
- <el-button size="small" icon="el-icon-delete" plain v-if="permission.security_delete" @click="handleDelete">删 除
+ <el-button size="small" icon="el-icon-delete" plain v-if="permission.security_delete"
+ @click="handleDelete">删 除
</el-button>
</template>
<template slot-scope="{type,size,row,index}" slot="menu">
- <el-button icon="el-icon-coordinate" :size="size" :type="type" @click="handlePersonList(row)">活动人员</el-button>
- <el-button icon="el-icon-data-line" :size="size" :type="type" @click="handleCarList(row)">活动车辆</el-button>
+ <el-button icon="el-icon-coordinate" :size="size" :type="type"
+ @click="handlePersonList(row)">活动人员
+ </el-button>
+ <el-button icon="el-icon-data-line" :size="size" :type="type"
+ @click="handleCarList(row)">活动车辆
+ </el-button>
</template>
+ <template slot="activityAreaForm">
+<!-- <map-box ref="OpenLayersMap" @toData="toData" :routeRange="form.activityArea"></map-box>-->
+ <dc-map ref="dcMap" @toData="toData" :range="form.activityArea"></dc-map>
+ </template>
+
</avue-crud>
<el-drawer title="活动人员区域" :visible.sync="personBox" :append-to-body="true" size="50%" :destroy-on-close="true">
@@ -21,27 +32,48 @@
<el-drawer title="活动车辆区域" :visible.sync="carBox" :append-to-body="true" size="50%" :destroy-on-close="true">
<securityManageCar ref="car" :securityId="securityId"/>
</el-drawer>
+
+ <el-dialog
+ title="提示"
+ :visible.sync="placeBox"
+ append-to-body
+ destroy-on-close
+ width="70%">
+ <search-map @getLonLat="getLonLat" @getAddress="getAddress" :point-lon-lat="point"></search-map>
+ <span slot="footer" class="dialog-footer">
+ <el-button type="primary" @click="confirmLonLat">确 定</el-button>
+ </span>
+ </el-dialog>
</basic-container>
</template>
<script>
-import { getPage, getDetail, add, update, remove } from "@/api/security/security";
-import { getUserInfos } from "@/api/system/user";
+import {getPage, getDetail, add, update, remove} from "@/api/security/security"
+import {getUserInfos} from "@/api/system/user"
// import AvueMap from 'avue-plugin-map';
-import { mapGetters } from "vuex";
+import {mapGetters} from "vuex"
import securityManage from "@/views/securityManage/securityManage"
import securityManageCar from "@/views/securityManageCar/securityManageCar"
+import MapBox from "@/components/map/mapBox";
+import SearchMap from "@/components/map/searchMap";
+import DcMap from "@/components/map/dcMap";
export default {
components: {
+ DcMap,
+ SearchMap,
+ MapBox,
securityManage,
securityManageCar
},
data() {
return {
- securityId:"",
+ securityId: "",
carBox: false,
personBox: false,
+ placeBox: false,
+ point:"",
+ chosePoint:{},
form: {},
query: {},
loading: true,
@@ -72,40 +104,94 @@
prop: "name",
search: true,
searchSpan: 4,
+ rules: [{
+ required: true,
+ message: "请输入活动名称",
+ trigger: "blur"
+ }],
+ overHidden:true,
},
{
label: "负责单位",
prop: "company",
+ hide:true,
},
{
label: "负责人",
prop: "person",
- width: 80
+ width: 80,
+ rules: [{
+ required: true,
+ message: "请输入负责人",
+ trigger: "blur"
+ }],
},
{
label: "联系方式",
prop: "contact",
- width: 100
+ width: 100,
+ rules: [{
+ required: true,
+ message: "请输入联系方式",
+ trigger: "blur"
+ }],
},
{
label: "活动地点",
prop: "place",
- // addDisplay: false,
- // editDisplay: false,
- // viewDisplay: false,
+ span: 24,
+ click: () => {
+ this.placeBox = !this.placeBox
+ },
+ overHidden:true,
+ },
+ {
+ label: "经度",
+ prop: "longitude",
+ span: 12,
+ hide: true,
+ disabled:true,
+ rules: [{
+ required: true,
+ message: "请输入纬度",
+ trigger: "blur"
+ }],
+ },
+ {
+ label: "纬度",
+ prop: "latitude",
+ span: 12,
+ hide: true,
+ disabled: true,
+ rules: [{
+ required: true,
+ message: "请输入纬度",
+ trigger: "blur"
+ }],
+ },
+ {
+ label: "活动区域",
+ prop: "activityArea",
+ type: "input",
+ hide: true,
+ span: 24,
+ display: true,
+ addDisplay: true
},
{
label: "所属辖区",
prop: "deptId",
type: "tree",
- dicUrl: "api/blade-system/dept/lazy-list",
+ dicUrl: "api/blade-system/dept/getPoliceStationTree",
props: {
- label: 'deptName',
+ label: 'name',
value: 'id',
children: 'children'
},
search: true,
searchSpan: 4,
+ span: 24,
+ defaultExpandAll:"true",
width: 110,
rules: [{
required: true,
@@ -146,17 +232,6 @@
}],
width: 120,
},
- {
- label: "活动内容",
- prop: "content",
- },
- {
- label: "经纬度",
- prop: "position",
- type: "input",
- span: 12,
- hide: true
- },
// {
// label: "",
// prop: "map",
@@ -168,11 +243,6 @@
// // display:false,
// component: "AvueMap",
// },
- {
- label: "人数",
- prop: "number",
- width: 60,
- },
{
label: "活动类型",
prop: "type",
@@ -189,10 +259,27 @@
}],
width: 90,
},
+ {
+ label: "人数",
+ prop: "number",
+ width: 60,
+ rules: [{
+ required: true,
+ message: "请输入人数",
+ trigger: "blur"
+ }],
+ },
+ {
+ label: "活动内容",
+ prop: "content",
+ type: "textarea",
+ span: 24,
+ hide:true,
+ },
]
},
data: []
- };
+ }
},
// watch: {
// //latitude longitude formattedAddress
@@ -213,58 +300,70 @@
viewBtn: this.vaildData(this.permission.security_view, false),
delBtn: this.vaildData(this.permission.security_delete, false),
editBtn: this.vaildData(this.permission.security_edit, false)
- };
+ }
},
ids() {
- let ids = [];
+ let ids = []
this.selectionList.forEach(ele => {
- ids.push(ele.id);
- });
- return ids.join(",");
+ ids.push(ele.id)
+ })
+ return ids.join(",")
}
},
- created(){
- const tokenLength = window.location.href.indexOf('=');
- if(tokenLength>0){
+ created() {
+ const tokenLength = window.location.href.indexOf('=')
+ if (tokenLength > 0) {
//取“=”之后的token
- let z = window.location.href.substring(tokenLength + 1)
- this.$store.commit('SET_TOKEN', z);
- this.$store.commit('DEL_ALL_TAG');
- this.$store.commit('CLEAR_LOCK');
this.getUserInfo()
}
},
methods: {
- getUserInfo(){
- getUserInfos().then(res=>{
- this.$store.commit('SET_USER_INFO', res.data.data);
+ getUserInfo() {
+ getUserInfos().then(res => {
+ const data = res.data
+ this.$store.commit('SET_TOKEN', data.access_token)
+ this.$store.commit('SET_REFRESH_TOKEN', data.refresh_token)
+ this.$store.commit('SET_TENANT_ID', data.tenant_id)
+ this.$store.commit('SET_USER_INFO', data)
+ this.$store.commit('DEL_ALL_TAG')
+ this.$store.commit('CLEAR_LOCK')
})
},
rowSave(row, done, loading) {
+ row.position = row.longitude + " " + row.latitude
add(row).then(() => {
- this.onLoad(this.page);
+ this.onLoad(this.page)
this.$message({
type: "success",
message: "操作成功!"
- });
- done();
+ })
+ done()
}, error => {
- loading();
- window.console.log(error);
- });
+ loading()
+ window.console.log(error)
+ })
},
rowUpdate(row, index, done, loading) {
+ if (!row.activityArea) {
+ this.$message.warning("请绘制活动区域")
+ loading()
+ return
+ }
+ if (!row.activityArea.startsWith("'LINESTRING")){
+ row.activityArea = "'LINESTRING("+row.activityArea+")'"
+ }
+ row.position = row.longitude + " " + row.latitude
update(row).then(() => {
- this.onLoad(this.page);
+ this.onLoad(this.page)
this.$message({
type: "success",
message: "操作成功!"
- });
- done();
+ })
+ done()
}, error => {
- loading();
- console.log(error);
- });
+ loading()
+ console.log(error)
+ })
},
rowDel(row) {
this.$confirm("确定将选择数据删除?", {
@@ -273,20 +372,20 @@
type: "warning"
})
.then(() => {
- return remove(row.id);
+ return remove(row.id)
})
.then(() => {
- this.onLoad(this.page);
+ this.onLoad(this.page)
this.$message({
type: "success",
message: "操作成功!"
- });
- });
+ })
+ })
},
handleDelete() {
if (this.selectionList.length === 0) {
- this.$message.warning("请选择至少一条数据");
- return;
+ this.$message.warning("请选择至少一条数据")
+ return
}
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
@@ -294,78 +393,108 @@
type: "warning"
})
.then(() => {
- return remove(this.ids);
+ return remove(this.ids)
})
.then(() => {
- this.onLoad(this.page);
+ this.onLoad(this.page)
this.$message({
type: "success",
message: "操作成功!"
- });
- this.$refs.crud.toggleSelection();
- });
+ })
+ this.$refs.crud.toggleSelection()
+ })
},
beforeOpen(done, type) {
if (["edit", "view"].includes(type)) {
getDetail(this.form.id).then(res => {
- this.form = res.data.data;
- });
+ var data = res.data.data
+ this.form = data
+ this.form['longitude'] = data.position.split(" ")[0]
+ this.form['latitude'] = data.position.split(" ")[1]
+ this.point = "POINT("+this.form.longitude +" "+this.form.latitude+")"
+ this.$refs.dcMap.showPolygon(this.form.activityArea)
+ })
}
- done();
+ done()
},
searchReset() {
- this.query = {};
- this.onLoad(this.page);
+ this.query = {}
+ this.onLoad(this.page)
},
searchChange(params, done) {
- this.query = params;
- this.page.currentPage = 1;
- this.onLoad(this.page, params);
- done();
+ this.query = params
+ this.page.currentPage = 1
+ this.onLoad(this.page, params)
+ done()
},
selectionChange(list) {
- this.selectionList = list;
+ this.selectionList = list
},
selectionClear() {
- this.selectionList = [];
- this.$refs.crud.toggleSelection();
+ this.selectionList = []
+ this.$refs.crud.toggleSelection()
},
currentChange(currentPage) {
- this.page.currentPage = currentPage;
+ this.page.currentPage = currentPage
},
sizeChange(pageSize) {
- this.page.pageSize = pageSize;
+ this.page.pageSize = pageSize
},
refreshChange() {
- this.onLoad(this.page, this.query);
+ this.onLoad(this.page, this.query)
},
onLoad(page, params = {}) {
- this.loading = true;
+ this.loading = true
if (this.userInfo.role_name != "admin" && this.userInfo.role_name != "administrator") {
- params["jurisdiction"] = this.userInfo.dept_id;
+ params["jurisdiction"] = this.userInfo.dept_id
}
getPage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
- const data = res.data.data;
- this.page.total = data.total;
- this.data = data.records;
- this.loading = false;
- this.selectionClear();
- });
+ const data = res.data.data
+ this.page.total = data.total
+ this.data = data.records
+ this.loading = false
+ this.selectionClear()
+ })
},
//活动人员区域点击按钮事件
handlePersonList(row) {
- this.personBox = true;
+ this.personBox = true
this.securityId = row.id
},
//活动车辆区域点击按钮事件
handleCarList(row) {
- this.carBox = true;
+ this.carBox = true
this.securityId = row.id
+ },
+ //地图传回的polygon坐标
+ toData(data) {
+ this.form.activityArea = data
+ },
+ getLonLat(data){
+ this.chosePoint.longitude = data[0]
+ this.chosePoint.latitude = data[1]
+ },
+ getAddress(data){
+ this.chosePoint.address = data
+ },
+ confirmLonLat(){
+ if(this.chosePoint.longitude){
+ this.form.longitude = this.chosePoint.longitude
+ this.form.latitude = this.chosePoint.latitude
+ this.form.place = this.chosePoint.address
+ this.point = "POINT("+this.form.longitude +" "+this.form.latitude+")"
+ this.placeBox = false
+ }else {
+ this.$alert('该点没有位置信息,请重新选点!', '提示', {
+ confirmButtonText: '确定',
+ });
+ }
+
}
}
-};
+}
</script>
<style>
diff --git a/src/views/securityManage/securityManage.vue b/src/views/securityManage/securityManage.vue
index 07c8c4d..51a0b33 100644
--- a/src/views/securityManage/securityManage.vue
+++ b/src/views/securityManage/securityManage.vue
@@ -11,8 +11,8 @@
</template>
<template slot-scope="{type,size,row,index}" slot="menu">
<el-button icon="el-icon-view" :size="size" :type="type" @click="handleDetail(row)">地 图</el-button>
- <el-button icon="el-icon-edit" v-if="permission.range_edit" :size="size" :type="type"
- @click="$refs.crud.rowEdit(row, index)">编 辑</el-button>
+ <!-- <el-button icon="el-icon-edit" v-if="permission.range_edit" :size="size" :type="type"
+ @click="$refs.crud.rowEdit(row, index)">编 辑</el-button> -->
<el-button icon="el-icon-delete" v-if="permission.range_delete" :size="size" :type="type"
@click="$refs.crud.rowDel(row, index)">删 除</el-button>
</template>
@@ -58,6 +58,7 @@
viewBtn: false,
delBtn: false,
editBtn: false,
+ addBtn:false,
selection: true,
dialogClickModal: false,
column: [
@@ -93,9 +94,10 @@
prop: "deptId",
type: "tree",
disabled: true,
- dicUrl: "api/blade-system/dept/lazy-list",
+ dicUrl: "api/blade-system/dept/getPoliceStationTree",
+ defaultExpandAll:"true",
props: {
- label: 'deptName',
+ label: 'name',
value: 'id',
children: 'children'
},
diff --git a/src/views/securityManageCar/securityManageCar.vue b/src/views/securityManageCar/securityManageCar.vue
index 268f375..1a7c98a 100644
--- a/src/views/securityManageCar/securityManageCar.vue
+++ b/src/views/securityManageCar/securityManageCar.vue
@@ -11,8 +11,8 @@
</template>
<template slot-scope="{type,size,row,index}" slot="menu">
<el-button icon="el-icon-view" :size="size" :type="type" @click="handleDetail(row)">地 图</el-button>
- <el-button icon="el-icon-edit" v-if="permission.range_edit" :size="size" :type="type"
- @click="$refs.crud.rowEdit(row, index)">编 辑</el-button>
+ <!-- <el-button icon="el-icon-edit" v-if="permission.range_edit" :size="size" :type="type"
+ @click="$refs.crud.rowEdit(row, index)">编 辑</el-button> -->
<el-button icon="el-icon-delete" v-if="permission.range_delete" :size="size" :type="type"
@click="$refs.crud.rowDel(row, index)">删 除</el-button>
</template>
@@ -59,6 +59,7 @@
viewBtn: false,
delBtn: false,
editBtn: false,
+ addBtn:false,
selection: true,
dialogClickModal: false,
column: [
@@ -101,9 +102,10 @@
label: "所属辖区",
prop: "deptId",
type: "tree",
- dicUrl: "api/blade-system/dept/lazy-list",
+ dicUrl: "api/blade-system/dept/getPoliceStationTree",
+ defaultExpandAll:"true",
props: {
- label: 'deptName',
+ label: 'name',
value: 'id',
children: 'children'
},
diff --git a/src/views/system/dept.vue b/src/views/system/dept.vue
index 3411d5e..dcc6ed3 100644
--- a/src/views/system/dept.vue
+++ b/src/views/system/dept.vue
@@ -179,6 +179,15 @@
}]
},
{
+ label: "单位编号",
+ prop: "code",
+ rules: [{
+ required: true,
+ message: "请输入单位编号",
+ trigger: "blur"
+ }]
+ },
+ {
label: "排序",
prop: "sort",
type: "number",
@@ -193,6 +202,7 @@
{
label: "备注",
prop: "remark",
+ span:24,
rules: [{
required: false,
message: "请输入备注",
diff --git a/src/views/system/user.vue b/src/views/system/user.vue
index c2a5997..7798f02 100644
--- a/src/views/system/user.vue
+++ b/src/views/system/user.vue
@@ -1,173 +1,101 @@
<template>
- <el-row>
- <el-col :span="5">
- <div class="box">
- <el-scrollbar>
- <basic-container>
- <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick"/>
- </basic-container>
- </el-scrollbar>
- </div>
- </el-col>
- <el-col :span="19">
- <basic-container>
- <avue-crud :option="option"
- :search.sync="search"
- :table-loading="loading"
- :data="data"
- ref="crud"
- v-model="form"
- :defaults.sync="defaults"
- :permission="permissionList"
- @row-del="rowDel"
- @row-update="rowUpdate"
- @row-save="rowSave"
- :before-open="beforeOpen"
- :page.sync="page"
- @search-change="searchChange"
- @search-reset="searchReset"
- @selection-change="selectionChange"
- @current-change="currentChange"
- @size-change="sizeChange"
- @refresh-change="refreshChange"
- @on-load="onLoad">
- <template slot="menuLeft">
- <el-button
- size="small"
- plain
- icon="el-icon-delete"
- v-if="permission.user_delete"
- @click="handleDelete">删 除
- </el-button>
- <el-button
- size="small"
- plain
- v-if="permission.user_role"
- icon="el-icon-user"
- @click="handleGrant">角色配置
- </el-button>
- <el-button
- size="small"
- plain
- v-if="permission.user_reset"
- icon="el-icon-refresh"
- @click="handleReset">密码重置
- </el-button>
- <el-button
- size="small"
- plain
- v-if="userInfo.role_name.indexOf('admin')"
- icon="el-icon-setting"
- @click="handlePlatform">平台配置
- </el-button>
- <el-button
- size="small"
- plain
- v-if="userInfo.role_name.indexOf('admin')"
- icon="el-icon-coordinate"
- @click="handleLock">账号解封
- </el-button>
- <el-button
- size="small"
- plain
- v-if="userInfo.role_name.indexOf('admin')"
- icon="el-icon-upload2"
- @click="handleImport">导入
- </el-button>
- <el-button
- size="small"
- plain
- v-if="userInfo.role_name.indexOf('admin')"
- icon="el-icon-download"
- @click="handleExport">导出
- </el-button>
- </template>
- <template slot-scope="{row}"
- slot="tenantName">
- <el-tag>{{row.tenantName}}</el-tag>
- </template>
- <template slot-scope="{row}"
- slot="roleName">
- <el-tag>{{row.roleName}}</el-tag>
- </template>
- <template slot-scope="{row}"
- slot="deptName">
- <el-tag>{{row.deptName}}</el-tag>
- </template>
- <template slot-scope="{row}"
- slot="userTypeName">
- <el-tag>{{row.userTypeName}}</el-tag>
- </template>
- </avue-crud>
- <el-dialog title="用户角色配置"
- append-to-body
- :visible.sync="roleBox"
- width="345px">
+ <el-row>
+ <el-col :span="5">
+ <div class="box">
+ <el-scrollbar>
+ <basic-container>
+ <avue-tree :option="treeOption" :data="treeData" @node-click="nodeClick" />
+ </basic-container>
+ </el-scrollbar>
+ </div>
+ </el-col>
+ <el-col :span="19">
+ <basic-container>
+ <avue-crud :option="option" :search.sync="search" :table-loading="loading" :data="data" ref="crud"
+ v-model="form" :defaults.sync="defaults" :permission="permissionList" @row-del="rowDel"
+ @row-update="rowUpdate" @row-save="rowSave" :before-open="beforeOpen" :page.sync="page"
+ @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+ @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange"
+ @on-load="onLoad">
+ <template slot="menuLeft">
+ <el-button size="small" plain icon="el-icon-delete" v-if="permission.user_delete"
+ @click="handleDelete">删 除
+ </el-button>
+ <el-button size="small" plain v-if="permission.user_role" icon="el-icon-user"
+ @click="handleGrant">角色配置
+ </el-button>
+ <el-button size="small" plain v-if="permission.user_reset" icon="el-icon-refresh"
+ @click="handleReset">密码重置
+ </el-button>
+ <el-button size="small" plain v-if="userInfo.role_name.indexOf('admin')" icon="el-icon-setting"
+ @click="handlePlatform">平台配置
+ </el-button>
+ <el-button size="small" plain v-if="userInfo.role_name.indexOf('admin')"
+ icon="el-icon-coordinate" @click="handleLock">账号解封
+ </el-button>
+ <el-button size="small" plain v-if="userInfo.role_name.indexOf('admin')" icon="el-icon-upload2"
+ @click="handleImport">导入
+ </el-button>
+ <el-button size="small" plain v-if="userInfo.role_name.indexOf('admin')" icon="el-icon-download"
+ @click="handleExport">导出
+ </el-button>
+ </template>
+ <template slot-scope="{row}" slot="tenantName">
+ <el-tag>{{ row.tenantName }}</el-tag>
+ </template>
+ <template slot-scope="{row}" slot="roleName">
+ <el-tag>{{ row.roleName }}</el-tag>
+ </template>
+ <template slot-scope="{row}" slot="deptName">
+ <el-tag>{{ row.deptName }}</el-tag>
+ </template>
+ <template slot-scope="{row}" slot="userTypeName">
+ <el-tag>{{ row.userTypeName }}</el-tag>
+ </template>
+ </avue-crud>
+ <el-dialog title="用户角色配置" append-to-body :visible.sync="roleBox" width="345px">
- <el-tree :data="roleGrantList"
- show-checkbox
- check-strictly
- default-expand-all
- node-key="id"
- ref="treeRole"
- :default-checked-keys="roleTreeObj"
- :props="props">
- </el-tree>
+ <el-tree :data="roleGrantList" show-checkbox check-strictly default-expand-all node-key="id"
+ ref="treeRole" :default-checked-keys="roleTreeObj" :props="props">
+ </el-tree>
- <span slot="footer" class="dialog-footer">
- <el-button @click="roleBox = false">取 消</el-button>
- <el-button type="primary"
- @click="submitRole">确 定</el-button>
- </span>
- </el-dialog>
- <el-dialog title="用户数据导入"
- append-to-body
- :visible.sync="excelBox"
- width="555px">
- <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
- <template slot="excelTemplate">
- <el-button type="primary" @click="handleTemplate">
- 点击下载<i class="el-icon-download el-icon--right"></i>
- </el-button>
- </template>
- </avue-form>
- </el-dialog>
- <el-dialog title="用户平台配置"
- append-to-body
- :visible.sync="platformBox">
- <avue-crud :option="platformOption"
- :table-loading="platformLoading"
- :data="platformData"
- ref="platformCrud"
- v-model="platformForm"
- :before-open="platformBeforeOpen"
- :page.sync="platformPage"
- :permission="platformPermissionList"
- @row-update="platformRowUpdate"
- @search-change="platformSearchChange"
- @search-reset="platformSearchReset"
- @selection-change="platformSelectionChange"
- @current-change="platformCurrentChange"
- @size-change="platformSizeChange"
- @refresh-change="platformRefreshChange"
- @on-load="platformOnLoad">
- <template slot-scope="{row}"
- slot="tenantName">
- <el-tag>{{row.tenantName}}</el-tag>
- </template>
- <template slot-scope="{row}"
- slot="userTypeName">
- <el-tag>{{row.userTypeName}}</el-tag>
- </template>
- </avue-crud>
- </el-dialog>
- </basic-container>
- </el-col>
- </el-row>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="roleBox = false">取 消</el-button>
+ <el-button type="primary" @click="submitRole">确 定</el-button>
+ </span>
+ </el-dialog>
+ <el-dialog title="用户数据导入" append-to-body :visible.sync="excelBox" width="555px">
+ <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
+ <template slot="excelTemplate">
+ <el-button type="primary" @click="handleTemplate">
+ 点击下载<i class="el-icon-download el-icon--right"></i>
+ </el-button>
+ </template>
+ </avue-form>
+ </el-dialog>
+ <el-dialog title="用户平台配置" append-to-body :visible.sync="platformBox">
+ <avue-crud :option="platformOption" :table-loading="platformLoading" :data="platformData"
+ ref="platformCrud" v-model="platformForm" :before-open="platformBeforeOpen"
+ :page.sync="platformPage" :permission="platformPermissionList" @row-update="platformRowUpdate"
+ @search-change="platformSearchChange" @search-reset="platformSearchReset"
+ @selection-change="platformSelectionChange" @current-change="platformCurrentChange"
+ @size-change="platformSizeChange" @refresh-change="platformRefreshChange"
+ @on-load="platformOnLoad">
+ <template slot-scope="{row}" slot="tenantName">
+ <el-tag>{{ row.tenantName }}</el-tag>
+ </template>
+ <template slot-scope="{row}" slot="userTypeName">
+ <el-tag>{{ row.userTypeName }}</el-tag>
+ </template>
+ </avue-crud>
+ </el-dialog>
+ </basic-container>
+ </el-col>
+ </el-row>
</template>
<script>
- import {
+import {
getList,
getUser,
getUserPlatform,
@@ -177,881 +105,881 @@
add,
grant,
resetPassword, unlock
- } from "@/api/system/user";
- import {exportBlob} from "@/api/common";
- import {getDeptTree, getDeptLazyTree} from "@/api/system/dept";
- import {getRoleTree} from "@/api/system/role";
- import {getPostList} from "@/api/system/post";
- import {mapGetters} from "vuex";
- import website from '@/config/website';
- import {getToken} from '@/util/auth';
- import {downloadXls} from "@/util/util";
- import {dateNow} from "@/util/date";
- import NProgress from 'nprogress';
- import 'nprogress/nprogress.css';
- import func from "@/util/func";
+} from "@/api/system/user"
+import { exportBlob } from "@/api/common"
+import { getDeptTree, getDeptLazyTree } from "@/api/system/dept"
+import { getRoleTree } from "@/api/system/role"
+// import {getPostList} from "@/api/system/post";
+import { mapGetters } from "vuex"
+import website from '@/config/website'
+import { getToken } from '@/util/auth'
+import { downloadXls } from "@/util/util"
+import { dateNow } from "@/util/date"
+import NProgress from 'nprogress'
+import 'nprogress/nprogress.css'
+import func from "@/util/func"
- export default {
- data() {
- const validatePass = (rule, value, callback) => {
- if (value === '') {
- callback(new Error('请输入密码'));
- } else {
- callback();
- }
- };
- const validatePass2 = (rule, value, callback) => {
- if (value === '') {
- callback(new Error('请再次输入密码'));
- } else if (value !== this.form.password) {
- callback(new Error('两次输入密码不一致!'));
- } else {
- callback();
- }
- };
- return {
- form: {},
- search:{},
- roleBox: false,
- excelBox: false,
- platformBox: false,
- initFlag: true,
- selectionList: [],
- query: {},
- loading: true,
- platformLoading: false,
- page: {
- pageSize: 10,
- currentPage: 1,
- total: 0
- },
- platformPage: {
- pageSize: 10,
- currentPage: 1,
- total: 0
- },
- init: {
- roleTree: [],
- deptTree: [],
- },
- props: {
- label: "title",
- value: "key"
- },
- roleGrantList: [],
- roleTreeObj: [],
- treeDeptId: '',
- treeData: [],
- treeOption: {
- nodeKey: 'id',
- lazy: true,
- treeLoad: function (node, resolve) {
- const parentId = (node.level === 0) ? 0 : node.data.id;
- getDeptLazyTree(parentId).then(res => {
- resolve(res.data.data.map(item => {
- return {
- ...item,
- leaf: !item.hasChildren
- }
- }))
- });
- },
- addBtn: false,
- menu: false,
- size: 'small',
- props: {
- labelText: '标题',
- label: 'title',
- value: 'value',
- children: 'children'
- }
- },
- option: {
- height: 'auto',
- calcHeight: 80,
- tip: false,
- searchShow: true,
- searchMenuSpan: 6,
- border: true,
- index: true,
- selection: true,
- menuWidth:250,
- viewBtn: true,
- dialogType: 'drawer',
- dialogClickModal: false,
- column: [
- {
- label: "登录账号",
- prop: "account",
- search: true,
- display: false
- },
- {
- label: "所属租户",
- prop: "tenantName",
- slot: true,
- display: false,
- hide: true
- },
- {
- label: "用户姓名",
- prop: "realName",
- search: true,
- display: false
- },
- {
- label: "所属角色",
- prop: "roleName",
- slot: true,
- display: false
- },
- {
- label: "所属单位",
- prop: "deptName",
- slot: true,
- display: false
- },
- {
- label: "用户平台",
- prop: "userTypeName",
- slot: true,
- display: false
- },
- {
- label: "用户平台",
- type: "select",
- dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
- props: {
- label: "dictValue",
- value: "dictKey"
- },
- dataType: "number",
- search: true,
- hide: true,
- display: false,
- prop: "userType",
- rules: [{
- required: true,
- message: "请选择用户平台",
- trigger: "blur"
- }]
- },
- ],
- group: [
- {
- label: '基础信息',
- prop: 'baseInfo',
- icon: 'el-icon-user-solid',
- column: [
- {
- label: "所属租户",
- prop: "tenantId",
- type: "tree",
- dicUrl: "/api/blade-system/tenant/select",
- props: {
- label: "tenantName",
- value: "tenantId"
- },
- hide: !website.tenantMode,
- addDisplay: website.tenantMode,
- editDisplay: website.tenantMode,
- viewDisplay: website.tenantMode,
- rules: [{
- required: true,
- message: "请输入所属租户",
- trigger: "click"
- }],
- span: 24,
- },
- {
- label: "登录账号",
- prop: "account",
- rules: [{
- required: true,
- message: "请输入登录账号",
- trigger: "blur"
- }],
- },
- {
- label: "用户平台",
- type: "select",
- dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
- props: {
- label: "dictValue",
- value: "dictKey"
- },
- dataType: "number",
- slot: true,
- prop: "userType",
- rules: [{
- required: true,
- message: "请选择用户平台",
- trigger: "blur"
- }]
- },
- {
- label: '密码',
- prop: 'password',
- hide: true,
- editDisplay: false,
- viewDisplay: false,
- rules: [{required: true, validator: validatePass, trigger: 'blur'}]
- },
- {
- label: '确认密码',
- prop: 'password2',
- hide: true,
- editDisplay: false,
- viewDisplay: false,
- rules: [{required: true, validator: validatePass2, trigger: 'blur'}]
- },
- ]
- },
- {
- label: '详细信息',
- prop: 'detailInfo',
- icon: 'el-icon-s-order',
- column: [
- {
- label: "用户昵称",
- prop: "name",
- hide: true,
- rules: [{
- required: true,
- message: "请输入用户昵称",
- trigger: "blur"
- }]
- },
- {
- label: "用户姓名",
- prop: "realName",
- rules: [{
- required: true,
- message: "请输入用户姓名",
- trigger: "blur"
- }, {
- min: 2,
- max: 10,
- message: '姓名长度在2到5个字符'
- }]
- },
- {
- label: "手机号码",
- prop: "phone",
- overHidden: true
- },
- {
- label: "电子邮箱",
- prop: "email",
- hide: true,
- overHidden: true
- },
- {
- label: "用户性别",
- prop: "sex",
- type: "select",
- dicData: [
- {
- label: "男",
- value: 1
- },
- {
- label: "女",
- value: 2
- },
- {
- label: "未知",
- value: 3
- }
- ],
- hide: true
- },
- {
- label: "用户生日",
- type: "date",
- prop: "birthday",
- format: "yyyy-MM-dd hh:mm:ss",
- valueFormat: "yyyy-MM-dd hh:mm:ss",
- hide: true
- },
- {
- label: "账号状态",
- prop: "statusName",
- hide: true,
- display: false
- }
- ]
- },
- {
- label: '职责信息',
- prop: 'dutyInfo',
- icon: 'el-icon-s-custom',
- column: [
- {
- label: "用户编号",
- prop: "code",
- },
- {
- label: "所属角色",
- prop: "roleId",
- multiple: true,
- type: "tree",
- dicData: [],
- props: {
- label: "title"
- },
- /*control:() =>{
- if (this.userInfo.role_name.indexOf("administrator")){
- debugger
- return{
- roleId:{
- disabled:true
- }
- }
- }
- },*/
- checkStrictly: true,
- slot: true,
- rules: [{
- required: true,
- message: "请选择所属角色",
- trigger: "click"
- }]
- },
- {
- label: "所属单位",
- prop: "deptId",
- type: "tree",
- multiple: true,
- dicData: [],
- props: {
- label: "title"
- },
- checkStrictly: true,
- slot: true,
- rules: [{
- required: true,
- message: "请选择所属单位",
- trigger: "click"
- }]
- },
-/* {
- label: "所属岗位",
- prop: "postId",
- type: "tree",
- multiple: true,
- dicData: [],
- props: {
- label: "postName",
- value: "id"
- },
- rules: [{
- required: true,
- message: "请选择所属岗位",
- trigger: "click"
- }],
- },*/
- ]
- },
- ]
- },
- data: [],
- platformQuery: {},
- platformSelectionList: [],
- platformData: [],
- platformForm: {},
- platformOption: {
- tip: false,
- searchShow: true,
- searchMenuSpan: 6,
- border: true,
- index: true,
- selection: true,
- viewBtn: true,
- dialogClickModal: false,
- menuWidth: 120,
- editBtnText: '配置',
- column: [
- {
- label: "登录账号",
- prop: "account",
- search: true,
- display: false
- },
- {
- label: "所属租户",
- prop: "tenantName",
- slot: true,
- display: false
- },
- {
- label: "用户姓名",
- prop: "realName",
- search: true,
- display: false
- },
- {
- label: "用户平台",
- prop: "userTypeName",
- slot: true,
- display: false
- },
- {
- label: "用户平台",
- type: "select",
- dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
- props: {
- label: "dictValue",
- value: "dictKey"
- },
- dataType: "number",
- search: true,
- hide: true,
- display: false,
- prop: "userType",
- rules: [{
- required: true,
- message: "请选择用户平台",
- trigger: "blur"
- }]
- },
- {
- label: "用户拓展",
- prop: "userExt",
- type: "textarea",
- minRows: 8,
- span: 24,
- overHidden: true,
- row: true,
- hide: true,
- },
- ],
- },
- excelForm: {},
- excelOption: {
- submitBtn: false,
- emptyBtn: false,
- column: [
- {
- label: '模板上传',
- prop: 'excelFile',
- type: 'upload',
- drag: true,
- loadText: '模板上传中,请稍等',
- span: 24,
- propsHttp: {
- res: 'data'
- },
- tip: '请上传 .xls,.xlsx 标准格式文件',
- action: "/api/blade-user/import-user"
- },
- {
- label: "数据覆盖",
- prop: "isCovered",
- type: "switch",
- align: "center",
- width: 80,
- dicData: [
- {
- label: "否",
- value: 0
- },
- {
- label: "是",
- value: 1
- }
- ],
- value: 0,
- slot: true,
- rules: [
- {
- required: true,
- message: "请选择是否覆盖",
- trigger: "blur"
- }
- ]
- },
- {
- label: '模板下载',
- prop: 'excelTemplate',
- formslot: true,
- span: 24,
+export default {
+ data () {
+ const validatePass = (rule, value, callback) => {
+ if (value === '') {
+ callback(new Error('请输入密码'))
+ } else {
+ callback()
}
- ]
}
- };
+ const validatePass2 = (rule, value, callback) => {
+ if (value === '') {
+ callback(new Error('请再次输入密码'))
+ } else if (value !== this.form.password) {
+ callback(new Error('两次输入密码不一致!'))
+ } else {
+ callback()
+ }
+ }
+ return {
+ form: {},
+ search: {},
+ roleBox: false,
+ excelBox: false,
+ platformBox: false,
+ initFlag: true,
+ selectionList: [],
+ query: {},
+ loading: true,
+ platformLoading: false,
+ page: {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0
+ },
+ platformPage: {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0
+ },
+ init: {
+ roleTree: [],
+ deptTree: [],
+ },
+ props: {
+ label: "title",
+ value: "key"
+ },
+ roleGrantList: [],
+ roleTreeObj: [],
+ treeDeptId: '',
+ treeData: [],
+ treeOption: {
+ nodeKey: 'id',
+ lazy: true,
+ treeLoad: function (node, resolve) {
+ const parentId = (node.level === 0) ? 0 : node.data.id
+ getDeptLazyTree(parentId).then(res => {
+ resolve(res.data.data.map(item => {
+ return {
+ ...item,
+ leaf: !item.hasChildren
+ }
+ }))
+ })
+ },
+ addBtn: false,
+ menu: false,
+ size: 'small',
+ props: {
+ labelText: '标题',
+ label: 'title',
+ value: 'value',
+ children: 'children'
+ }
+ },
+ option: {
+ height: 'auto',
+ calcHeight: 80,
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 6,
+ border: true,
+ index: true,
+ selection: true,
+ menuWidth: 250,
+ viewBtn: true,
+ dialogType: 'drawer',
+ dialogClickModal: false,
+ column: [
+ {
+ label: "登录账号",
+ prop: "account",
+ search: true,
+ display: false
+ },
+ {
+ label: "所属租户",
+ prop: "tenantName",
+ slot: true,
+ display: false,
+ hide: true
+ },
+ {
+ label: "用户姓名",
+ prop: "realName",
+ search: true,
+ display: false
+ },
+ {
+ label: "所属角色",
+ prop: "roleName",
+ slot: true,
+ display: false
+ },
+ {
+ label: "所属单位",
+ prop: "deptName",
+ slot: true,
+ display: false
+ },
+ {
+ label: "用户平台",
+ prop: "userTypeName",
+ slot: true,
+ display: false
+ },
+ {
+ label: "用户平台",
+ type: "select",
+ dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
+ props: {
+ label: "dictValue",
+ value: "dictKey"
+ },
+ dataType: "number",
+ search: true,
+ hide: true,
+ display: false,
+ prop: "userType",
+ rules: [{
+ required: true,
+ message: "请选择用户平台",
+ trigger: "blur"
+ }]
+ },
+ ],
+ group: [
+ {
+ label: '基础信息',
+ prop: 'baseInfo',
+ icon: 'el-icon-user-solid',
+ column: [
+ {
+ label: "所属租户",
+ prop: "tenantId",
+ type: "tree",
+ dicUrl: "/api/blade-system/tenant/select",
+ props: {
+ label: "tenantName",
+ value: "tenantId"
+ },
+ hide: !website.tenantMode,
+ addDisplay: website.tenantMode,
+ editDisplay: website.tenantMode,
+ viewDisplay: website.tenantMode,
+ rules: [{
+ required: true,
+ message: "请输入所属租户",
+ trigger: "click"
+ }],
+ span: 24,
+ },
+ {
+ label: "登录账号",
+ prop: "account",
+ rules: [{
+ required: true,
+ message: "请输入登录账号",
+ trigger: "blur"
+ }],
+ },
+ {
+ label: "用户平台",
+ type: "select",
+ dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
+ props: {
+ label: "dictValue",
+ value: "dictKey"
+ },
+ dataType: "number",
+ slot: true,
+ prop: "userType",
+ rules: [{
+ required: true,
+ message: "请选择用户平台",
+ trigger: "blur"
+ }]
+ },
+ {
+ label: '密码',
+ prop: 'password',
+ hide: true,
+ editDisplay: false,
+ viewDisplay: false,
+ rules: [{ required: true, validator: validatePass, trigger: 'blur' }]
+ },
+ {
+ label: '确认密码',
+ prop: 'password2',
+ hide: true,
+ editDisplay: false,
+ viewDisplay: false,
+ rules: [{ required: true, validator: validatePass2, trigger: 'blur' }]
+ },
+ ]
+ },
+ {
+ label: '详细信息',
+ prop: 'detailInfo',
+ icon: 'el-icon-s-order',
+ column: [
+ {
+ label: "用户昵称",
+ prop: "name",
+ hide: true,
+ rules: [{
+ required: true,
+ message: "请输入用户昵称",
+ trigger: "blur"
+ }]
+ },
+ {
+ label: "用户姓名",
+ prop: "realName",
+ rules: [{
+ required: true,
+ message: "请输入用户姓名",
+ trigger: "blur"
+ }, {
+ min: 2,
+ max: 10,
+ message: '姓名长度在2到5个字符'
+ }]
+ },
+ {
+ label: "手机号码",
+ prop: "phone",
+ overHidden: true
+ },
+ {
+ label: "电子邮箱",
+ prop: "email",
+ hide: true,
+ overHidden: true
+ },
+ {
+ label: "用户性别",
+ prop: "sex",
+ type: "select",
+ dicData: [
+ {
+ label: "男",
+ value: 1
+ },
+ {
+ label: "女",
+ value: 2
+ },
+ {
+ label: "未知",
+ value: 3
+ }
+ ],
+ hide: true
+ },
+ {
+ label: "用户生日",
+ type: "date",
+ prop: "birthday",
+ format: "yyyy-MM-dd hh:mm:ss",
+ valueFormat: "yyyy-MM-dd hh:mm:ss",
+ hide: true
+ },
+ {
+ label: "账号状态",
+ prop: "statusName",
+ hide: true,
+ display: false
+ }
+ ]
+ },
+ {
+ label: '职责信息',
+ prop: 'dutyInfo',
+ icon: 'el-icon-s-custom',
+ column: [
+ {
+ label: "用户编号",
+ prop: "code",
+ },
+ {
+ label: "所属角色",
+ prop: "roleId",
+ // multiple: true,
+ type: "tree",
+ dicData: [],
+ props: {
+ label: "title"
+ },
+ /*control:() =>{
+ if (this.userInfo.role_name.indexOf("administrator")){
+ debugger
+ return{
+ roleId:{
+ disabled:true
+ }
+ }
+ }
+ },*/
+ checkStrictly: true,
+ slot: true,
+ rules: [{
+ required: true,
+ message: "请选择所属角色",
+ trigger: "click"
+ }]
+ },
+ {
+ label: "所属单位",
+ prop: "deptId",
+ type: "tree",
+ // multiple: true,
+ dicData: [],
+ props: {
+ label: "title"
+ },
+ checkStrictly: true,
+ slot: true,
+ rules: [{
+ required: true,
+ message: "请选择所属单位",
+ trigger: "click"
+ }]
+ },
+ /* {
+ label: "所属岗位",
+ prop: "postId",
+ type: "tree",
+ multiple: true,
+ dicData: [],
+ props: {
+ label: "postName",
+ value: "id"
+ },
+ rules: [{
+ required: true,
+ message: "请选择所属岗位",
+ trigger: "click"
+ }],
+ },*/
+ ]
+ },
+ ]
+ },
+ data: [],
+ platformQuery: {},
+ platformSelectionList: [],
+ platformData: [],
+ platformForm: {},
+ platformOption: {
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 6,
+ border: true,
+ index: true,
+ selection: true,
+ viewBtn: true,
+ dialogClickModal: false,
+ menuWidth: 120,
+ editBtnText: '配置',
+ column: [
+ {
+ label: "登录账号",
+ prop: "account",
+ search: true,
+ display: false
+ },
+ {
+ label: "所属租户",
+ prop: "tenantName",
+ slot: true,
+ display: false
+ },
+ {
+ label: "用户姓名",
+ prop: "realName",
+ search: true,
+ display: false
+ },
+ {
+ label: "用户平台",
+ prop: "userTypeName",
+ slot: true,
+ display: false
+ },
+ {
+ label: "用户平台",
+ type: "select",
+ dicUrl: "/api/blade-system/dict/dictionary?code=user_type",
+ props: {
+ label: "dictValue",
+ value: "dictKey"
+ },
+ dataType: "number",
+ search: true,
+ hide: true,
+ display: false,
+ prop: "userType",
+ rules: [{
+ required: true,
+ message: "请选择用户平台",
+ trigger: "blur"
+ }]
+ },
+ {
+ label: "用户拓展",
+ prop: "userExt",
+ type: "textarea",
+ minRows: 8,
+ span: 24,
+ overHidden: true,
+ row: true,
+ hide: true,
+ },
+ ],
+ },
+ excelForm: {},
+ excelOption: {
+ submitBtn: false,
+ emptyBtn: false,
+ column: [
+ {
+ label: '模板上传',
+ prop: 'excelFile',
+ type: 'upload',
+ drag: true,
+ loadText: '模板上传中,请稍等',
+ span: 24,
+ propsHttp: {
+ res: 'data'
+ },
+ tip: '请上传 .xls,.xlsx 标准格式文件',
+ action: "/api/blade-user/import-user"
+ },
+ {
+ label: "数据覆盖",
+ prop: "isCovered",
+ type: "switch",
+ align: "center",
+ width: 80,
+ dicData: [
+ {
+ label: "否",
+ value: 0
+ },
+ {
+ label: "是",
+ value: 1
+ }
+ ],
+ value: 0,
+ slot: true,
+ rules: [
+ {
+ required: true,
+ message: "请选择是否覆盖",
+ trigger: "blur"
+ }
+ ]
+ },
+ {
+ label: '模板下载',
+ prop: 'excelTemplate',
+ formslot: true,
+ span: 24,
+ }
+ ]
+ }
+ }
},
watch: {
- 'form.tenantId'() {
- if (this.form.tenantId !== '' && this.initFlag) {
- this.initData(this.form.tenantId);
+ 'form.tenantId' () {
+ if (this.form.tenantId !== '' && this.initFlag) {
+ this.initData(this.form.tenantId)
+ }
+ },
+ 'excelForm.isCovered' () {
+ if (this.excelForm.isCovered !== '') {
+ const column = this.findObject(this.excelOption.column, "excelFile")
+ column.action = `/api/blade-user/import-user?isCovered=${this.excelForm.isCovered}`
+ }
}
- },
- 'excelForm.isCovered'() {
- if (this.excelForm.isCovered !== '') {
- const column = this.findObject(this.excelOption.column, "excelFile");
- column.action = `/api/blade-user/import-user?isCovered=${this.excelForm.isCovered}`;
- }
- }
},
computed: {
- ...mapGetters(["userInfo", "permission"]),
- permissionList() {
- return {
- addBtn: this.vaildData(this.permission.user_add, false),
- viewBtn: this.vaildData(this.permission.user_view, false),
- delBtn: this.vaildData(this.permission.user_delete, false),
- editBtn: this.vaildData(this.permission.user_edit, false)
- };
- },
- platformPermissionList() {
- return {
- addBtn: false,
- viewBtn: false,
- delBtn: false,
- editBtn: this.vaildData(this.permission.user_edit, false)
- };
- },
- ids() {
- let ids = [];
- this.selectionList.forEach(ele => {
- ids.push(ele.id);
- });
- return ids.join(",");
- },
+ ...mapGetters(["userInfo", "permission"]),
+ permissionList () {
+ return {
+ addBtn: this.vaildData(this.permission.user_add, false),
+ viewBtn: this.vaildData(this.permission.user_view, false),
+ delBtn: this.vaildData(this.permission.user_delete, false),
+ editBtn: this.vaildData(this.permission.user_edit, false)
+ }
+ },
+ platformPermissionList () {
+ return {
+ addBtn: false,
+ viewBtn: false,
+ delBtn: false,
+ editBtn: this.vaildData(this.permission.user_edit, false)
+ }
+ },
+ ids () {
+ let ids = []
+ this.selectionList.forEach(ele => {
+ ids.push(ele.id)
+ })
+ return ids.join(",")
+ },
},
- mounted() {
- // 非租户模式默认加载管理组数据
- if (!website.tenantMode) {
- this.initData(website.tenantId);
- }
+ mounted () {
+ // 非租户模式默认加载管理组数据
+ if (!website.tenantMode) {
+ this.initData(website.tenantId)
+ }
},
methods: {
- nodeClick(data) {
- this.treeDeptId = data.id;
- this.page.currentPage = 1;
- this.onLoad(this.page);
- },
- initData(tenantId) {
- getRoleTree(tenantId).then(res => {
- const column = this.findObject(this.option.group, "roleId");
- res.data.data[0].disabled = true;
- // res.data.data[1].disabled = true;
- column.dicData = res.data.data;
- });
- getDeptTree(tenantId).then(res => {
- const column = this.findObject(this.option.group, "deptId");
- column.dicData = res.data.data;
- });
- //getPostList(tenantId).then(res => {
- // const column = this.findObject(this.option.group, "postId");
- // column.dicData = res.data.data;
- //});
- },
- submitRole() {
- const roleList = this.$refs.treeRole.getCheckedKeys().join(",");
- grant(this.ids, roleList).then(() => {
- this.roleBox = false;
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- this.onLoad(this.page);
- });
- },
- rowSave(row, done, loading) {
- row.deptId = row.deptId.join(",");
- row.roleId = row.roleId.join(",");
- // row.postId = row.postId.join(",");
- row.postId = '';
- add(row).then(() => {
- this.initFlag = false;
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- done();
- }, error => {
- window.console.log(error);
- loading();
- });
- },
- rowUpdate(row, index, done, loading) {
- row.deptId = row.deptId.join(",");
- row.roleId = row.roleId.join(",");
- // row.postId = row.postId.join(",");
- row.postId = '';
- update(row).then(() => {
- this.initFlag = false;
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- done();
- }, error => {
- window.console.log(error);
- loading();
- });
- },
- rowDel(row) {
- this.$confirm("确定将选择数据删除?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- })
- .then(() => {
- return remove(row.id);
- })
- .then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- });
- },
- searchReset() {
- this.query = {};
- this.treeDeptId = '';
- this.onLoad(this.page);
- },
- searchChange(params, done) {
- this.query = params;
- this.page.currentPage = 1;
- this.onLoad(this.page, params);
- done();
- },
- selectionChange(list) {
- this.selectionList = list;
- },
- selectionClear() {
- this.selectionList = [];
- this.$refs.crud.toggleSelection();
- },
- handleDelete() {
- if (this.selectionList.length === 0) {
- this.$message.warning("请选择至少一条数据");
- return;
- }
- this.$confirm("确定将选择数据删除?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- })
- .then(() => {
- return remove(this.ids);
- })
- .then(() => {
- this.onLoad(this.page);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- this.$refs.crud.toggleSelection();
- });
- },
- handleReset() {
- if (this.selectionList.length === 0) {
- this.$message.warning("请选择至少一条数据");
- return;
- }
- this.$confirm("确定将选择账号密码重置为123456?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- })
- .then(() => {
- return resetPassword(this.ids);
- })
- .then(() => {
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- this.$refs.crud.toggleSelection();
- });
- },
- handleGrant() {
- if (this.selectionList.length === 0) {
- this.$message.warning("请选择至少一条数据");
- return;
- }
- this.roleTreeObj = [];
- if (this.selectionList.length === 1) {
- this.roleTreeObj = this.selectionList[0].roleId.split(",");
- }
- getRoleTree().then(res => {
- this.roleGrantList = res.data.data;
- this.roleBox = true;
- });
- },
- handlePlatform() {
- this.platformBox = true;
- },
- handleLock() {
- if (this.selectionList.length === 0) {
- this.$message.warning("请选择至少一条数据");
- return;
- }
- this.$confirm("确定将选择账号解封?", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- })
- .then(() => {
- return unlock(this.ids);
- })
- .then(() => {
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- });
- },
- handleImport() {
- this.excelBox = true;
- },
- uploadAfter(res, done, loading, column) {
- window.console.log(column);
- this.excelBox = false;
- this.refreshChange();
- done();
- },
- handleExport() {
- const account = func.toStr(this.search.account);
- const realName = func.toStr(this.search.realName);
- this.$confirm("是否导出用户数据?", "提示", {
- confirmButtonText: "确定",
- cancelButtonText: "取消",
- type: "warning"
- }).then(() => {
- NProgress.start();
- exportBlob(`/api/blade-user/export-user?${this.website.tokenHeader}=${getToken()}&account=${account}&realName=${realName}`).then(res => {
- downloadXls(res.data, `用户数据表${dateNow()}.xlsx`);
- NProgress.done();
- })
- });
- },
- handleTemplate() {
- exportBlob(`/api/blade-user/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => {
- downloadXls(res.data, "用户数据模板.xlsx");
- })
- },
- beforeOpen(done, type) {
- if (["edit", "view"].indexOf(type)) {
- getUser(this.form.id).then(res => {
- this.form = res.data.data;
- if(this.form.hasOwnProperty("deptId")){
- this.form.deptId = this.form.deptId.split(",");
+ nodeClick (data) {
+ this.treeDeptId = data.id
+ this.page.currentPage = 1
+ this.onLoad(this.page)
+ },
+ initData (tenantId) {
+ getRoleTree(tenantId).then(res => {
+ const column = this.findObject(this.option.group, "roleId")
+ res.data.data[0].disabled = true
+ // res.data.data[1].disabled = true;
+ column.dicData = res.data.data
+ })
+ getDeptTree(tenantId).then(res => {
+ const column = this.findObject(this.option.group, "deptId")
+ column.dicData = res.data.data
+ })
+ //getPostList(tenantId).then(res => {
+ // const column = this.findObject(this.option.group, "postId");
+ // column.dicData = res.data.data;
+ //});
+ },
+ submitRole () {
+ const roleList = this.$refs.treeRole.getCheckedKeys().join(",")
+ grant(this.ids, roleList).then(() => {
+ this.roleBox = false
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ })
+ this.onLoad(this.page)
+ })
+ },
+ rowSave (row, done, loading) {
+ // row.deptId = row.deptId.join(",")
+ // row.roleId = row.roleId.join(",")
+ // row.postId = row.postId.join(",");
+ row.postId = ''
+ add(row).then(() => {
+ this.initFlag = false
+ this.onLoad(this.page)
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ })
+ done()
+ }, error => {
+ window.console.log(error)
+ loading()
+ })
+ },
+ rowUpdate (row, index, done, loading) {
+ // row.deptId = row.deptId.join(",")
+ // row.roleId = row.roleId.join(",")
+ // row.postId = row.postId.join(",");
+ row.postId = ''
+ update(row).then(() => {
+ this.initFlag = false
+ this.onLoad(this.page)
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ })
+ done()
+ }, error => {
+ window.console.log(error)
+ loading()
+ })
+ },
+ rowDel (row) {
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(row.id)
+ })
+ .then(() => {
+ this.onLoad(this.page)
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ })
+ })
+ },
+ searchReset () {
+ this.query = {}
+ this.treeDeptId = ''
+ this.onLoad(this.page)
+ },
+ searchChange (params, done) {
+ this.query = params
+ this.page.currentPage = 1
+ this.onLoad(this.page, params)
+ done()
+ },
+ selectionChange (list) {
+ this.selectionList = list
+ },
+ selectionClear () {
+ this.selectionList = []
+ this.$refs.crud.toggleSelection()
+ },
+ handleDelete () {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据")
+ return
}
- if(this.form.hasOwnProperty("roleId")){
- this.form.roleId = this.form.roleId.split(",");
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(this.ids)
+ })
+ .then(() => {
+ this.onLoad(this.page)
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ })
+ this.$refs.crud.toggleSelection()
+ })
+ },
+ handleReset () {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据")
+ return
}
- if(this.form.hasOwnProperty("postId")){
- this.form.postId = this.form.postId.split(",");
+ this.$confirm("确定将选择账号密码重置为123456?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return resetPassword(this.ids)
+ })
+ .then(() => {
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ })
+ this.$refs.crud.toggleSelection()
+ })
+ },
+ handleGrant () {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据")
+ return
}
- });
- }
- this.initFlag = true;
- done();
- },
- currentChange(currentPage) {
- this.page.currentPage = currentPage;
- },
- sizeChange(pageSize) {
- this.page.pageSize = pageSize;
- },
- refreshChange() {
- this.onLoad(this.page, this.query);
- },
- onLoad(page, params = {}) {
- this.loading = true;
+ this.roleTreeObj = []
+ if (this.selectionList.length === 1) {
+ this.roleTreeObj = this.selectionList[0].roleId.split(",")
+ }
+ getRoleTree().then(res => {
+ this.roleGrantList = res.data.data
+ this.roleBox = true
+ })
+ },
+ handlePlatform () {
+ this.platformBox = true
+ },
+ handleLock () {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据")
+ return
+ }
+ this.$confirm("确定将选择账号解封?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return unlock(this.ids)
+ })
+ .then(() => {
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ })
+ })
+ },
+ handleImport () {
+ this.excelBox = true
+ },
+ uploadAfter (res, done, loading, column) {
+ window.console.log(column)
+ this.excelBox = false
+ this.refreshChange()
+ done()
+ },
+ handleExport () {
+ const account = func.toStr(this.search.account)
+ const realName = func.toStr(this.search.realName)
+ this.$confirm("是否导出用户数据?", "提示", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ }).then(() => {
+ NProgress.start()
+ exportBlob(`/api/blade-user/export-user?${this.website.tokenHeader}=${getToken()}&account=${account}&realName=${realName}`).then(res => {
+ downloadXls(res.data, `用户数据表${dateNow()}.xlsx`)
+ NProgress.done()
+ })
+ })
+ },
+ handleTemplate () {
+ exportBlob(`/api/blade-user/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => {
+ downloadXls(res.data, "用户数据模板.xlsx")
+ })
+ },
+ beforeOpen (done, type) {
+ if (["edit", "view"].includes(type)) {
+ getUser(this.form.id).then(res => {
+ this.form = res.data.data
+ // if (this.form.hasOwnProperty("deptId")) {
+ // this.form.deptId = this.form.deptId.split(",")
+ // }
+ // if (this.form.hasOwnProperty("roleId")) {
+ // this.form.roleId = this.form.roleId.split(",")
+ // }
+ // if (this.form.hasOwnProperty("postId")) {
+ // this.form.postId = this.form.postId.split(",")
+ // }
+ })
+ }
+ this.initFlag = true
+ done()
+ },
+ currentChange (currentPage) {
+ this.page.currentPage = currentPage
+ },
+ sizeChange (pageSize) {
+ this.page.pageSize = pageSize
+ },
+ refreshChange () {
+ this.onLoad(this.page, this.query)
+ },
+ onLoad (page, params = {}) {
+ this.loading = true
- if (this.userInfo.role_name != "admin" && this.userInfo.role_name != "administrator"){
- params["jurisdiction"] = this.userInfo.dept_id;
- }
+ if (this.userInfo.role_name != "admin" && this.userInfo.role_name != "administrator") {
+ params["jurisdiction"] = this.userInfo.dept_id
+ }
- getList(page.currentPage, page.pageSize, Object.assign(params, this.query), this.treeDeptId).then(res => {
- const data = res.data.data;
- this.page.total = data.total;
- this.data = data.records;
- this.loading = false;
- this.selectionClear();
- });
- },
- platformRowUpdate(row, index, done, loading) {
- updatePlatform(row.id, row.userType, row.userExt).then(() => {
- this.platformOnLoad(this.platformPage);
- this.$message({
- type: "success",
- message: "操作成功!"
- });
- done();
- }, error => {
- window.console.log(error);
- loading();
- });
- },
- platformBeforeOpen(done, type) {
- if (["edit", "view"].indexOf(type)) {
- getUserPlatform(this.platformForm.id).then(res => {
- this.platformForm = res.data.data;
- });
+ getList(page.currentPage, page.pageSize, Object.assign(params, this.query), this.treeDeptId).then(res => {
+ const data = res.data.data
+ this.page.total = data.total
+ this.data = data.records
+ this.loading = false
+ this.selectionClear()
+ })
+ },
+ platformRowUpdate (row, index, done, loading) {
+ updatePlatform(row.id, row.userType, row.userExt).then(() => {
+ this.platformOnLoad(this.platformPage)
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ })
+ done()
+ }, error => {
+ window.console.log(error)
+ loading()
+ })
+ },
+ platformBeforeOpen (done, type) {
+ if (["edit", "view"].includes(type)) {
+ getUserPlatform(this.platformForm.id).then(res => {
+ this.platformForm = res.data.data
+ })
+ }
+ done()
+ },
+ platformSearchReset () {
+ this.platformQuery = {}
+ this.platformOnLoad(this.platformPage)
+ },
+ platformSearchChange (params, done) {
+ this.platformQuery = params
+ this.platformPage.currentPage = 1
+ this.platformOnLoad(this.platformPage, params)
+ done()
+ },
+ platformSelectionChange (list) {
+ this.platformSelectionList = list
+ },
+ platformSelectionClear () {
+ this.platformSelectionList = []
+ this.$refs.platformCrud.toggleSelection()
+ },
+ platformCurrentChange (currentPage) {
+ this.platformPage.currentPage = currentPage
+ },
+ platformSizeChange (pageSize) {
+ this.platformPage.pageSize = pageSize
+ },
+ platformRefreshChange () {
+ this.platformOnLoad(this.platformPage, this.platformQuery)
+ },
+ platformOnLoad (page, params = {}) {
+ this.platformLoading = true
+ getList(page.currentPage, page.pageSize, Object.assign(params, this.query), this.treeDeptId).then(res => {
+ const data = res.data.data
+ this.platformPage.total = data.total
+ this.platformData = data.records
+ this.platformLoading = false
+ this.selectionClear()
+ })
}
- done();
- },
- platformSearchReset() {
- this.platformQuery = {};
- this.platformOnLoad(this.platformPage);
- },
- platformSearchChange(params, done) {
- this.platformQuery = params;
- this.platformPage.currentPage = 1;
- this.platformOnLoad(this.platformPage, params);
- done();
- },
- platformSelectionChange(list) {
- this.platformSelectionList = list;
- },
- platformSelectionClear() {
- this.platformSelectionList = [];
- this.$refs.platformCrud.toggleSelection();
- },
- platformCurrentChange(currentPage) {
- this.platformPage.currentPage = currentPage;
- },
- platformSizeChange(pageSize) {
- this.platformPage.pageSize = pageSize;
- },
- platformRefreshChange() {
- this.platformOnLoad(this.platformPage, this.platformQuery);
- },
- platformOnLoad(page, params = {}) {
- this.platformLoading = true;
- getList(page.currentPage, page.pageSize, Object.assign(params, this.query), this.treeDeptId).then(res => {
- const data = res.data.data;
- this.platformPage.total = data.total;
- this.platformData = data.records;
- this.platformLoading = false;
- this.selectionClear();
- });
- }
}
- };
+}
</script>
<style>
- .box {
+.box {
height: 800px;
- }
+}
- .el-scrollbar {
+.el-scrollbar {
height: 100%;
- }
+}
- .box .el-scrollbar__wrap {
+.box .el-scrollbar__wrap {
overflow: scroll;
- }
+}
</style>
diff --git a/src/views/villagePersonInfo/villagePersonInfo.vue b/src/views/villagePersonInfo/villagePersonInfo.vue
new file mode 100644
index 0000000..71903f0
--- /dev/null
+++ b/src/views/villagePersonInfo/villagePersonInfo.vue
@@ -0,0 +1,354 @@
+<template>
+ <basic-container>
+ <avue-crud :option="option"
+ :table-loading="loading"
+ :data="data"
+ :page.sync="page"
+ :permission="permissionList"
+ :before-open="beforeOpen"
+ v-model="form"
+ ref="crud"
+ @row-update="rowUpdate"
+ @row-save="rowSave"
+ @row-del="rowDel"
+ @search-change="searchChange"
+ @search-reset="searchReset"
+ @selection-change="selectionChange"
+ @current-change="currentChange"
+ @size-change="sizeChange"
+ @refresh-change="refreshChange"
+ @on-load="onLoad">
+ <template slot="menuLeft">
+ <el-button type="success"
+ size="small"
+ plain
+ icon="el-icon-upload2"
+ @click="handleImport">导入
+ </el-button>
+ <el-button type="danger"
+ size="small"
+ icon="el-icon-delete"
+ plain
+ v-if="permission.villagePersonInfo_delete"
+ @click="handleDelete">删 除
+ </el-button>
+ </template>
+ </avue-crud>
+ <el-dialog title="数据导入"
+ append-to-body
+ :visible.sync="excelBox"
+ width="555px">
+ <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
+ <template slot="excelTemplate">
+ <el-button type="primary" @click="handleTemplate">
+ 点击下载<i class="el-icon-download el-icon--right"></i>
+ </el-button>
+ </template>
+ </avue-form>
+ </el-dialog>
+ </basic-container>
+</template>
+
+<script>
+ import {getPage, getDetail, add, update, remove} from "@/api/villagePersonInfo/villagePersonInfo";
+ import {mapGetters} from "vuex";
+ import {exportBlob} from "@/api/common";
+ import {downloadXls} from "@/util/util";
+ import {getToken} from "@/util/auth";
+
+ export default {
+ data() {
+ return {
+ form: {},
+ query: {},
+ loading: true,
+ page: {
+ pageSize: 10,
+ currentPage: 1,
+ total: 0
+ },
+ selectionList: [],
+ excelBox: false,
+ excelForm: {},
+ excelOption: {
+ submitBtn: false,
+ emptyBtn: false,
+ column: [
+ {
+ label: '模板上传',
+ prop: 'excelFile',
+ type: 'upload',
+ drag: true,
+ loadText: '模板上传中,请稍等',
+ span: 24,
+ propsHttp: {
+ res: 'data'
+ },
+ tip: '请上传 .xls,.xlsx 标准格式文件',
+ action: "/api/villagePersonInfo/villagePersonInfo/import-village-person-info"
+ },
+ {
+ label: "数据覆盖",
+ prop: "isCovered",
+ type: "switch",
+ align: "center",
+ width: 80,
+ dicData: [
+ {
+ label: "否",
+ value: 0
+ },
+ {
+ label: "是",
+ value: 1
+ }
+ ],
+ value: 0,
+ slot: true,
+ rules: [
+ {
+ required: true,
+ message: "请选择是否覆盖",
+ trigger: "blur"
+ }
+ ]
+ },
+ {
+ label: '模板下载',
+ prop: 'excelTemplate',
+ formslot: true,
+ span: 24,
+ }
+ ]
+ },
+ option: {
+ height:'auto',
+ calcHeight: 30,
+ tip: false,
+ searchShow: true,
+ searchMenuSpan: 6,
+ border: true,
+ index: true,
+ viewBtn: true,
+ selection: true,
+ dialogClickModal: false,
+ //隐藏操作栏
+ menu:false,
+ column: [
+ {
+ label: "主键",
+ prop: "id",
+ type: "input",
+ addDisplay: false,
+ editDisplay: false,
+ viewDisplay: false,
+ hide: true,
+ },
+ {
+ label: "房屋id",
+ prop: "resBusId",
+ },
+ {
+ label: "地址",
+ prop: "address",
+ type: "input",
+ },
+ {
+ label: "姓名",
+ prop: "realName",
+ searchSpan:4,
+ search:true,
+ type: "input",
+ },
+ {
+ label: "电话",
+ prop: "phone",
+ searchSpan:4,
+ search:true,
+ type: "input",
+ },
+ {
+ label: "身份证号码",
+ prop: "cardNo",
+ search:true,
+ searchLabelWidth:110,
+ type: "input",
+ },
+ {
+ label: "小区",
+ prop: "aoiId",
+ type: "select",
+ dicUrl: "/api/villageInfo/villageInfo/all",
+ props: {
+ label: "aoiName",
+ value: "aoiId"
+ }
+ },
+ {
+ label: "楼栋id",
+ prop: "buildId",
+ type: "input",
+ },
+ ]
+ },
+ data: []
+ };
+ },
+ computed: {
+ ...mapGetters(["permission"]),
+ permissionList() {
+ return {
+ addBtn: this.vaildData(this.permission.villagePersonInfo_add, false),
+ viewBtn: this.vaildData(this.permission.villagePersonInfo_view, false),
+ delBtn: this.vaildData(this.permission.villagePersonInfo_delete, false),
+ editBtn: this.vaildData(this.permission.villagePersonInfo_edit, false)
+ };
+ },
+ ids() {
+ let ids = [];
+ this.selectionList.forEach(ele => {
+ ids.push(ele.id);
+ });
+ return ids.join(",");
+ }
+ },
+ watch: {
+ 'excelForm.isCovered'() {
+ if (this.excelForm.isCovered !== '') {
+ const column = this.findObject(this.excelOption.column, "excelFile");
+ column.action = `/api/villagePersonInfo/villagePersonInfo/import-village-person-info?isCovered=${this.excelForm.isCovered}`;
+ }
+ }
+ },
+ methods: {
+ rowSave(row, done, loading) {
+ add(row).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ window.console.log(error);
+ });
+ },
+ rowUpdate(row, index, done, loading) {
+ update(row).then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ done();
+ }, error => {
+ loading();
+ console.log(error);
+ });
+ },
+ rowDel(row) {
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(row.id);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ });
+ },
+ handleDelete() {
+ if (this.selectionList.length === 0) {
+ this.$message.warning("请选择至少一条数据");
+ return;
+ }
+ this.$confirm("确定将选择数据删除?", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ return remove(this.ids);
+ })
+ .then(() => {
+ this.onLoad(this.page);
+ this.$message({
+ type: "success",
+ message: "操作成功!"
+ });
+ this.$refs.crud.toggleSelection();
+ });
+ },
+ beforeOpen(done, type) {
+ if (["edit", "view"].includes(type)) {
+ getDetail(this.form.id).then(res => {
+ this.form = res.data.data;
+ });
+ }
+ done();
+ },
+ searchReset() {
+ this.query = {};
+ this.onLoad(this.page);
+ },
+ searchChange(params, done) {
+ this.query = params;
+ this.page.currentPage = 1;
+ this.onLoad(this.page, params);
+ done();
+ },
+ selectionChange(list) {
+ this.selectionList = list;
+ },
+ selectionClear() {
+ this.selectionList = [];
+ this.$refs.crud.toggleSelection();
+ },
+ currentChange(currentPage){
+ this.page.currentPage = currentPage;
+ },
+ sizeChange(pageSize){
+ this.page.pageSize = pageSize;
+ },
+ refreshChange() {
+ this.onLoad(this.page, this.query);
+ },
+ onLoad(page, params = {}) {
+ this.loading = true;
+ getPage(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+ const data = res.data.data;
+ this.page.total = data.total;
+ this.data = data.records;
+ this.loading = false;
+ this.selectionClear();
+ });
+ },
+
+ //下面为导入操作
+ handleImport() {
+ this.excelBox = true;
+ },
+ uploadAfter(res, done, loading, column) {
+ window.console.log(column);
+ this.excelBox = false;
+ this.refreshChange();
+ done();
+ },
+ handleTemplate() {
+ exportBlob(`/api/villagePersonInfo/villagePersonInfo/export-template?${this.website.tokenHeader}=${getToken()}`).then(res => {
+ downloadXls(res.data, "小区人员数据模板.xlsx");
+ })
+ },
+ }
+ };
+</script>
+
+<style>
+</style>
diff --git a/vue.config.js b/vue.config.js
index fe3cc9f..357905f 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -1,3 +1,16 @@
+/*
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-02-06 10:34:02
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2023-02-09 15:16:33
+ * @FilePath: \srs-police-web\vue.config.js
+ * @Description:
+ *
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.
+ */
+const path = require('path')
+const CopywebpackPlugin = require('copy-webpack-plugin')
+const dvgisDist = './node_modules/@dvgis'
module.exports = {
//路径前缀
publicPath: "/",
@@ -26,7 +39,7 @@
proxy: {
'/api': {
//本地服务接口地址
- target: 'http://192.168.0.126:82/',
+ target: 'http://localhost:82/',
//远程演示服务地址,可用于直接启动项目
//target: 'https://saber.bladex.vip/api',
ws: true,
--
Gitblit v1.9.3