yin_yu820 2 years ago
parent
commit
ce75c0a5f8

BIN
dist.zip


+ 138 - 10
package-lock.json

@@ -8,17 +8,21 @@
       "name": "hs_mzapp",
       "version": "0.1.0",
       "dependencies": {
+        "axios": "^1.3.4",
         "core-js": "^3.8.3",
         "normalize.css": "^8.0.1",
         "vant": "^4.1.0",
         "vue": "^3.2.13",
-        "vue-router": "^4.0.3"
+        "vue-router": "^4.0.3",
+        "vuex": "^4.0.2"
       },
       "devDependencies": {
         "@vue/cli-plugin-babel": "~5.0.0",
         "@vue/cli-plugin-router": "~5.0.0",
         "@vue/cli-service": "~5.0.0",
-        "babel-plugin-import": "^1.13.6"
+        "babel-plugin-import": "^1.13.6",
+        "postcss": "^8.4.21",
+        "postcss-pxtorem": "^6.0.0"
       }
     },
     "node_modules/@achrinza/node-ipc": {
@@ -3301,6 +3305,11 @@
         "lodash": "^4.17.14"
       }
     },
+    "node_modules/asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+    },
     "node_modules/at-least-node": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
@@ -3343,6 +3352,16 @@
         "postcss": "^8.1.0"
       }
     },
+    "node_modules/axios": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
+      "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
+      "dependencies": {
+        "follow-redirects": "^1.15.0",
+        "form-data": "^4.0.0",
+        "proxy-from-env": "^1.1.0"
+      }
+    },
     "node_modules/babel-loader": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz",
@@ -4000,6 +4019,17 @@
       "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
       "dev": true
     },
+    "node_modules/combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "dependencies": {
+        "delayed-stream": "~1.0.0"
+      },
+      "engines": {
+        "node": ">= 0.8"
+      }
+    },
     "node_modules/commander": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
@@ -4748,6 +4778,14 @@
         "url": "https://github.com/sponsors/ljharb"
       }
     },
+    "node_modules/delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
+      "engines": {
+        "node": ">=0.4.0"
+      }
+    },
     "node_modules/depd": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -5345,7 +5383,6 @@
       "version": "1.15.2",
       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
       "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
-      "dev": true,
       "funding": [
         {
           "type": "individual",
@@ -5361,6 +5398,19 @@
         }
       }
     },
+    "node_modules/form-data": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+      "dependencies": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
+      },
+      "engines": {
+        "node": ">= 6"
+      }
+    },
     "node_modules/forwarded": {
       "version": "0.2.0",
       "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
@@ -6729,7 +6779,6 @@
       "version": "1.52.0",
       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
       "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "dev": true,
       "engines": {
         "node": ">= 0.6"
       }
@@ -6738,7 +6787,6 @@
       "version": "2.1.35",
       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
       "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "dev": true,
       "dependencies": {
         "mime-db": "1.52.0"
       },
@@ -8019,6 +8067,15 @@
         "postcss": "^8.2.15"
       }
     },
+    "node_modules/postcss-pxtorem": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-pxtorem/-/postcss-pxtorem-6.0.0.tgz",
+      "integrity": "sha512-ZRXrD7MLLjLk2RNGV6UA4f5Y7gy+a/j1EqjAfp9NdcNYVjUMvg5HTYduTjSkKBkRkfqbg/iKrjMO70V4g1LZeg==",
+      "dev": true,
+      "peerDependencies": {
+        "postcss": "^8.0.0"
+      }
+    },
     "node_modules/postcss-reduce-initial": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz",
@@ -8171,6 +8228,11 @@
         "node": ">= 0.10"
       }
     },
+    "node_modules/proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
     "node_modules/pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
@@ -9684,6 +9746,17 @@
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
       "dev": true
     },
+    "node_modules/vuex": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz",
+      "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==",
+      "dependencies": {
+        "@vue/devtools-api": "^6.0.0-beta.11"
+      },
+      "peerDependencies": {
+        "vue": "^3.0.2"
+      }
+    },
     "node_modules/watchpack": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
@@ -12818,6 +12891,11 @@
         "lodash": "^4.17.14"
       }
     },
+    "asynckit": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+      "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
+    },
     "at-least-node": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
