diff --git a/package.json b/package.json
index b16be80..cba1887 100644
--- a/package.json
+++ b/package.json
@@ -9,6 +9,7 @@
     "lint": "vue-cli-service lint"
   },
   "dependencies": {
+    "@amap/amap-jsapi-loader": "^1.0.1",
     "ant-design-vue": "^1.7.8",
     "axios": "^0.21.1",
     "core-js": "^2.6.9",
diff --git a/src/api/datav.js b/src/api/datav.js
new file mode 100644
index 0000000..bb6dde4
--- /dev/null
+++ b/src/api/datav.js
@@ -0,0 +1,9 @@
+import $http from '../assets/js/http'
+
+export function positioningList(department_code) {
+    return $http.post('project/project/positioning_list', {department_code: department_code});
+}
+
+export function positioningMember(data) {
+    return $http.post('project/project/positioning_member', data);
+}
diff --git a/src/main.js b/src/main.js
index e288618..1cea468 100644
--- a/src/main.js
+++ b/src/main.js
@@ -67,6 +67,10 @@ Vue.directive('disable-click', {
     },
   });
 
+  window._AMapSecurityConfig = {
+    securityJsCode:'e8b6cb44e8e431d68052c8e10db99264',
+}
+
 Vue.config.productionTip = false;
 Vue.use(Antd);
 Vue.component('WrapperContent', WrapperContent);
