PC 7 months ago
parent
commit
ed0eb08424
95 changed files with 5127 additions and 71 deletions
  1. 1 0
      package.json
  2. 88 0
      src/api/fwbzdz/fwbzdz.js
  3. 35 0
      src/api/home/home.js
  4. BIN
      src/assets/login/font_top_title_black.png
  5. 13 0
      src/assets/login/font_top_title_black.svg
  6. BIN
      src/assets/login/font_top_title_black@2x.png
  7. BIN
      src/assets/login/logo.png
  8. BIN
      src/assets/login/logo@2x.png
  9. BIN
      src/assets/login/pic_login_big.png
  10. 74 0
      src/assets/login/pic_login_big.svg
  11. BIN
      src/assets/login/pic_login_big@2x.png
  12. BIN
      src/assets/login/pic_login_bj.png
  13. 21 0
      src/assets/login/pic_login_bj.svg
  14. BIN
      src/assets/login/pic_login_bj@2x.png
  15. 1 1
      src/config/website.js
  16. 22 0
      src/img/fwbzdz/icon_house_color_88.svg
  17. 17 0
      src/img/fwbzdz/icon_people_white_16.svg
  18. 20 0
      src/img/fwbzdz/icon_title_standard_24.svg
  19. 20 0
      src/img/fwbzdz/icon_unit_gray_16.svg
  20. 83 0
      src/mixins/newcrud.js
  21. 123 0
      src/page/login/new_login.vue
  22. 359 0
      src/page/login/new_login_code.vue
  23. 437 0
      src/page/police/content/index.vue
  24. 224 0
      src/page/police/header/index.vue
  25. 49 0
      src/page/police/index.vue
  26. 162 0
      src/page/police/level2/index.vue
  27. 10 0
      src/page/police/level2routerview.vue
  28. 204 0
      src/page/police/menus/index.vue
  29. 19 0
      src/page/police/public/btn_menu_message_24.svg
  30. 19 0
      src/page/police/public/btn_menu_set_24.svg
  31. 17 0
      src/page/police/public/btn_view_column_20.svg
  32. 15 0
      src/page/police/public/font_top_title.svg
  33. 17 0
      src/page/police/public/icon_closed_light_16.svg
  34. 19 0
      src/page/police/public/icon_rank_first.svg
  35. 19 0
      src/page/police/public/icon_rank_second.svg
  36. 19 0
      src/page/police/public/icon_rank_third.svg
  37. 22 0
      src/page/police/public/icon_statistics_case.svg
  38. 20 0
      src/page/police/public/icon_statistics_dispute.svg
  39. 23 0
      src/page/police/public/icon_statistics_fire.svg
  40. 20 0
      src/page/police/public/icon_statistics_house.svg
  41. 21 0
      src/page/police/public/icon_statistics_idea.svg
  42. 23 0
      src/page/police/public/icon_statistics_people.svg
  43. 22 0
      src/page/police/public/icon_statistics_police.svg
  44. 21 0
      src/page/police/public/icon_statistics_site.svg
  45. 22 0
      src/page/police/public/icon_title_compare_24.svg
  46. 19 0
      src/page/police/public/icon_title_data_24.svg
  47. 16 0
      src/page/police/public/icon_title_dispute_24.svg
  48. 19 0
      src/page/police/public/icon_title_fire_24.svg
  49. 18 0
      src/page/police/public/icon_title_police_24.svg
  50. 18 0
      src/page/police/public/icon_title_ranking_24.svg
  51. 15 0
      src/page/police/public/icon_title_site_24.svg
  52. 13 0
      src/page/police/public/label_bj_left.svg
  53. 13 0
      src/page/police/public/label_bj_right.svg
  54. BIN
      src/page/police/public/logo.png
  55. 16 0
      src/page/police/public/menu_dispute_light_16.svg
  56. 16 0
      src/page/police/public/menu_dispute_white_16.svg
  57. 16 0
      src/page/police/public/menu_fire_light_16.svg
  58. 16 0
      src/page/police/public/menu_fire_white_16.svg
  59. 14 0
      src/page/police/public/menu_home_light_16.svg
  60. 14 0
      src/page/police/public/menu_home_white_16.svg
  61. 9 0
      src/page/police/public/menu_police_light_16.svg
  62. 9 0
      src/page/police/public/menu_police_white_16.svg
  63. 16 0
      src/page/police/public/menu_standard_light_16.svg
  64. 18 0
      src/page/police/public/menu_standard_white_16.svg
  65. 16 0
      src/page/police/public/menu_walk_light_16.svg
  66. 16 0
      src/page/police/public/menu_walk_white_16.svg
  67. BIN
      src/page/police/public/user.png
  68. 2 0
      src/permission.js
  69. 1 1
      src/router/axios.js
  70. 3 2
      src/router/page/index.js
  71. 46 0
      src/router/police/index.js
  72. 5 3
      src/router/router.js
  73. 4 0
      src/store/getters.js
  74. 7 1
      src/store/index.js
  75. 10 0
      src/store/modules/bzdzxq.js
  76. 46 0
      src/store/modules/menu.js
  77. 70 0
      src/store/modules/thirdTitle.js
  78. 94 38
      src/store/modules/user.js
  79. 0 0
      src/styles/avue/searchbtn.scss
  80. 3 0
      src/styles/common.scss
  81. 183 3
      src/styles/element-ui.scss
  82. 7 22
      src/styles/login.scss
  83. 164 0
      src/styles/newavue.scss
  84. 369 0
      src/styles/newcrue.scss
  85. 14 0
      src/styles/public/crue.scss
  86. 1 0
      src/styles/theme/white.scss
  87. 372 0
      src/views/police/datas/index.vue
  88. 88 0
      src/views/police/datas/lineItem.vue
  89. 170 0
      src/views/police/index.vue
  90. 158 0
      src/views/ybss/fwbzdz/bzdzxq.vue
  91. 121 0
      src/views/ybss/fwbzdz/components/DetailSyfw.vue
  92. 145 0
      src/views/ybss/fwbzdz/components/GridGroup.vue
  93. 117 0
      src/views/ybss/fwbzdz/components/dialog.vue
  94. 196 0
      src/views/ybss/fwbzdz/index.vue
  95. 123 0
      src/views/ybss/syfw/index.vue

+ 1 - 0
package.json

@@ -16,6 +16,7 @@
     "babel-polyfill": "^6.26.0",
     "babel-polyfill": "^6.26.0",
     "classlist-polyfill": "^1.2.0",
     "classlist-polyfill": "^1.2.0",
     "crypto-js": "^4.0.0",
     "crypto-js": "^4.0.0",
+    "echarts": "^4.5.0",
     "element-ui": "^2.15.6",
     "element-ui": "^2.15.6",
     "js-base64": "^2.5.1",
     "js-base64": "^2.5.1",
     "js-cookie": "^2.2.0",
     "js-cookie": "^2.2.0",

+ 88 - 0
src/api/fwbzdz/fwbzdz.js