@@ -12838,6 +12916,16 @@
         "postcss-value-parser": "^4.2.0"
       }
     },
+    "axios": {
+      "version": "1.3.4",
+      "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz",
+      "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==",
+      "requires": {
+        "follow-redirects": "^1.15.0",
+        "form-data": "^4.0.0",
+        "proxy-from-env": "^1.1.0"
+      }
+    },
     "babel-loader": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz",
@@ -13327,6 +13415,14 @@
       "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==",
       "dev": true
     },
+    "combined-stream": {
+      "version": "1.0.8",
+      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
+      "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
+      "requires": {
+        "delayed-stream": "~1.0.0"
+      }
+    },
     "commander": {
       "version": "8.3.0",
       "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
@@ -13859,6 +13955,11 @@
         "object-keys": "^1.1.1"
       }
     },
+    "delayed-stream": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+      "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
+    },
     "depd": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -14351,8 +14452,17 @@
     "follow-redirects": {
       "version": "1.15.2",
       "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
-      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
-      "dev": true
+      "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA=="
+    },
+    "form-data": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz",
+      "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==",
+      "requires": {
+        "asynckit": "^0.4.0",
+        "combined-stream": "^1.0.8",
+        "mime-types": "^2.1.12"
+      }
     },
     "forwarded": {
       "version": "0.2.0",
@@ -15380,14 +15490,12 @@
     "mime-db": {
       "version": "1.52.0",
       "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
-      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
-      "dev": true
+      "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="
     },
     "mime-types": {
       "version": "2.1.35",
       "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
       "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
-      "dev": true,
       "requires": {
         "mime-db": "1.52.0"
       }
@@ -16287,6 +16395,13 @@
         "postcss-value-parser": "^4.2.0"
       }
     },
+    "postcss-pxtorem": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmjs.org/postcss-pxtorem/-/postcss-pxtorem-6.0.0.tgz",
+      "integrity": "sha512-ZRXrD7MLLjLk2RNGV6UA4f5Y7gy+a/j1EqjAfp9NdcNYVjUMvg5HTYduTjSkKBkRkfqbg/iKrjMO70V4g1LZeg==",
+      "dev": true,
+      "requires": {}
+    },
     "postcss-reduce-initial": {
       "version": "5.1.2",
       "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz",
@@ -16393,6 +16508,11 @@
         }
       }
     },
+    "proxy-from-env": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
+      "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
+    },
     "pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
@@ -17536,6 +17656,14 @@
       "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
       "dev": true
     },
+    "vuex": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.0.2.tgz",
+      "integrity": "sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==",
+      "requires": {
+        "@vue/devtools-api": "^6.0.0-beta.11"
+      }
+    },
     "watchpack": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",

+ 6 - 2
package.json

@@ -7,16 +7,20 @@
     "build": "vue-cli-service build"
   },
   "dependencies": {
+    "axios": "^1.3.4",
     "core-js": "^3.8.3",
     "normalize.css": "^8.0.1",
     "vant": "^4.1.0",
     "vue": "^3.2.13",
-    "vue-router": "^4.0.3"
+    "vue-router": "^4.0.3",
+    "vuex": "^4.0.2"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "~5.0.0",
     "@vue/cli-plugin-router": "~5.0.0",
     "@vue/cli-service": "~5.0.0",
-    "babel-plugin-import": "^1.13.6"
+    "babel-plugin-import": "^1.13.6",
+    "postcss": "^8.4.21",
+    "postcss-pxtorem": "^6.0.0"
   }
 }

+ 8 - 0
postcss.config.js

@@ -0,0 +1,8 @@
+module.exports = {
+  plugins: {
+    'postcss-pxtorem': {
+      rootValue: 18.75,
+      propList: ['*'],
+    },
+  },
+};

+ 4 - 1
public/index.html

@@ -4,8 +4,11 @@
     <meta charset="utf-8">
     <meta http-equiv="X-UA-Compatible" content="IE=edge">
     <meta name="viewport" content="width=device-width,initial-scale=1.0">
-    <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <link rel="icon" href="<%= BASE_URL %>favicon.ico">	  
     <title><%= htmlWebpackPlugin.options.title %></title>