diff --git a/src/store/modules/menu.js b/src/store/modules/menu.js
index e077586..eaf84f0 100644
--- a/src/store/modules/menu.js
+++ b/src/store/modules/menu.js
@@ -15,8 +15,11 @@ const common = {
         }
     },
     actions: {
-        GET_MENU({commit}) {
+        GET_MENU({commit}, data) {
             return getMenuForUser().then(res => {
+                if(data!=1) res.data = res.data.filter((item) => {
+                    return item.id==120 || item.id==121
+                })
                 setStore('menu', res.data);
                 commit('SET_MENU', res.data);
             });
diff --git a/src/views/datav/index.vue b/src/views/datav/index.vue
new file mode 100644
index 0000000..b30daae
--- /dev/null
+++ b/src/views/datav/index.vue
@@ -0,0 +1,210 @@
+<template>
+  <div class="datav-index">
+    <div id="container" style="width: 100vw"></div>
+    <div class="btn-box">
+      <a-dropdown :trigger="['click']">
+        <template #overlay>
+          <a-menu @click="handleMenuClick" style="width: 160px">
+            <a-menu-item :key="index" v-for="(item, index) in member_list">
+              <div class="menu-item-d">
+                <a-avatar :src="item.avatar" icon="user" size="small" />
+                <a class="muted name">{{ item.name }}</a>
+              </div>
+            </a-menu-item>
+          </a-menu>
+        </template>
+        <a-button style="min-width: 100px">
+          <div class="menu-item-d">
+            <a-avatar :src="now_user.avatar" icon="user" size="small" />
+            <a class="muted name">{{ now_user.name }}</a>
+          </div>
+        </a-button>
+      </a-dropdown>
+      <a-date-picker
+        v-model="now_date"
+        format="MM月DD日"
+        :allowClear="false"
+        @change="changeTime"
+      />
+    </div>
+  </div>
+</template>
+
+<script>
+import _ from "lodash";
+import AMapLoader from "@amap/amap-jsapi-loader";
+import { positioningList, positioningMember } from "@/api/datav";
+import {
+  del,
+  forbid,
+  list as getMembers,
+  resume,
+  liaisonMan,
+} from "../../api/user";
+
+export default {
+  name: "datav",
+  data() {
+    return {
+      map: null,
+      Amap: null,
+      visibleTaskCopied: false,
+      now_date: "",
+      now_user: {
+        member_code: "",
+        avatar: "",
+        name: "全部",
+      },
+      member_list: [],
+    };
+  },
+  created() {
+    this.now_date = "";
+    this.getMembers();
+  },
+  mounted() {
+    this.initMap();
+  },
+  methods: {
+    getMembers() {
+      getMembers().then((res) => {
+        this.member_list = res.data.list;
+      });
+    },
+    formatDate(date) {
+      const year = date.getFullYear();
+      const month = (date.getMonth() + 1).toString().padStart(2, "0");
+      const day = date.getDate().toString().padStart(2, "0");
+
+      return `${year}-${month}-${day}`;
+    },
+    initMap() {
+      AMapLoader.load({
+        key: "4f8f55618010007147aab96fc72bb408", // 申请好的Web端开发者Key,首次调用 load 时必填
+        version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
+        plugins: ["AMap.Geocoder"], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
+        Loca: {
+          version: "2.0.0",
+        },
+      })
+        .then((AMap) => {
+          this.map = new AMap.Map("container", {
+            // 设置地图容器id
+            viewMode: "3D", // 是否为3D地图模式
+            zoom: 15, // 初始化地图级别
+            center: [105.433211, 28.913861], // 初始化地图中心点位置
+            mapStyle: "amap://styles/darkblue",
+          });
+
+          this.initMaker();
+        })
+        .catch((e) => {
+          console.log(e);
+        });
+    },
+    handleMenuClick(e) {
+      this.now_user = this.member_list[e.key];
+      this.initList();
+    },
+    changeTime(e) {
+      console.log(this.now_date);
+      this.initList();
+    },
+    initMaker() {
+      positioningList().then((res) => {
+        // 添加标记点
+        res.data.forEach((item) => {
+          if (item.positioning) {
+            new AMap.Marker({
+              position: item.positioning.split(","),
+              map: this.map,
+              content: `
+                              <div class="marker-d">
+                                  <img src="${
+                                    item.avatar ||
+                                    "https://lihai001.oss-cn-chengdu.aliyuncs.com/def/f7d49202401111649248163.png"
+                                  }" />
+                                  <div class="text">
+                                      <div>${item.name}</div>
+                                      <div>更新时间:${item.date}</div>
+                                      <div>停留时间:${item.date}</div>
+                                  </div>
+                              </div>
+                              `,
+              offset: new AMap.Pixel(-20, -20),
+            });
+          }
+        });
+      });
+    },
+    initList() {
+      if(!this.now_user.member_code||!this.now_date) return;
+      positioningMember({
+        code: this.now_user.member_code,
+        date: this.formatDate(new Date(this.now_date||Date.now())),
+      }).then((res) => {
+        let path = res.data.map((item) => {
+          return item.split(",");
+        })||[];
+
+        if(path.length==0)return;
+
+        // 绘制轨迹
+        let polyline = new AMap.Polyline({
+          path: path,
+          strokeColor: "#52c41a",
+          strokeWeight: 5,
+          strokeOpacity: 1,
+          strokeStyle: "solid",
+          zIndex: 50,
+        });
+        polyline.setMap(this.map);
+      });
+    },
+  },
+};
+</script>
+
+<style lang="less">
+.datav-index {
+  position: relative;
+}
+.marker-d {
+  width: 260px;
+  img {
+    height: 40px;
+    width: 40px;
+    border-radius: 50%;
+    border: 2px solid yellow;
+  }
+  .text {
+    background: rgba(#0c3e6d, 0.6);
+    padding: 10px;
+    margin-top: 10px;
+    div {
+      color: white; /* 设置文字颜色为白色 */
+      // text-shadow: 1px 1px 2px yellow; /* 设置文字的外阴影为黄色,水平偏移量为2px,垂直偏移量为2px */
+      align-items: center;
+    }
+  }
+}
+.p-box {
+  position: relative;
+}
+.btn-box {
+  position: absolute;
+  top: 20px;
+  left: 30px;
+  height: 60px;
+  display: flex;
+  align-items: center;
+}
+#container {
+  height: calc(100vh - 66px);
+}
+.menu-item-d {
+  .name {
+    margin-left: 6px;
+  }
+}
+</style>
diff --git a/src/views/index.vue b/src/views/index.vue
index 7d97050..7aabf7a 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -326,9 +326,9 @@
             },
             menuModelClick(event) {
                 //点击顶部导航跳转页面
+                console.log(event);
                 let that = this;
                 that.menu.forEach(function (v, k) {
-                    console.log(v);
                     if (v.id == event.key) {
                         that.menus = v.children;
                         let turnPath = '/';
diff --git a/src/views/member/login.vue b/src/views/member/login.vue
index 4a425f1..acaeb24 100644
--- a/src/views/member/login.vue
+++ b/src/views/member/login.vue
@@ -383,7 +383,7 @@
                     }
                     console.log(currentOrganization);
                     await app.$store.dispatch('setCurrentOrganization', currentOrganization);
-                    await app.$store.dispatch('GET_MENU').then(() => {
+                    await app.$store.dispatch('GET_MENU', obj.userInfo.authorize).then(() => {
                         app.loginSuccess(res, currentOrganization);
                     });
                 } else {
diff --git a/yarn.lock b/yarn.lock
index f3e2862..ac44d99 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,11 @@
 # yarn lockfile v1
 
 
+"@amap/amap-jsapi-loader@^1.0.1":
+  version "1.0.1"
+  resolved "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz#9ec4b4d5d2467eac451f6c852e35db69e9f9f0c0"
+  integrity sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==
+
 "@ampproject/remapping@^2.2.0":
   version "2.2.1"
   resolved "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630"