@@ -0,0 +1,88 @@
+import request from '@/router/axios';
+
+export const getList = (current, size, params) => {
+  return request({
+    url: '/api/blade-fwbzdz/fwbzdz/page',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+export const getDetail = (id) => {
+  return request({
+    url: '/api/blade-fwbzdz/fwbzdz/detail',
+    method: 'get',
+    params: {
+      id
+    }
+  })
+}
+
+export const remove = (ids) => {
+  return request({
+    url: '/api/blade-fwbzdz/fwbzdz/remove',
+    method: 'post',
+    params: {
+      ids,
+    }
+  })
+}
+
+export const add = (row) => {
+  return request({
+    url: '/api/blade-fwbzdz/fwbzdz/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const update = (row) => {
+  return request({
+    url: '/api/blade-fwbzdz/fwbzdz/submit',
+    method: 'post',
+    data: row
+  })
+}
+
+export const getLdListPt = () => {
+  return request({
+    url: '/api/bzdz/api/getLdList-pt',
+    method: 'get',
+  });
+};
+
+export const getLdDetailByLdphxlh = (ldphxlh) => {
+  return request({
+    url: '/api/bzdz/api/getLdDetail',
+    method: 'get',
+    params: {
+      ldphxlh
+    }
+  })
+}
+// 实有房屋详情
+export const syfwDetail = (dzbm) => {
+  return request({
+    url: '/api/syfw/api/Detail',
+    method: 'get',
+    params: {
+      dzbm
+    }
+  });
+};
+
+export const getsyfwList = (current, size, params) => {
+  return request({
+    url: '/api/syfw/api/page',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}

+ 35 - 0
src/api/home/home.js

@@ -0,0 +1,35 @@
+import request from '@/router/axios';
+
+export const getBmByDept = () => {
+    return request({
+      url: '/api/blade-system/user/getBmByDept',
+      method: 'get'
+    })
+}
+
+export const getSyCenter = () => {
+    return request({
+      url: '/api/blade-system/user/getSyCenter',
+      method: 'get'
+    })
+}
+export const getSyTop = () => {
+  return request({
+    url: '/api/blade-system/user/getSyTop',
+    method: 'get'
+  })
+}
+
+export const getSyBottom = () => {
+  return request({
+    url: '/api/blade-system/user/getSyBottom',
+    method: 'get'
+  })
+}
+
+export const getSyCenterPh = () => {
+  return request({
+    url: '/api/blade-system/user/getSyCenterPh',
+    method: 'get'
+  })
+}

BIN
src/assets/login/font_top_title_black.png


+ 13 - 0
src/assets/login/font_top_title_black.svg

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="346px" height="23px" viewBox="0 0 346 23" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>font_top_title_black</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" font-family="AlimamaShuHeiTi-Bold, Alimama ShuHeiTi" font-size="24" font-weight="bold" letter-spacing="3">
+        <g id="登录页" transform="translate(-98.000000, -77.000000)" fill="#040814">
+            <g id="编组-7" transform="translate(40.000000, 64.000000)">
+                <text id="font_top_title_black">
+                    <tspan x="57" y="33">吉林公安派出所基础工作平台</tspan>
+                </text>
+            </g>
+        </g>
+    </g>
+</svg>

BIN
src/assets/login/font_top_title_black@2x.png


BIN
src/assets/login/logo.png


BIN
src/assets/login/logo@2x.png


BIN
src/assets/login/pic_login_big.png


File diff suppressed because it is too large
+ 74 - 0
src/assets/login/pic_login_big.svg


BIN
src/assets/login/pic_login_big@2x.png


BIN
src/assets/login/pic_login_bj.png


+ 21 - 0
src/assets/login/pic_login_bj.svg

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="640px" height="900px" viewBox="0 0 640 900" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>pic_login_bj</title>
+    <defs>
+        <linearGradient x1="44.2719125%" y1="0%" x2="44.2719125%" y2="57.3701162%" id="linearGradient-1">
+            <stop stop-color="#ECF2FF" offset="0%"></stop>
+            <stop stop-color="#FFFFFF" offset="100%"></stop>
+        </linearGradient>
+        <linearGradient x1="100%" y1="57.0323205%" x2="83.0961701%" y2="57.0323205%" id="linearGradient-2">
+            <stop stop-color="#ECF2FF" stop-opacity="0.4" offset="0%"></stop>
+            <stop stop-color="#FFFFFF" stop-opacity="0" offset="100%"></stop>
+        </linearGradient>
+        <rect id="path-3" x="0" y="0" width="640" height="900"></rect>
+    </defs>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="pic_login_bj">
+            <use fill="url(#linearGradient-1)" xlink:href="#path-3"></use>
+            <use fill="url(#linearGradient-2)" xlink:href="#path-3"></use>
+        </g>
+    </g>
+</svg>

BIN
src/assets/login/pic_login_bj@2x.png


+ 1 - 1
src/config/website.js

@@ -21,7 +21,7 @@ export default {
   isFirstPage: false,
   isFirstPage: false,
   fistPage: {
   fistPage: {
     label: "首页",
     label: "首页",
-    value: "/wel/index",
+    value: "/police",
     params: {},
     params: {},
     query: {},
     query: {},
     meta: {
     meta: {

File diff suppressed because it is too large
+ 22 - 0
src/img/fwbzdz/icon_house_color_88.svg


+ 17 - 0
src/img/fwbzdz/icon_people_white_16.svg

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon_people_white_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="一标三实-标准地址-实有房屋" transform="translate(-296.000000, -438.000000)">
+            <g id="按钮/图标描边按钮" transform="translate(280.000000, 430.000000)">
+                <g id="icon_people_white_16" transform="translate(16.000000, 8.000000)">
+                    <rect id="矩形" x="0" y="0" width="16" height="16"></rect>
+                    <g id="编组-10" transform="translate(2.000000, 2.000000)" stroke="#FFFFFF" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.33333333">
+                        <path d="M6,4.66666667 C7.28866667,4.66666667 8.33333333,3.622 8.33333333,2.33333333 C8.33333333,1.04467 7.28866667,0 6,0 C4.71133333,0 3.66666667,1.04467 3.66666667,2.33333333 C3.66666667,3.622 4.71133333,4.66666667 6,4.66666667 Z" id="路径"></path>
+                        <path d="M0,11.6 L0,12 L12,12 L12,11.6 C12,10.1065333 12,9.3598 11.7093667,8.78936667 C11.4537,8.2876 11.0457333,7.87963333 10.5439667,7.62396667 C9.97353333,7.33333333 9.2268,7.33333333 7.73333333,7.33333333 L4.26666667,7.33333333 C2.7732,7.33333333 2.02646667,7.33333333 1.45603333,7.62396667 C0.95426,7.87963333 0.54631,8.2876 0.29065,8.78936667 C0,9.3598 0,10.1065333 0,11.6 Z" id="路径"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 20 - 0
src/img/fwbzdz/icon_title_standard_24.svg

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon_title_standard_24</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="一标三实-标准地址" transform="translate(-258.000000, -184.000000)">
+            <g id="编组-3" transform="translate(226.000000, 76.000000)">
+                <g id="编组-4" transform="translate(16.000000, 82.000000)">
+                    <g id="icon_title_standard_24" transform="translate(16.000000, 26.000000)">
+                        <rect id="矩形" x="0" y="0" width="24" height="24"></rect>
+                        <g id="编组" transform="translate(2.000000, 2.200000)" stroke="#111111" stroke-linejoin="round" stroke-width="2">
+                            <path d="M2.92893,14.3787 C1.11929,14.9216 0,15.6716 0,16.5 C0,18.15685 4.47715,19.5 10,19.5 C15.52285,19.5 20,18.15685 20,16.5 C20,15.6716 18.8807,14.9216 17.07105,14.3787" id="路径" stroke-linecap="round"></path>
+                            <path d="M10,15.5 C10,15.5 16.5,11.252 16.5,6.3409 C16.5,2.83892 13.58985,0 10,0 C6.41015,0 3.5,2.83892 3.5,6.3409 C3.5,11.252 10,15.5 10,15.5 Z" id="路径"></path>
+                            <path d="M10,9 C11.3807,9 12.5,7.8807 12.5,6.5 C12.5,5.1193 11.3807,4 10,4 C8.6193,4 7.5,5.1193 7.5,6.5 C7.5,7.8807 8.6193,9 10,9 Z" id="路径"></path>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 20 - 0
src/img/fwbzdz/icon_unit_gray_16.svg

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon_unit_gray_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="一标三实-标准地址-实有房屋" transform="translate(-444.000000, -438.000000)">
+            <g id="按钮/图标描边按钮备份" transform="translate(428.000000, 430.000000)">
+                <g id="icon_unit_gray_16" transform="translate(16.000000, 8.000000)">
+                    <rect id="矩形" x="0" y="0" width="16" height="16"></rect>
+                    <g id="编组-10" transform="translate(1.330000, 1.200000)" stroke="#6F7CA3" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.33333333">
+                        <g id="编组-26">
+                            <polygon id="路径" points="2.33333333 3.33333333 7 0 7 13.3333333 2.33333333 13.3333333"></polygon>
+                            <polyline id="路径" points="7 3 11.6666667 6.33333333 11.6666667 13.3333333"></polyline>
+                            <line x1="0" y1="13.3333333" x2="13.3333333" y2="13.3333333" id="路径"></line>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 83 - 0
src/mixins/newcrud.js

@@ -0,0 +1,83 @@
+import { mapGetters } from "vuex";
+
+export default {
+    data() {
+        return {
+            tableData: [],   // table数据
+            query: {},
+            loading: true,
+
+            page: {
+                pageSize: 10,
+                currentPage: 1,
+                total: 0
+            },
+            form: {},
+            selectionList: [],      // table 多选
+
+            defaultOptions: {
+                addBtn: false,
+                tip: false,
+                // searchIcon: true,
+                // searchIndex: 3,
+                searchMenuSpan: 6,
+                searchLabelWidth: 80,   // 搜索label宽度,80适合4字、5字也勉强可以
+                searchBtnText: '查询',
+                searchBtnIcon: true,
+                emptyBtnText: '重置',
+                emptyBtnIcon: true,
+                refreshBtn: false,      // 表格刷新数据按钮
+                columnBtn: true,        // 表格列操作按钮
+                searchShowBtn: false,   // 表格搜索显隐按钮
+                height: 'auto',          // table高度
+                calcHeight: -30,        // 没有 selection 的需要120
+                searchShow: true,       // 表格搜索首次是否展示
+                border: false,
+                index: true,
+                dialogClickModal: false,    // 表格弹窗是否可以通过点击modal关闭
+                menuFixed: 'right',     // 操作列固定(冻结)
+            }
+        }
+    },
+    computed: {
+        ...mapGetters(["permission", "flowRoutes"]),
+        ids() {
+            let ids = [];
+            this.selectionList.forEach(ele => {
+                ids.push(ele.id);
+            });
+            return ids.join(",");
+        },
+    },
+    mounted() {
+        console.log('newcrud mixin')
+    },
+    method: {
+        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);
+        },
+    }
+}

+ 123 - 0
src/page/login/new_login.vue

@@ -0,0 +1,123 @@
+<template>
+  <div class="new_login">
+    <div class="lf">
+      <div class="logoBox">
+        <img class="logoImg" :src="logoImg" alt="">
+        <img class="logoTitle" :src="logoTitle" alt="">
+      </div>
+
+      <div class="logoTu">
+
+      </div>
+    </div>
+
+    <div class="rt">
+      <div class="loginForm">
+        <div class="loginForm_box">
+          <userLogin v-if="activeName === 'user'"></userLogin>
+          <codeLogin v-else-if="activeName === 'code'"></codeLogin>
+        </div>
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+import userLogin from "./new_login_code";
+import codeLogin from "./codelogin";
+export default {
+  name: "new_login",
+  components: { userLogin, codeLogin },
+  data() {
+    return {
+      activeName: "user",
+      logoImg: require('../../assets/login/logo@2x.png'),
+      logoTitle: require('../../assets/login/font_top_title_black.svg'),
+    }
+  }
+}
+</script>
+
+<style scoped lang="scss">
+.new_login {
+  display: flex;
+
+  .lf {
+    width: 45%;
+    height: 100vh;
+    background: url("../../assets/login/pic_login_bj.svg") no-repeat center;
+    background-size: cover;
+    padding: 75px 0 0 47px;
+    box-sizing: border-box;
+
+    .logoTu {
+      width: 90%;
+      max-width: 672px;
+      height: calc(40vw * 0.979);
+      background: url("../../assets/login/pic_login_big.svg") no-repeat center;
+      background-size: 100%;
+      box-sizing: border-box;
+    }
+
+    .logoBox {
+      height: 60px;
+      width: 100%;
+    }
+
+    img.logoImg {
+      width: 56px;
+      height: 56px;
+    }
+
+    img.logoTitle {
+      width: 404px;
+      margin-bottom: 16.5px;
+      margin-left: 11px;
+    }
+  }
+
+  .rt {
+    width: 55%;
+    height: 100vh;
+    box-sizing: border-box;
+
+    .loginForm {
+      width: 58%;
+      margin: calc((100% - 560px) / 2) auto;
+      height: 550px;
+      // box-shadow: 0px 9 23px 0px rgba(228,233,245,0.5);
+      box-shadow: 0px 0px 23px rgba(228, 233, 245, 0.5);
+      border-radius: 19px;
+
+      .loginForm_box {
+        width: 79%;
+        margin: auto;
+        padding-top: 80px;
+      }
+    }
+
+  }
+}
+
+@media screen and (max-width: 1275px) {
+  .new_login {
+    .lf {
+      display: none;
+    }
+
+    .rt {
+      width: 100%;
+      margin: auto;
+
+      .loginForm {
+        margin-top: 50px;
+        width: 80%;
+      }
+    }
+  }
+}
+
+::v-deep .login-code {
+  text-align: center !important;
+}
+</style>

+ 359 - 0
src/page/login/new_login_code.vue

@@ -0,0 +1,359 @@
+<template>
+  <div>
+    <el-form class="login-form" status-icon :rules="loginRules" ref="loginForm" :model="loginForm" label-width="0">
+      <!--<el-form-item v-if="tenantMode" prop="tenantId">
+        <el-input size="small"
+                  @keyup.enter.native="handleLogin"
+                  v-model="loginForm.tenantId"
+                  auto-complete="off"
+                  :placeholder="$t('login.tenantId')">
+          <i slot="prefix" class="icon-quanxian"/>
+        </el-input>
+      </el-form-item>-->
+      <el-form-item prop="username">
+        <span style="font-size: 28px;
+          font-family: PingFangSC, PingFang SC;
+          font-weight: 600;
+          color: #040814;
+          line-height: 37px;
+          letter-spacing: 2px">民辅警用户登录</span>
+        <el-input size="small" style="margin-top: 2.5em" @keyup.enter.native="handleLogin" v-model="loginForm.username"
+          auto-complete="off" placeholder="请输入用户名">
+          <i slot="prefix" />
+        </el-input>
+      </el-form-item>
+      <el-form-item prop="password">
+        <el-input size="small" @keyup.enter.native="handleLogin" :type="passwordType" v-model="loginForm.password"
+          auto-complete="off" :placeholder="$t('login.password')">
+          <i class="el-icon-view el-input__icon" slot="suffix" @click="showPassword" />
+          <i slot="prefix" />
+        </el-input>
+      </el-form-item>
+      <el-form-item v-if="this.website.captchaMode" prop="code">
+        <el-row :span="24">
+          <el-col :span="16">
+            <el-input size="small" @keyup.enter.native="handleLogin" v-model="loginForm.code" auto-complete="off"
+              :placeholder="$t('login.code')">
+              <i slot="prefix" />
+            </el-input>
+          </el-col>
+          <el-col :span="8">
+            <div class="login-code">
+              <img :src="loginForm.image" class="login-code-img" @click="refreshCode" />
+            </div>
+          </el-col>
+        </el-row>
+      </el-form-item>
+      <el-dialog title="用户信息选择" append-to-body :visible.sync="userBox" width="350px">
+        <avue-form :option="userOption" v-model="userForm" @submit="submitLogin" />
+      </el-dialog>
+    </el-form>
+    <el-checkbox v-model="checked">记住密码</el-checkbox>
+    <button plain size="small" @click="handleLogin" class="login-submit">登 录
+    </button>
+  </div>
+</template>
+
+<script>
+import { mapGetters } from "vuex";
+import { info } from "@/api/system/tenant";
+import { getCaptcha } from "@/api/user";
+import { getTopUrl } from "@/util/util";
+import PoliceLayout from '@/page/police/index'
+// 二级路由没有内容,路由组件直接套下级路由
+import level2routerview from '@/page/police/level2routerview.vue'
+import Cookies from 'js-cookie'
+export default {
+  name: "userlogin",
+  data() {
+    return {
+      checked: false,
+      tenantMode: this.website.tenantMode,
+      loginForm: {
+        //租户ID
+        tenantId: "000000",
+        //部门ID
+        deptId: "",
+        //角色ID
+        roleId: "",
+        //用户名
+        username: "",
+        //密码
+        password: "",
+        //账号类型
+        type: "account",
+        //验证码的值
+        code: "",
+        //验证码的索引
+        key: "",
+        //预加载白色背景
+        image: "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",
+      },
+      loginRules: {
+        tenantId: [
+          { required: false, message: "请输入租户ID", trigger: "blur" }
+        ],
+        username: [
+          { required: true, message: "请输入用户名", trigger: "blur" }
+        ],
+        password: [
+          { required: true, message: "请输入密码", trigger: "blur" },
+          { min: 1, message: "密码长度最少为6位", trigger: "blur" }
+        ]
+      },
+      passwordType: "password",
+      userBox: false,
+      userForm: {
+        deptId: '',
+        roleId: ''
+      },
+      userOption: {
+        labelWidth: 70,
+        submitBtn: true,
+        emptyBtn: false,
+        submitText: '登录',
+        column: [
+          {
+            label: '部门',
+            prop: 'deptId',
+            type: 'select',
+            props: {
+              label: 'deptName',
+              value: 'id'
+            },
+            dicUrl: '/api/blade-system/dept/select',
+            span: 24,
+            display: false,
+            rules: [{
+              required: true,
+              message: "请选择部门",
+              trigger: "blur"
+            }],
+          },
+          {
+            label: '角色',
+            prop: 'roleId',
+            type: 'select',
+            props: {
+              label: 'roleName',
+              value: 'id'
+            },
+            dicUrl: '/api/blade-system/role/select',
+            span: 24,
+            display: false,
+            rules: [{
+              required: true,
+              message: "请选择角色",
+              trigger: "blur"
+            }],
+          },
+        ]
+      }
+    };
+  },
+  created() {
+    this.getTenant();
+    this.refreshCode();
+  },
+  mounted() {
+    this.loginForm.username = Cookies.get("StysUsername");
+    this.loginForm.password = Cookies.get("StysPassword");
+  },
+  watch: {
+    'loginForm.deptId'() {
+      const column = this.findObject(this.userOption.column, "deptId");
+      if (this.loginForm.deptId.includes(",")) {
+        column.dicUrl = `/api/blade-system/dept/select?deptId=${this.loginForm.deptId}`;
+        column.display = true;
+      } else {
+        column.dicUrl = '';
+      }
+    },
+    'loginForm.roleId'() {
+      const column = this.findObject(this.userOption.column, "roleId");
+      if (this.loginForm.roleId.includes(",")) {
+        column.dicUrl = `/api/blade-system/role/select?roleId=${this.loginForm.roleId}`;
+        column.display = true;
+      } else {
+        column.dicUrl = '';
+      }
+    }
+  },
+  computed: {
+    ...mapGetters(["tagWel", "userInfo"])
+  },
+  props: [],
+  methods: {
+    refreshCode() {
+      if (this.website.captchaMode) {
+        getCaptcha().then(res => {
+          const data = res.data;
+          this.loginForm.key = data.key;
+          this.loginForm.image = data.image;
+        })
+      }
+    },
+    showPassword() {
+      this.passwordType === ""
+        ? (this.passwordType = "password")
+        : (this.passwordType = "");
+    },
+    submitLogin(form, done) {
+      if (form.deptId !== '') {
+        this.loginForm.deptId = form.deptId;
+      }
+      if (form.roleId !== '') {
+        this.loginForm.roleId = form.roleId;
+      }
+      this.handleLogin();
+      done();
+    },
+    handleLogin() {
+      this.$refs.loginForm.validate(valid => {
+        if (valid) {
+          const loading = this.$loading({
+            lock: true,
+            text: '登录中,请稍后。。。',
+            spinner: "el-icon-loading"
+          });
+          // 登录,获取userInfo
+          this.$store.dispatch("LoginByUsername", this.loginForm).then(() => {
+            if (this.website.switchMode) {
+              const deptId = this.userInfo.dept_id;
+              const roleId = this.userInfo.role_id;
+              if (deptId.includes(",") || roleId.includes(",")) {
+                this.loginForm.deptId = deptId;
+                this.loginForm.roleId = roleId;
+                this.userBox = true;
+                this.$store.dispatch("LogOut").then(() => {
+                  loading.close();
+                });
+                return false;
+              }
+            }
+            // 配置路由
+            let pro = this.$store.dispatch("GetMenu", 'police')
+            pro.then((res) => {
+              let menus = [{
+                path: 'index',
+                name: '首页',
+                children: [],
+                component: () =>
+                  import( /* webpackChunkName: "views" */ '@/views/police/index')
+              }]
+              res.forEach(first => {
+                let child = []
+                if (first.children.length > 0) {
+                  first.children.forEach(second => {
+                    if (
+                      // second.path.substr(0,4) != 'http' &&
+                      second.path != '/monitor/log' &&
+                      second.path != '/system/param') {
+                      child.push({
+                        path: second.path.substr(1),
+                        meta: { keepAlive: true },
+                        name: second.name,
+                        component: () =>
+                          import( /* webpackChunkName: "views" */ '@/views' + second.path)
+                      })
+                    }
+
+                  })
+                }
+                menus.push({
+                  path: first.path,
+                  component: level2routerview,
+                  name: first.name,
+                  children: child
+                })
+              })
+              // this.$router.options.routes.push({
+              //     path: '/police',
+              //     component: PoliceLayout,
+              //     redirect: '/police/index',
+              //     children: menus
+              // })
+              this.$router.addRoutes([{
+                path: '/police',
+                component: PoliceLayout,
+                redirect: '/police/index',
+                children: menus
+              }])
+              this.$router.push({ path: this.tagWel.value });
+            })
+
+            if (this.checked) {
+              Cookies.set("StysUsername", this.loginForm.username, {
+                expires: 30,
+              });
+              Cookies.set("StysPassword", this.loginForm.password, {
+                expires: 30,
+              });
+            } else {
+              Cookies.remove("StysUsername");
+              Cookies.remove("StysPassword");
+            }
+
+            loading.close();
+          }).catch(() => {
+            loading.close();
+            this.refreshCode();
+          });
+        }
+      });
+    },
+    getTenant() {
+      let domain = getTopUrl();
+      // 临时指定域名,方便测试
+      //domain = "https://bladex.vip";
+      info(domain).then(res => {
+        const data = res.data;
+        if (data.success && data.data.tenantId) {
+          this.tenantMode = false;
+          this.loginForm.tenantId = data.data.tenantId;
+          this.$parent.$refs.login.style.backgroundImage = `url(${data.data.backgroundUrl})`;
+        }
+      })
+    }
+  }
+};
+</script>
+
+<style scoped lang="scss">
+.el-input {
+  height: 56px;
+
+}
+
+::v-deep .is-checked+.el-checkbox__label {
+  color: #111;
+}
+
+::v-deep .el-checkbox__label {
+  color: #111;
+}
+
+::v-deep .login-submit {
+  width: 100%;
+  margin: 2em auto 0;
+  height: 56px;
+  background: #106DFF;
+  border-radius: 28px;
+  color: #Fff;
+  font-size: 16px;
+  border: none;
+  outline: none;
+}
+
+::v-deep .login-submit :hover {
+  background: #106DFF !important;
+}
+
+::v-deep .el-input__inner {
+  background: #ECF2FE;
+  height: 56px !important;
+  border: none !important;
+  border-radius: 14px;
+  font-size: 16px;
+}
+</style>

+ 437 - 0
src/page/police/content/index.vue

@@ -0,0 +1,437 @@
+<template>
+    <div class="content_body">
+        <div class="tab_by_route">
+            <div class="tab_item" v-for="(item, index) in tagList" :key="item" draggable
+                @dragend="dragend($event, index)">
+                <div v-if="tabValue == item" class="click_body">
+                    <div><img :src="label_bj_left" alt="" class="label_bj"></div>
+                    <div class="flex_center tab_center tab_clicked">
+                        <div class="flex_center">
+                            <div class="tab_text" @click="tabClick(item)">{{ getTitle[item] }}</div>
+                            <div @click="removeTab(item)" v-show="(tabValue == item) && (tagLen > 1)"
+                                class="icon_closed_light">
+                                <img alt="" :src="icon_closed_light" />
+                            </div>
+                        </div>
+                    </div>
+                    <div><img :src="label_bj_right" alt="" class="label_bj"></div>
+                </div>
+                <div v-else>
+                    <div class="flex_center tab_center tab_unclicked" @mouseover="mouseover(index)"
+                        @mouseout="mouseout">
+                        <div class="flex_center">
+                            <div class="tab_text" @click="tabClick(item)">{{ getTitle[item] }}</div>
+                            <div @click="removeTab(item)" v-show="iconShowIndex == index" class="icon_closed_light">
+                                <img alt="" :src="icon_closed_light" />
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <div class="title">
+            <img :src="btn_view" alt="">
+            <div class="router_line" v-show="!hasLine">首页</div>
+            <div class="router_line" v-show="hasLine">
+                <!-- <span>/</span> -->
+                <span class="label">{{ routerLineFirst }}</span>
+            </div>
+            <div class="router_line" v-show="hasLine">
+                <span>/</span>
+                <span class="label" :class="{ level_last: getLevelLastClass() }" @click="goBack()">
+                    {{ routerLineLast }}</span>
+            </div>
+            <div class="router_line" v-if="thirdTitleName == 'editItemInfo'">
+                <span>/</span>
+                <span class="label level_last">
+                    {{ thirdTitleData['label'][thirdTitleType] }}</span>
+            </div>
+        </div>
+        <keep-alive>
+            <router-view class="route_body" />
+        </keep-alive>
+    </div>
+</template>
+<script>
+import { mapGetters } from "vuex";
+import { getStore } from '@/util/store';
+export default {
+    name: 'content',
+    data() {
+        return {
+            btn_view: require('@/page/police/public/btn_view_column_20.svg'),
+            label_bj_left: require('@/page/police/public/label_bj_left.svg'),
+            label_bj_right: require('@/page/police/public/label_bj_right.svg'),
+            icon_closed_light: require('@/page/police/public/icon_closed_light_16.svg'),
+            // tagList: ['/police/index'],
+            tabValue: '/police/index',
+            getTitle: { '/police/index': '首页' },
+            routerLines: {},
+            tabIndex: 0,
+            iconShowIndex: -1,
+            thirdTitles: {
+                '/police/rhzf/fwInfo/fwInfo': {
+                    name: 'fwInfo',
+                    type: 'fwInfoType',
+                    label: { add: '新增入户走访' }
+                },
+                '/police/7/pcsInfo/pcsInfo': {
+                    name: 'pcsInfo',
+                    type: 'pcsInfoType',
+                    label: { add: '新增单位信息', edit: '修改单位信息', view: '单位信息' }
+                },
+                '/police/7/userInfo/userInfo': {
+                    name: 'userInfo',
+                    type: 'userInfoType',
+                    label: { add: '新增警员信息', edit: '修改警员信息' }
+                },
+                '/police/8/fjxx/fjxx': {
+                    name: 'fjxx',
+                    type: 'fjxxType',
+                    label: { add: '新增辅警信息', edit: '修改辅警信息' }
+                }
+            }
+        }
+    },
+    watch: {
+        "$route": {
+            handler: function (n) {
+                if (this.tagList.indexOf(n.path) < 0) {
+                    if (n.path == '/police') {
+                        this.$store.commit('PUSH_NEW_TAG_LIST', '/police/index')
+                    } {
+                        this.$store.commit('PUSH_NEW_TAG_LIST', n.path)
+                    }
+                }
+                this.tabValue = n.path
+            },
+            immediate: true,
+            deep: true
+        },
+        "tabValue": {
+            handler: function (n) {
+                this.$router.push(n)
+                for (let i = 0; i < this.tagList.length; i++) {
+                    if (this.tagList[i] == n) {
+                        this.tabIndex = i
+                    } else {
+                        this.tabIndex = 0
+                    }
+                }
+            },
+            immediate: true
+        },
+        // 从获取的路由添加tag头和小tag头
+        "menu": {
+            handler: function (n) {
+                n.forEach(item => {
+                    let firstName = item.name
+                    let level2Path = item.path
+                    if (item.children) {
+                        item.children.forEach(child => {
+                            this.getTitle['/police/' + level2Path + child.path] = child.name
+                            this.routerLines['/police/' + level2Path + child.path] = {
+                                first: firstName,
+                                last: child.name
+                            }
+                        })
+                    }
+                })
+                // console.log('this.routerLines', this.routerLines)
+            },
+            immediate: true,
+            deep: true
+        }
+    },
+    computed: {
+        ...mapGetters(["menu"]),
+        tagList() {
+            return this.$store.state.menu.newTagList
+        },
+        tagLen() {
+            return this.tagList.length || 0;
+        },
+        hasLine() {
+            if (this.routerLines[this.$route.path]) {
+                return true
+            } else {
+                return false
+            }
+        },
+        routerLineFirst() {
+            if (this.routerLines[this.$route.path]) {
+                return this.routerLines[this.$route.path]['first']
+            } else {
+                return ''
+            }
+        },
+        routerLineLast() {
+            if (this.routerLines[this.$route.path]) {
+                return this.routerLines[this.$route.path]['last']
+            } else {
+                return ''
+            }
+        },
+        thirdTitleData() {
+            return this.thirdTitles[this.$route.path]
+        },
+        thirdTitleName() {
+            if (this.thirdTitleData) {
+                return this.$store.state.thirdTitle[this.thirdTitleData['name']]
+            } else {
+                return null
+            }
+        },
+        thirdTitleType() {
+            if (this.thirdTitleData) {
+                return this.$store.state.thirdTitle[this.thirdTitleData['type']]
+            } else {
+                return null
+            }
+        }
+    },
+    methods: {
+        // 拖拽
+        dragend(e, index) {
+            let tagDomList = document.getElementsByClassName('tab_item')
+            for (let i = 0; i < tagDomList.length; i++) {
+                if ((e.x < (tagDomList[i]['offsetLeft'] + tagDomList[i]['offsetWidth'])) &&
+                    e.x > tagDomList[i]['offsetLeft']) {
+                    this.$store.commit('DRAG_TAG', {
+                        old: index,
+                        new: i
+                    })
+                }
+            }
+        },
+        // 是否有第三级标题
+        getLevelLastClass() {
+            if (this.thirdTitleName == 'editItemInfo') {
+                return false
+            } else {
+                return true
+            }
+        },
+        goBack() {
+            switch (this.routerLineLast) {
+                case '入户统计':
+                    this.beforeGoBack('CHANGE_COMPONENT', 'fwInfo')
+                    break;
+                case '派出所管理':
+                    this.beforeGoBack('CHANGE_PCSINFO', 'pcsInfo')
+                    break;
+                case '警员管理':
+                    this.beforeGoBack('CHANGE_USER_INFO', 'userInfo')
+                    break;
+                case '辅警信息':
+                    this.beforeGoBack('CHANGE_FJXX', 'fjxx')
+                    break;
+            }
+        },
+        beforeGoBack(fn, pr) {
+            var _this = this;
+            this.$confirm('确定返回列表页面么?', '提示', {
+                confirmButtonText: '确定',
+                cancelButtonText: '取消',
+                type: 'warning'
+            }).then(() => {
+                _this.$store.commit(fn, pr)
+            }).catch(() => {
+                _this.$message({
+                    type: 'info',
+                    message: '已取消'
+                });
+            });
+        },
+        // 鼠标移入tag时有X
+        mouseover(index) {
+            this.iconShowIndex = index
+        },
+        mouseout() {
+            this.iconShowIndex = -1
+        },
+        tabClick(item) {
+            this.tabValue = item
+        },
+        // 点击删除某tag,改变tabValue
+        removeTab(name) {
+            for (let i = 0; i < this.tagList.length; i++) {
+                if (this.tagList[i] == name) {
+                    if (this.tabValue == name) {
+                        // if(this.tagList.length <= 1){
+                        //     this.$router.push('/police/index')
+                        // }else 
+                        if (i == this.tagList.length - 1) {
+                            this.tabValue = this.tagList[i - 1]
+                        } else {
+                            this.tabValue = this.tagList[i + 1]
+                        }
+                    }
+                    // this.tagList.splice(i,1)
+                    this.$store.commit('DEL_NEW_TAG_LIST', i)
+                }
+            }
+        },
+        gettabClick(item) {
+            return item == this.tabValue ? 'tab_clicked' : 'tab_unclicked'
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+@import url('../../../styles/newcrue.scss');
+
+.content_body {
+    height: 100%;
+    display: flex;
+    flex-direction: column;
+
+    .route_body {
+        margin: 12px 16px 12px 16px;
+        // flex: 1;
+        height: calc(100vh - 180px);
+        overflow-y: scroll;
+
+        ::v-deep .basic-container__card {
+            height: 100%;
+            box-sizing: border-box;
+            padding: 24px 16px;
+            background-color: rgba(255, 255, 255, 1);
+        }
+
+        // ::v-deep .el-card__body {
+        //     height: 100%;
+        //     box-sizing: border-box;
+        // }
+        // ::v-deep .avue-crud {
+        //     height: 100%;
+        //     box-sizing: border-box;
+        // }
+    }
+}
+
+.tab_by_route {
+    width: 100%;
+    padding-left: 24px;
+    padding-top: 12px;
+    display: flex;
+    background-color: rgba(255, 255, 255, 1);
+    flex-shrink: 0;
+}
+
+.tab_item {
+    display: flex;
+    box-sizing: border-box;
+    height: 32px;
+}
+
+.click_body {
+    display: flex;
+}
+
+.label_bj {
+    width: 16px;
+    height: 32px;
+}
+
+.tab_center {
+    /* border-top-left-radius: 12px; */
+    /* border-top-right-radius: 12px; */
+    /* padding: 8px 16px; */
+    padding: 0 16px;
+    height: 32px;
+    flex-shrink: 1;
+    white-space: nowrap;
+    text-overflow: ellipsis;
+}
+
+.tab_text:hover {
+    cursor: pointer;
+}
+
+.tab_clicked {
+    background-color: #F5F7FA;
+    font-size: 12px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 400;
+    color: rgba(0, 0, 0, 0.9);
+    line-height: 16px;
+}
+
+.tab_unclicked {
+    background-color: rgba(255, 255, 255, 1);
+    font-size: 12px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 400;
+    color: #6F7CA3;
+    line-height: 16px;
+}
+
+.icon_closed_light {
+    /* margin: 8px 0 8px 8px; */
+    margin-left: 8px;
+    width: 16px;
+    height: 16px;
+    border-radius: 50%;
+}
+
+.icon_closed_light:hover {
+    cursor: pointer;
+}
+
+.tab_interval {
+    width: 8px;
+    background-color: #F5F7FA;
+}
+
+.tab_interval_mask {
+    width: 100%;
+    height: 100%;
+    background-color: rgba(255, 255, 255, 1);
+}
+
+::v-deep .el-tabs__header {
+    border: none;
+}
+
+.content_body {
+    font-family: PingFangSC, PingFang SC;
+
+    .title {
+        margin-top: 16px;
+        margin-left: 34px;
+        display: flex;
+        flex-shrink: 0;
+
+        .router_line {
+            margin-left: 8px;
+            font-size: 14px;
+            font-weight: 400;
+            color: rgba(111, 124, 163, 1);
+            line-height: 22px;
+        }
+
+        .router_line:hover {
+            cursor: pointer;
+        }
+
+        .label {
+            margin-left: 5px;
+        }
+
+        .level_last {
+            color: rgba(4, 8, 20, 0.9);
+        }
+    }
+}
+
+.interval {
+    margin-right: 12px;
+}
+
+.flex_center {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+</style>

+ 224 - 0
src/page/police/header/index.vue

@@ -0,0 +1,224 @@
+<template>
+    <div class="header">
+        <div class="left">
+            <div><img :src="logo" alt="" class="img_logo"></div>
+            <div class="title">
+                <!-- 吉林公安派出所基层基础工作平台 -->
+                <img :src="font_top_title" alt="" class="font_top_title">
+            </div>
+        </div>
+        <div class="right">
+            <div><img :src="btn_menu_message" alt="" class="margin_right"></div>
+            <div><img :src="btn_menu_set" alt="" class="margin_right"></div>
+            <!-- <div><img :src="btn_menu_message" alt=""></div> -->
+            <div><img :src="userInfo.avatar ? userInfo.avatar : user" alt="" class="margin_right user_head"></div>
+            <el-dropdown class="margin_right" trigger="click">
+                <span class="el-dropdown-link">
+                    {{ userName }}<i class="el-icon-arrow-down el-icon--right"></i>
+                </span>
+                <el-dropdown-menu slot="dropdown">
+                    <el-dropdown-item><span @click="editPassWord">修改密码</span></el-dropdown-item>
+                    <el-dropdown-item><span @click="logOut">退出登录</span></el-dropdown-item>
+                </el-dropdown-menu>
+            </el-dropdown>
+        </div>
+        <el-dialog title='修改密码' :visible.sync='dialogVisible' @before-close='handleClose()' v-loading="loading"
+            class="full_dialog" >
+            <el-form :model="password" label-width="80px">
+                <el-form-item label="新密码" prop="newPassword">
+                    <el-input v-model="password.newPassword"></el-input>
+                </el-form-item>
+            </el-form>
+            <div slot='footer' class='password_dailog_footer'>
+                <el-button type='primary' @click='handleSubmit' size="small">提 交</el-button>
+                <!-- <el-button type='primary' @click='dialogSave'>清 空</el-button> -->
+                <el-button type='primary' @click='reset' size="small">重置密码</el-button>
+                <el-button @click='dialogVisible = false' size="small">取 消</el-button>
+            </div>
+        </el-dialog>
+    </div>
+</template>
+<script>
+import logo from '@/page/police/public/logo.png'
+import user from '@/page/police/public/user.png'
+import { resetRouter } from '@/router/router'
+import { mapGetters } from "vuex";
+import { getUserInfo, updateInfo, updatePassword, czmm, getXgmm } from "@/api/system/user";
+import md5 from 'js-md5';
+
+
+export default {
+    name: 'header',
+    data() {
+        return {
+            logo: logo,
+            user: user,
+            btn_menu_message: require('@/page/police/public/btn_menu_message_24.svg'),
+            btn_menu_set: require('@/page/police/public/btn_menu_set_24.svg'),
+            font_top_title: require('@/page/police/public/font_top_title.svg'),
+            userName: this.$store.state.user.userInfo.user_name,
+            dialogVisible: false,
+            loading: false,
+            password: {}
+        }
+    },
+    computed: {
+        ...mapGetters(["userInfo"]),
+        user_id() {
+            return JSON.parse(localStorage.getItem('saber-userInfo')).content.user_id
+        },
+    },
+    methods: {
+        editPassWord() {
+            this.dialogVisible = true
+        },
+        handleClose() {
+            this.dialogVisible = false
+        },
+        reset(){
+            this.loading = true
+            czmm(this.user_id).then(res=>{
+                if (res.data.success) {
+                    this.$message({
+                        type: "success",
+                        message: "修改信息成功!"
+                    });
+                } else {
+                    this.$message({
+                        type: "error",
+                        message: res.data.msg
+                    });
+                }
+                this.handleClose();
+            }).finally(()=>{
+                this.loading = false
+            })
+        },
+        handleSubmit(form) {
+            this.loading = true
+            if (this.index === 0) {
+                updateInfo(form).then(res => {
+                    if (res.data.success) {
+                        this.$message({
+                            type: "success",
+                            message: "重置密码成功!密码为123456"
+                        });
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: res.data.msg
+                        });
+                    }
+                    this.loading = false
+                    this.handleClose();
+                }, error => {
+                    this.loading = false
+                    window.console.log(error);
+                    this.handleClose();
+                })
+            } else {
+                getXgmm(this.user_id, this.password.newPassword).then(res => {
+                    if (res.data.success) {
+                        this.$message({
+                            type: "success",
+                            message: "修改密码成功!"
+                        });
+                    } else {
+                        this.$message({
+                            type: "error",
+                            message: res.data.msg
+                        });
+                    }
+                    this.loading = false
+                    this.handleClose();
+                }, error => {
+                    this.loading = false
+                    window.console.log(error);
+                    this.handleClose();
+                })
+            }
+        },
+        logOut() {
+            this.$confirm(this.$t("logoutTip"), this.$t("tip"), {
+                confirmButtonText: this.$t("submitText"),
+                cancelButtonText: this.$t("cancelText"),
+                type: "warning"
+            }).then(() => {
+                this.$store.dispatch("LogOut").then(() => {
+                    resetRouter();
+                    this.$router.push({ path: "/login" });
+                });
+            });
+        }
+    }
+}
+</script>
+<style scoped lang="scss">
+.full_dialog {
+    .el-dialog {
+        .el-button {
+            border-radius: 8px;
+            margin-right: 12px;
+        }
+        .el-button--primary {
+            background-color: #106dff;
+        }
+    }
+    .password_dailog_footer {
+        display: flex;
+        justify-content: center;
+    }
+}
+
+.header {
+    width: 100%;
+    height: 64px;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    background-color: #106DFF;
+}
+
+.left {
+    display: flex;
+    align-items: center;
+    margin-left: 24px;
+}
+
+.img_logo {
+    width: 48px;
+    height: 48px;
+}
+
+.user_head {
+    width: 40px;
+    height: 40px;
+    /* border-radius: 60%/40%; */
+    border-radius: 50%;
+}
+
+.el-dropdown-link:hover {
+    cursor: pointer;
+}
+
+.title {
+    margin-left: 16px;
+    color: rgba(255, 255, 255, 1);
+    font-size: 24px;
+    font-weight: 800;
+}
+
+.right {
+    display: flex;
+    align-items: center;
+}
+
+.margin_right {
+    margin-right: 16px;
+    color: rgba(245, 247, 250, 1);
+}
+
+.font_top_title {
+    height: 32px;
+    vertical-align: sub;
+}</style>

+ 49 - 0
src/page/police/index.vue

@@ -0,0 +1,49 @@
+<template>
+    <div class="layout">
+        <Header />
+        <div class="content">
+            <Menus />
+            <div class="level2_body">
+                <Level2Menu ref="level" />
+                <div class="childrens">
+                    <Content />
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+import Header from './header/index.vue'
+import Menus from './menus/index.vue'
+import Level2Menu from './level2/index.vue'
+import Content from './content/index.vue'
+export default {
+    name: 'layout',
+    components: { Header,Menus,Level2Menu,Content }
+}
+</script>
+<style scoped>
+.layout {
+    width: 100%;
+    box-sizing: border-box;
+}
+.content {
+    width: 100%;
+    background-color: #1F2A4D;
+    display: flex;
+}
+.level2_body {
+    width: calc(100vw - 72px);
+    background-color: rgba(43, 59, 107, 1);
+    display: flex;
+    border-top-left-radius: 16px;
+}
+.childrens {
+    flex: 1;
+    background-color: #F5F7FA;
+    border-top-left-radius: 16px;
+    /* height: calc(100vh - 64px); */
+    /* overflow-y: scroll; */
+    overflow-x: hidden;
+}
+</style>

+ 162 - 0
src/page/police/level2/index.vue

@@ -0,0 +1,162 @@
+<template>
+    <div class="level2" :class="getMenuActive()">
+        <div class="level2_title">
+            <div>{{ level2Title }}</div>
+        </div>
+        <div v-for="item in level2List" :key="item.id" class="level2_item">
+            <div :class="getClass(item)" @click="toPath(item)" class="cursor">
+                <div class="level_label">{{ item.name }}</div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    name: 'level2',
+    data() {
+        return {
+            checkedPath: '/police/index'
+        }
+    },
+    watch: {
+        "$route": {
+            handler: function (n) {
+                this.checkedPath = n.path
+            },
+            immediate: true,
+            deep: true
+        }
+    },
+    computed: {
+        active() {
+            return this.$store.state.menu.levelMenuState
+        },
+        level2List() {
+            // 隐患移交,只有长春账号和超级管理员能看
+            let list = this.$store.state.menu.level2List.filter(item => {
+                return !((item.id == '1784500544255406081') &&
+                    ((this.dept_id.slice(0, 4) != '2201') && (this.dept_id != '220000000000')))
+            })
+            return list
+        },
+        level2Path() {
+            return this.$store.state.menu.level2Path
+        },
+        level2Title() {
+            return this.$store.state.menu.level2Title
+        },
+        dept_id() {
+            return JSON.parse(localStorage.getItem('saber-userInfo')).content.dept_id
+        }
+    },
+    methods: {
+        routeChange() { },
+        getMenuActive() {
+            return this.active
+        },
+        getClass(item) {
+            return ('/police/' + this.level2Path + item.path) ==
+                this.checkedPath ? 'level2_center_checked' : 'level2_center'
+        },
+        toPath(item) {
+            if (item.path.substr(0, 4) == 'http') {
+                window.open(item.path)
+            } else {
+                this.$router.push('/police/' + this.level2Path + item.path)
+            }
+        }
+    }
+}
+</script>
+<style  scoped>
+.nomal {
+    width: 0;
+}
+
+.open {
+    animation: open 0.5s;
+    animation-fill-mode: forwards;
+    -webkit-animation-fill-mode: forwards;
+}
+
+@keyframes open {
+    from {
+        width: 0;
+    }
+
+    to {
+        width: 154px;
+    }
+}
+
+.close {
+    animation: close 0.5s;
+    animation-fill-mode: forwards;
+    -webkit-animation-fill-mode: forwards;
+}
+
+@keyframes close {
+    from {
+        width: 154px;
+    }
+
+    to {
+        width: 0;
+    }
+}
+
+.level2 {
+    margin-top: 24px;
+    /* overflow: hidden; */
+    overflow-y: scroll;
+    overflow-x: hidden;
+    height: calc(100vh - 100px);
+    box-sizing: border-box;
+}
+
+.level2::-webkit-scrollbar {
+    display: none;
+}
+
+.level2_title {
+    display: flex;
+    justify-content: center;
+    font-weight: 500;
+    font-size: 12px;
+    color: rgba(255, 255, 255, 0.4);
+}
+
+.level2_item {
+    width: 154px;
+    min-height: 48px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    text-align: center;
+}
+
+.level2_center_checked {
+    width: 122px;
+    min-height: 32px;
+    background: #106DFF;
+    border-radius: 16px;
+    color: #FFFFFF;
+}
+
+.level2_center {
+    color: rgba(255, 255, 255, 0.6);
+}
+
+.cursor:hover {
+    cursor: pointer;
+}
+
+.level_label {
+    display: flex;
+    justify-content: center;
+    font-size: 14px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 500;
+    line-height: 28px;
+    padding: 0 12px;
+}</style>

+ 10 - 0
src/page/police/level2routerview.vue

@@ -0,0 +1,10 @@
+<template>
+    <keep-alive>
+        <router-view />
+    </keep-alive>
+</template>
+<script>
+export default {
+    name: 'level2routerview'
+}
+</script>

+ 204 - 0
src/page/police/menus/index.vue

@@ -0,0 +1,204 @@
+<template>
+<div class="menus">
+    <div class="line">
+        <div class="line_mask" :style="firstLineMask"></div>
+    </div>
+    <div v-for="(item,index) in menu"
+        :key="item.id"
+        class="content_body"
+        :class="getMenuClass(index)">
+        <div class="content menu_point cursor" @click="menuClick(item,index)">
+            <div class="img_body">
+                <img :src="iconByPath[item.path]" v-if="iconByPath[item.path] && clicked == index">
+                <img
+                    :src="iconByPath_unclick[item.path]"
+                    v-else-if="iconByPath_unclick[item.path] && clicked != index">
+                <i :class="item.source" v-else></i>
+                <!-- <i :class="item.source"></i> -->
+            </div>
+            <div class="menu_item_title">{{ item.name }}</div>
+        </div>
+        <div class="line">
+            <div class="line_mask" :style="getLineStyle(index)"></div>
+        </div>
+    </div>
+</div>
+</template>
+<script>
+export default {
+    name: 'menus',
+    data(){
+        return {
+            clicked: 0,
+            firstLineMask: {
+                "border-bottom-right-radius": '12px'
+            },
+            iconByPath: {
+                'index': require('../public/menu_home_white_16.svg'),       // 首页
+                '3': require('../public/menu_fire_white_16.svg'),           // 消防检查
+                '4': require('../public/menu_dispute_white_16.svg'),        // 矛盾纠纷
+                '7': require('../public/menu_police_white_16.svg'),         // 警务管理
+                'rhzf': require('../public/menu_walk_white_16.svg'),        // 入户走访
+                'ybss': require('../public/menu_standard_white_16.svg'),    // 一标三实
+            },
+            iconByPath_unclick: {
+                'index': require('../public/menu_home_light_16.svg'),       // 首页
+                '3': require('../public/menu_fire_light_16.svg'),           // 消防检查
+                '4': require('../public/menu_dispute_light_16.svg'),        // 矛盾纠纷
+                '7': require('../public/menu_police_light_16.svg'),         // 警务管理
+                'rhzf': require('../public/menu_walk_light_16.svg'),        // 入户走访
+                'ybss': require('../public/menu_standard_light_16.svg'),    // 一标三实
+
+            }
+        }
+    },
+    computed: {
+        menu(){
+            return this.$store.state.user.menu
+        },
+        dom(){
+            return document.getElementsByClassName('content menu_point')
+        }
+    },
+    watch: {
+        'clicked': {
+            handler: function(n){
+                if(n == 0){
+                    this.firstLineMask = {
+                        "border-bottom-right-radius": '12px'
+                    }
+                }else{
+                    this.firstLineMask = {
+                        "border-bottom-right-radius": 0
+                    }
+                }
+            }
+        },
+        "$route": {
+            handler: function(n){
+                for(let i=0;i<this.menu.length;i++){
+                    if('/police/' + this.menu[i]['path'] == n['matched'][1]['path']){
+                        this.menuClick(this.menu[i],i)
+                        if(this.dom[i]){
+                            this.dom[i].scrollIntoView()
+                        }
+                    }
+                }
+            },
+            immediate: true,
+            deep: true
+        }
+    },
+    methods: {
+        // 左侧1级菜单点击,展开2级菜单,首页跳转
+        menuClick(item,index){
+            if(item.id == 0){
+                this.$store.commit('CHANGE_LEVEL_MENU','close')
+                this.$store.commit('CHANGE_PATH_NAME','index')
+                this.$router.push('/police/index')
+            }else{
+                this.$store.commit('CHANGE_LEVEL_MENU','open')
+                this.$store.commit('CHANGE_PATH_NAME',item)
+            }
+            this.clicked = index
+        },
+        getMenuClass(index){
+            return index == this.clicked ? 'menu_item_clicked' : 'menu_item'
+        },
+        // line圆角
+        getLineStyle(index){
+            if(index == this.clicked){
+                if(this.clicked == 0){
+                    return {
+                        "border-top-right-radius": '12px',
+                        "border-bottom-right-radius": 0
+                    }
+                }else{
+                    return {
+                        "border-top-right-radius": '12px',
+                        "border-bottom-right-radius": 0
+                    }
+                }
+            }else if(index == (this.clicked -1)){
+                return {
+                    "border-top-right-radius": 0,
+                    "border-bottom-right-radius": '12px'
+                }
+            } else {
+                return {
+                    "border-top-right-radius": 0,
+                    "border-bottom-right-radius": 0
+                }
+            }
+        },
+    }
+}
+</script>
+<style lang="scss" scoped>
+.menus {
+    width: 72px;
+    margin-top: 28px;
+    height: calc(100vh - 92px);
+    overflow-y: scroll;
+}
+.menus::-webkit-scrollbar {
+    display: none;
+}
+.line {
+    width: 100%;
+    height: 12px;
+    background-color: rgba(43, 59, 107, 1);
+}
+.line_mask {
+    height: 12px;
+    background-color: #1F2A4D;
+}
+.menu_item {
+    width: 100%;
+    height: 80px;
+    color: rgba(255, 255, 255, 0.6);
+}
+.content_body {
+    height: 92px;
+}
+.content {
+    width: 100%;
+    height: 80px;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+}
+.menu_item_clicked {
+    color: rgba(255, 255, 255, 1);
+}
+.menu_item_clicked .content {
+    background-color: rgba(43, 59, 107, 1);
+    border-top-left-radius: 12px;
+    border-bottom-left-radius: 12px;
+}
+.cursor:hover {
+    cursor: pointer;
+}
+.img_body {
+    width: 40px;
+    height: 40px;
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    border-radius: 12px;
+}
+.menu_item .img_body {
+    border: 0.5px solid rgba(255, 255, 255, 0.6);
+}
+.menu_item_clicked .img_body {
+    background-color: rgba(16, 109, 255, 1);
+}
+.menu_item_title {
+    margin-top: 4px;
+    font-size: 12px;
+    font-weight: 500;
+    text-align: center;
+    color: rgba(255, 255, 255, 0.6);
+}
+</style>

+ 19 - 0
src/page/police/public/btn_menu_message_24.svg

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>btn_menu_message_24</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-1207.000000, -20.000000)">
+            <g id="编组-8" transform="translate(16.000000, 8.000000)">
+                <g id="编组-14" transform="translate(1191.000000, 4.000000)">
+                    <g id="btn_menu_message_24" transform="translate(0.000000, 8.000000)">
+                        <rect id="矩形" x="0" y="0" width="24" height="24"></rect>
+                        <path d="M12,3 C8.134,3 5,6.134 5,10 L5,20 L19,20 L19,10 C19,6.134 15.866,3 12,3 Z" id="路径"></path>
+                        <path d="M5,20 L5,10 C5,6.134 8.134,3 12,3 C15.866,3 19,6.134 19,10 L19,20 M2,20 L22,20" id="形状" stroke="#FFFFFF" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
+                        <path d="M12,23 C13.3807,23 14.5,21.8807 14.5,20.5 L14.5,20 L9.5,20 L9.5,20.5 C9.5,21.8807 10.6193,23 12,23 Z" id="路径" stroke="#FFFFFF" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
+                        <path d="M14,3 C14,1.8954305 13.1045695,1 12,1 C10.8954305,1 10,1.8954305 10,3" id="路径" stroke="#FFFFFF" stroke-width="1.5"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 19 - 0
src/page/police/public/btn_menu_set_24.svg

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>btn_menu_set_24</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-1255.000000, -20.000000)">
+            <g id="编组-8" transform="translate(16.000000, 8.000000)">
+                <g id="编组-14" transform="translate(1191.000000, 4.000000)">
+                    <g id="编组-6" transform="translate(48.000000, 0.000000)">
+                        <g id="btn_menu_set_24" transform="translate(0.000000, 8.000000)">
+                            <rect id="矩形" x="0" y="0" width="24" height="24"></rect>
+                            <polygon id="路径" stroke="#FFFFFF" stroke-width="1.5" stroke-linejoin="round" points="17.00015 20.5 22 12 17.00015 3.5 7.0001 3.5 2 12 7.0001 20.5"></polygon>
+                            <path d="M12,14.5 C13.3807,14.5 14.5,13.3807 14.5,12 C14.5,10.6193 13.3807,9.5 12,9.5 C10.6193,9.5 9.5,10.6193 9.5,12 C9.5,13.3807 10.6193,14.5 12,14.5 Z" id="路径" stroke="#FFFFFF" stroke-width="1.5" stroke-linejoin="round"></path>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 17 - 0
src/page/police/public/btn_view_column_20.svg

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>btn_view_column_20</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-106.000000, -125.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="btn_view_column_20" transform="translate(34.000000, 49.000000)">
+                    <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="view-column-(Background)"></path>
+                    <g id="view-column">
+                        <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="view-column-(Background)"></path>
+                        <path d="M16.875,3.75 C17.220178,3.75 17.5,4.02982203 17.5,4.375 C17.5,4.72017797 17.220178,5 16.875,5 L3.125,5 C2.77982203,5 2.5,4.72017797 2.5,4.375 C2.5,4.02982203 2.77982203,3.75 3.125,3.75 L16.875,3.75 Z M10.625,9.375 C10.970178,9.375 11.25,9.65482203 11.25,10 C11.25,10.345178 10.970178,10.625 10.625,10.625 L3.125,10.625 C2.77982203,10.625 2.5,10.345178 2.5,10 C2.5,9.65482203 2.77982203,9.375 3.125,9.375 L10.625,9.375 Z M10.625,15 C10.970178,15 11.25,15.279822 11.25,15.625 C11.25,15.970178 10.970178,16.25 10.625,16.25 L3.125,16.25 C2.77982203,16.25 2.5,15.970178 2.5,15.625 C2.5,15.279822 2.77982203,15 3.125,15 L10.625,15 Z M16.5283124,9.79246857 L12.7783124,12.2924686 C12.4072292,12.5398573 12.4072292,13.0851427 12.7783124,13.3325314 L16.5283124,15.8325314 C16.9436591,16.1094292 17.5,15.8116846 17.5,15.3125 L17.5,10.3125 C17.5,9.81331538 16.9436591,9.51557076 16.5283124,9.79246857 Z M16.25,11.48 L16.25,14.14375 L14.2525,12.8125 L16.25,11.48 Z" id="形状结合" fill="#242F52" transform="translate(10.000000, 10.000000) scale(-1, 1) translate(-10.000000, -10.000000) "></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 15 - 0
src/page/police/public/font_top_title.svg

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="405px" height="29px" viewBox="0 0 405 29" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>font_top_title</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" font-family="AlimamaShuHeiTi-Bold, Alimama ShuHeiTi" font-size="24" font-weight="bold" letter-spacing="3">
+        <g id="首页" transform="translate(-73.000000, -16.000000)" fill="#FFFFFF">
+            <g id="编组-8" transform="translate(16.000000, 8.000000)">
+                <g id="font_top_title" transform="translate(57.000000, 8.000000)">
+                    <text>
+                        <tspan x="0" y="25">吉林公安派出所基础工作智慧平台</tspan>
+                    </text>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 17 - 0
src/page/police/public/icon_closed_light_16.svg

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon_closed_light_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-176.000000, -84.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="icon_closed_light_16" transform="translate(104.000000, 8.000000)">
+                    <path d="M16,0 L16,16 L0,16 L0,0 L16,0 Z" id="矩形" opacity="0.600000024"></path>
+                    <g id="1.Bace基础/3.Icon图标/Line/16px/close">
+                        <path d="M16,0 L16,16 L0,16 L0,0 L16,0 Z" id="矩形" opacity="0.600000024"></path>
+                        <polygon id="Vector-(Stroke)" fill="#6F7CA3" points="4.00484467 4.92412162 4.92408347 4.00488281 7.99999809 7.08079767 11.0759125 4.00488281 11.9951515 4.92412162 8.91923666 8.00003624 11.9951515 11.0759506 11.0759125 11.9951897 7.99999809 8.91927481 4.92408347 11.9951897 4.00484467 11.0759506 7.08075953 8.00003624"></polygon>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 19 - 0
src/page/police/public/icon_rank_first.svg

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>mipmap-mdpi/icon_rank_first</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-106.000000, -419.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-3备份" transform="translate(34.000000, 340.000000)">
+                    <g id="icon_rank_first" transform="translate(0.000000, 3.000000)">
+                        <rect id="矩形" x="0" y="0" width="16" height="16"></rect>
+                        <path d="M10.880254,0 L10.880254,5.04345673 L13.7631841,2.71784078 L13.7631841,0 L10.880254,0 Z M2.23146376,2.71784078 L5.11439384,5.04345673 L5.11439384,0 L2.23350261,0 L2.23146376,2.71784078 L2.23146376,2.71784078 Z M6.3499353,6.03986629 L7.58547675,7.04023771 C7.8117888,7.25615947 8.17470362,7.25615947 8.40305452,7.04023771 L9.63859598,6.03986629 L9.63859598,0 L6.34177991,0 L6.34177991,6.03986629 L6.3499353,6.03986629 Z" id="形状" fill="#FA6D74" fill-rule="nonzero"></path>
+                        <path d="M14.3075563,8.21295035 C13.4186189,7.63253683 12.9741501,6.59254674 13.1821126,5.57038504 C13.3554146,4.46700508 12.8742466,4.00346663 11.7406475,4.16986505 C10.6886023,4.36993933 9.61616866,3.93611489 9.0187864,3.07242788 C8.33781141,2.17704593 7.65887526,2.17704593 6.97790026,3.07242788 C6.380518,3.93611489 5.30808433,4.3679584 4.25807797,4.16788412 C3.12447888,3.99950477 2.64331092,4.46700508 2.81661294,5.56840411 C3.02457536,6.58858487 2.58010665,7.6305559 1.69116923,8.20898849 C0.769610256,8.86863935 0.769610256,9.53225207 1.69116923,10.1919029 C2.58010665,10.7723165 3.02457536,11.8123065 2.81661294,12.8324873 C2.64331092,13.9358673 3.12447888,14.3994057 4.25807797,14.2330073 C5.30808433,14.032933 6.380518,14.4647765 6.97790026,15.3284635 C7.65887526,16.2238455 8.33781141,16.2238455 9.0187864,15.3284635 C9.61616866,14.4647765 10.6886023,14.034914 11.7386087,14.2330073 C12.8722078,14.4013867 13.3513369,13.9338863 13.1800737,12.8324873 C12.9721113,11.8123065 13.41658,10.7703355 14.3055174,10.189922 C15.2311541,9.53621394 15.2311541,8.87656308 14.3075563,8.21295035 Z" id="路径" fill="#FDE51B" fill-rule="nonzero"></path>
+                        <path d="M3.46904407,9.20143618 C3.46904407,11.6320416 5.49769713,13.6030704 7.99936275,13.6030704 C10.5010284,13.6030704 12.5296814,11.6320416 12.5296814,9.20143618 C12.5296814,6.77083075 10.5010284,4.79980191 7.99936275,4.79980191 C5.49769713,4.79980191 3.46904407,6.77083075 3.46904407,9.20143618 L3.46904407,9.20143618 Z" id="路径" fill="#FDBA36" fill-rule="nonzero"></path>
+                        <polygon id="路径" fill="#FFFFFF" fill-rule="nonzero" points="8.89379969 11.8017828 8.89379969 7 7.7561229 7 6.7 7.89142008 6.7 9.07205646 7.7561229 8.18261731 7.7561229 11.8037638 8.89379969 11.8017828"></polygon>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 19 - 0
src/page/police/public/icon_rank_second.svg

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>mipmap-mdpi/icon_rank_second</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-106.000000, -453.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-3备份" transform="translate(34.000000, 340.000000)">
+                    <g id="icon_rank_second" transform="translate(0.000000, 37.000000)">
+                        <rect id="矩形" x="0" y="0" width="16" height="16"></rect>
+                        <path d="M10.8800743,0 L10.8800743,5.04345673 L13.7629519,2.71784078 L13.7629519,0 L10.8800743,0 Z M2.23144137,2.71585985 L5.114319,5.0414758 L5.114319,0 L2.23348018,0 L2.23144137,2.71585985 L2.23144137,2.71585985 Z M6.34983799,6.03986629 L7.58535697,7.04023771 C7.81166491,7.25615947 8.17457312,7.25615947 8.40291987,7.04023771 L9.63843885,6.03986629 L9.63843885,0 L6.34168275,0 L6.34168275,6.03986629 L6.34983799,6.03986629 Z" id="形状" fill="#B2C9DA" fill-rule="nonzero"></path>
+                        <path d="M14.3073142,8.21295035 C13.418393,7.63253683 12.9739324,6.59254674 13.181891,5.57038504 C13.3551899,4.46700508 12.8740307,4.00346663 11.7404522,4.16986505 C10.6884261,4.36993933 9.61601194,3.93611489 9.01864055,3.07242788 C8.33767794,2.17704593 7.65875414,2.17704593 6.97779153,3.07242788 C6.38042014,3.93611489 5.30800597,4.3679584 4.25801871,4.16788412 C3.12444024,3.99950477 2.64328103,4.46700508 2.8165799,5.56840411 C3.02453854,6.58858487 2.58007791,7.6305559 1.69115666,8.20898849 C0.769614446,8.86863935 0.769614446,9.53225207 1.69115666,10.1919029 C2.58007791,10.7723165 3.02453854,11.8123065 2.8165799,12.8324873 C2.64328103,13.9358673 3.12444024,14.3994057 4.25801871,14.2330073 C5.30800597,14.032933 6.38042014,14.4647765 6.97779153,15.3284635 C7.65875414,16.2238455 8.33767794,16.2238455 9.01864055,15.3284635 C9.61805075,14.4647765 10.6884261,14.034914 11.7404522,14.2330073 C12.8740307,14.4013867 13.3531511,13.9338863 13.181891,12.8324873 C12.9739324,11.8123065 13.418393,10.7703355 14.3073142,10.189922 C15.2308953,9.53423301 15.2308953,8.87458215 14.3073142,8.21295035 Z" id="路径" fill="#D8E3EB" fill-rule="nonzero"></path>
+                        <path d="M3.46899916,9.19945524 C3.46899916,11.6300607 5.49761532,13.6010895 7.99923545,13.6010895 C10.5008556,13.6010895 12.5294717,11.6300607 12.5294717,9.19945524 C12.5294717,6.76884982 10.5008556,4.79782097 7.99923545,4.79782097 C5.49761532,4.79782097 3.46899916,6.76884982 3.46899916,9.19945524 L3.46899916,9.19945524 Z" id="路径" fill="#B2C9DA" fill-rule="nonzero"></path>
+                        <path d="M7.59884221,10.6747802 L9.70904916,10.6747802 L9.70904916,11.5146961 L6.4,11.5146961 L6.4,11.1561471 C6.4,10.9045685 6.44689349,10.6747802 6.54271931,10.4667822 C6.63854513,10.2587842 6.76903136,10.0646527 6.93621684,9.88438777 C7.10340232,9.70412282 7.36233592,9.49414387 7.71301766,9.25246998 C8.03515553,9.01871982 8.25942873,8.81270274 8.38787611,8.63243779 C8.51632349,8.45217284 8.5815666,8.26200322 8.5815666,8.059948 C8.5815666,7.62414263 8.33690493,7.40822087 7.84962042,7.40822087 C7.42146249,7.40822087 7.01165419,7.57461929 6.62223435,7.90741612 L6.62223435,7.0080723 C7.05650883,6.73470348 7.54583218,6.6 8.08612671,6.6 C8.58360545,6.6 8.97506413,6.72281788 9.26458045,6.97043457 C9.55409676,7.21607032 9.69885492,7.55679089 9.69885492,7.98863439 C9.69885492,8.23030828 9.65807797,8.44821097 9.57448523,8.64234245 C9.4908925,8.83647394 9.37060051,9.01871982 9.21157042,9.19106104 C9.05254033,9.36142132 8.79972326,9.56743841 8.45108038,9.80515043 C8.11467057,10.0389006 7.88835852,10.2191655 7.77418308,10.3459453 C7.65592993,10.4707441 7.59884221,10.5816764 7.59884221,10.6747802 L7.59884221,10.6747802 Z" id="路径" fill="#FFFFFF" fill-rule="nonzero"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 19 - 0
src/page/police/public/icon_rank_third.svg

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>mipmap-mdpi/icon_rank_third</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-106.000000, -487.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-3备份" transform="translate(34.000000, 340.000000)">
+                    <g id="icon_rank_third" transform="translate(0.000000, 71.000000)">
+                        <rect id="矩形" x="0" y="0" width="16" height="16"></rect>
+                        <path d="M10.880254,0 L10.880254,5.04345673 L13.7631841,2.71784078 L13.7631841,0 L10.880254,0 Z M2.22942492,2.71784078 L5.11235499,5.04543766 L5.11235499,0 L2.23146376,0 L2.22942492,2.71784078 Z M6.34789645,6.03986629 L7.58343791,7.04023771 C7.80974996,7.25615947 8.17266477,7.25615947 8.40101567,7.04023771 L9.63655713,6.03986629 L9.63655713,0 L6.34177991,0 L6.34177991,6.03986629 L6.34789645,6.03986629 Z" id="形状" fill="#F2816B" fill-rule="nonzero"></path>
+                        <path d="M14.3075563,8.21295035 C13.4186189,7.63253683 12.9741501,6.59254674 13.1821126,5.57038504 C13.3554146,4.46700508 12.8742466,4.00346663 11.7406475,4.16986505 C10.6886023,4.36993933 9.61616866,3.93611489 9.0187864,3.07242788 C8.33781141,2.17704593 7.65887526,2.17704593 6.97790026,3.07242788 C6.380518,3.93611489 5.30808433,4.3679584 4.25807797,4.16788412 C3.12447888,3.99950477 2.64331092,4.46700508 2.81661294,5.56840411 C3.02457536,6.58858487 2.58010665,7.6305559 1.69116923,8.20898849 C0.769610256,8.86863935 0.769610256,9.53225207 1.69116923,10.1919029 C2.58010665,10.7723165 3.02457536,11.8123065 2.81661294,12.8324873 C2.64331092,13.9358673 3.12447888,14.3994057 4.25807797,14.2330073 C5.30808433,14.032933 6.380518,14.4647765 6.97790026,15.3284635 C7.65887526,16.2238455 8.33781141,16.2238455 9.0187864,15.3284635 C9.61616866,14.4647765 10.6886023,14.034914 11.7386087,14.2330073 C12.8722078,14.4013867 13.3513369,13.9338863 13.1800737,12.8324873 C12.9721113,11.8123065 13.41658,10.7703355 14.3055174,10.189922 C15.2311541,9.53621394 15.2311541,8.87656308 14.3075563,8.21295035 Z" id="路径" fill="#FC9E81" fill-rule="nonzero"></path>
+                        <path d="M3.46904407,9.20143618 C3.46904407,11.6320416 5.49769713,13.6030704 7.99936275,13.6030704 C10.5010284,13.6030704 12.5296814,11.6320416 12.5296814,9.20143618 C12.5296814,6.77083075 10.5010284,4.79980191 7.99936275,4.79980191 C5.49769713,4.79980191 3.46904407,6.77083075 3.46904407,9.20143618 L3.46904407,9.20143618 Z" id="路径" fill="#FFB799" fill-rule="nonzero"></path>
+                        <path d="M6.4,10.6355574 C6.73232606,10.8772312 7.1197,10.9980682 7.56212182,10.9980682 C7.84347763,10.9980682 8.06570794,10.9386402 8.23085157,10.8178032 C8.39599519,10.6969663 8.4775476,10.5246251 8.4775476,10.3027605 C8.4775476,10.0729722 8.37968471,9.89865009 8.18395893,9.77781314 C7.98823315,9.6569762 7.71299377,9.59754819 7.36027961,9.59754819 L6.91785779,9.59754819 L6.91785779,8.82102225 L7.32561983,8.82102225 C7.99434958,8.82102225 8.32871446,8.60311957 8.32871446,8.16533326 C8.32871446,7.75329909 8.07182437,7.547282 7.56008301,7.547282 C7.22571813,7.547282 6.90154731,7.65425241 6.58757054,7.8662123 L6.58757054,7.03223929 C6.93009065,6.85989807 7.33377508,6.772737 7.7986238,6.772737 C8.26958896,6.772737 8.65288528,6.87772648 8.94443514,7.08968636 C9.23802381,7.30164625 9.38481815,7.59284348 9.38481815,7.96922084 C9.38481815,8.60113863 9.05453089,8.99930627 8.39599519,9.16174282 L8.39599519,9.17759029 C8.74259293,9.21522802 9.01987112,9.3380459 9.22782976,9.54802485 C9.4357884,9.75800381 9.53976772,10.0115633 9.53976772,10.3106843 C9.53976772,10.7702608 9.36646885,11.1288098 9.02190993,11.3883121 C8.67531219,11.6458334 8.21454109,11.7745941 7.63959661,11.7745941 C7.12785524,11.7745941 6.71601558,11.6913949 6.40203881,11.5289584 L6.40203881,10.6355574 L6.4,10.6355574 Z" id="路径" fill="#FFFFFF" fill-rule="nonzero"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 22 - 0
src/page/police/public/icon_statistics_case.svg

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>mipmap-mdpi/icon_statistics_case</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-988.000000, -666.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-3备份-2" transform="translate(472.000000, 338.000000)">
+                    <g id="编组-11" transform="translate(444.000000, 0.000000)">
+                        <g id="icon_statistics_case" transform="translate(0.000000, 252.000000)">
+                            <rect id="矩形" fill="#F8F8F8" x="0" y="0" width="24" height="24" rx="4"></rect>
+                            <g id="编组" transform="translate(6.670000, 5.000000)" stroke="#333333" stroke-linejoin="round" stroke-width="1.33333333">
+                                <path d="M8.34996667,1 L10,1 C10.3682,1 10.6666667,1.29847667 10.6666667,1.66666667 L10.6666667,12.6666667 C10.6666667,13.0348667 10.3682,13.3333333 10,13.3333333 L0.666666667,13.3333333 C0.298476667,13.3333333 0,13.0348667 0,12.6666667 L0,1.66666667 C0,1.29847667 0.298476667,1 0.666666667,1 L2.66666667,1 L3,1 L3,2 L7.66666667,2 L7.66666667,1 L8.34996667,1 Z" id="路径"></path>
+                                <rect id="矩形" stroke-linecap="round" x="3" y="0" width="4.66666667" height="2"></rect>
+                                <polyline id="路径" stroke-linecap="round" points="6.3332 5 3.66666667 7.66706667 7.00133333 7.66706667 4.33343333 10.3339333"></polyline>
+                            </g>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 20 - 0
src/page/police/public/icon_statistics_dispute.svg

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>mipmap-mdpi/icon_statistics_dispute</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-988.000000, -582.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-3备份-2" transform="translate(472.000000, 338.000000)">
+                    <g id="编组-11" transform="translate(444.000000, 0.000000)">
+                        <g id="icon_statistics_dispute" transform="translate(0.000000, 168.000000)">
+                            <rect id="矩形" fill="#F8F8F8" x="0" y="0" width="24" height="24" rx="4"></rect>
+                            <g id="编组" transform="translate(5.330000, 6.370000)" stroke="#333333" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.33333333">
+                                <path d="M6.66666667,7.66666667 L5.66666667,6 L8,4 L5,2.33333333 L5.33333333,0.399806667 C4.8333,0.144186667 4.2668,0 3.66666667,0 C1.64162333,0 0,1.64163333 0,3.66666667 C0,7.33333333 4.33333333,10.6666667 6.66666667,11.3333333 C9,10.6666667 13.3333333,7.33333333 13.3333333,3.66666667 C13.3333333,1.64163333 11.6917,0 9.66666667,0 C9.06653333,0 8.50003333,0.144186667 8,0.399806667" id="路径"></path>
+                            </g>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 23 - 0
src/page/police/public/icon_statistics_fire.svg

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>mipmap-mdpi/icon_statistics_fire</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-988.000000, -540.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-3备份-2" transform="translate(472.000000, 338.000000)">
+                    <g id="编组-11" transform="translate(444.000000, 0.000000)">
+                        <g id="icon_statistics_fire" transform="translate(0.000000, 126.000000)">
+                            <rect id="矩形" fill="#F8F8F8" x="0" y="0" width="24" height="24" rx="4"></rect>
+                            <g id="编组" transform="translate(6.000000, 5.330000)">
+                                <path d="M0,5.33333333 C0,3.86056667 1.19390667,2.66666667 2.66666667,2.66666667 C4.13943333,2.66666667 5.33333333,3.86056667 5.33333333,5.33333333 L5.33333333,13.3333333 L0,13.3333333 L0,5.33333333 Z" id="路径" stroke="#333333" stroke-width="1.33333333" stroke-linecap="round" stroke-linejoin="round"></path>
+                                <polygon id="路径" points="8 13.3333333 12 13.3333333 10 7.33333333"></polygon>
+                                <path d="M10,7.33333333 L8,13.3333333 L12,13.3333333 L10,7.33333333 Z M10,7.33333333 L10,6.66666667 C10,4.1525 10,2.89543333 9.21896667,2.11436667 C8.4379,1.33333333 7.18083333,1.33333333 4.66666667,1.33333333 L4,1.33333333 M1.33333333,1.33333333 L0,1.33333333" id="形状" stroke="#333333" stroke-width="1.33333333" stroke-linecap="round" stroke-linejoin="round"></path>
+                                <circle id="椭圆形" stroke="#333333" stroke-width="1.33333333" stroke-linecap="round" stroke-linejoin="round" cx="2.66666667" cy="1.33333333" r="1.33333333"></circle>
+                            </g>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 20 - 0
src/page/police/public/icon_statistics_house.svg

@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>mipmap-mdpi/icon_statistics_house</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-988.000000, -414.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-3备份-2" transform="translate(472.000000, 338.000000)">
+                    <g id="icon_statistics_house" transform="translate(444.000000, 0.000000)">
+                        <rect id="矩形" fill="#F8F8F8" x="0" y="0" width="24" height="24" rx="4"></rect>
+                        <g id="编组" transform="translate(7.000000, 6.000000)" stroke="#333333" stroke-width="1.33333333">
+                            <polygon id="路径" stroke-linecap="round" stroke-linejoin="round" points="0 4 0 12 10 12 10 4 5 0"></polygon>
+                            <polygon id="路径" stroke-linejoin="round" points="3.33333333 7.66666667 3.33333333 12 6.66666667 12 6.66666667 7.66666667"></polygon>
+                            <line x1="0" y1="12" x2="10" y2="12" id="路径" stroke-linecap="round"></line>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 21 - 0
src/page/police/public/icon_statistics_idea.svg

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>mipmap-mdpi/icon_statistics_idea</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-988.000000, -708.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-3备份-2" transform="translate(472.000000, 338.000000)">
+                    <g id="编组-11" transform="translate(444.000000, 0.000000)">
+                        <g id="icon_statistics_idea" transform="translate(0.000000, 294.000000)">
+                            <rect id="矩形" fill="#F8F8F8" x="0" y="0" width="24" height="24" rx="4"></rect>
+                            <g id="编组" transform="translate(5.330000, 6.200000)" stroke="#333333" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.33333333">
+                                <polygon id="路径" points="13.3333333 0 0 0 0 10 3 10 3 11.6666667 6.33333333 10 13.3333333 10"></polygon>
+                                <line x1="3.33333333" y1="5" x2="10" y2="5" id="路径"></line>
+                            </g>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 23 - 0
src/page/police/public/icon_statistics_people.svg

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>mipmap-mdpi/icon_statistics_people</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-988.000000, -456.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-3备份-2" transform="translate(472.000000, 338.000000)">
+                    <g id="编组-11" transform="translate(444.000000, 0.000000)">
+                        <g id="icon_statistics_people" transform="translate(0.000000, 42.000000)">
+                            <rect id="矩形" fill="#F8F8F8" x="0" y="0" width="24" height="24" rx="4"></rect>
+                            <g id="编组" transform="translate(5.330000, 6.000000)" stroke="#333333" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.33333333">
+                                <path d="M5,4.66666667 C6.28866667,4.66666667 7.33333333,3.622 7.33333333,2.33333333 C7.33333333,1.04467 6.28866667,0 5,0 C3.71133333,0 2.66666667,1.04467 2.66666667,2.33333333 C2.66666667,3.622 3.71133333,4.66666667 5,4.66666667 Z" id="路径"></path>
+                                <path d="M9.5359,0.333333333 C10.2135,0.741633333 10.6667,1.48456667 10.6667,2.33333333 C10.6667,3.1821 10.2135,3.92503333 9.5359,4.33333333" id="路径"></path>
+                                <path d="M0,11.6 L0,12 L10,12 L10,11.6 C10,10.1065333 10,9.3598 9.70936667,8.78936667 C9.4537,8.2876 9.04573333,7.87963333 8.54396667,7.62396667 C7.97353333,7.33333333 7.2268,7.33333333 5.73333333,7.33333333 L4.26666667,7.33333333 C2.7732,7.33333333 2.02646667,7.33333333 1.45602667,7.62396667 C0.95426,7.87963333 0.54631,8.2876 0.29065,8.78936667 C0,9.3598 0,10.1065333 0,11.6 Z" id="路径"></path>
+                                <path d="M13.3333,12.0000333 L13.3333,11.6000333 C13.3333,10.1065667 13.3333,9.35983333 13.0426667,8.7894 C12.787,8.28763333 12.3790333,7.8797 11.8772667,7.62403333" id="路径"></path>
+                            </g>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 22 - 0
src/page/police/public/icon_statistics_police.svg

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>mipmap-mdpi/icon_statistics_police</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-988.000000, -624.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-3备份-2" transform="translate(472.000000, 338.000000)">
+                    <g id="编组-11" transform="translate(444.000000, 0.000000)">
+                        <g id="icon_statistics_police" transform="translate(0.000000, 210.000000)">
+                            <rect id="矩形" fill="#F8F8F8" x="0" y="0" width="24" height="24" rx="4"></rect>
+                            <g id="编组" transform="translate(4.670000, 5.670000)" stroke="#333333" stroke-width="1.33333333">
+                                <polygon id="路径" stroke-linejoin="round" points="7.33333333 0 0 12.6666667 14.6666667 12.6666667"></polygon>
+                                <line x1="7.33333333" y1="10" x2="7.33333333" y2="10.3333333" id="路径" stroke-linecap="round"></line>
+                                <line x1="7.33333333" y1="4.66683333" x2="7.3361" y2="8" id="路径" stroke-linecap="round"></line>
+                            </g>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 21 - 0
src/page/police/public/icon_statistics_site.svg

@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>mipmap-mdpi/icon_statistics_site</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-988.000000, -498.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-3备份-2" transform="translate(472.000000, 338.000000)">
+                    <g id="编组-11" transform="translate(444.000000, 0.000000)">
+                        <g id="icon_statistics_site" transform="translate(0.000000, 84.000000)">
+                            <rect id="矩形" fill="#F8F8F8" x="0" y="0" width="24" height="24" rx="4"></rect>
+                            <g id="编组" transform="translate(5.800000, 6.000000)" stroke="#333333" stroke-linejoin="round" stroke-width="1.33333333">
+                                <polyline id="路径" stroke-linecap="round" points="11.5353168 5.33333333 11.5353168 12 0.86863683 12 0.86863683 5.33333333"></polyline>
+                                <path d="M0.13638683,2.5922 C-0.37346317,3.91256667 0.609973497,5.33333333 2.02535016,5.33333333 C3.12991683,5.33333333 4.0314835,4.4379 4.0314835,3.33333333 C4.0314835,4.4379 4.92691683,5.33333333 6.0314835,5.33333333 L6.37095016,5.33333333 C7.47551683,5.33333333 8.37095016,4.4379 8.37095016,3.33333333 C8.37095016,4.4379 9.2728835,5.33333333 10.3774502,5.33333333 C11.7935835,5.33333333 12.7779502,3.91173333 12.2676835,2.59076667 L11.2668502,0 L1.13736016,0 L0.13638683,2.5922 Z" id="路径"></path>
+                            </g>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 22 - 0
src/page/police/public/icon_title_compare_24.svg

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon_title_compare_24</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-544.000000, -376.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-4备份" transform="translate(16.000000, 274.000000)">
+                    <g id="编组-4备份-2" transform="translate(456.000000, 24.000000)">
+                        <g id="icon_title_compare_24" transform="translate(0.000000, 2.000000)">
+                            <rect id="矩形" x="0" y="0" width="24" height="24"></rect>
+                            <polyline id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="3 3 3 21 21 21"></polyline>
+                            <line x1="7" y1="15" x2="7" y2="17" id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></line>
+                            <line x1="11" y1="11" x2="11" y2="17" id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></line>
+                            <line x1="15" y1="3" x2="15" y2="17" id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></line>
+                            <line x1="19" y1="7" x2="19" y2="17" id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></line>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 19 - 0
src/page/police/public/icon_title_data_24.svg

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon_title_data_24</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-104.000000, -184.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-4" transform="translate(16.000000, 82.000000)">
+                    <g id="icon_title_data_24" transform="translate(16.000000, 26.000000)">
+                        <rect id="矩形" x="0" y="0" width="24" height="24"></rect>
+                        <g id="编组" transform="translate(2.000000, 2.000000)" stroke="#111111" stroke-linejoin="round" stroke-width="2">
+                            <path d="M6.1723,0.75879 C4.95,1.26562 3.85005,2.00787 2.92893,2.928985 C1.11929,4.73865 0,7.23865 0,10.00005 C0,15.5229 4.47715,20.00005 10,20.00005 L10,20.00005 C12.7614,20.00005 15.2614,18.88075 17.07105,17.0711 C17.9922,16.15 18.73445,15.05005 19.24125,13.82775" id="路径" stroke-linecap="round"></path>
+                            <path d="M10,10 L20,10 C20,4.47715 15.52285,0 10,0 L10,10 Z" id="路径"></path>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 16 - 0
src/page/police/public/icon_title_dispute_24.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon_title_dispute_24</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-780.000000, -794.000000)">
+            <g id="编组-10" transform="translate(88.000000, 776.000000)">
+                <g id="编组-4备份-5" transform="translate(676.000000, 0.000000)">
+                    <g id="icon_title_dispute_24" transform="translate(16.000000, 18.000000)">
+                        <rect id="矩形" x="0" y="0" width="24" height="24"></rect>
+                        <path d="M12,14.8235294 L10.65,12.4705882 L13.8,9.64705882 L9.75,7.29411765 L10.2,4.56443294 C9.524955,4.20355765 8.76018,4 7.95,4 C5.2161915,4 3,6.3176 3,9.17647059 C3,14.3529412 8.85,19.0588235 12,20 C15.15,19.0588235 21,14.3529412 21,9.17647059 C21,6.3176 18.783795,4 16.05,4 C15.23982,4 14.475045,4.20355765 13.8,4.56443294" id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 19 - 0
src/page/police/public/icon_title_fire_24.svg

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon_title_fire_24</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-442.000000, -794.000000)">
+            <g id="编组-10" transform="translate(88.000000, 776.000000)">
+                <g id="编组-4备份-4" transform="translate(338.000000, 0.000000)">
+                    <g id="icon_title_fire_24" transform="translate(16.000000, 18.000000)">
+                        <rect id="矩形" x="0" y="0" width="24" height="24"></rect>
+                        <path d="M4.5,10.2 C4.5,8.211765 6.09187556,6.6 8.05555556,6.6 C10.0192444,6.6 11.6111111,8.211765 11.6111111,10.2 L11.6111111,21 L4.5,21 L4.5,10.2 Z" id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
+                        <polygon id="路径" points="15.1666667 21 20.5 21 17.8333333 12.9"></polygon>
+                        <path d="M17.8333333,12.9 L15.1666667,21 L20.5,21 L17.8333333,12.9 Z M17.8333333,12.9 L17.8333333,12 C17.8333333,8.605875 17.8333333,6.908835 16.7919556,5.854395 C15.7505333,4.8 14.0744444,4.8 10.7222222,4.8 L9.83333333,4.8 M6.27777778,4.8 L4.5,4.8" id="形状" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"></path>
+                        <ellipse id="椭圆形" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" cx="8.05555556" cy="4.8" rx="1.77777778" ry="1.8"></ellipse>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 18 - 0
src/page/police/public/icon_title_police_24.svg

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon_title_police_24</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-1118.000000, -794.000000)">
+            <g id="编组-10" transform="translate(88.000000, 776.000000)">
+                <g id="编组-4备份-6" transform="translate(1014.000000, 0.000000)">
+                    <g id="icon_title_police_24" transform="translate(16.000000, 18.000000)">
+                        <rect id="矩形" x="0" y="0" width="24" height="24"></rect>
+                        <polygon id="路径" stroke="#111111" stroke-width="2" stroke-linejoin="round" points="12 4.5 3 19.5 21 19.5"></polygon>
+                        <line x1="12" y1="16.5" x2="12" y2="16.7368421" id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round"></line>
+                        <line x1="12" y1="10.0265132" x2="12.0033955" y2="13.5" id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round"></line>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 18 - 0
src/page/police/public/icon_title_ranking_24.svg

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon_title_ranking_24</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-104.000000, -376.000000)">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-4备份" transform="translate(16.000000, 274.000000)">
+                    <g id="icon_title_ranking_24" transform="translate(16.000000, 26.000000)">
+                        <rect id="矩形" x="0" y="0" width="24" height="24"></rect>
+                        <polygon id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="8.75 9 2.25 9 2.25 21 8.75 21"></polygon>
+                        <polygon id="路径" stroke="#111111" stroke-width="2" stroke-linejoin="round" points="15.25 3 8.75 3 8.75 21 15.25 21"></polygon>
+                        <polygon id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="21.75 13 15.25 13 15.25 21 21.75 21"></polygon>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 15 - 0
src/page/police/public/icon_title_site_24.svg

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="24px" height="24px" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>icon_title_site_24</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-104.000000, -794.000000)">
+            <g id="编组-10" transform="translate(88.000000, 776.000000)">
+                <g id="icon_title_site_24" transform="translate(16.000000, 18.000000)">
+                    <rect id="矩形" x="0" y="0" width="24" height="24"></rect>
+                    <polyline id="路径" stroke="#111111" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="19.7391813 11.0555556 19.7391813 20.5 4.26050022 20.5 4.26050022 11.0555556"></polyline>
+                    <path d="M3.19791428,7.17228333 C2.45805843,9.04280278 3.88514751,11.0555556 5.93903532,11.0555556 C7.54189911,11.0555556 8.85018463,9.787025 8.85018463,8.22222222 C8.85018463,9.787025 10.1495699,11.0555556 11.7524337,11.0555556 L12.2450421,11.0555556 C13.8479059,11.0555556 15.1472912,9.787025 15.1472912,8.22222222 C15.1472912,9.787025 16.4561088,11.0555556 18.0589726,11.0555556 C20.1139584,11.0555556 21.542397,9.04162222 20.8019365,7.17025278 L19.3496027,3.5 L4.65045124,3.5 L3.19791428,7.17228333 Z" id="路径" stroke="#111111" stroke-width="2" stroke-linejoin="round"></path>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 13 - 0
src/page/police/public/label_bj_left.svg

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="32px" viewBox="0 0 16 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>label_bj_left</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-96.000000, -76.000000)" fill="#F5F7FA">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-12" transform="translate(24.000000, 0.000000)">
+                    <path d="M16,0 L104,0 C108.418278,-8.11624501e-16 112,3.581722 112,8 L112,28 C112,30.209139 113.790861,32 116,32 L120,32 L0,32 L0,32 C4.418278,32 8,28.418278 8,24 L8,8 C8,3.581722 11.581722,8.11624501e-16 16,0 Z" id="矩形备份-6"></path>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 13 - 0
src/page/police/public/label_bj_right.svg

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="16px" height="32px" viewBox="0 0 16 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>label_bj_right</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-200.000000, -76.000000)" fill="#F5F7FA">
+            <g id="编组-3" transform="translate(72.000000, 76.000000)">
+                <g id="编组-12" transform="translate(24.000000, 0.000000)">
+                    <path d="M16,0 L104,0 C108.418278,-8.11624501e-16 112,3.581722 112,8 L112,28 C112,30.209139 113.790861,32 116,32 L120,32 L0,32 L0,32 C4.418278,32 8,28.418278 8,24 L8,8 C8,3.581722 11.581722,8.11624501e-16 16,0 Z" id="矩形备份-6"></path>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

BIN
src/page/police/public/logo.png


+ 16 - 0
src/page/police/public/menu_dispute_light_16.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>menu_dispute_light_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-26.000000, -286.000000)">
+            <g id="导航菜单/侧边导航" transform="translate(0.000000, 80.000000)">
+                <g id="3.Navigation导航/4.Menu-导航菜单/基础控件/左侧导航/一级Normal备份" transform="translate(0.000000, 176.000000)">
+                    <g id="menu_dispute_light_16" transform="translate(26.000000, 30.000000)">
+                        <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="dispute-(Background)"></path>
+                        <path d="M19.175,7.03888844 C19.175,9.56272043 17.6717779,12.1525292 14.7097058,14.7414583 C13.3643128,15.9163615 11.8994398,16.9553402 10.3376838,17.8423672 C10.1312825,17.9525443 9.88121856,17.9525443 9.6748172,17.8423672 C9.30987832,17.6444369 0.8375,12.968882 0.8375,7.03888844 C0.836325242,5.23079696 1.85041681,3.56603679 3.48248241,2.69681541 C5.114548,1.82759402 7.10470824,1.89232051 8.67327281,2.86563679 C8.75902151,2.92071032 8.8145676,3.0104691 8.82441311,3.10986942 C8.83425861,3.20926974 8.79734953,3.30767045 8.72398392,3.37761665 L7.19631177,4.8616545 C6.931479,5.11924331 6.931479,5.5365376 7.19631177,5.79412641 L10.1167283,8.6223313 L8.84351724,9.86797302 C8.71412245,9.9903509 8.64113481,10.1583366 8.64113481,10.3337691 C8.64113481,10.5092016 8.71412245,10.6771874 8.84351724,10.7995652 C8.97023869,10.9209701 9.14095414,10.9892011 9.31893388,10.9895784 C9.49913943,10.9886987 9.67210053,10.9209625 9.80250052,10.7995652 L11.5592782,9.09296571 C11.824111,8.8353769 11.824111,8.41808261 11.5592782,8.1604938 L8.63976725,5.323492 L10.4816672,3.54211878 C11.4322942,2.60848881 12.729459,2.08542244 14.0812503,2.09062949 C16.8944506,2.09062949 19.175,4.30604048 19.175,7.03888844 Z" id="路径" fill-opacity="0.6" fill="#FFFFFF"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 16 - 0
src/page/police/public/menu_dispute_white_16.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>menu_dispute_white_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="矛盾纠纷-登记表" transform="translate(-26.000000, -286.000000)">
+            <g id="导航菜单/侧边导航" transform="translate(0.000000, 80.000000)">
+                <g id="3.Navigation导航/4.Menu-导航菜单/基础控件/左侧导航/一级Normal备份" transform="translate(0.000000, 176.000000)">
+                    <g id="menu_dispute_white_16" transform="translate(26.000000, 30.000000)">
+                        <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="dispute-(Background)"></path>
+                        <path d="M19.175,7.03888844 C19.175,9.56272043 17.6717779,12.1525292 14.7097058,14.7414583 C13.3643128,15.9163615 11.8994398,16.9553402 10.3376838,17.8423672 C10.1312825,17.9525443 9.88121856,17.9525443 9.6748172,17.8423672 C9.30987832,17.6444369 0.8375,12.968882 0.8375,7.03888844 C0.836325242,5.23079696 1.85041681,3.56603679 3.48248241,2.69681541 C5.114548,1.82759402 7.10470824,1.89232051 8.67327281,2.86563679 C8.75902151,2.92071032 8.8145676,3.0104691 8.82441311,3.10986942 C8.83425861,3.20926974 8.79734953,3.30767045 8.72398392,3.37761665 L7.19631177,4.8616545 C6.931479,5.11924331 6.931479,5.5365376 7.19631177,5.79412641 L10.1167283,8.6223313 L8.84351724,9.86797302 C8.71412245,9.9903509 8.64113481,10.1583366 8.64113481,10.3337691 C8.64113481,10.5092016 8.71412245,10.6771874 8.84351724,10.7995652 C8.97023869,10.9209701 9.14095414,10.9892011 9.31893388,10.9895784 C9.49913943,10.9886987 9.67210053,10.9209625 9.80250052,10.7995652 L11.5592782,9.09296571 C11.824111,8.8353769 11.824111,8.41808261 11.5592782,8.1604938 L8.63976725,5.323492 L10.4816672,3.54211878 C11.4322942,2.60848881 12.729459,2.08542244 14.0812503,2.09062949 C16.8944506,2.09062949 19.175,4.30604048 19.175,7.03888844 Z" id="路径" fill="#FFFFFF"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 16 - 0
src/page/police/public/menu_fire_light_16.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>menu_home_light_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="辅警管理-管理员账号登录有权限" transform="translate(-26.000000, -198.000000)">
+            <g id="导航菜单/侧边导航" transform="translate(0.000000, 80.000000)">
+                <g id="3.Navigation导航/4.Menu-导航菜单/基础控件/左侧导航/一级Normal" transform="translate(0.000000, 88.000000)">
+                    <g id="menu_home_light_16" transform="translate(26.000000, 30.000000)">
+                        <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="矩形" opacity="9.99999975e-05"></path>
+                        <path d="M5.83333333,0.791666667 C6.92212327,0.791666667 7.84834818,1.48769028 8.19133787,2.4590673 L8.71840793,2.45874623 L9.79872123,2.46658338 C12.7943944,2.50793834 13.6643154,2.73009458 14.6129766,3.67871526 L14.8059784,3.88232218 C15.6866354,4.86840653 15.824695,5.94017352 15.8329204,9.57325874 L15.8326667,10.6566667 L18.2905694,18.0281435 C18.4591973,18.5340272 18.1167317,19.055413 17.6045896,19.1186101 L17.5,19.125 L12.5,19.125 C11.9312019,19.125 11.5295608,18.5677528 11.7094306,18.0281435 L14.1666667,10.6546667 L14.1629182,8.94538785 C14.1392363,6.14458773 13.9929047,5.41568988 13.4344653,4.85722656 L13.3067793,4.73979021 C12.7346195,4.25927707 11.8738245,4.14104575 9.02645586,4.12660716 L8.1909826,4.1252715 C8.12105505,4.32304167 8.02694776,4.50938739 7.9122131,4.68075631 C9.15984576,5.39925377 10,6.74734134 10,8.29166667 L10,18.2916667 C10,18.751904 9.62690396,19.125 9.16666667,19.125 L2.5,19.125 C2.03976271,19.125 1.66666667,18.751904 1.66666667,18.2916667 L1.66666667,8.29166667 C1.66666667,6.74734305 2.5068235,5.39925489 3.75500157,4.67953488 C3.64013345,4.50884577 3.54595758,4.3229798 3.47597291,4.12557758 L2.5,4.125 C2.03976271,4.125 1.66666667,3.75190396 1.66666667,3.29166667 C1.66666667,2.83142938 2.03976271,2.45833333 2.5,2.45833333 L3.47568407,2.45806183 C3.81895772,1.48721001 4.7449191,0.791666667 5.83333333,0.791666667 Z" id="形状结合" fill-opacity="0.6" fill="#FFFFFF"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 16 - 0
src/page/police/public/menu_fire_white_16.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>menu_home_white_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="消防检查-九小场所回收站" transform="translate(-26.000000, -198.000000)">
+            <g id="导航菜单/侧边导航" transform="translate(0.000000, 80.000000)">
+                <g id="3.Navigation导航/4.Menu-导航菜单/基础控件/左侧导航/一级Normal" transform="translate(0.000000, 88.000000)">
+                    <g id="menu_home_white_16" transform="translate(26.000000, 30.000000)">
+                        <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="矩形" opacity="9.99999975e-05"></path>
+                        <path d="M5.83333333,0.791666667 C6.92212327,0.791666667 7.84834818,1.48769028 8.19133787,2.4590673 L8.71840793,2.45874623 L9.79872123,2.46658338 C12.7943944,2.50793834 13.6643154,2.73009458 14.6129766,3.67871526 L14.8059784,3.88232218 C15.6866354,4.86840653 15.824695,5.94017352 15.8329204,9.57325874 L15.8326667,10.6566667 L18.2905694,18.0281435 C18.4591973,18.5340272 18.1167317,19.055413 17.6045896,19.1186101 L17.5,19.125 L12.5,19.125 C11.9312019,19.125 11.5295608,18.5677528 11.7094306,18.0281435 L14.1666667,10.6546667 L14.1629182,8.94538785 C14.1392363,6.14458773 13.9929047,5.41568988 13.4344653,4.85722656 L13.3067793,4.73979021 C12.7346195,4.25927707 11.8738245,4.14104575 9.02645586,4.12660716 L8.1909826,4.1252715 C8.12105505,4.32304167 8.02694776,4.50938739 7.9122131,4.68075631 C9.15984576,5.39925377 10,6.74734134 10,8.29166667 L10,18.2916667 C10,18.751904 9.62690396,19.125 9.16666667,19.125 L2.5,19.125 C2.03976271,19.125 1.66666667,18.751904 1.66666667,18.2916667 L1.66666667,8.29166667 C1.66666667,6.74734305 2.5068235,5.39925489 3.75500157,4.67953488 C3.64013345,4.50884577 3.54595758,4.3229798 3.47597291,4.12557758 L2.5,4.125 C2.03976271,4.125 1.66666667,3.75190396 1.66666667,3.29166667 C1.66666667,2.83142938 2.03976271,2.45833333 2.5,2.45833333 L3.47568407,2.45806183 C3.81895772,1.48721001 4.7449191,0.791666667 5.83333333,0.791666667 Z" id="形状结合" fill="#FFFFFF"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 14 - 0
src/page/police/public/menu_home_light_16.svg

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>menu_home_light_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="消防检查-九小场所回收站" transform="translate(-26.000000, -110.000000)">
+            <g id="导航菜单/侧边导航" transform="translate(0.000000, 80.000000)">
+                <g id="menu_home_light_16" transform="translate(26.000000, 30.000000)">
+                    <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="矩形"></path>
+                    <path d="M9.22917253,1.85381485 C9.6818788,1.49919494 10.3181212,1.49919494 10.7708275,1.85381485 L17.0208275,6.74964818 C17.3232985,6.98658381 17.5,7.34946039 17.5,7.73368325 L17.5,17.0833333 C17.5,17.7736893 16.9403559,18.3333333 16.25,18.3333333 L3.75,18.3333333 C3.05964406,18.3333333 2.5,17.7736893 2.5,17.0833333 L2.5,7.73368325 C2.5,7.34946039 2.67670151,6.98658381 2.97917253,6.74964818 Z M11.6666667,11.25 L8.33333333,11.25 C7.6429774,11.25 7.08333333,11.8096441 7.08333333,12.5 L7.08333333,15.9125 C7.08333333,16.3267136 7.41911975,16.6625 7.83333329,16.6625 L12.1666667,16.6625 C12.5808802,16.6625 12.9166667,16.3267136 12.9166667,15.9125 L12.9166667,12.5 C12.9166667,11.8096441 12.3570226,11.25 11.6666667,11.25 Z" id="形状结合" fill-opacity="0.6" fill="#FFFFFF"></path>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 14 - 0
src/page/police/public/menu_home_white_16.svg

@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>menu_home_white_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="首页" transform="translate(-26.000000, -110.000000)">
+            <g id="导航菜单/侧边导航" transform="translate(0.000000, 80.000000)">
+                <g id="menu_home_white_16" transform="translate(26.000000, 30.000000)">
+                    <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="矩形"></path>
+                    <path d="M9.22917253,1.85381485 C9.6818788,1.49919494 10.3181212,1.49919494 10.7708275,1.85381485 L17.0208275,6.74964818 C17.3232985,6.98658381 17.5,7.34946039 17.5,7.73368325 L17.5,17.0833333 C17.5,17.7736893 16.9403559,18.3333333 16.25,18.3333333 L3.75,18.3333333 C3.05964406,18.3333333 2.5,17.7736893 2.5,17.0833333 L2.5,7.73368325 C2.5,7.34946039 2.67670151,6.98658381 2.97917253,6.74964818 Z M11.6666667,11.25 L8.33333333,11.25 C7.6429774,11.25 7.08333333,11.8096441 7.08333333,12.5 L7.08333333,15.9125 C7.08333333,16.3267136 7.41911975,16.6625 7.83333329,16.6625 L12.1666667,16.6625 C12.5808802,16.6625 12.9166667,16.3267136 12.9166667,15.9125 L12.9166667,12.5 C12.9166667,11.8096441 12.3570226,11.25 11.6666667,11.25 Z" id="形状结合" fill="#FFFFFF"></path>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

File diff suppressed because it is too large
+ 9 - 0
src/page/police/public/menu_police_light_16.svg


File diff suppressed because it is too large
+ 9 - 0
src/page/police/public/menu_police_white_16.svg


+ 16 - 0
src/page/police/public/menu_standard_light_16.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>menu_standard_light_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="警务管理-警员管理查询后有数据" transform="translate(-26.000000, -550.000000)">
+            <g id="导航菜单/侧边导航" transform="translate(0.000000, 80.000000)">
+                <g id="3.Navigation导航/4.Menu-导航菜单/基础控件/左侧导航/一级Normal备份-5" transform="translate(0.000000, 440.000000)">
+                    <g id="menu_standard_light_16" transform="translate(26.000000, 30.000000)">
+                        <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="矩形"></path>
+                        <path d="M7.5,2.5 L3.33333333,2.5 C2.87309583,2.5 2.5,2.87309583 2.5,3.33333333 L2.5,7.5 C2.5,7.96025 2.87309583,8.33333333 3.33333333,8.33333333 L7.5,8.33333333 C7.96025,8.33333333 8.33333333,7.96025 8.33333333,7.5 L8.33333333,3.33333333 C8.33333333,2.87309583 7.96025,2.5 7.5,2.5 Z M7.5,11.6666667 L3.33333333,11.6666667 C2.87309583,11.6666667 2.5,12.03975 2.5,12.5 L2.5,16.6666667 C2.5,17.1269167 2.87309583,17.5 3.33333333,17.5 L7.5,17.5 C7.96025,17.5 8.33333333,17.1269167 8.33333333,16.6666667 L8.33333333,12.5 C8.33333333,12.03975 7.96025,11.6666667 7.5,11.6666667 Z M14.5833333,8.33333333 C16.1941667,8.33333333 17.5,7.0275 17.5,5.41666667 C17.5,3.8058375 16.1941667,2.5 14.5833333,2.5 C12.9725,2.5 11.6666667,3.8058375 11.6666667,5.41666667 C11.6666667,7.0275 12.9725,8.33333333 14.5833333,8.33333333 Z M16.6666667,11.6666667 L12.5,11.6666667 C12.03975,11.6666667 11.6666667,12.03975 11.6666667,12.5 L11.6666667,16.6666667 C11.6666667,17.1269167 12.03975,17.5 12.5,17.5 L16.6666667,17.5 C17.1269167,17.5 17.5,17.1269167 17.5,16.6666667 L17.5,12.5 C17.5,12.03975 17.1269167,11.6666667 16.6666667,11.6666667 Z" id="形状结合" stroke="#FFFFFF" stroke-width="1.66666667" fill="#FFFFFF" fill-rule="nonzero" opacity="0.600944" stroke-linejoin="round"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 18 - 0
src/page/police/public/menu_standard_white_16.svg

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>menu_standard_white_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="一标三实" transform="translate(-26.000000, -550.000000)">
+            <g id="导航菜单/侧边导航" transform="translate(0.000000, 80.000000)">
+                <g id="3.Navigation导航/4.Menu-导航菜单/基础控件/左侧导航/一级Normal备份-5" transform="translate(0.000000, 440.000000)">
+                    <g id="menu_standard_white_16" transform="translate(26.000000, 30.000000)">
+                        <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="矩形"></path>
+                        <g id="编组" transform="translate(2.500000, 2.500000)" fill="#FFFFFF" fill-rule="nonzero" stroke="#FFFFFF" stroke-linejoin="round" stroke-width="1.66666667">
+                            <path d="M5,0 L0.833333333,0 C0.373095833,0 0,0.373095833 0,0.833333333 L0,5 C0,5.46025 0.373095833,5.83333333 0.833333333,5.83333333 L5,5.83333333 C5.46025,5.83333333 5.83333333,5.46025 5.83333333,5 L5.83333333,0.833333333 C5.83333333,0.373095833 5.46025,0 5,0 Z M5,9.16666667 L0.833333333,9.16666667 C0.373095833,9.16666667 0,9.53975 0,10 L0,14.1666667 C0,14.6269167 0.373095833,15 0.833333333,15 L5,15 C5.46025,15 5.83333333,14.6269167 5.83333333,14.1666667 L5.83333333,10 C5.83333333,9.53975 5.46025,9.16666667 5,9.16666667 Z M12.0833333,5.83333333 C13.6941667,5.83333333 15,4.5275 15,2.91666667 C15,1.3058375 13.6941667,0 12.0833333,0 C10.4725,0 9.16666667,1.3058375 9.16666667,2.91666667 C9.16666667,4.5275 10.4725,5.83333333 12.0833333,5.83333333 Z M14.1666667,9.16666667 L10,9.16666667 C9.53975,9.16666667 9.16666667,9.53975 9.16666667,10 L9.16666667,14.1666667 C9.16666667,14.6269167 9.53975,15 10,15 L14.1666667,15 C14.6269167,15 15,14.6269167 15,14.1666667 L15,10 C15,9.53975 14.6269167,9.16666667 14.1666667,9.16666667 Z" id="形状结合"></path>
+                        </g>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 16 - 0
src/page/police/public/menu_walk_light_16.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>menu_walk_light_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="一标三实" transform="translate(-26.000000, -462.000000)">
+            <g id="导航菜单/侧边导航" transform="translate(0.000000, 80.000000)">
+                <g id="3.Navigation导航/4.Menu-导航菜单/基础控件/左侧导航/一级Normal备份-4" transform="translate(0.000000, 352.000000)">
+                    <g id="menu_walk_light_16" transform="translate(26.000000, 30.000000)">
+                        <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="矩形"></path>
+                        <path d="M10.0066802,1.375 L9.86829495,1.38643227 C9.77550939,1.40263532 9.68635387,1.43463864 9.60488827,1.4809849 L9.48649007,1.56247208 L1.15043635,8.40848354 L1.04707238,8.50954024 C0.613600164,9.00178696 0.890370605,9.81350695 1.53057076,9.92112503 L1.67062645,9.93252865 L2.91937576,9.93089547 L2.91937576,17.6342701 L2.93435138,17.787474 C2.98971967,18.1310406 3.25644982,18.4054315 3.60459068,18.4769632 L3.75463988,18.49 L16.2554088,18.49 L16.405458,18.4769632 C16.7535875,18.405421 17.0203038,18.1310323 17.075668,17.787474 L17.0890025,17.6342701 L17.0890025,9.93086682 L18.3394223,9.9325 L18.4827896,9.92109638 C19.1213486,9.81514013 19.3997602,9.0017583 18.9646175,8.50951159 L18.8595831,8.40845488 L10.5251705,1.56244342 L10.4068016,1.48095625 C10.325336,1.43460999 10.2361805,1.40260666 10.1433949,1.38640362 L10.0066802,1.375 L10.0066802,1.375 Z M9.59441271,8.60406422 L9.59441271,9.29845299 L9.59939482,9.47122643 C9.62773419,9.95373136 9.81280464,10.1346421 10.3329654,10.2617724 C10.7781309,10.3693618 11.2199262,10.4704185 11.6634212,10.6122188 C13.1655837,11.117531 14.3092693,12.0254368 14.7344184,13.6864113 C14.8811267,14.2895138 14.9344938,14.9137904 14.8978021,15.5380956 C14.8832706,15.5112346 14.8720743,15.4827721 14.8644513,15.4533134 C14.7647777,14.6506536 14.3038112,13.9333993 13.607379,13.4973347 C12.6008718,12.8230255 11.3810859,12.522432 10.1679113,12.649742 C10.0399694,12.6692495 9.91999066,12.7228194 9.82112768,12.8045791 C9.61607021,12.9578116 9.56771451,13.1794659 9.557721,13.4158188 L9.54605702,14.2960179 L9.3643275,14.1656498 L7.82711446,12.907269 L6.29330098,11.6472836 C6.23118447,11.6055722 6.17981991,11.5503324 6.14325178,11.4859137 C6.12156498,11.4337665 6.14325178,11.3881234 6.21326497,11.3229107 L6.29828308,11.251194 C7.33460798,10.417701 8.36773719,9.58041728 9.39764898,8.73936043 L9.59438341,8.60406422 L9.59441271,8.60406422 Z" id="形状" fill-opacity="0.6" fill="#FFFFFF"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

+ 16 - 0
src/page/police/public/menu_walk_white_16.svg

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg width="20px" height="20px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+    <title>menu_walk_white_16</title>
+    <g id="&quot;警地融合&quot;数字化平台" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
+        <g id="入户走访展开" transform="translate(-26.000000, -462.000000)">
+            <g id="导航菜单/侧边导航" transform="translate(0.000000, 80.000000)">
+                <g id="3.Navigation导航/4.Menu-导航菜单/基础控件/左侧导航/一级Normal备份-4" transform="translate(0.000000, 352.000000)">
+                    <g id="menu_walk_white_16" transform="translate(26.000000, 30.000000)">
+                        <path d="M0,0 L20,0 L20,20 L0,20 L0,0 Z" id="矩形"></path>
+                        <path d="M10.0066802,1.375 L9.86829495,1.38643227 C9.77550939,1.40263532 9.68635387,1.43463864 9.60488827,1.4809849 L9.48649007,1.56247208 L1.15043635,8.40848354 L1.04707238,8.50954024 C0.613600164,9.00178696 0.890370605,9.81350695 1.53057076,9.92112503 L1.67062645,9.93252865 L2.91937576,9.93089547 L2.91937576,17.6342701 L2.93435138,17.787474 C2.98971967,18.1310406 3.25644982,18.4054315 3.60459068,18.4769632 L3.75463988,18.49 L16.2554088,18.49 L16.405458,18.4769632 C16.7535875,18.405421 17.0203038,18.1310323 17.075668,17.787474 L17.0890025,17.6342701 L17.0890025,9.93086682 L18.3394223,9.9325 L18.4827896,9.92109638 C19.1213486,9.81514013 19.3997602,9.0017583 18.9646175,8.50951159 L18.8595831,8.40845488 L10.5251705,1.56244342 L10.4068016,1.48095625 C10.325336,1.43460999 10.2361805,1.40260666 10.1433949,1.38640362 L10.0066802,1.375 L10.0066802,1.375 Z M9.59441271,8.60406422 L9.59441271,9.29845299 L9.59939482,9.47122643 C9.62773419,9.95373136 9.81280464,10.1346421 10.3329654,10.2617724 C10.7781309,10.3693618 11.2199262,10.4704185 11.6634212,10.6122188 C13.1655837,11.117531 14.3092693,12.0254368 14.7344184,13.6864113 C14.8811267,14.2895138 14.9344938,14.9137904 14.8978021,15.5380956 C14.8832706,15.5112346 14.8720743,15.4827721 14.8644513,15.4533134 C14.7647777,14.6506536 14.3038112,13.9333993 13.607379,13.4973347 C12.6008718,12.8230255 11.3810859,12.522432 10.1679113,12.649742 C10.0399694,12.6692495 9.91999066,12.7228194 9.82112768,12.8045791 C9.61607021,12.9578116 9.56771451,13.1794659 9.557721,13.4158188 L9.54605702,14.2960179 L9.3643275,14.1656498 L7.82711446,12.907269 L6.29330098,11.6472836 C6.23118447,11.6055722 6.17981991,11.5503324 6.14325178,11.4859137 C6.12156498,11.4337665 6.14325178,11.3881234 6.21326497,11.3229107 L6.29828308,11.251194 C7.33460798,10.417701 8.36773719,9.58041728 9.39764898,8.73936043 L9.59438341,8.60406422 L9.59441271,8.60406422 Z" id="形状" fill="#FFFFFF"></path>
+                    </g>
+                </g>
+            </g>
+        </g>
+    </g>
+</svg>

BIN
src/page/police/public/user.png


+ 2 - 0
src/permission.js

@@ -8,9 +8,11 @@ import {validatenull} from '@/util/validate'
 import {getToken} from '@/util/auth'
 import {getToken} from '@/util/auth'
 import NProgress from 'nprogress' // progress bar
 import NProgress from 'nprogress' // progress bar
 import 'nprogress/nprogress.css' // progress bar style
 import 'nprogress/nprogress.css' // progress bar style
+
 NProgress.configure({showSpinner: false});
 NProgress.configure({showSpinner: false});
 const lockPage = store.getters.website.lockPage; //锁屏页
 const lockPage = store.getters.website.lockPage; //锁屏页
 router.beforeEach((to, from, next) => {
 router.beforeEach((to, from, next) => {
+  // console.log('beforeEach',to,from)
   const meta = to.meta || {};
   const meta = to.meta || {};
   const isMenu = meta.menu === undefined ? to.query.menu : meta.menu;
   const isMenu = meta.menu === undefined ? to.query.menu : meta.menu;
   store.commit('SET_IS_MENU', isMenu === undefined);
   store.commit('SET_IS_MENU', isMenu === undefined);

+ 1 - 1
src/router/axios.js

@@ -20,7 +20,7 @@ import 'nprogress/nprogress.css';
 import crypto from '@/util/crypto';
 import crypto from '@/util/crypto';
 
 
 //默认超时时间
 //默认超时时间
-axios.defaults.timeout = 10000;
+axios.defaults.timeout = 100000;
 //返回其他状态码
 //返回其他状态码
 axios.defaults.validateStatus = function (status) {
 axios.defaults.validateStatus = function (status) {
   return status >= 200 && status <= 500;
   return status >= 200 && status <= 500;

+ 3 - 2
src/router/page/index.js

@@ -4,7 +4,8 @@ export default [{
   path: '/login',
   path: '/login',
   name: '登录页',
   name: '登录页',
   component: () =>
   component: () =>
-    import( /* webpackChunkName: "page" */ '@/page/login/index'),
+    import( /* webpackChunkName: "page" */ '@/page/login/new_login'),
+    // import( /* webpackChunkName: "page" */ '@/page/login/index'),
   meta: {
   meta: {
     keepAlive: true,
     keepAlive: true,
     isTab: false,
     isTab: false,
@@ -59,7 +60,7 @@ export default [{
   {
   {
     path: '/',
     path: '/',
     name: '主页',
     name: '主页',
-    redirect: '/wel'
+    redirect: '/police'
   },
   },
   {
   {
     path: '/myiframe',
     path: '/myiframe',

+ 46 - 0
src/router/police/index.js

@@ -0,0 +1,46 @@
+import PoliceLayout from '@/page/police/index'
+// 二级路由没有内容,路由组件直接套下级路由
+import level2routerview from '@/page/police/level2routerview.vue'
+import store  from '../../store'
+// const context = require.context('@/views',true,/\.vue$/);
+// const fileNames = context.keys()
+let menus = [{
+    path: 'index',
+    name: '首页',
+    meta: { keepAlive: true },
+    children: [],
+    component: ()=>
+        import( /* webpackChunkName: "views" */ '@/views/police/index')
+}]
+store.state.user.menu.forEach(first=>{
+    let child = []
+    if(first.children.length > 0){
+        first.children.forEach(second=>{
+            if(
+                // second.path.substr(0,4) != 'http' &&
+                second.path != '/monitor/log' &&
+                second.path != '/system/param'){
+                child.push({
+                    path: second.path.substr(1),
+                    meta: { keepAlive: true },
+                    name: second.name,
+                    component: ()=>
+                        import( /* webpackChunkName: "views" */ '@/views' + second.path)
+                })
+            }
+            
+        })
+    }
+    menus.push({
+        path: first.path,
+        component: level2routerview,
+        name: first.name,
+        children: child
+    })
+})
+export default [{
+    path: '/police',
+    component: PoliceLayout,
+    redirect: '/police/index',
+    children: menus
+}]

+ 5 - 3
src/router/router.js

@@ -13,10 +13,12 @@ import ViewsRouter from './views/' // 页面路由
 import AvueRouter from './avue-router'; //封装的路由控制方法
 import AvueRouter from './avue-router'; //封装的路由控制方法
 import i18n from '@/lang' // Internationalization 国际化 多语言
 import i18n from '@/lang' // Internationalization 国际化 多语言
 import Store from '../store/'; // vuex
 import Store from '../store/'; // vuex
+import PoliceRouter from './police/index'
+
 Vue.use(VueRouter)
 Vue.use(VueRouter)
 //创建路由
 //创建路由
 export const createRouter = () => new VueRouter({
 export const createRouter = () => new VueRouter({
-  routes: [...PageRouter, ...ViewsRouter]
+  routes: [...PageRouter, ...ViewsRouter, ...PoliceRouter]
 })
 })
 const Router = createRouter() // 获得 route 实例
 const Router = createRouter() // 获得 route 实例
 // 初始化和注册 AvueRouter
 // 初始化和注册 AvueRouter
@@ -27,8 +29,8 @@ AvueRouter.install(Vue, {
   keepAlive: false,
   keepAlive: false,
 });
 });
 Router.$avueRouter.formatRoutes(Store.state.user.menuAll, true); // 动态路由核心方法
 Router.$avueRouter.formatRoutes(Store.state.user.menuAll, true); // 动态路由核心方法
-Router.addRoutes([...PageRouter, ...ViewsRouter]);
-export function resetRouter () {  // 重置路由 比如用于身份验证失败,需要重新登录时 先清空当前的路有权限
+Router.addRoutes([...PageRouter, ...ViewsRouter, ...PoliceRouter]);
+export function resetRouter() {  // 重置路由 比如用于身份验证失败,需要重新登录时 先清空当前的路有权限
   const newRouter = createRouter()
   const newRouter = createRouter()
   Router.matcher = newRouter.matcher // reset router
   Router.matcher = newRouter.matcher // reset router
   AvueRouter.install(Vue, {
   AvueRouter.install(Vue, {

+ 4 - 0
src/store/getters.js

@@ -25,5 +25,9 @@ const getters = {
   logsLen: state => state.logs.logsList.length || 0,
   logsLen: state => state.logs.logsList.length || 0,
   logsFlag: (state, getters) => getters.logsLen === 0,
   logsFlag: (state, getters) => getters.logsLen === 0,
   flowRoutes: state => state.dict.flowRoutes,
   flowRoutes: state => state.dict.flowRoutes,
+  levelMenuState: state => state.levelMenuState,
+  pathName: state => state.pathName,
+  level2List: state => state.level2List,
+  level2Path: state => state.level2Path,
 }
 }
 export default getters
 export default getters

+ 7 - 1
src/store/index.js

@@ -5,7 +5,10 @@ import common from './modules/common'
 import tags from './modules/tags'
 import tags from './modules/tags'
 import logs from './modules/logs'
 import logs from './modules/logs'
 import dict from './modules/dict'
 import dict from './modules/dict'
+import bzdzxq from './modules/bzdzxq'
 import getters from './getters'
 import getters from './getters'
+import menu from './modules/menu'
+import thirdTitle from './modules/thirdTitle'
 
 
 Vue.use(Vuex)
 Vue.use(Vuex)
 const store = new Vuex.Store({
 const store = new Vuex.Store({
@@ -14,7 +17,10 @@ const store = new Vuex.Store({
     common,
     common,
     logs,
     logs,
     tags,
     tags,
-    dict
+    dict,
+    menu,
+    thirdTitle,
+    bzdzxq
   },
   },
   getters,
   getters,
 })
 })

+ 10 - 0
src/store/modules/bzdzxq.js

@@ -0,0 +1,10 @@
+export default {
+    state: {
+        query: {}
+    },
+    mutations: {
+        SET_BZDZXQ_QUERY: (state,query)=>{
+            state.query = query
+        },
+    }
+}

+ 46 - 0
src/store/modules/menu.js

@@ -0,0 +1,46 @@
+import { setStore, getStore } from '@/util/store';
+
+const levelMenuState = {
+    state: {
+        levelMenuState: 'nomal',
+        level2List: [],
+        newTagList: getStore({ name: 'newTagList' }) ?
+            JSON.parse(getStore({ name: 'newTagList' })) :
+            ['/police/index'],
+        level2Path: '3',
+        level2Title: ''
+    },
+    mutations: {
+        CHANGE_LEVEL_MENU: (state, action) => {
+            state.levelMenuState = action;
+            // 开关2级菜单
+        },
+        CHANGE_PATH_NAME: (state, action) => {
+            if (action == 'index') {
+                state.level2Path = 'index';
+            } else {
+                state.level2Path = action.path;
+                state.level2List = action.children;
+                state.level2Title = action.name;
+            }
+        },
+        PUSH_NEW_TAG_LIST: (state, action) => {
+            state.newTagList.push(action);
+            setStore({ name: 'newTagList', content: JSON.stringify(state.newTagList) });
+        },
+        DEL_NEW_TAG_LIST: (state, action) => {
+            state.newTagList.splice(action, 1);
+            setStore({ name: 'newTagList', content: JSON.stringify(state.newTagList) });
+        },
+        DRAG_TAG: (state, action) => {
+            state.newTagList[action.old] =
+                state.newTagList.splice(action.new, 1, state.newTagList[action.old])[0];
+            setStore({ name: 'newTagList', content: JSON.stringify(state.newTagList) });
+        },
+        CLEAR_TAGLIST: (state) => {
+            state.newTagList = ['/police/index'];
+            setStore({ name: 'newTagList', content: JSON.stringify(['/police/index']) });
+        }
+    }
+};
+export default levelMenuState;

+ 70 - 0
src/store/modules/thirdTitle.js

@@ -0,0 +1,70 @@
+const thirdTitle = {    // editItemInfo
+    state: {
+        zhuxiao: 0,
+        fwInfo: 'fwInfo',
+        fwInfoType: 'add',
+        pcsInfo: 'pcsInfo',
+        pcsInfoType: 'add',
+        pcsDeptId: '',
+        pcsId: '',
+        gajgmc: '',
+        userInfo: 'userInfo',
+        userInfoType: 'add',
+        userInfoId: '',
+        fjxx: 'fjxx',
+        fjxxType: 'add',
+        fjxxId: '',
+        frompcs: 0
+    },
+    mutations: {
+        CHANGE_ZHUXIAO: (state)=>{
+            state.zhuxiao += 1;
+        },
+        frompcs: (state)=>{
+            state.haspcsid  += 1;
+        },
+        CHANGE_COMPONENT: (state,action) =>{
+            state.fwInfo = action;
+        },
+        CHANGE_PCSINFO: (state,action) => {
+            if(action instanceof Object){
+                state.pcsInfo = action.path;
+                state.pcsInfoType = action.type;
+            }else{
+                state.pcsInfo = action;
+            }
+        },
+        SET_PCS_ID: (state,action) =>{
+            state.pcsId = action;
+        },
+        SET_PCS_DEPTID: (state,action) => {
+            state.pcsDeptId = action;
+        },
+        SET_PCSMC: (state,action) =>{
+            state.gajgmc = action;
+        },
+        CHANGE_USER_INFO: (state,action) => {
+            if(action instanceof Object){
+                state.userInfo = action.path;
+                state.userInfoType = action.type;
+            }else{
+                state.userInfo = action;
+            }
+        },
+        SET_USERINFO_ID: (state,action) => {
+            state.userInfoId = action;
+        },
+        CHANGE_FJXX: (state,action) => {
+            if(action instanceof Object){
+                state.fjxx = action.path;
+                state.fjxxType = action.type;
+            }else{
+                state.fjxx = action;
+            }
+        },
+        SET_FJXX_ID: (state,action) => {
+            state.fjxxId = action;
+        }
+    }
+};
+export default thirdTitle;

+ 94 - 38
src/store/modules/user.js

@@ -1,13 +1,13 @@
-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 website from '@/config/website'
-import {loginByUsername, loginBySocial, loginBySso, getUserInfo, logout, refreshToken, getButtons, registerUser} from '@/api/user'
-import {getTopMenu, getRoutes} from '@/api/system/menu'
+import { loginByUsername, loginBySocial, loginBySso, getUserInfo, logout, refreshToken, getButtons, registerUser } from '@/api/user'
+import { getTopMenu, getRoutes } from '@/api/system/menu'
 import md5 from 'js-md5'
 import md5 from 'js-md5'
-
+import axios from 'axios';
 
 
 function addPath(ele, first) {
 function addPath(ele, first) {
   const menu = website.menu;
   const menu = website.menu;
@@ -34,21 +34,37 @@ function addPath(ele, first) {
 
 
 const user = {
 const user = {
   state: {
   state: {
-    tenantId: getStore({name: 'tenantId'}) || '',
-    userInfo: getStore({name: 'userInfo'}) || [],
-    permission: getStore({name: 'permission'}) || {},
+    tenantId: getStore({ name: 'tenantId' }) || '',
+    userInfo: getStore({ name: 'userInfo' }) || [],
+    permission: getStore({ name: 'permission' }) || {},
     roles: [],
     roles: [],
     menuId: {},
     menuId: {},
-    menu: getStore({name: 'menu'}) || [],
-    menuAll: getStore({name: 'menuAll'}) || [],
-    token: getStore({name: 'token'}) || '',
-    refreshToken: getStore({name: 'refreshToken'}) || '',
+    menu: getStore({ name: 'menu' }) || [],
+    menuAll: getStore({ name: 'menuAll' }) || [],
+    token: getStore({ name: 'token' }) || '',
+    refreshToken: getStore({ name: 'refreshToken' }) || '',
   },
   },
   actions: {
   actions: {
     //根据用户名登录
     //根据用户名登录
-    LoginByUsername({commit}, userInfo) {
+    LoginByUsername({ commit }, userInfo) {
       return new Promise((resolve, reject) => {
       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 => {
+        axios.post('/api/blade-auth/oauth/token', null, {
+          headers: {
+            'Tenant-Id': userInfo.tenantId,
+            'Dept-Id': (website.switchMode ? userInfo.deptId : ''),
+            'Role-Id': (website.switchMode ? userInfo.roleId : ''),
+            'Captcha-Key': userInfo.key,
+            'Captcha-Code': userInfo.code,
+          },
+          params: {
+            tenantId: userInfo.tenantId,
+            username: userInfo.username,
+            password: md5(userInfo.password),
+            grant_type: (website.captchaMode ? "captcha" : "password"),
+            scope: "all",
+            type: userInfo.type
+          }
+        }).then(res => {
           const data = res.data;
           const data = res.data;
           if (data.error_description) {
           if (data.error_description) {
             Message({
             Message({
@@ -67,10 +83,29 @@ const user = {
         }).catch(error => {
         }).catch(error => {
           reject(error);
           reject(error);
         })
         })
+        // 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);
+        // })
       })
       })
     },
     },
     //根据手机号登录
     //根据手机号登录
-    LoginByPhone({commit}, userInfo) {
+    LoginByPhone({ commit }, userInfo) {
       return new Promise((resolve) => {
       return new Promise((resolve) => {
         loginByUsername(userInfo.phone, userInfo.code).then(res => {
         loginByUsername(userInfo.phone, userInfo.code).then(res => {
           const data = res.data.data;
           const data = res.data.data;
@@ -82,7 +117,7 @@ const user = {
       })
       })
     },
     },
     //根据第三方信息登录
     //根据第三方信息登录
-    LoginBySocial({commit}, userInfo) {
+    LoginBySocial({ commit }, userInfo) {
       return new Promise((resolve) => {
       return new Promise((resolve) => {
         loginBySocial(userInfo.tenantId, userInfo.source, userInfo.code, userInfo.state).then(res => {
         loginBySocial(userInfo.tenantId, userInfo.source, userInfo.code, userInfo.state).then(res => {
           const data = res.data;
           const data = res.data;
@@ -104,7 +139,7 @@ const user = {
       })
       })
     },
     },
     //根据单点信息登录
     //根据单点信息登录
-    LoginBySso({commit}, userInfo) {
+    LoginBySso({ commit }, userInfo) {
       return new Promise((resolve) => {
       return new Promise((resolve) => {
         loginBySso(userInfo.state, userInfo.code).then(res => {
         loginBySso(userInfo.state, userInfo.code).then(res => {
           const data = res.data;
           const data = res.data;
@@ -155,7 +190,7 @@ const user = {
       });
       });
     },
     },
     //获取用户信息
     //获取用户信息
-    GetUserInfo({commit}) {
+    GetUserInfo({ commit }) {
       return new Promise((resolve, reject) => {
       return new Promise((resolve, reject) => {
         getUserInfo().then((res) => {
         getUserInfo().then((res) => {
           const data = res.data.data;
           const data = res.data.data;
@@ -167,7 +202,7 @@ const user = {
       })
       })
     },
     },
     //刷新token
     //刷新token
-    refreshToken({state, commit}, userInfo) {
+    refreshToken({ state, commit }, userInfo) {
       window.console.log('handle refresh token');
       window.console.log('handle refresh token');
       return new Promise((resolve, reject) => {
       return new Promise((resolve, reject) => {
         refreshToken(state.refreshToken, state.tenantId,
         refreshToken(state.refreshToken, state.tenantId,
@@ -185,7 +220,7 @@ const user = {
       })
       })
     },
     },
     // 登出
     // 登出
-    LogOut({commit}) {
+    LogOut({ commit }) {
       return new Promise((resolve, reject) => {
       return new Promise((resolve, reject) => {
         logout().then(() => {
         logout().then(() => {
           commit('SET_TOKEN', '');
           commit('SET_TOKEN', '');
@@ -204,7 +239,7 @@ const user = {
       })
       })
     },
     },
     //注销session
     //注销session
-    FedLogOut({commit}) {
+    FedLogOut({ commit }) {
       return new Promise(resolve => {
       return new Promise(resolve => {
         commit('SET_TOKEN', '');
         commit('SET_TOKEN', '');
         commit('SET_MENU_ALL_NULL', []);
         commit('SET_MENU_ALL_NULL', []);
@@ -228,23 +263,44 @@ const user = {
       })
       })
     },
     },
     //获取系统菜单
     //获取系统菜单
-    GetMenu({commit, dispatch}, topMenuId) {
+    // 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)
+    //     })
+    //   })
+    // },
+    GetMenu({ commit, dispatch }, topMenuId) {
       return new Promise(resolve => {
       return new Promise(resolve => {
-        getRoutes(topMenuId).then((res) => {
-          const data = res.data.data
+        getRoutes(topMenuId == 'police' ? '' : topMenuId).then((res) => {
+          const data = res.data.data;
           let menu = deepClone(data);
           let menu = deepClone(data);
           menu.forEach(ele => {
           menu.forEach(ele => {
+            if (ele.path.substr(0, 1) == '/') {
+              ele.path = ele.path.substr(1);
+            }
             addPath(ele, true);
             addPath(ele, true);
           });
           });
-          commit('SET_MENU_ALL', menu)
-          commit('SET_MENU', menu)
+          if (topMenuId == 'police') {
+            menu.unshift({ name: '首页', id: 0, source: 'iconfont iconicon_message', path: 'index', children: [] });
+          }
+          commit('SET_MENU_ALL', menu);
+          commit('SET_MENU', menu);
           dispatch('GetButtons');
           dispatch('GetButtons');
-          resolve(menu)
-        })
-      })
+          resolve(menu);
+        });
+      });
     },
     },
     //获取系统按钮
     //获取系统按钮
-    GetButtons({commit}) {
+    GetButtons({ commit }) {
       return new Promise((resolve) => {
       return new Promise((resolve) => {
         getButtons().then(res => {
         getButtons().then(res => {
           const data = res.data.data;
           const data = res.data.data;
@@ -258,7 +314,7 @@ const user = {
     SET_TOKEN: (state, token) => {
     SET_TOKEN: (state, token) => {
       setToken(token);
       setToken(token);
       state.token = token;
       state.token = token;
-      setStore({name: 'token', content: state.token})
+      setStore({ name: 'token', content: state.token })
     },
     },
     SET_MENU_ID(state, menuId) {
     SET_MENU_ID(state, menuId) {
       state.menuId = menuId;
       state.menuId = menuId;
@@ -284,18 +340,18 @@ const user = {
     SET_REFRESH_TOKEN: (state, refreshToken) => {
     SET_REFRESH_TOKEN: (state, refreshToken) => {
       setRefreshToken(refreshToken)
       setRefreshToken(refreshToken)
       state.refreshToken = refreshToken;
       state.refreshToken = refreshToken;
-      setStore({name: 'refreshToken', content: state.refreshToken})
+      setStore({ name: 'refreshToken', content: state.refreshToken })
     },
     },
     SET_TENANT_ID: (state, tenantId) => {
     SET_TENANT_ID: (state, tenantId) => {
       state.tenantId = tenantId;
       state.tenantId = tenantId;
-      setStore({name: 'tenantId', content: state.tenantId})
+      setStore({ name: 'tenantId', content: state.tenantId })
     },
     },
     SET_USER_INFO: (state, userInfo) => {
     SET_USER_INFO: (state, userInfo) => {
       if (validatenull(userInfo.avatar)) {
       if (validatenull(userInfo.avatar)) {
         userInfo.avatar = "/img/bg/img-logo.png";
         userInfo.avatar = "/img/bg/img-logo.png";
       }
       }
       state.userInfo = userInfo;
       state.userInfo = userInfo;
-      setStore({name: 'userInfo', content: state.userInfo})
+      setStore({ name: 'userInfo', content: state.userInfo })
     },
     },
     SET_ROLES: (state, roles) => {
     SET_ROLES: (state, roles) => {
       state.roles = roles;
       state.roles = roles;
@@ -322,7 +378,7 @@ const user = {
       result.forEach(ele => {
       result.forEach(ele => {
         state.permission[ele] = true;
         state.permission[ele] = true;
       });
       });
-      setStore({name: 'permission', content: state.permission})
+      setStore({ name: 'permission', content: state.permission })
     }
     }
   }
   }
 
 

+ 0 - 0
src/styles/avue/searchbtn.scss


+ 3 - 0
src/styles/common.scss

@@ -19,12 +19,15 @@
 //通用配置
 //通用配置
 @import './normalize.scss';
 @import './normalize.scss';
 
 
+@import './newavue.scss';
+
 a{
 a{
   text-decoration: none;
   text-decoration: none;
   color:#333;
   color:#333;
 }
 }
 *{
 *{
   outline: none;
   outline: none;
+  font-family: PingFangSC, PingFang SC;
 }
 }
 //滚动条样式
 //滚动条样式
 @include scrollBar;
 @include scrollBar;

+ 183 - 3
src/styles/element-ui.scss

@@ -21,7 +21,7 @@
 }
 }
 
 
 .el-menu--display,
 .el-menu--display,
-.el-menu--display + .el-submenu__icon-arrow {
+.el-menu--display+.el-submenu__icon-arrow {
   display: none;
   display: none;
 }
 }
 
 
@@ -49,12 +49,20 @@
   padding: 0 !important;
   padding: 0 !important;
 }
 }
 
 
-.el-dropdown-menu__item--divided:before, .el-menu, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-submenu .el-submenu__title:hover {
+.el-dropdown-menu__item--divided:before,
+.el-menu,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,
+.el-menu--horizontal>.el-submenu .el-submenu__title:hover {
   background-color: transparent;
   background-color: transparent;
 }
 }
 
 
 
 
-.el-dropdown-menu__item--divided:before, .el-menu, .el-menu--horizontal > .el-menu-item:not(.is-disabled):focus, .el-menu--horizontal > .el-menu-item:not(.is-disabled):hover, .el-menu--horizontal > .el-submenu .el-submenu__title:hover {
+.el-dropdown-menu__item--divided:before,
+.el-menu,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):focus,
+.el-menu--horizontal>.el-menu-item:not(.is-disabled):hover,
+.el-menu--horizontal>.el-submenu .el-submenu__title:hover {
   background-color: transparent !important;
   background-color: transparent !important;
 }
 }
 
 
@@ -69,3 +77,175 @@
 .el-divider--horizontal {
 .el-divider--horizontal {
   margin: 12px 0 !important;
   margin: 12px 0 !important;
 }
 }
+
+.avue-crud .el-table th {
+  background: #F5F7FA !important;
+  font-weight: 500;
+  color: #6F7CA3;
+  font-size: 15px;
+}
+
+.el-table tbody tr td.el-table__cell div {
+  font-weight: 400;
+  color: rgba(4, 8, 20, 0.9);
+  font-size: 14px;
+}
+
+.dialogCustomClass {
+  height: 80vh !important;
+}
+
+.statusClass_dot {
+  position: relative;
+  padding-left: 15px;
+
+  &::before {
+    width: 6px;
+    height: 6px;
+    content: '';
+    position: absolute;
+    background: #909399;
+    border-radius: 50%;
+    left: 0;
+    top: 5px;
+  }
+}
+
+.statusClass_dot_red {
+  position: relative;
+  padding-left: 15px;
+
+  &::before {
+    width: 6px;
+    height: 6px;
+    content: '';
+    position: absolute;
+    background: #E34D59;
+    border-radius: 50%;
+    left: 0;
+    top: 5px;
+  }
+}
+
+.statusClass_dot_green {
+  position: relative;
+  padding-left: 15px;
+
+  &::before {
+    width: 6px;
+    height: 6px;
+    content: '';
+    position: absolute;
+    background: #00A870;
+    border-radius: 50%;
+    left: 0;
+    top: 5px;
+  }
+}
+
+.statusClass_dot_red2 {
+  position: relative;
+  padding-left: 15px;
+
+  &::before {
+    width: 6px;
+    height: 6px;
+    content: '';
+    position: absolute;
+    background: #951508;
+    border-radius: 50%;
+    left: 0;
+    top: 5px;
+  }
+}
+
+.statusClass_dot_red3 {
+  position: relative;
+  padding-left: 15px;
+
+  &::before {
+    width: 6px;
+    height: 6px;
+    content: '';
+    position: absolute;
+    background: #EA3927;
+    border-radius: 50%;
+    left: 0;
+    top: 5px;
+  }
+}
+
+.statusClass_dot_red4 {
+  position: relative;
+  padding-left: 15px;
+
+  &::before {
+    width: 6px;
+    height: 6px;
+    content: '';
+    position: absolute;
+    background: #520A03;
+    border-radius: 50%;
+    left: 0;
+    top: 5px;
+  }
+}
+
+.el-table {
+  border-top-left-radius: 12px !important;
+  border-top-right-radius: 12px !important;
+}
+
+.el-pagination .el-pager {
+  .number {
+    border-radius: 50% !important;
+  }
+}
+
+.avue-crud__menu .avue-crud__left {
+  .el-button {
+    border-radius: 16px !important;
+  }
+}
+
+.el-card {
+  border-radius: 16px !important;
+}
+
+/**
+  下拉菜单
+  方便点击
+*/
+.el-dropdown-menu__item {
+  padding: 0;
+
+  span {
+    padding: 10px 20px;
+    box-sizing: border-box;
+  }
+}
+
+/**
+  消息弹窗
+*/
+.el-message-box {
+  .el-button--small {
+    border-radius: 16px;
+  }
+
+  .el-button--primary {
+    background-color: #106dff;
+  }
+
+  .el-button--primary:active {
+    background-color: #66b1ff;
+  }
+}
+
+// 弹窗
+.el-dialog__header {
+  .el-dialog__title {
+    font-weight: 500;
+    color: rgba(4, 8, 20, 0.9);
+  }
+}

+ 7 - 22
src/styles/login.scss

@@ -5,13 +5,13 @@
   width: 100%;
   width: 100%;
   height: 100%;
   height: 100%;
   margin: 0 auto;
   margin: 0 auto;
-  background-image: url("/img/bg/bg.jpg");
+  background-image: url("/img/bg/bj.png");
   background-size: 100% 100%;
   background-size: 100% 100%;
 }
 }
 
 
 .login-weaper {
 .login-weaper {
   margin: 0 auto;
   margin: 0 auto;
-  width: 1000px;
+  width:400px;
   box-shadow: -4px 5px 10px rgba(0, 0, 0, 0.4);
   box-shadow: -4px 5px 10px rgba(0, 0, 0, 0.4);
 
 
   .el-input-group__append {
   .el-input-group__append {
@@ -69,7 +69,7 @@
   border-bottom-right-radius: 5px;
   border-bottom-right-radius: 5px;
   color: #fff;
   color: #fff;
   background-color: #fff;
   background-color: #fff;
-  width: 50%;
+  width: 100%;
   float: left;
   float: left;
   box-sizing: border-box;
   box-sizing: border-box;
 }
 }
@@ -110,29 +110,14 @@
 }
 }
 
 
 .login-submit {
 .login-submit {
-  width: 60%;
-  height: 45px;
-  border: 1px solid #409EFF;
-  background: none;
-  font-size: 18px;
-  letter-spacing: 2px;
-  font-weight: 300;
-  color: #409EFF;
-  cursor: pointer;
-  margin-top: 30px;
-  font-family: "neo";
-  transition: 0.25s;
-}
-
-.register-submit {
-  width: 36%;
+  width: 100%;
   height: 45px;
   height: 45px;
-  border: 1px solid #EF2F63FF;
-  background: none;
+  border: 1px solid red;
+  background-color: rgb(233, 56, 56);
   font-size: 18px;
   font-size: 18px;
   letter-spacing: 2px;
   letter-spacing: 2px;
   font-weight: 300;
   font-weight: 300;
-  color: #EF2F63FF;
+  color: white;
   cursor: pointer;
   cursor: pointer;
   margin-top: 30px;
   margin-top: 30px;
   font-family: "neo";
   font-family: "neo";

+ 164 - 0
src/styles/newavue.scss

@@ -0,0 +1,164 @@
+.container_body {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+
+  .empty_data {
+    ::v-deep .el-table {
+      display: none;
+    }
+  }
+
+  .empty_img_body {
+    width: 100%;
+    height: auto;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    align-items: center;
+  }
+
+  .empty_img_body img {
+    width: 30%;
+    height: 40%;
+    object-fit: contain;
+    object-position: 50% 50%;
+  }
+}
+
+/**
+    查看图片为空时没有高度的bug
+*/
+.avue--detail .el-form-item__content {
+  min-height: 36px;
+}
+
+// 搜索
+.avue-crud--card {
+  .el-form-item {
+    height: 32px;
+    border-top-right-radius: 8px;
+    border-bottom-right-radius: 8px;
+  }
+
+  .el-select {
+    background-color: rgba(236, 242, 254, 1);
+    border-top-right-radius: 8px;
+    border-bottom-right-radius: 8px;
+  }
+
+  .el-input {
+    background-color: rgba(236, 242, 254, 1);
+    border-top-right-radius: 8px;
+    border-bottom-right-radius: 8px;
+  }
+
+  .el-input__inner {
+    border: none;
+    border-radius: 8px;
+    background-color: rgba(236, 242, 254, 1);
+    font-size: 14px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 400;
+    color: rgba(4, 8, 20, 0.9);
+  }
+
+  .el-select .el-input .el-select__caret {
+    color: rgba(4, 8, 20, 0.90);
+  }
+
+  .el-form-item__label {
+    background-color: rgba(236, 242, 254, 1);
+    font-size: 14px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 400;
+    color: #2E3A59;
+    border-top-left-radius: 8px;
+    border-bottom-left-radius: 8px;
+  }
+
+  .avue-form__menu .el-button {
+    border-radius: 16px;
+  }
+}
+
+.avue-crud .el-input--small input,
+.avue-form .el-input--small input {
+  line-height: 0;
+}
+
+// table表头滚动条对齐
+.el-table__fixed-right-patch {
+  background-color: #F5F7FA;
+}
+
+.avue-crud__search {
+  .avue-form__group {
+    ::v-deep .el-col {
+      margin-right: 12px;
+    }
+
+    .el-col:last-child {
+      flex: 1;
+      display: flex;
+      flex-direction: row-reverse;
+    }
+
+    .el-input__inner {
+      background-color: #ECF2FE;
+      border: none;
+    }
+
+    .el-form-item {
+      border-radius: 8px;
+    }
+
+    .el-button--primary {
+      background-color: #106dff;
+    }
+
+    .el-button--primary:active {
+      background-color: #66b1ff;
+    }
+
+    .el-form-item__label {
+      text-align: left;
+      padding-left: 12px;
+      white-space: nowrap;
+      overflow: hidden;
+      position: absolute;
+      top: 0px;
+      line-height: 32px;
+      z-index: 2000;
+    }
+
+    .el-form-item__label:hover {
+      overflow: visible;
+    }
+
+    .el-form {
+      position: relative;
+    }
+  }
+}
+
+// 左侧按钮
+.search_btn_group {
+  button {
+    width: 85px;
+    height: 32px;
+    border-radius: 16px;
+    border: 1px solid rgba(220, 220, 220, 1);
+    background-color: rgba(255, 255, 255, 1);
+    color: rgba(220, 220, 220, 1);
+    font-weight: 500;
+    font-size: 14px;
+    margin-right: 12px;
+  }
+
+  button:nth-child(1) {
+    background-color: rgba(16, 109, 255, 1);
+    border: none;
+    color: rgba(255, 255, 255, 1);
+  }
+}

+ 369 - 0
src/styles/newcrue.scss

@@ -0,0 +1,369 @@
+.avue-crud--card {
+    .el-form-item {
+        height: 32px;
+        border-top-right-radius: 8px;
+        border-bottom-right-radius: 8px;
+    }
+
+    .el-select {
+        background-color: rgba(236, 242, 254, 1);
+        border-top-right-radius: 8px;
+        border-bottom-right-radius: 8px;
+    }
+
+    .el-input {
+        background-color: rgba(236, 242, 254, 1);
+        border-top-right-radius: 8px;
+        border-bottom-right-radius: 8px;
+    }
+
+    .el-input__inner {
+        border: none;
+        background-color: rgba(236, 242, 254, 1);
+        font-size: 14px;
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 400;
+        color: rgba(4, 8, 20, 0.9);
+
+    }
+
+    .el-select .el-input .el-select__caret {
+        color: rgba(4, 8, 20, 0.90);
+    }
+
+    .el-form-item__label {
+        background-color: rgba(236, 242, 254, 1);
+        font-size: 14px;
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 400;
+        color: #2E3A59;
+        border-top-left-radius: 8px;
+        border-bottom-left-radius: 8px;
+    }
+
+    .avue-form__menu .el-button {
+        border-radius: 16px;
+    }
+}
+
+.avue-crud .el-input--small input,
+.avue-form .el-input--small input {
+    line-height: 0;
+}
+
+@keyframes labelScroll {
+    0% {
+        transform: translateX(0%);
+    }
+
+    100% {
+        transform: translateX(-100%);
+    }
+}
+
+.avue-crud__search {
+    .avue-form__group {
+        .el-col:last-child {
+            flex: 1;
+            display: flex;
+            flex-direction: row-reverse;
+        }
+
+        .el-input__inner {
+            background-color: #ECF2FE;
+            border: none;
+        }
+
+        .el-form-item {
+            border-radius: 8px;
+        }
+
+        .el-button--primary {
+            background-color: #106dff;
+        }
+
+        .el-button--primary:active {
+            background-color: #66b1ff;
+        }
+
+        .el-form-item__label {
+            text-align: left;
+            padding-left: 12px;
+            white-space: nowrap;
+            overflow: hidden;
+            position: absolute;
+            top: 0px;
+            line-height: 32px;
+            z-index: 2000;
+        }
+
+        .el-form-item__label:hover {
+            overflow: visible;
+        }
+
+        .el-form {
+            position: relative;
+        }
+    }
+}
+
+// table表头滚动条对齐
+.el-table__fixed-right-patch {
+    background-color: #F5F7FA;
+}
+
+// avue 弹窗
+.avue-dialog {
+    .el-dialog {
+        border-radius: 16px;
+
+        .avue-dialog__footer {
+            border-radius: 16px;
+        }
+    }
+
+    .el-button--small {
+        border-radius: 16px;
+    }
+
+    .el-button--primary {
+        background-color: #106dff;
+    }
+
+    .el-button--primary:active {
+        background-color: #66b1ff;
+    }
+}
+
+.avue-crud__dialog {
+    .el-dialog {
+        border-radius: 16px;
+
+        .avue-dialog__footer {
+            border-radius: 16px;
+        }
+    }
+
+    .el-button--small {
+        border-radius: 16px;
+    }
+
+    .el-button--primary {
+        background-color: #106dff;
+    }
+
+    .el-button--primary:active {
+        background-color: #66b1ff;
+    }
+
+    /*
+    .el-collapse-item__wrap {
+        border: none;
+    }
+
+    .avue--detail .el-col {
+        border: none;
+        margin: 0 0 24px 0 !important;
+    }
+
+    .avue--detail .el-form-item__content {
+        border: none;
+        background-color: #ECF2FE;
+        border-radius: 8px;
+    }
+
+    .avue--detail .el-row {
+        border: none;
+    }
+    
+    .avue--detail .el-input.is-disabled .el-input__inner,
+    .avue--detail .el-range-editor.is-disabled,
+    .avue--detail .el-range-editor.is-disabled input,
+    .avue--detail .el-textarea.is-disabled .el-textarea__inner {
+        background-color: #ECF2FE;
+    }
+
+    .avue--detail .el-form-item--medium.el-form-item,
+    .avue--detail .el-form-item--mini.el-form-item,
+    .avue--detail .el-form-item--small.el-form-item {
+        background-color: #fff
+    }
+    **/
+}
+
+/**
+.avue-crud__right {
+    .el-button {
+        width: 88px;
+        height: 32px;
+        border-radius: 16px;
+        font-size: 14px;
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 500;
+        color: #6F7CA3;
+    }
+    .el-button::after {
+        content: '高级筛选';
+    }
+    .el-icon-s-operation {
+        display: none;
+    }
+    .el-icon-refresh {
+        display: none;
+    }
+}
+*/
+.avue-crud__right .hide_btn {
+    display: none;
+}
+
+.el-range-input {
+    background-color: rgba(236, 242, 254, 1);
+}
+
+// table
+.el-table__header {
+    .cell {
+        text-align: center;
+    }
+}
+
+.container_body {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+
+    .empty_data {
+        ::v-deep .el-table {
+            display: none;
+        }
+    }
+
+    .empty_img_body {
+        width: 100%;
+        height: auto;
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        align-items: center;
+    }
+
+    .empty_img_body img {
+        width: 30%;
+        height: 40%;
+        object-fit: contain;
+        object-position: 50% 50%;
+    }
+}
+
+// search
+.search_body {
+    display: flex;
+    flex-wrap: wrap;
+    margin-bottom: 16px;
+
+    .search_item {
+        width: 360px !important;
+        display: flex;
+        background-color: rgba(236, 242, 254, 1);
+        border-radius: 8px;
+        margin: 0 12px 12px 0;
+    }
+
+    .search_label {
+        width: 86px;
+        text-align: right;
+        display: flex;
+        align-items: center;
+        flex-direction: row-reverse;
+        font-size: 14px;
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 400;
+        color: #2E3A59;
+        line-height: 22px;
+        white-space: nowrap;
+        padding: 5px 8px;
+    }
+
+    .large_input .el-input {
+        width: 100% !important;
+    }
+
+    .search_btns {
+        width: 360px;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+    }
+
+    .search_btns .el-button {
+        width: 65px;
+        height: 32px;
+        border-radius: 16px;
+        text-align: center;
+        line-height: 8px;
+    }
+}
+
+.dialog_form {
+    .el-select {
+        width: 100%;
+        background-color: rgba(236, 242, 254, 1);
+        border-radius: 8px;
+    }
+
+    .el-input__inner {
+        border: none;
+        background-color: rgba(236, 242, 254, 1);
+    }
+
+    .form_row {
+        display: flex;
+        flex-wrap: wrap;
+
+        .el-form-item {
+            width: 40%;
+        }
+    }
+}
+
+.table_menu_btn_group {
+    button {
+        height: 32px;
+        font-size: 14px;
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 500;
+        line-height: 12px;
+        border-radius: 16px;
+        text-align: center;
+        margin-right: 12px;
+        padding: 5px 16px;
+    }
+
+    .btn_content {
+        display: flex;
+        align-items: center;
+    }
+
+    .icon_img {
+        width: 14px;
+        height: 14px;
+        margin-right: 4px;
+    }
+
+    .btn_primary {
+        background-color: rgba(16, 109, 255, 1);
+        border: none;
+        color: #fff;
+    }
+
+    .btn_primary:active {
+        background-color: #66b1ff;
+    }
+
+    .btn_default {
+        background-color: #fff;
+        color: rgba(111, 124, 163, 1);
+        border: 1px solid #DCDCDC;
+    }
+}

+ 14 - 0
src/styles/public/crue.scss

@@ -0,0 +1,14 @@
+
+    .avue-form__group {
+        /deep/ .el-input__inner {
+            background-color: rgba(236, 242, 254, 1);
+        }
+    }
+    .avue-dialog__footer {
+        /deep/ .el-button {
+            border-radius: 16px;
+        }
+        /deep/ .el-button--primary {
+            background-color: #106dff;
+        }
+    }

+ 1 - 0
src/styles/theme/white.scss

@@ -42,6 +42,7 @@
   .avue-logo_title{
   .avue-logo_title{
     font-weight: 400;
     font-weight: 400;
     color:#fff;
     color:#fff;
+    font-size: 15px
   }
   }
   .logo_title,
   .logo_title,
   .avue-breadcrumb
   .avue-breadcrumb

+ 372 - 0
src/views/police/datas/index.vue

@@ -0,0 +1,372 @@
+<template>
+    <div class="datas">
+        <div class="ranking card_content">
+            <div class="ranking_top">
+                <img :src="icon_title_ranking_24" alt="" class="icon_img">
+                <div class="card_title">统计排行</div>
+                <!-- <div class="little_title">
+                    <span>前三名占本次总量的</span>
+                    <span class="little_title_count">36.4%</span>
+                </div> -->
+                <!-- <a href="" class="little_title_a">查看更多</a> -->
+            </div>
+            <div class="ranking_item" v-for="(item,index) in rankingList" :key="item.id">
+                <div class="ranking_left">
+                    <div v-if="index == 0" class="rank_num_body">
+                        <img :src="icon_rank_first" alt="">
+                    </div>
+                    <div v-else-if="index == 1" class="rank_num_body">
+                        <img :src="icon_rank_second" alt="">
+                    </div>
+                    <div v-else-if="index == 2" class="rank_num_body">
+                        <img :src="icon_rank_third" alt="">
+                    </div>
+                    <div v-else class="icon_rank_num rank_num_body flex_center">
+                        <div>{{ index + 1 }}</div>
+                    </div>
+                    <div class="ranking_name">{{ item.deptname }}</div>
+                </div>
+                <div class="ranking_value">{{ item.sl }}</div>
+            </div>
+        </div>
+        <div class="charts_part card_content">
+            <div class="charts_top">
+                <img :src="icon_title_compare_24" alt="" class="icon_img">
+                <div class="card_title">统计对比</div>
+            </div>
+            <div class="charts_content">
+                <!-- <div class="charts_body_h" id="echart"></div> -->
+                <div class="line_body">
+                    <!-- <div class="contrast_item" v-for="item in contrastList" :key="item.id">
+                        <div><img :src="item.icon" alt="" class="line_img"></div>
+                        <div class="line_part">
+                            <div>
+                                <span class="line_name">{{ item.name }}</span>
+                                <span class="little_text">占总量</span>
+                                <span class="little_num">25%</span>
+                            </div>
+                            <div class="line_w">
+                                <div class="line_b" :style="{width: item.width + 'px'}"></div>
+                            </div>
+                        </div>
+                        <div class="font_line_value">{{ item.value }}</div>
+                    </div> -->
+                    <lineItem :icon="icon_statistics_house" name="房屋总数"
+                        :percent="contrastData.fwinfozb" :value="contrastData.fwinfo" />
+                    <lineItem :icon="icon_statistics_people" name="实有人口总数"
+                        :percent="contrastData.fwryzb" :value="contrastData.fwry" />
+                    <lineItem :icon="icon_statistics_site" name="九小场所数"
+                        :percent="contrastData.jxcszb" :value="contrastData.jxcs" />
+                    <!-- <lineItem :icon="icon_statistics_fire" name="消防隐患数" :percent="jxcszb" :value="jxcszs" /> -->
+                    <lineItem :icon="icon_statistics_dispute" name="矛盾纠纷数"
+                        :percent="contrastData.mdjfzb" :value="contrastData.mdjf" />
+                    <!-- <lineItem :icon="icon_statistics_police" name="警情数" :percent="mdjfzb" :value="mdjfzs" /> -->
+                    <!-- <lineItem :icon="icon_statistics_case" name="案件数" :percent="mdjfzb" :value="mdjfzs" /> -->
+                    <lineItem :icon="icon_statistics_idea" name="意见建议数"
+                        :percent="contrastData.yjjyzb" :value="contrastData.yjjy" />
+                </div>
+            </div>
+            <!-- <div class="charts_btns">
+                <el-select v-model="jqSelected" placeholder="请选择派出所">
+                    <el-option
+                        v-for="item in jqOptions"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                    </el-option>
+                </el-select>
+                <div class="chart_x_btns">
+                    <div @click="changeChartData('day')" class="unclicked">日度</div>
+                    <div @click="changeChartData('mon')" class="clicked">月度</div>
+                </div>
+            </div> -->
+        </div>
+    </div>
+</template>
+<script>
+import echarts from 'echarts';
+import { getBmByDept,getSyCenter,getSyCenterPh } from "@/api/home/home";
+import lineItem from './lineItem.vue'
+
+export default {
+    name: 'datas',
+    components: {lineItem},
+    data(){
+        return {
+            icon_title_ranking_24: require('@/page/police/public/icon_title_ranking_24.svg'),
+            icon_title_compare_24: require('@/page/police/public/icon_title_compare_24.svg'),
+            icon_rank_first: require('@/page/police/public/icon_rank_first.svg'),
+            icon_rank_second: require('@/page/police/public/icon_rank_second.svg'),
+            icon_rank_third: require('@/page/police/public/icon_rank_third.svg'),
+            icon_statistics_house: require('@/page/police/public/icon_statistics_house.svg'),
+            icon_statistics_people: require('@/page/police/public/icon_statistics_people.svg'),
+            icon_statistics_site: require('@/page/police/public/icon_statistics_site.svg'),
+            icon_statistics_fire: require('@/page/police/public/icon_statistics_fire.svg'),
+            icon_statistics_dispute: require('@/page/police/public/icon_statistics_dispute.svg'),
+            icon_statistics_police: require('@/page/police/public/icon_statistics_police.svg'),
+            icon_statistics_case: require('@/page/police/public/icon_statistics_case.svg'),
+            icon_statistics_idea: require('@/page/police/public/icon_statistics_idea.svg'),
+            rankingList: [],
+            option: {
+                grid: {
+                    top: '84px',
+                    bottom: '38px',
+                    left: '16px',
+                    right: '16px'
+                },
+                xAxis: {
+                    type: 'category',
+                    axisTick: {
+                        alignWithLabel: true
+                    },
+                    data: ['7月', '8月', '9月', '10月', '11月']
+                },
+                yAxis: {
+                    type: 'value',
+                    show: false,
+                },
+                series: [
+                    {
+                        data: [
+                            {
+                                value: 600,
+                                itemStyle: {
+                                    color: 'rgba(51, 102, 255, 1)',
+                                    barBorderRadius: [8,8,0,0],
+                                }
+                            },
+                            {
+                                value: 2345,
+                                itemStyle: {
+                                    color: 'rgba(51, 102, 255, 1)',
+                                    barBorderRadius: [8,8,0,0],
+                                }
+                            },
+                            {
+                                value: 12345,
+                                itemStyle: {
+                                    color: new echarts.graphic.LinearGradient(
+                                        0, 1, 0, 0,
+                                        [
+                                            {offset: 1, color: '#8DB9FC'},
+                                            {offset: 0, color: '#3366FF'}
+                                        ]
+                                    ),
+                                    barBorderRadius: [8,8,0,0],
+                                }
+                            },
+                            {
+                                value: 1050,
+                                itemStyle: {
+                                    color: 'rgba(51, 102, 255, 1)',
+                                    barBorderRadius: [8,8,0,0],
+                                }
+                            },
+                            {
+                                value: 6600,
+                                itemStyle: {
+                                    color: 'rgba(51, 102, 255, 1)',
+                                    barBorderRadius: [8,8,0,0],
+                                }
+                            }
+                        ],
+                        type: 'bar',
+                        barWidth: '32px'
+                    }
+                ]
+            },
+            contrastList: [
+                {icon: this.icon_statistics_house,value: '209,567',name: '房屋总数',id: '1',width: 75},
+                {icon: this.icon_statistics_people,value: '209,567',name: '实有人口总数',id: '2',width: 75},
+                {icon: this.icon_statistics_site,value: '3,567',name: '九小场所数',id: '3',width: 75},
+                {icon: this.icon_statistics_fire,value: '267',name: '消防隐患数',id: '4',width: 75},
+                {icon: this.icon_statistics_dispute,value: '567',name: '矛盾纠纷数',id: '5',width: 75},
+                {icon: this.icon_statistics_police,value: '19,567',name: '警情数',id: '6',width: 75},
+                {icon: this.icon_statistics_case,value: '22,567',name: '案件数',id: '7',width: 75},
+                {icon: this.icon_statistics_idea,value: '9,567',name: '意见建议数',id: '8',width: 75}
+            ],
+            jqOptions: [],
+            jqSelected: '',
+            contrastData: {fwinfozb: 0,fwinfo: 0,fwryzb: 0,fwry: 0,
+                jxcszb: 0,jxcs: 0,mdjfzb: 0,mdjf: 0,yjjyzb: 0,yjjy: 0},
+        }
+    },
+    mounted(){
+        getBmByDept().then(res=>{
+            this.jqOptions = res.data.data
+            if(this.jqOptions.length > 0){
+                this.jqSelected = this.jqOptions[0]['value']
+            }
+        })
+        getSyCenter().then(res=>{
+            this.contrastData = res.data.data
+        })
+        getSyCenterPh().then(res=>{
+            let list = res.data.data
+            // 降序
+            list.sort(function(a,b){
+                return b.sl - a.sl
+            })
+            this.rankingList = list.slice(0,10)
+        })
+        // var echartDom = echarts.init(document.getElementById('echart'))
+        // echartDom.setOption(this.option)
+    },
+    methods: {
+        changeChartData(){
+
+        }
+    }
+}
+</script>
+<style scoped lang="scss">
+.datas {
+    margin-top: 16px;
+    display: flex;
+    color: rgba(17, 17, 17, 1);
+}
+.ranking {
+    margin-right: 16px;
+    width: 46%;
+}
+.ranking_top {
+    display: flex;
+    font-size: 20px;
+    align-items: end;
+}
+.little_title {
+    flex: 1;
+    font-size: 12px;
+    color: rgba(17, 17, 17, 1);
+    margin-left: 8px;
+}
+.little_title_count {
+    color: rgba(51, 102, 255, 1);
+}
+.little_title_a {
+    font-size: 14px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 400;
+    color: #3366FF;
+    line-height: 22px;
+}
+.ranking_item {
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    margin-top: 16px;
+    .ranking_left {
+        display: flex;
+    }
+    .ranking_name {
+        font-size: 14px;
+        font-family: PingFangSC, PingFang SC;
+        font-weight: 400;
+        color: #111111;
+        line-height: 20px;
+    }
+    .rank_num_body {
+        width: 16px;
+        height: 18px;
+        margin-right: 2px;
+    }
+    .icon_rank_num {
+        font-size: 14px;
+        font-family: DINPro-Medium;
+        font-weight: 500;
+        color: #111111;
+        line-height: 18px;
+    }
+    .ranking_value {
+        font-size: 16px;
+        font-family: DINPro-Medium;
+        font-weight: 400;
+        color: #111111;
+        line-height: 20px;
+    }
+}
+.flex_center {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+}
+.card_content {
+    border-radius: 16px;
+    background-color: #FFFFFF;
+    margin-top: 12px;
+    padding: 24px 16px;
+}
+.icon_img {
+    width: 24px;
+    height: 24px;
+    // border: 0.5px dashed rgba(17, 17, 17, 0.5);
+    margin-right: 8px;
+}
+.card_title {
+    font-size: 20px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 600;
+    color: #111111;
+}
+.charts_part {
+    flex: 1;
+    position: relative;
+}
+.charts_top{
+    display: flex;
+    font-size: 20px;
+}
+.charts_content {
+    display: flex;
+    margin-top: 12px;
+    .charts_body_h {
+        height: 322px;
+        width: 420px;
+        background-color: rgba(243, 248, 255, 1);
+        border-radius: 12px;
+    }
+    .line_body {
+        flex: 1;
+        margin-left: 12px;
+    }
+}
+
+.charts_btns {
+    width: 388px;
+    height: 20px;
+    display: flex;
+    align-items: center;
+    justify-content: space-between;
+    position: absolute;
+    top: 80px;
+    left: 32px;
+    
+    ::v-deep .el-input__inner {
+        border: none;
+        background-color: rgba(243, 248, 255, 1);
+        color: #111111;
+        font-weight: 500;
+    }
+    ::v-deep .el-input__icon {
+        color: #111111;
+    }
+}
+.chart_x_btns {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    font-size: 14px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 400;
+    width: 80px;
+    .unclicked {
+        color: #999999;
+    }
+    .clicked {
+        color: #111111;;
+    }
+}
+.chart_x_btns:hover {
+    cursor: pointer;
+}
+</style>

+ 88 - 0
src/views/police/datas/lineItem.vue

@@ -0,0 +1,88 @@
+<template>
+    <div class="contrast_item">
+        <div><img :src="icon" alt="" class="line_img"></div>
+        <div class="line_part">
+            <div>
+                <span class="line_name">{{ name }}</span>
+                <span class="little_text">占总量</span>
+                <span class="little_num">
+                    {{ percentFixed }}%</span>
+            </div>
+            <div class="line_w">
+                <div class="line_b" :style="{width: percentFixed + '%'}"></div>
+            </div>
+        </div>
+        <div class="font_line_value">{{ value }}</div>
+    </div>
+</template>
+<script>
+export default {
+    name: 'lineItem',
+    props: ['icon','name','percent','value'],
+    computed: {
+        percentFixed(){
+            if(this.percent == 'NaN'){
+                return 0
+            }else if(typeof this.percent == 'string'){
+                return parseFloat(this.percent).toFixed(2)
+            }else{
+                return this.percent.toFixed(2)
+            }
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+.contrast_item {
+    display: flex;
+    height: 28px;
+    align-items: center;
+    margin-bottom: 14px;
+    font-family: PingFangSC, PingFang SC;
+    .line_img {
+        width: 24px;
+        height: 24px;
+        padding: 2px;
+        // border: 0.5px dashed rgba(17, 17, 17, 0.5);
+        margin-right: 8px;
+    }
+    .line_part {
+        flex: 1;
+        font-weight: 400;
+        .line_name {
+            font-size: 14px;
+            color: #111111;
+            line-height: 20px;
+        }
+        .little_text {
+            font-size: 12px;
+            color: #999999;
+            margin-left: 4px;
+            margin-right: 4px;
+        }
+        .little_num {
+            font-size: 12px;
+            color: rgba(51, 102, 255, 1);
+        }
+    }
+    .line_w {
+        height: 4px;
+        border-radius: 2px;
+        background-color: rgba(248, 248, 248, 1);
+        margin-top: 4px;
+        width: 100%;
+    }
+    .line_b {
+        height: 4px;
+        background: rgba(51, 102, 255, 1);
+        border-radius: 2px;
+    }
+    .font_line_value {
+        font-size: 16px;
+        font-family: DINPro-Medium;
+        font-weight: 500;
+        color: #111111;
+        line-height: 21px;
+    }
+}
+</style>

+ 170 - 0
src/views/police/index.vue

@@ -0,0 +1,170 @@
+<template>
+    <div>
+        <div class="card_part font_w card_nomal">
+            <div class="card_top">
+                <img :src="icon_title" alt="" class="icon_img">
+                <div class="card_title">辖区概况统计</div>
+            </div>
+            <div class="card_content">
+                <div class="card" v-for="item in cardList" :key="item.id" 
+                    :style="{backgroundColor: item.color}"
+                >
+                    <div class="card_label card_set">{{ item.name }}</div>
+                    <div class="card_num card_set">{{ cardData[item.value] }}</div>
+                    <div class="circle" :style="{backgroundColor: item.circleColor}"></div>
+                </div>
+            </div>
+        </div>
+        <Datas />
+        <div class="bottom_part">
+            <div class="bottom_item card_nomal" v-for="item in smallList" :key="item.id">
+                <div class="bottom_top">
+                    <div><img :src="item.icon" alt="" class="icon_img"></div>
+                    <div class="bottom_text">{{ item.name }}</div>
+                </div>
+                <div class="bottom_num">{{ smallData[item.value] }}<span class="bottom_unit">个</span></div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+import Datas from './datas'
+import { getSyTop,getSyBottom } from "@/api/home/home";
+
+export default {
+    name: 'index',
+    data(){
+        return {
+            icon_title: require('@/page/police/public/icon_title_data_24.svg'),
+            cardList: [
+                {name: '县区总数',value: 'xqzs',id: 0,color: 'rgba(255, 207, 204, 1)',circleColor: 'rgba(245, 174, 171, 1)'},
+                // {name: '乡镇总数',value: '386',id: 1,color: 'rgba(255, 224, 194, 1)',circleColor: 'rgba(245, 203, 162, 1)'},
+                {name: '乡镇(街道)总数',value: 'jdzs',id: 2,color: 'rgba(178, 235, 188, 1)',circleColor: 'rgba(148, 224, 161, 1)'},
+                {name: '社区总数',value: 'sqzs',id: 3,color: 'rgba(194, 235, 255, 1)',circleColor: 'rgba(162, 218, 245, 1)'},
+                {name: '警务室(站)总数',value: 'jwszs',id: 4,color: 'rgba(194, 214, 255, 1)',circleColor: 'rgba(162, 189, 245, 1)'},
+                // {name: '小区总数',value: '823,623',id: 5,color: 'rgba(214, 194, 255, 1)',circleColor: 'rgba(189, 162, 245, 1)'}
+            ],
+            cardData: {},
+            smallList: [
+                {icon: require('@/page/police/public/icon_title_site_24.svg'),name: '九小场所数',id: '1',value: 'jxcs'},
+                {icon: require('@/page/police/public/icon_title_fire_24.svg'),name: '消防隐患数',id: '2',value: 'csjc'},
+                {icon: require('@/page/police/public/icon_title_dispute_24.svg'),name: '矛盾纠纷数',id: '3',value: 'mdjf'},
+                // {icon: require('@/page/police/public/icon_title_police_24.svg'),name: '警情数',id: '4',value: '6,678'}
+            ],
+            smallData: {}
+        }
+    },
+    components: {Datas},
+    mounted(){
+        getSyTop().then(res=>{
+            this.cardData = res.data.data
+        })
+        getSyBottom().then(res=>{
+            this.smallData = res.data.data
+        })
+    }
+}
+</script>
+<style lang="scss" scoped>
+.card_part {
+    padding: 24px 0px 24px 16px;
+}
+.card_nomal {
+    border-radius: 16px;
+    background-color: #FFFFFF;
+}
+.card_top {
+    display: flex;
+    align-items: center;
+}
+.card_title {
+    font-size: 20px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 600;
+    color: #111111;
+}
+.card_content {
+    display: flex;
+    margin-top: 12px;
+}
+.card {
+    flex: 1;
+    height: 88px;
+    margin-right: 12px;
+    border-radius: 12px;
+    display: flex;
+    flex-direction: column;
+    justify-content: center;
+    position: relative;
+}
+.circle {
+    position: absolute;
+    top: 12px;
+    right: 12px;
+    width: 8px;
+    height: 8px;
+    border-radius: 50%;
+}
+.card_set {
+    margin-left: 10%;
+}
+.card_label {
+    font-size: 14px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 500;
+    color: rgba(4,8,20,0.9);
+    line-height: 22px;
+}
+.card_num {
+    font-weight: bold;
+    font-family: DINPro-Bold;
+    font-size: 32px;
+    line-height: 40px;
+}
+.font_w {
+    color: rgba(17, 17, 17, 1);
+}
+.bottom_part {
+    display: flex;
+    margin-top: 16px;
+}
+.bottom_item {
+    margin-right: 16px;
+    flex: 1;
+    height: 100px;
+    padding: 18px 0 12px 16px;
+}
+.bottom_part > :last-child {
+    margin-right: 0;
+}
+.bottom_top {
+    display: flex;
+}
+.bottom_text {
+    font-size: 20px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 600;
+    color: #111111;
+    line-height: 28px;
+}
+.bottom_num {
+    font-size: 32px;
+    font-family: DINPro-Bold;
+    font-weight: bold;
+    color: #111111;
+    line-height: 40px;
+}
+.bottom_unit {
+    font-size: 16px;
+    font-family: PingFangSC, PingFang SC;
+    font-weight: 600;
+    color: #111111;
+    line-height: 40px;
+}
+.icon_img {
+    width: 24px;
+    height: 24px;
+    // border: 0.5px dashed rgba(17, 17, 17, 0.5);
+    margin-right: 8px;
+}
+</style>

+ 158 - 0
src/views/ybss/fwbzdz/bzdzxq.vue

@@ -0,0 +1,158 @@
+<template>
+    <div class="bzdzxq">
+        <div class="bzdzxq_left">
+            <div class="logo">
+                <img :src="icon_house_color_88" alt="">
+            </div>
+            <div class="name">
+                {{ query.level1 }}{{ query.level2 }}
+            </div>
+            <div class="name">
+                {{ query.level3 }}{{ query.level4 }}{{ query.lcnpmh }}
+            </div>
+            <div class="btns">
+                <button class="btn_primary">
+                    <img :src="icon_people_white_16" alt="">
+                    <div>新增实有人口</div>
+                </button>
+                <button class="btn_nomal">
+                    <img :src="icon_unit_gray_16" alt="">
+                    <div>新增实有单位</div>
+                </button>
+            </div>
+        </div>
+        <div class="bzdzxq_right">
+            <el-tabs v-model="activeName" type="card" @tab-click="handleClick" v-loading="tabLoading" class="tabs">
+                <el-tab-pane label="实有房屋" name="syfw">
+                    <DetailSyfw></DetailSyfw>
+                </el-tab-pane>
+                <el-tab-pane :label="'实有单位(' + sydwNum + ')'" name="sydw">实有单位</el-tab-pane>
+                <el-tab-pane :label="'实有人口(' + syrkNum + ')'" name="syrk">实有人口</el-tab-pane>
+            </el-tabs>
+        </div>
+    </div>
+</template>
+<script>
+import DetailSyfw from './components/DetailSyfw.vue'
+import { syfwDetail } from '@/api/fwbzdz/fwbzdz.js'         // 实有房屋详情
+
+export default {
+    components: { DetailSyfw },
+    data() {
+        return {
+            icon_house_color_88: require('@/img/fwbzdz/icon_house_color_88.svg'),
+            icon_people_white_16: require('@/img/fwbzdz/icon_people_white_16.svg'),
+            icon_unit_gray_16: require('@/img/fwbzdz/icon_unit_gray_16.svg'),
+            activeName: 'syfw',
+            tabLoading: false,
+            sydwNum: 0,
+            syrkNum: 0,
+        }
+    },
+    computed: {
+        query() {
+            return this.$route.query
+        },
+        // query(){
+        //     return this.$store.state.bzdzxq.query
+        // },
+    },
+    mounted() {
+        console.log('bzdzxq', this.query)
+        syfwDetail(this.query.dzbm).then(res => {
+            console.log('syfwDetail', res)
+        })
+    },
+    methods: {
+        handleClick(val) {
+            console.log('handleClick', val)
+        },
+        getData(method) {
+            this.$options.methods[method]
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+.btn_primary {
+    background-color: rgba(16, 109, 255, 1);
+    color: rgba(255, 255, 255, 1);
+    border: none;
+}
+
+.btn_nomal {
+    background-color: rgba(255, 255, 255, 1);
+    color: rgba(111, 124, 163, 1);
+    border: 1px solid rgba(220, 220, 220, 1);
+}
+
+.bzdzxq {
+    margin: 0 10px;
+    display: flex;
+
+    .bzdzxq_left {
+        width: 360px;
+        display: flex;
+        flex-direction: column;
+        justify-content: center;
+        padding-top: 64px;
+
+        .logo {
+            margin-bottom: 24px;
+            display: flex;
+            justify-content: center;
+        }
+
+        .name {
+            display: flex;
+            justify-content: center;
+            color: rgba(4, 8, 20, 0.9);
+            font-size: 20px;
+            font-weight: 600;
+        }
+
+        .btns {
+            margin-top: 24px;
+            display: flex;
+            justify-content: center;
+
+            button {
+                width: 136px;
+                height: 32px;
+                border-radius: 16px;
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                font-weight: 500;
+                font-size: 14px;
+                margin: 0 6px;
+            }
+
+            img {
+                margin-right: 4px;
+            }
+        }
+    }
+
+    .bzdzxq_right {
+        flex: 1;
+        padding: 0 24px;
+
+        .tabs {
+            margin: 24px 0;
+        }
+
+        ::v-deep .el-tabs--card>.el-tabs__header .el-tabs__nav {
+            border: none;
+        }
+
+        ::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item {
+            border: none;
+        }
+
+        ::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
+            border-bottom: 4px solid rgba(16, 109, 255, 1) !important;
+        }
+    }
+}
+</style>

+ 121 - 0
src/views/ybss/fwbzdz/components/DetailSyfw.vue

@@ -0,0 +1,121 @@
+<template>
+    <div>
+        <div class="item_head">
+            <div class="title">房屋信息</div>
+            <div class="btn">修改</div>
+        </div>
+        <div class="row_body">
+            <div class="row_label">房屋地址</div>
+            <div class="row_content"></div>
+        </div>
+        <div class="row_body">
+            <div class="row_label">房屋特点</div>
+            <div class="row_content"></div>
+        </div>
+        <div class="row_body">
+            <div class="row_label">户内面积</div>
+            <div class="row_content"></div>
+        </div>
+        <div class="row_body">
+            <div class="row_label">户内间数</div>
+            <div class="row_content"></div>
+        </div>
+        <div class="line"></div>
+        <div class="item_head">
+            <div class="title">房主信息</div>
+            <div class="btn">修改</div>
+        </div>
+        <div class="row_body">
+            <div class="row_label">房主照片</div>
+            <div class="row_content"></div>
+        </div>
+        <div class="row_body">
+            <div class="row_label">房主姓名</div>
+            <div class="row_content"></div>
+        </div>
+        <div class="row_body">
+            <div class="row_label">公民身份号码</div>
+            <div class="row_content"></div>
+        </div>
+        <div class="row_body">
+            <div class="row_label">联系电话</div>
+            <div class="row_content"></div>
+        </div>
+        <div class="row_body">
+            <div class="row_label">工作单位</div>
+            <div class="row_content"></div>
+        </div>
+        <div class="row_body">
+            <div class="row_label">现居住地址</div>
+            <div class="row_content"></div>
+        </div>
+        <div class="line"></div>
+        <div class="item_head">
+            <div class="title">变更记录</div>
+            <div class="btn"></div>
+        </div>
+        <div class="row_body_history">
+            <div>
+                <div class="row_label">历史房主照片</div>
+                <div class="row_content"></div>
+            </div>
+            <div class="row_content">2024-06-12 15:30:22 注销</div>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    name: 'DetailSyfw',
+    data() {
+        return {}
+    }
+}
+</script>
+<style lang="scss" scoped>
+.item_head {
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    margin-top: 8px;
+
+    .title {
+        font-size: 16px;
+        font-weight: 600;
+        color: rgba(4, 8, 20, 0.9);
+    }
+
+    .btn {
+        font-size: 14px;
+        font-weight: 400;
+        color: rgba(16, 109, 255, 1);
+    }
+}
+
+.line {
+    width: 100%;
+    margin: 8px 0;
+    border-bottom: 1px solid rgba(231, 231, 231, 1);
+}
+
+.row_body {
+    margin-bottom: 8px;
+
+    .row_label {
+        width: 120px;
+        color: rgba(111, 124, 163, 1);
+        font-size: 14px;
+        font-weight: 400;
+    }
+
+    .row_content {
+        color: rgba(4, 8, 20, 0.90);
+        font-weight: 400;
+        font-size: 14px;
+    }
+}
+
+.row_body_history {
+    display: flex;
+    justify-content: space-between;
+}
+</style>

+ 145 - 0
src/views/ybss/fwbzdz/components/GridGroup.vue

@@ -0,0 +1,145 @@
+<template>
+    <div>
+        <div class="grid_body" v-for="lch in lcList" :key="lch.lch" @click="lchClicked(lch)">
+            <div class="lch" :class="{ lch_active: lch.lch == lchSelected ? true : false }">
+                <div>{{ lch.lch }}</div>
+            </div>
+            <div class="grid_content">
+                <div class="grid_item" v-for="lcnpmh in lch.fjList" :key="lcnpmh.id"
+                    @click.stop="lcnpmhClicked(lch, lcnpmh)"
+                    :class="{ lcnpmh_active: lcnpmh.id == lcnpmhSelected ? true : false }"
+                    @dblclick="toDetail(lcnpmh)">
+                    <div>{{ lcnpmh.lcnpmh }}</div>
+                    <div style="display: flex;">
+                        <img :src="icon_house_gray_16" alt="">
+                    </div>
+                    <div style="display: flex;">
+                        <img :src="icon_unit_gray_16" alt="">
+                    </div>
+                    <div>已采集 {{ lcnpmh.personNum }} 人</div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+<script>
+export default {
+    name: 'GridGroup',
+    props: {
+        lcList: {
+            type: Array,
+            default: () => {
+                return []
+            }
+        },
+        dzData: {
+            type: Object,
+            default: ()=>{
+                return {}
+            }
+        }
+    },
+    data() {
+        return {
+            icon_house_gray_16: '',
+            icon_unit_gray_16: '',
+            // icon_house_gray_16: require('@/assets/fwbzdz/icon_house_gray_16.svg'),
+            // icon_unit_gray_16: require('@/assets/fwbzdz/icon_unit_gray_16.svg'),
+            lchSelected: '',
+            lcnpmhSelected: ''
+        }
+    },
+    mounted() {
+        if (this.lcList) {
+            this.$set(this.$data, 'lchSelected', this.lcList[0].lch)
+            if (this.lcList[0]['fjList']) {
+                this.$set(this.$data, 'lcnpmhSelected', this.lcList[0]['fjList'][0].id)
+            }
+        }
+    },
+    methods: {
+        lchClicked(lch) {
+            this.$set(this.$data, 'lchSelected', lch.lch)
+        },
+        // 有 times 亮
+        lcnpmhClicked(lch, lcnpmh) {
+            if (this.lcnpmhSelected != lcnpmh.id) {
+                this.$set(this.$data, 'lcnpmhSelected', lcnpmh.id)
+            }
+            if (this.lchSelected != lch.lch) {
+                this.$set(this.$data, 'lchSelected', lch.lch)
+            }
+        },
+        toDetail(lcnpmh) {
+            this.$router.push({
+                path: '/ybss/fwbzdz/bzdzxq',
+                query: {
+                    ...this.dzData,
+                    ...lcnpmh
+                }
+            });
+            // this.$store.commit('SET_BZDZXQ_QUERY', {
+            //     lch: lch,
+            //     lcnpmh: lcnpmh
+            // })
+            // this.$router.push({ path: '/ybss/fwbzdz/bzdzxq' })
+        }
+    }
+}
+</script>
+<style lang="scss" scoped>
+.grid_body {
+    display: flex;
+
+    .lch {
+        width: 32px;
+        height: 104px;
+        border-radius: 8px;
+        background-color: rgba(231, 231, 231, 1);
+        color: rgba(0, 0, 0, 0.90);
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        margin-right: 12px;
+        font-weight: 600;
+        font-size: 14px;
+
+        div {
+            // -webkit-transform: rotate(90deg);
+            // width: 17px;
+            text-align: center;
+        }
+    }
+
+    .lch_active {
+        background-color: rgba(16, 108, 253, 1);
+        color: rgba(255, 255, 255, 1);
+    }
+
+    .grid_content {
+        display: flex;
+        flex-wrap: wrap;
+
+        .grid_item {
+            width: 136px;
+            height: 104px;
+            border-radius: 8px;
+            border: 1px solid rgba(204, 204, 204, 1);
+            margin-right: 12px;
+            margin-bottom: 12px;
+            display: flex;
+            flex-direction: column;
+            align-items: center;
+            justify-content: center;
+
+            font-size: 12px;
+            color: rgba(111, 124, 163, 1);
+        }
+
+        .lcnpmh_active {
+            border: 1px solid rgba(16, 109, 255, 1);
+            background-color: rgba(16, 108, 253, 0.10);
+        }
+    }
+}
+</style>

+ 117 - 0
src/views/ybss/fwbzdz/components/dialog.vue

@@ -0,0 +1,117 @@
+<template>
+    <el-dialog
+        :visible.sync="dialogVisible"
+        append-to-body
+        :title="dialogTitle[dialogType]"
+        @before-close="handleClose()">
+        <el-form
+            ref="form"
+            :model="formList"
+            :rules="rules"
+            label-width="120px"
+            class="dialog_form">
+            <el-form-item label="所属省份" prop="sssf">
+                <el-select v-model="formList.sssf" size="mini" placeholder="请选择所属省份">
+                    <el-option
+                        v-for="item in options"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="所属地区" prop="ssdq">
+                <el-select v-model="formList.ssdq" size="mini" placeholder="请选择所属地市、县区、乡镇街道">
+                    <el-option
+                        v-for="item in options"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="社区居委会" prop="ssjwh">
+                <el-select v-model="formList.ssjwh" size="mini" placeholder="请选择社区居/村委会">
+                    <el-option
+                        v-for="item in options"
+                        :key="item.value"
+                        :label="item.label"
+                        :value="item.value">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item label="街路巷" prop="jlx">
+                <el-input v-model="formList.jlx" placeholder="请输入街路巷" size="small"></el-input>
+            </el-form-item>
+            <el-form-item label="建筑物名称" prop="jzw">
+                <el-input v-model="formList.jzw" placeholder="请输入建筑物名称" size="small"></el-input>
+            </el-form-item>
+            <el-form-item label="单元" prop="dy">
+                <el-input v-model="formList.dy" placeholder="请输入单元" size="small"></el-input>
+            </el-form-item>
+            <el-form-item label="楼层" prop="lc">
+                <el-input v-model="formList.lc" placeholder="请输入楼层" size="small"></el-input>
+            </el-form-item>
+            <el-form-item label="门牌号" prop="mph">
+                <el-input v-model="formList.mph" placeholder="请输入门牌号" size="small"></el-input>
+            </el-form-item>
+            <el-form-item label="完整详细地址" prop="xxdz">
+                <el-input
+                    v-model="formList.xxdz"
+                    placeholder="请输入完整详细地址"
+                    size="small"
+                    type="textarea"
+                    :rows="2"></el-input>
+            </el-form-item>
+        </el-form>
+        <span slot="footer" class="dialog-footer">
+            <el-button @click="dialogVisible = false">取 消</el-button>
+            <el-button type="primary" @click="dialogSave">确 定</el-button>
+        </span>
+    </el-dialog>
+</template>
+<script>
+export default {
+    name: 'Dialog',
+    props: {
+        dialogType: {
+            type: String,
+            default: 'add'
+        }
+    },
+    data(){
+        return {
+            dialogVisible: false,
+            dialogTitle: {'add': '新增标准地址','update': '编辑标准地址'},
+            formList: {sssf: '',ssdq: '',ssjwh: '',jlx: '',jzw: '',dy: '',lc: '',mph: '',xxdz: ''},
+            rules: {
+                sssf: [{ required: true, message: '请选择所属省份', trigger: 'blur' }],
+                ssdq: [{ required: true, message: '请选择所属地市、县区、乡镇街道', trigger: 'blur' }],
+                ssjwh: [{ required: true, message: '请选择社区居/村委会', trigger: 'blur' }],
+                jlx: [{ required: true, message: '请输入街路巷', trigger: 'blur' }],
+                jzw: [{ required: true, message: '请输入建筑物名称', trigger: 'blur' }],
+                dy: [{ required: true, message: '请输入单元', trigger: 'blur' }],
+                lc: [{ required: true, message: '请输入楼层', trigger: 'blur' }],
+                mph: [{ required: true, message: '请输入门牌号', trigger: 'blur' }],
+                xxdz: [{ required: true, message: '请输入完整详细地址', trigger: 'blur' }]
+            },
+            options: {}
+        }
+    },
+    methods: {
+        show(){
+            this.dialogVisible = true
+        },
+        handleClose(){
+            this.dialogVisible = false
+        },
+        dialogSave(){
+            this.$refs.form.validate(valid=>{
+                if(valid){
+                    this.$emit('dialogSave',this.formList)
+                }
+            })
+        }
+    }
+}
+</script>

+ 196 - 0
src/views/ybss/fwbzdz/index.vue

@@ -0,0 +1,196 @@
+<template>
+  <basic-container class="container_body">
+    <div class="fwbzdz_left">
+      <div class="tree_title">
+        <img :src="icon_title_standard_24" />
+        <div>辖区内标准地址</div>
+      </div>
+      <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick" :accordion="false"
+        v-loading="treeLoading" :expand-on-click-node="false"></el-tree>
+    </div>
+    <div class="grid">
+      <div class="grid_title">{{ dzData.level3 }}</div>
+      <el-tabs v-model="dzData.level4" type="card" v-loading="ldphLoading">
+        <el-tab-pane v-for="item in dyhs" :label="item.dyh" :name="item.dyh" :key="item.dyh">
+          <GridGroup :lcList="item.lcList" :dzData="dzData"></GridGroup>
+        </el-tab-pane>
+      </el-tabs>
+    </div>
+  </basic-container>
+</template>
+<script>
+// import NProgress from 'nprogress';
+// import 'nprogress/nprogress.css';
+import GridGroup from './components/GridGroup.vue'
+import { getLdListPt, getLdDetailByLdphxlh } from "@/api/fwbzdz/fwbzdz";
+// 一标三实 标准地址
+export default {
+  components: { GridGroup },
+  data() {
+    return {
+      icon_title_standard_24: require('@/img/fwbzdz/icon_title_standard_24.svg'),
+      treeData: [],
+      // defaultProps: {
+      //   children: 'data',
+      //   label: 'sqjlx',
+      //   isLeaf: 'isLeaf'
+      // },
+      defaultProps: {
+        children: 'data',
+        label: 'ldph',
+        isLeaf: 'isLeaf'
+      },
+      ldph: '',
+      ldphLoading: false,
+      dyhs: [],
+      treeLoading: true,
+      dzData: {
+        level1: '',
+        level2: '',
+        level3: '',
+        level4: ''
+      }
+    };
+  },
+  created() {
+    getLdListPt().then(res => {
+      // console.log('getLdListPt', res)
+      this.$set(this.$data, 'treeData', res.data.data)
+    }).finally(() => {
+      this.treeLoading = false
+    })
+  },
+  methods: {
+    loadNode(node, resolve) {
+      const list = node.data.data
+      if (node.level === 0) {
+        return resolve(this.treeData);
+      }
+      if (node.level === 1) {
+        let treeData = list.map(item => {
+          return {
+            data: item.data,
+            sqjlx: item.mlph
+          }
+        })
+        return resolve(treeData)
+      }
+      if (node.level === 2) {
+        let treeData = list.map(item => {
+          return {
+            sqjlx: item.ldph,
+            isLeaf: true,
+            content: item
+          }
+        })
+        return resolve(treeData)
+      }
+    },
+    handleNodeClick(data, node) {
+      // console.log('handleNodeClick', data, node)
+      if (!data.data) {
+        this.ldphLoading = true
+        this.dzData.level1 = node.parent.parent.data.ldph
+        this.dzData.level2 = node.parent.data.ldph
+        this.dzData.level3 = data.ldph
+
+        // 有数据的展示,没数据的只展示名字
+        getLdDetailByLdphxlh(data.ldphxlh).then(res => {
+          // console.log('ldphxlh', res)
+          this.dyhs = res.data.data
+          this.dzData.level4 = this.dyhs[0]['dyh']
+        }).finally(() => {
+          this.ldphLoading = false
+        })
+      } else {
+        // this.ldph = data.sqjlx
+      }
+    },
+    changeDate(date) {
+      var Y = date.getFullYear() + '-';
+      var M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
+      var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
+      var h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
+      var m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
+      var s = date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
+      return Y + M + D + h + m + s
+    }
+  },
+}
+</script>
+<style lang="scss" scoped>
+::v-deep .basic-container__card {
+  display: flex;
+}
+
+::v-deep .el-card__body {
+  display: flex;
+  flex: 1;
+}
+
+.grid {
+  padding: 0 24px;
+  flex: 1;
+
+  .grid_title {
+    margin-bottom: 24px;
+    color: rgba(4, 8, 20, 0.90);
+    font-weight: 600;
+    font-size: 20px;
+  }
+
+  ::v-deep .el-tabs--card>.el-tabs__header .el-tabs__nav {
+    border: none;
+  }
+
+  ::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item {
+    border: none;
+  }
+
+  ::v-deep .el-tabs--card>.el-tabs__header .el-tabs__item.is-active {
+    border-bottom: 4px solid rgba(16, 109, 255, 1) !important;
+  }
+
+  ::v-deep .el-tabs__content {
+    height: calc(100vh - 324px);
+    overflow-y: scroll;
+  }
+}
+
+.fwbzdz_left {
+
+  width: 260px;
+
+  .tree_title {
+    display: flex;
+    align-items: center;
+    font-weight: 600;
+    color: rgba(17, 17, 17, 1);
+    font-size: 20px;
+    margin-bottom: 8px;
+
+    img {
+      display: block;
+      margin-right: 8px;
+    }
+  }
+
+  ::v-deep .el-tree {
+    // height: calc(100vh - 260px);
+    height: calc(100vh - 196px);
+    overflow: scroll;
+  }
+
+  ::v-deep .el-tree-node__expand-icon {
+    color: rgba(4, 8, 20, 1);
+  }
+
+  ::v-deep .is-leaf {
+    display: none;
+  }
+
+  ::v-deep .el-tree-node__label {
+    color: rgba(4, 8, 20, 1);
+  }
+}
+</style>

+ 123 - 0
src/views/ybss/syfw/index.vue

@@ -0,0 +1,123 @@
+<template>
+    <basic-container>
+        <avue-crud :option="option" :table-loading="loading" :data="tableData" :page.sync="page" v-model="form"
+            ref="crud" @search-change="searchChange" @search-reset="searchReset" @selection-change="selectionChange"
+            @current-change="currentChange" @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad">
+            <template slot="menuLeft">
+                <div class="search_btn_group">
+                    <button>新增</button>
+                    <button>导入</button>
+                    <button>导出</button>
+                </div>
+            </template>
+            <!-- <template slot-scope="scope" slot="menu">
+                
+            </template> -->
+            <!-- <template slot-scope="{row}" slot="tenantId">
+                <el-tag>{{ row.tenantId === '' ? '通用' : row.tenantId }}</el-tag>
+            </template>
+            <template slot-scope="{row}" slot="version">
+                <el-tag>v{{ row.version }}</el-tag>
+            </template>
+            <template slot-scope="{row}" slot="suspensionState">
+                <el-tag>{{ row.suspensionState === 1 ? '激活' : '挂起' }}</el-tag>
+            </template>
+            <template slot-scope="{row}" slot="category">
+                <el-tag>{{ row.categoryName }}</el-tag>
+            </template> -->
+        </avue-crud>
+    </basic-container>
+</template>
+
+<script>
+import { getsyfwList } from "@/api/fwbzdz/fwbzdz";
+
+import crudmixin from '@/mixins/newcrud.js';
+
+export default {
+    mixins: [crudmixin],
+    data() {
+        return {
+            mode: '1',
+            option: {
+                ...this.defaultOptions,
+                selection: false,
+                editBtn: false,
+                viewBtn: false,
+                delBtn: false,
+                menuWidth: 150,
+                dialogWidth: 900,
+                column: [
+                    {
+                        label: '详细地址',
+                        prop: 'xz',
+                        searchSpan: 6,
+                        search: true
+                    },
+                    {
+                        label: '房屋特点',
+                        prop: 'fwtd',
+                        searchSpan: 6,
+                        search: true
+                    },
+                    {
+                        label: '户内面积',
+                        prop: 'fwMj',
+                    },
+                    {
+                        label: '户内间数',
+                        prop: 'fwJs',
+                        searchSpan: 6,
+                        search: true
+                    },
+                    {
+                        label: '房主是否在此居住',
+                        prop: 'fzSfzh',
+                    },
+                    {
+                        label: '房主姓名',
+                        prop: 'fzXm',
+                    },
+                    {
+                        label: '联系电话',
+                        prop: 'fzDh',
+                    },
+                    // {
+                    //     label: "流程分类",
+                    //     type: "select",
+                    //     row: true,
+                    //     dicUrl: "/api/blade-system/dict/dictionary?code=flow",
+                    //     props: {
+                    //         label: "dictValue",
+                    //         value: "dictKey"
+                    //     },
+                    //     dataType: "number",
+                    //     slot: true,
+                    //     prop: "category",
+                    //     search: true,
+                    //     width: 100,
+                    // },
+                ]
+            },
+        };
+    },
+    watch: {
+        'mode'() {
+            this.onLoad(this.page);
+        }
+    },
+    methods: {
+        onLoad(page = this.page, params = {}) {
+
+            this.loading = true;
+            getsyfwList(page.currentPage, page.pageSize, Object.assign(params, this.query)).then(res => {
+                const data = res.data.data;
+                this.page.total = data.total;
+                this.tableData = data.records;
+                this.loading = false;
+                this.selectionClear();
+            });
+        }
+    }
+};
+</script>

Some files were not shown because too many files changed in this diff