+
+    <!--小程序SDK 只有在小程序容器中才能加载到 -->
+	  <!-- <script src="shinemosdk://20000/index.js"></script> -->
   </head>
   <body>
     <noscript>

BIN
public/loginbg/logo.png


+ 17 - 3
src/App.vue

@@ -1,9 +1,23 @@
 <template>
-	<div>民宗APP</div>
+	<router-view></router-view>
+	<van-tabbar v-model="active" route >
+        <van-tabbar-item replace to="/toBeDone" name="toBeDone" icon="notes-o">我的待办</van-tabbar-item>
+        <van-tabbar-item replace to="/siteMan" name="siteMan" icon="shop-o">场所管理</van-tabbar-item>
+        <van-tabbar-item replace to="/activityMan" name="activityMan" icon="newspaper-o">活动管理</van-tabbar-item>
+        <van-tabbar-item replace to="/setting" name="setting" icon="friends-o">个人中心</van-tabbar-item>
+    </van-tabbar>
 </template>
 
+<script>
+import { useStore } from 'vuex';
+export default{
+	setup(){
+		const store=useStore();
+		console.log(store.state.user);
+	},
+};
+</script>
+
 <style>
 	@import '~normalize.css';
-
-
 </style>

+ 15 - 0
src/api/userService.js

@@ -0,0 +1,15 @@
+// import request from "../utils/httpRequest.js"
+
+// export const login = (data)=>{
+// 	return request({
+// 		method:"POST",
+// 		url:"/sys/login",
+// 		data,
+// 	});
+// };
+  
+
+import {get,post} from "../utils/request"
+
+
+export const login = p => post('/sys/login', p);

+ 8 - 5
src/main.js

@@ -1,7 +1,10 @@
-import { createApp } from 'vue'
-import App from './App.vue'
-import router from './router'
-import { Button } from 'vant';
+import { createApp } from 'vue';
+import App from './App.vue';
+import router from './router';
+import './styles/index.css';
+
+import { NavBar,Button,Form, Field, CellGroup,Tabbar, TabbarItem,Icon,Toast} from 'vant';
 import 'vant/lib/index.css';
+import store from './store';
 
-createApp(App).use(router).use(Button).mount('#app')
+createApp(App).use(router).use(NavBar).use(Button).use(Form).use(Field).use(CellGroup).use(store).use(TabbarItem).use(Tabbar).use(Icon).use(Toast).mount('#app')

+ 31 - 6
src/router/index.js

@@ -5,21 +5,46 @@ const routes = [
   {
     path: '/',
     name: 'home',
-    component: HomeView
+    component: () => import('../views/login/login.vue')
+  },{
+    path: '/login',
+    name: 'login',
+    component: () => import('../views/login/login.vue')
+  },{
+    path: '/forget',
+    name: 'forget',
+    component: () => import('../views/login/forget.vue')
+  },{
+    path: '/tab_a',
+    name: 'tab_a',
+    component: () => import('../views/tab_a/tab_a.vue')
+  },{
+    path: '/toBeDone',
+    name: 'toBeDone',
+    component: () => import('../views/toBeDone/toBeDone.vue')
+  },{
+    path: '/siteMan',
+    name: 'siteMan',
+    component: () => import('../views/siteMan/siteMan.vue')
+  },{
+    path: '/activityMan',
+    name: 'activityMan',
+    component: () => import('../views/activityMan/activityMan.vue')
+  },{
+    path: '/setting',
+    name: 'setting',
+    component: () => import('../views/setting/setting.vue')
   },
   {
     path: '/about',
     name: 'about',
-    // route level code-splitting
-    // this generates a separate chunk (about.[hash].js) for this route
-    // which is lazy-loaded when the route is visited.
-    component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')
+    component: () => import('../views/AboutView.vue')
   }
 ]
 
 const router = createRouter({
   history: createWebHashHistory(),
-  routes
+  routes,
 })
 
 export default router

+ 14 - 0
src/store/index.js

@@ -0,0 +1,14 @@
+import { createStore } from "vuex";
+const TOKEN_Key="MZ_USER";
+const store =createStore({
+    state:{
+        user:JSON.parse(window.localStorage.getItem(TOKEN_Key)),
+    },
+    mutations:{
+        setUser(state,data){
+            state.user=data;
+            window.localStorage.setItem(TOKEN_Key,JSON.stringify(state.user));
+        },
+    },
+});
+export default store;

