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",
     "classlist-polyfill": "^1.2.0",
     "crypto-js": "^4.0.0",
+    "echarts": "^4.5.0",
     "element-ui": "^2.15.6",
     "js-base64": "^2.5.1",
     "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,
   fistPage: {
     label: "首页",
-    value: "/wel/index",
+    value: "/police",
     params: {},
     query: {},
     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 NProgress from 'nprogress' // progress bar
 import 'nprogress/nprogress.css' // progress bar style
+
 NProgress.configure({showSpinner: false});
 const lockPage = store.getters.website.lockPage; //锁屏页
 router.beforeEach((to, from, next) => {
+  // console.log('beforeEach',to,from)
   const meta = to.meta || {};
   const isMenu = meta.menu === undefined ? to.query.menu : meta.menu;
   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';
 
 //默认超时时间
-axios.defaults.timeout = 10000;
+axios.defaults.timeout = 100000;
 //返回其他状态码
 axios.defaults.validateStatus = function (status) {
   return status >= 200 && status <= 500;

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

@@ -4,7 +4,8 @@ export default [{
   path: '/login',
   name: '登录页',
   component: () =>
-    import( /* webpackChunkName: "page" */ '@/page/login/index'),
+    import( /* webpackChunkName: "page" */ '@/page/login/new_login'),
+    // import( /* webpackChunkName: "page" */ '@/page/login/index'),
   meta: {
     keepAlive: true,
     isTab: false,
@@ -59,7 +60,7 @@ export default [{
   {
     path: '/',
     name: '主页',
-    redirect: '/wel'
+    redirect: '/police'
   },
   {
     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 i18n from '@/lang' // Internationalization 国际化 多语言
 import Store from '../store/'; // vuex
+import PoliceRouter from './police/index'
+
 Vue.use(VueRouter)
 //创建路由
 export const createRouter = () => new VueRouter({
-  routes: [...PageRouter, ...ViewsRouter]
+  routes: [...PageRouter, ...ViewsRouter, ...PoliceRouter]
 })
 const Router = createRouter() // 获得 route 实例
 // 初始化和注册 AvueRouter
@@ -27,8 +29,8 @@ AvueRouter.install(Vue, {
   keepAlive: false,
 });
 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()
   Router.matcher = newRouter.matcher // reset router
   AvueRouter.install(Vue, {

+ 4 - 0
src/store/getters.js

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

+ 7 - 1
src/store/index.js

@@ -5,7 +5,10 @@ import common from './modules/common'
 import tags from './modules/tags'
 import logs from './modules/logs'
 import dict from './modules/dict'
+import bzdzxq from './modules/bzdzxq'
 import getters from './getters'
+import menu from './modules/menu'
+import thirdTitle from './modules/thirdTitle'
 
 Vue.use(Vuex)
 const store = new Vuex.Store({
@@ -14,7 +17,10 @@ const store = new Vuex.Store({
     common,
     logs,
     tags,
-    dict
+    dict,
+    menu,
+    thirdTitle,
+    bzdzxq
   },
   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 {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 axios from 'axios';
 
 function addPath(ele, first) {
   const menu = website.menu;
@@ -34,21 +34,37 @@ function addPath(ele, first) {
 
 const user = {
   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: [],
     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: {
     //根据用户名登录
-    LoginByUsername({commit}, userInfo) {
+    LoginByUsername({ commit }, userInfo) {
       return new Promise((resolve, reject) => {
-        loginByUsername(userInfo.tenantId, userInfo.deptId, userInfo.roleId, userInfo.username, md5(userInfo.password), userInfo.type, userInfo.key, userInfo.code).then(res => {
+        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;
           if (data.error_description) {
             Message({
@@ -67,10 +83,29 @@ const user = {
         }).catch(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) => {
         loginByUsername(userInfo.phone, userInfo.code).then(res => {
           const data = res.data.data;
@@ -82,7 +117,7 @@ const user = {
       })
     },
     //根据第三方信息登录
-    LoginBySocial({commit}, userInfo) {
+    LoginBySocial({ commit }, userInfo) {
       return new Promise((resolve) => {
         loginBySocial(userInfo.tenantId, userInfo.source, userInfo.code, userInfo.state).then(res => {
           const data = res.data;
@@ -104,7 +139,7 @@ const user = {
       })
     },
     //根据单点信息登录
-    LoginBySso({commit}, userInfo) {
+    LoginBySso({ commit }, userInfo) {
       return new Promise((resolve) => {
         loginBySso(userInfo.state, userInfo.code).then(res => {
           const data = res.data;
@@ -155,7 +190,7 @@ const user = {
       });
     },
     //获取用户信息
-    GetUserInfo({commit}) {
+    GetUserInfo({ commit }) {
       return new Promise((resolve, reject) => {
         getUserInfo().then((res) => {
           const data = res.data.data;
@@ -167,7 +202,7 @@ const user = {
       })
     },
     //刷新token
-    refreshToken({state, commit}, userInfo) {
+    refreshToken({ state, commit }, userInfo) {
       window.console.log('handle refresh token');
       return new Promise((resolve, reject) => {
         refreshToken(state.refreshToken, state.tenantId,
@@ -185,7 +220,7 @@ const user = {
       })
     },
     // 登出
-    LogOut({commit}) {
+    LogOut({ commit }) {
       return new Promise((resolve, reject) => {
         logout().then(() => {
           commit('SET_TOKEN', '');
@@ -204,7 +239,7 @@ const user = {
       })
     },
     //注销session
-    FedLogOut({commit}) {
+    FedLogOut({ commit }) {
       return new Promise(resolve => {
         commit('SET_TOKEN', '');
         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 => {
-        getRoutes(topMenuId).then((res) => {
-          const data = res.data.data
+        getRoutes(topMenuId == 'police' ? '' : topMenuId).then((res) => {
+          const data = res.data.data;
           let menu = deepClone(data);
           menu.forEach(ele => {
+            if (ele.path.substr(0, 1) == '/') {
+              ele.path = ele.path.substr(1);
+            }
             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');
-          resolve(menu)
-        })
-      })
+          resolve(menu);
+        });
+      });
     },
     //获取系统按钮
-    GetButtons({commit}) {
+    GetButtons({ commit }) {
       return new Promise((resolve) => {
         getButtons().then(res => {
           const data = res.data.data;
@@ -258,7 +314,7 @@ const user = {
     SET_TOKEN: (state, token) => {
       setToken(token);
       state.token = token;
-      setStore({name: 'token', content: state.token})
+      setStore({ name: 'token', content: state.token })
     },
     SET_MENU_ID(state, menuId) {
       state.menuId = menuId;
@@ -284,18 +340,18 @@ const user = {
     SET_REFRESH_TOKEN: (state, refreshToken) => {
       setRefreshToken(refreshToken)
       state.refreshToken = refreshToken;
-      setStore({name: 'refreshToken', content: state.refreshToken})
+      setStore({ name: 'refreshToken', content: state.refreshToken })
     },
     SET_TENANT_ID: (state, tenantId) => {
       state.tenantId = tenantId;
-      setStore({name: 'tenantId', content: state.tenantId})
+      setStore({ name: 'tenantId', content: state.tenantId })
     },
     SET_USER_INFO: (state, userInfo) => {
       if (validatenull(userInfo.avatar)) {
         userInfo.avatar = "/img/bg/img-logo.png";
       }
       state.userInfo = userInfo;
-      setStore({name: 'userInfo', content: state.userInfo})
+      setStore({ name: 'userInfo', content: state.userInfo })
     },
     SET_ROLES: (state, roles) => {
       state.roles = roles;
@@ -322,7 +378,7 @@ const user = {
       result.forEach(ele => {
         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 './newavue.scss';
+
 a{
   text-decoration: none;
   color:#333;
 }
 *{
   outline: none;
+  font-family: PingFangSC, PingFang SC;
 }
 //滚动条样式
 @include scrollBar;

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

@@ -21,7 +21,7 @@
 }
 
 .el-menu--display,
-.el-menu--display + .el-submenu__icon-arrow {
+.el-menu--display+.el-submenu__icon-arrow {
   display: none;
 }
 
@@ -49,12 +49,20 @@
   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;
 }
 
 
-.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;
 }
 
@@ -69,3 +77,175 @@
 .el-divider--horizontal {
   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%;
   height: 100%;
   margin: 0 auto;
-  background-image: url("/img/bg/bg.jpg");
+  background-image: url("/img/bg/bj.png");
   background-size: 100% 100%;
 }
 
 .login-weaper {
   margin: 0 auto;
-  width: 1000px;
+  width:400px;
   box-shadow: -4px 5px 10px rgba(0, 0, 0, 0.4);
 
   .el-input-group__append {
@@ -69,7 +69,7 @@
   border-bottom-right-radius: 5px;
   color: #fff;
   background-color: #fff;
-  width: 50%;
+  width: 100%;
   float: left;
   box-sizing: border-box;
 }
@@ -110,29 +110,14 @@
 }
 
 .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;
-  border: 1px solid #EF2F63FF;
-  background: none;
+  border: 1px solid red;
+  background-color: rgb(233, 56, 56);
   font-size: 18px;
   letter-spacing: 2px;
   font-weight: 300;
-  color: #EF2F63FF;
+  color: white;
   cursor: pointer;
   margin-top: 30px;
   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{
     font-weight: 400;
     color:#fff;
+    font-size: 15px
   }
   .logo_title,
   .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