+ 17 - 0
src/styles/index.css

@@ -0,0 +1,17 @@
+.d1{
+	display: flex;
+	width: 100%;	
+	justify-content: center;
+}
+.logo{		
+	width: 20%;
+	padding-top: 90px;
+	margin-bottom: 80px;
+}
+.changetype{		
+	color: #00aaff;
+	font-size: 3px;
+	padding-top: 30px;
+	padding-left: 30px;
+	padding-bottom: 10px;
+}

+ 102 - 0
src/utils/auth.js

@@ -0,0 +1,102 @@
+import store from "../store/index"
+
+const tokenKey = 'token'
+const refreshTokenKey = 'refreshToken'
+const usernameKey = 'WMS-username'
+const userInfoKey = 'WMS-userinfo'
+const permissionsKey = 'WMS-permission'
+
+
+// 获取token值
+function getUserToken(){
+	console.log(store);
+	return store.state.user;
+}
+
+function setUserToken(token){
+	uni.setStorageSync(tokenKey,token);
+}
+
+function removeUserToken(){
+	uni.removeStorageSync(tokenKey);
+}
+
+// 获取refresh token值
+function getRefreshToken(){
+	return uni.getStorageSync(refreshTokenKey);
+}
+
+function setRefreshToken(token){
+	uni.setStorageSync(refreshTokenKey,token);
+}
+
+function removeRefreshToken(){
+	uni.removeStorageSync(refreshTokenKey);
+}
+
+// 获取用户名
+function getUsername(){
+	return uni.getStorageSync(usernameKey);
+}
+
+function setUsername(username){
+	uni.setStorageSync(usernameKey,username);
+}
+
+function removeUsername(){
+	uni.removeStorageSync(usernameKey);
+}
+
+// 获取用户信息
+function getUserInfo(){
+	return uni.getStorageSync(userInfoKey);
+}
+
+function setUserInfo(userinfo){
+	uni.setStorageSync(userInfoKey,userinfo);
+}
+
+function removeUserInfo(){
+	uni.removeStorageSync(userInfoKey);
+}
+
+// 获取用户权限
+function getPermissions(){
+	return uni.getStorageSync(permissionsKey);
+}
+
+function setPermissions(permissions){
+	uni.setStorageSync(permissionsKey,permissions);
+}
+
+function removePermissions(){
+	uni.removeStorageSync(permissionsKey);
+}
+function hasPermission (key) {
+  return uni.getStorageSync(permissionsKey).indexOf(key) !== -1 || false
+}
+
+
+
+export {
+	getUserToken,
+	setUserToken,
+	removeUserToken,
+	
+	getRefreshToken,
+	setRefreshToken,
+	removeRefreshToken,
+	
+	getUsername,
+	setUsername,
+	removeUsername,
+	
+	getUserInfo,
+	setUserInfo,
+	removeUserInfo,
+	
+	getPermissions,
+	setPermissions,
+	removePermissions,
+	hasPermission
+}

+ 13 - 0
src/utils/config.js

@@ -0,0 +1,13 @@
+let APP_SERVER_URL = ""
+
+if(process.env.NODE_ENV === 'development'){
+    // 开发环境
+    APP_SERVER_URL = 'http://localhost:8084'
+}else{
+    // 生产环境
+    APP_SERVER_URL = 'http://123.57.226.179:8010/hs'
+}
+
+// APP_SERVER_URL = APP_SERVER_URL + "/app"
+
+export default APP_SERVER_URL

+ 11 - 0
src/utils/httpRequest.js

@@ -0,0 +1,11 @@
+import Vue from 'vue'
+import axios from 'axios'
+import BASE_URL from './config.js'
+
+const request=axios.create({
+	baseURL:BASE_URL,
+	//请求拦截器
+	//响应拦截器
+});
+
+export default request;

+ 154 - 0
src/utils/request.js

@@ -0,0 +1,154 @@
+/**axios封装
+ * 请求拦截、相应拦截、错误统一处理
+ */
+import BASE_URL from './config.js';
+import axios from 'axios';
+import QS from 'qs';
+import { Toast } from 'vant';
+import store from '../store/index';
+import * as $auth from "./auth"
+ 
+// // 环境的切换
+// if (process.env.NODE_ENV == 'development') {    
+//     axios.defaults.baseURL = '/api';
+// } else if (process.env.NODE_ENV == 'debug') {    
+//     axios.defaults.baseURL = '';
+// } else if (process.env.NODE_ENV == 'production') {    
+//     axios.defaults.baseURL = 'http://api.123dailu.com/';
+// }
+axios.defaults.baseURL =BASE_URL;
+ 
+// 请求超时时间
+axios.defaults.timeout = 10000;
+ 
+// post请求头
+//axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
+axios.defaults.headers.post['Content-Type'] = 'application/json; charset=utf-8';
+ 
+// 请求拦截器
+axios.interceptors.request.use(    
+    config => {
+        // 每次发送请求之前判断是否存在token,如果存在,则统一在http请求的header都加上token,不用每次请求都手动添加了
+        // 即使本地存在token,也有可能token是过期的,所以在响应拦截器中要对返回状态进行判断
+        const token = store.state.token;        
+        token && (config.headers.Authorization = token);        
+        return config;    
+    },    
+    error => {        
+        return Promise.error(error);    
+    })
+ 
+// 响应拦截器
+axios.interceptors.response.use(    
+    response => {        
+		//原来是status,现改成statusCode
+        if (response.statusCode === 200) {            
+            return Promise.resolve(response);        
+        } else {            
+            return Promise.reject(response);        
+        }    
+    },
+    // 服务器状态码不是200的情况    
+    error => {        
+        if (error.response.statusCode) {            
+            switch (error.response.statusCode) {                
+                // 401: 未登录                
+                // 未登录则跳转登录页面,并携带当前页面的路径                
+                // 在登录成功后返回当前页面,这一步需要在登录页操作。                
+                case 401:                    
+                    router.replace({                        
+                        path: '/login',                        
+                        query: { redirect: router.currentRoute.fullPath } 
+                    });
+                    break;
+                // 403 token过期                
+                // 登录过期对用户进行提示                
+                // 清除本地token和清空vuex中token对象                
+                // 跳转登录页面                
+                case 408:                     
+                    Toast({                        
+                        message: '登录过期,请重新登录',                        
+                        duration: 1000,                        
+                        forbidClick: true                    
+                    });                    
+                    // 清除token                    
+                    localStorage.removeItem('token');                    
+                    store.commit('loginSuccess', null);                    
+                    // 跳转登录页面,并将要浏览的页面fullPath传过去,登录成功后跳转需要访问的页面
+                    setTimeout(() => {                        
+                        router.replace({                            
+                            path: '/login',                            
+                            query: { 
+                                redirect: router.currentRoute.fullPath 
+                            }                        
+                        });                    
+                    }, 1000);                    
+                    break; 
+                // 404请求不存在                
+                case 404:                    
+                    Toast({                        
+                        message: '路径找不到',                        
+                        duration: 1500,                        
+                        forbidClick: true                    
+                    });                    
+                break;   
+				case 503:                    
+                    Toast({                        
+                        message: '服务不可用',                        
+                        duration: 1500,                        
+                        forbidClick: true                    
+                    });                    
+                break;  
+				case 504:                    
+                    Toast({                        
+                        message: '网络连接错误',                        
+                        duration: 1500,                        
+                        forbidClick: true                    
+                    });                    
+                break;             
+                // 其他错误,直接抛出错误提示                
+                default:                    
+                    Toast({                        
+                        message: error.response.data.message,                        
+                        duration: 1500,                        
+                        forbidClick: true                    
+                    });            
+            }            
+            return Promise.reject(error.response);        
+        }       
+    }
+);
+/** 
+ * get方法,对应get请求 
+ * @param {String} url [请求的url地址] 
+ * @param {Object} params [请求时携带的参数] 
+ */
+export function get(url, params){    
+    return new Promise((resolve, reject) =>{        
+        axios.get(url, {            
+            params: params        
+        })        
+        .then(res => {            
+            resolve(res.data);        
+        })        
+        .catch(err => {            
+            reject(err.data)        
+        })    
+    });
+}
+/** 
+ * post方法,对应post请求 
+ * @param {String} url [请求的url地址] 
+ * @param {Object} params [请求时携带的参数] 
+ */
+export function post(url, params) {    
+    return new Promise((resolve, reject) => {         
+        axios.post(url, QS.stringify(params))        
+        .then(res => {            
+            resolve(res.data);        
+        })        
+        .catch(err => {            
+            reject(err.data)        
+        })    
+    });
+}

+ 6 - 0
src/views/activityMan/activityMan.vue

@@ -0,0 +1,6 @@
+<template>
+    <div class="about">
+      <h1>activityMan</h1>
+    </div>
+  </template>
+  

+ 80 - 0
src/views/login/forget.vue

@@ -0,0 +1,80 @@
+<template>
+	<van-nav-bar
+	  title="忘记密码"
+	  left-text="返回"
+	  left-arrow
+	  @click-left="onClickLeft"
+	/>
+	
+	<van-form @submit="onSubmit">
+	  <van-cell-group inset>
+	    <van-field
+	      v-model="username"
+	      name="手机号码"
+	      label="手机号码"
+	      placeholder="手机号码"
+	      :rules="[{ required: true, message: '请填写手机号码' }]"
+	    />
+		<van-field 
+		    v-model="sms"
+		    center
+		    clearable
+		    label="短信验证码"
+		    placeholder="请输入短信验证码"
+		  >
+		    <template #button>
+		      <van-button size="small" type="primary">发送验证码</van-button>
+		    </template>
+		</van-field>
+		
+	    <van-field
+	      v-model="password"
+	      type="password"
+	      name="新密码"
+	      label="新密码"
+	      placeholder="新密码"
+	      :rules="[{ required: true, message: '请填写新密码' }]"
+	    />
+		<van-field
+		  v-model="password2"
+		  type="password"
+		  name="确认密码"
+		  label="确认密码"
+		  placeholder="确认新密码"
+		  :rules="[{ required: true, message: '请确认新密码' }]"
+		/>
+	  </van-cell-group>
+	  <div style="margin: 16px;">
+	    <van-button round block type="primary" native-type="submit" @click="save">
+	      提交
+	    </van-button>
+	  </div>
+	</van-form>
+	
+</template>
+
+<script>
+	export default {
+		data() {
+			return{
+				username:"",
+				sms:"",
+				password:"",
+				password2:"",
+			}			
+		},
+		methods:{
+			onClickLeft(){
+				history.back();
+			},
+			save(){
+				console.log("修改密码:"+this.username+"++"+this.sms+"++"+this.password+"++"+this.password2);
+			},
+		},
+	 
+	};
+</script>
+
+<style>
+	
+</style>

+ 103 - 0
src/views/login/login.vue

@@ -0,0 +1,103 @@
+<template>	
+	<div class="d1" >
+		<img class="logo" src="../../../public/loginbg/logo.png"/>
+	</div>
+	
+	<van-form style="margintop:20px ;">
+	  <van-cell-group>
+	    <van-field v-if="type==1"
+	      v-model="userName"
+	      label="用户名"
+	      placeholder="用户名"
+	      :rules="[{ required: true, message: '请填写用户名' }]"
+	    />
+	    <van-field v-if="type==1"
+	      v-model="userPwd"
+	      type="password"
+	      label="密码"
+	      placeholder="密码"
+	      :rules="[{ required: true, message: '请填写密码' }]"
+	    />
+		<van-field v-if="type==2"
+		  v-model="phone"
+		  label="手机号码"
+		  placeholder="手机号码"
+		  :rules="[{ required: true, message: '请填写手机号码' }]"
+		/>
+		<van-field v-if="type==2"
+		    v-model="sms"
+		    center
+		    clearable
+		    label="短信验证码"
+		    placeholder="请输入短信验证码"
+		  >
+		    <template #button>
+		      <van-button size="small" type="primary">发送验证码</van-button>
+		    </template>
+		</van-field>
+	  </van-cell-group>
+	  <div class="changetype" @click="changetbt"> {{changet}} </div>
+	  <div style="margin: 16px;">
+	    <van-button round block type="primary" native-type="submit" @click="save" >
+	      登录
+	    </van-button>
+	  </div>
+	</van-form>
+</template>
+
+<script>
+	import { login } from '../../api/userService';
+	import { useStore } from 'vuex';
+
+	export default {
+		
+		data () {
+		  return {
+				userName:"",				
+				userPwd:"",
+				phone:"",
+				sms:"",
+			    onSubmit:"",
+				type:1,
+				changet: '用户名密码登录',
+				t1:'用户名',
+				t2:'密码',
+				
+			}
+		},
+		methods: {
+			save(){				
+				
+				const inputForm ={
+					'username': this.userName,
+					'password': this.userPwd,
+					'code': '',
+					'uuid': ''
+				  }
+
+				 //store.commit('setUser',"asdsdasd");
+				login(inputForm).then(({data}) => {
+					this.$store.commit('setUser',data);
+			   	})
+
+				// login(inputForm).then(res => {
+				// 	this.$store.commit('setUser',res.data);
+			   	// })
+			},
+			changetbt(){
+				if(this.type==1){
+					this.type=2;
+					this.changet='手机验证码登录';
+					this.t1="手机号码";
+				}else{
+					this.type=1;
+					this.changet='用户名密码登录';
+					this.t1="用户名";
+				}
+			},
+		}
+	};
+</script>
+
+<style>
+</style>

+ 6 - 0
src/views/setting/setting.vue

@@ -0,0 +1,6 @@
+<template>
+    <div class="about">
+      <h1>setting</h1>
+    </div>
+  </template>
+  

+ 6 - 0
src/views/siteMan/siteMan.vue

@@ -0,0 +1,6 @@
+<template>
+    <div class="about">
+      <h1>siteMan</h1>
+    </div>
+  </template>
+  

+ 26 - 0
src/views/tab_a/tab_a.vue

@@ -0,0 +1,26 @@
+<template>
+    <router-view></router-view>
+    <van-tabbar v-model="active" route >
+        <van-tabbar-item replace to="/toBeDone" name="toBeDone" icon="notes-o">我的待办</van-tabbar-item>
+        <van-tabbar-item replace to="/siteMan" name="siteMan" icon="shop-o">场所管理</van-tabbar-item>
+        <van-tabbar-item replace to="/activityMan" name="activityMan" icon="newspaper-o">活动管理</van-tabbar-item>
+        <van-tabbar-item replace to="/setting" name="setting" icon="friends-o">个人中心</van-tabbar-item>
+    </van-tabbar>
+</template>
+
+<script>
+import { ref } from 'vue';
+
+export default {
+  setup() {
+    const active = ref(0);
+    const onChange = (index) => console.log(`标签 ${index}`);
+    return {
+      onChange,
+    };
+  },
+}
+</script>
+
+<style>
+</style>

+ 6 - 0
src/views/toBeDone/toBeDone.vue

@@ -0,0 +1,6 @@
+<template>
+    <div class="about">
+      <h1>toBeDone</h1>
+    </div>
+</template>
+  

+ 40 - 1
vue.config.js

@@ -1,4 +1,43 @@
 const { defineConfig } = require('@vue/cli-service')
 module.exports = defineConfig({
-  transpileDependencies: true
+  transpileDependencies: true,
+  publicPath:'./',
+  // dev:{
+  //   assetsSubDirectory: 'static',
+  //   assetsPublicPath: '/',
+  //   proxyTable: { // 配置跨域
+  //     '/api':{
+  //         target:`http://localhost:8084`, //请求后台接口
+  //         changeOrigin:true, // 允许跨域
+  //         pathRewrite:{
+  //             '^/api' : '' // 重写请求
+  //         }
+  //     }
+  //   }
+  // }
+
+
+  devServer: {
+    open: true,
+    host: 'localhost',
+    port: 8080,
+    //这里的ip和端口是前端项目的;下面为需要跨域访问后端项目
+    proxy: {
+      '/ResourcesCenter': {
+        target: 'http://localhost:8084/',//这里填入你要请求的接口的前缀
+        ws:true,//代理websocked
+        changeOrigin:true,//虚拟的站点需要更管origin
+        secure: true,                   //是否https接口
+        pathRewrite:{
+          '^/ResourcesCenter':''//重写路径
+        },
+        headers: {
+          referer: 'http://localhost:8084/', //这里后端做了拒绝策略限制,请求头必须携带referer,否则无法访问后台
+        }
+      }
+    }
+  }
+
+
+
 })