jz.kai 4 năm trước cách đây
mục cha
commit
89d04b4761

+ 4 - 1
package.json

@@ -9,8 +9,11 @@
   },
   "dependencies": {
     "core-js": "^3.6.5",
+    "sass-loader": "^11.0.1",
     "vue": "^2.6.11",
-    "vue-router": "^3.5.1"
+    "vue-router": "^3.5.1",
+    "axios": "^0.19.0",
+    "js-cookie": "^2.2.1"
   },
   "devDependencies": {
     "@vue/cli-plugin-babel": "^4.5.0",

+ 82 - 1
src/api/sys/user.js

@@ -11,6 +11,87 @@ function login(data) {
   return request.post(constant.serverUrl + '/login', formData)
 }
 
+function pageList(formData) {
+  return request.post(constant.serverUrl + "/sys/user/pageList", formData);
+}
+
+function create() {
+  return request.get(constant.serverUrl + "/sys/user/create");
+}
+
+function edit(id) {
+  return request.get(constant.serverUrl + "/sys/user/edit/" + id);
+}
+
+function add(formModel) {
+  return request.post(constant.serverUrl + "/sys/user/add", formModel, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+function update(formModel) {
+  return request.post(constant.serverUrl + "/sys/user/update", formModel, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+function remove(id) {
+  return request.post(constant.serverUrl + "/sys/user/delete/" + id);
+}
+
+function batchRemove(idList) {
+  return request.post(constant.serverUrl + "/sys/user/batchDelete", idList, {
+    headers: {
+      "Content-Type": "application/json"
+    }
+  });
+}
+
+function changeUserPassword(formData) {
+  return request.post(constant.serverUrl + "/sys/user/changeUserPassword", formData);
+}
+
+function changeLoginPassword(formData) {
+  return request.post(constant.serverUrl + "/sys/user/changeLoginPassword", formData);
+}
+
+
+function userInfo() {
+  return request.get(constant.serverUrl + "/userInfo");
+}
+
+function bindWechat(userId) {
+  var formData = new FormData();
+
+  formData.append("expire_seconds", "3600");
+  formData.append("action_name", "QR_STR_SCENE");
+  formData.append("scene_str", process.env.VUE_APP_BIND_WECHAT_CODE + "," + userId);
+
+  return request.post(constant.serverUrl + "/wechat/qrcode/create", formData);
+}
+
+function scanLogin(rnd) {
+  var formData = new FormData();
+
+  formData.append("expire_seconds", "3600");
+  formData.append("action_name", "QR_STR_SCENE");
+  formData.append("scene_str", process.env.VUE_APP_SCAN_CODE_LOGIN + "," + rnd);
+
+  return request.post(constant.serverUrl + "/wechat/qrcode/create", formData);
+}
+
+function queryScanResult(rnd){
+  var formData = new FormData();
+  formData.append("rnd", rnd);
+
+  return request.post(constant.serverUrl + "/qrcode/queryScanResult", formData);
+}
+
 export default {
-  login
+  login, pageList, create, edit, add, update, remove, batchRemove, userInfo,
+  changeUserPassword,changeLoginPassword,bindWechat,scanLogin,queryScanResult
 }

+ 7 - 0
src/constant.js

@@ -0,0 +1,7 @@
+var Constant = {
+	clientUrl:"/",
+	//根据当前环境修改
+	serverUrl:process.env.VUE_APP_BACKEND_URL
+};
+
+export default Constant;

+ 3 - 1
src/main.js

@@ -1,10 +1,12 @@
 import Vue from 'vue'
 import App from './App.vue'
 import router from './routers'
+import AxiosPlugin from './plugins/AxiosPlugin'
 
 Vue.config.productionTip = false
+Vue.use(AxiosPlugin);
 
 new Vue({
   router,
-  render: h => h(App),
+  render: h => h(App)
 }).$mount('#app')

+ 9 - 0
src/plugins/AxiosPlugin.js

@@ -0,0 +1,9 @@
+import request from '@/utils/request'
+
+// 安装axios作为vue插件
+export default ({
+  install: function (Vue, options) {
+    Vue.prototype.$http = request
+    Vue.http = request
+  }
+})

+ 8 - 4
src/routers/index.js

@@ -8,10 +8,14 @@ export const constantRoutes = [
       path: '/',
       component: () => import('@/views/login')
     },
-    // {
-    //     path: '/login',
-    //     component: () => import('@/views/login')
-    // }
+    {
+        path: '/home',
+        component: () => import('@/views/home')
+    },
+    {
+      path: '/about',
+      component: () => import('@/views/about')
+  }
   ];
   
   // Array.prototype.push.apply(routes, caseRouters);

+ 49 - 0
src/routers/modules/base.js

@@ -0,0 +1,49 @@
+var routers = [
+    {
+        path: '/base/incident/detail',
+        name: 'BaseIncidentDetail',
+        component: () => import('@/views/base/incident-detail.vue'),
+        meta: {
+                roles: ["admin"],
+                title: '新增督办'
+        }
+    },
+    {
+        path: '/base/incident/pending',
+        name: 'BaseIncidentPending',
+        component: () => import('@/views/base/incident-panding.vue'),
+        meta: {
+                roles: ["admin"],
+                title: '我的督办'
+        }
+    },
+    {
+        path: '/base/incident/doc',
+        name: 'BaseIncidentDoc',
+        component: () => import('@/views/base/incident-doc.vue'),
+        meta: {
+                roles: ["admin"],
+                title: '督办详情'
+        }
+    },
+    {
+        path: '/base/message/list',
+        name: 'BaseMessageList',
+        component: () => import('@/views/base/message-list.vue'),
+        meta: {
+                roles: ["admin"],
+                title: '消息'
+        }
+    },
+    {
+        path: '/base/message/detail',
+        name: 'BaseMessageDetail',
+        component: () => import('@/views/base/message-detail.vue'),
+        meta: {
+                roles: ["admin"],
+                title: '消息详情'
+        }
+    },
+]
+
+export default routers;

+ 54 - 9
src/routers/modules/sys.js

@@ -1,13 +1,58 @@
 var routers = [
-        // {
-        //         path: '/sys/user/list',
-        //         name: 'SysUserList',
-        //         component: () => import('@/views/sys/user-list.vue'),
-        //         meta: {
-        //                 roles: ["admin"],
-        //                 title: '用户管理'
-        //         }
-        // },
+        {
+                path: '/sys/user/detail',
+                name: 'SysUserDetail',
+                component: () => import('@/views/sys/user-detail.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '我的'
+                }
+        },
+        {
+                path: '/sys/user/changePhoneStep1',
+                name: 'SysChangePhoneStep1',
+                component: () => import('@/views/sys/change-phone-step1.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '绑定手机号'
+                }
+        },
+        {
+                path: '/sys/user/changePhoneStep2',
+                name: 'SysChangePhoneStep2',
+                component: () => import('@/views/sys/change-phone-step2.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '验证已绑号码'
+                }
+        },
+        {
+                path: '/sys/user/changePhoneStep3',
+                name: 'SysChangePhoneStep3',
+                component: () => import('@/views/sys/change-phone-step3.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '更换绑定手机号'
+                }
+        },
+        {
+                path: '/sys/user/changePasswordStep1',
+                name: 'SysChangePasswordStep1',
+                component: () => import('@/views/sys/change-password-step1.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '验证已绑号码'
+                }
+        },
+        {
+                path: '/sys/user/changePasswordStep2',
+                name: 'SysChangePasswordStep2',
+                component: () => import('@/views/sys/change-password-step2.vue'),
+                meta: {
+                        roles: ["admin"],
+                        title: '设置新密码'
+                }
+        },
 ]
 
 export default routers;

+ 15 - 0
src/utils/auth.js

@@ -0,0 +1,15 @@
+import Cookies from 'js-cookie'
+
+const TokenKey = 'Admin-Token'
+
+export function getToken() {
+  return Cookies.get(TokenKey)
+}
+
+export function setToken(token) {
+  return Cookies.set(TokenKey, token)
+}
+
+export function removeToken() {
+  return Cookies.remove(TokenKey)
+}

+ 39 - 0
src/utils/request.js

@@ -0,0 +1,39 @@
+import axios from 'axios'
+import { getToken, setToken, removeToken } from '@/utils/auth'
+
+// post 跨域
+axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'
+
+axios.interceptors.request.use(function (config) {
+  config.headers['Authorization'] = getToken();
+  
+  return config;
+},function (error) {
+  return Promise.reject(error);
+});
+
+axios.interceptors.response.use(
+  response=>{
+    console.log(response.data.code);
+
+    var code = response.data.code;
+
+    if(code==415){
+      removeToken();
+      window.location.href = "#/login";
+    }
+    else if(code==401){
+      console.log(response.data.message);
+    }
+
+    return response;
+  },
+  error => {
+    console.log(error);
+
+    return error;
+  }
+)
+
+
+export default axios;

+ 13 - 0
src/views/about.vue

@@ -0,0 +1,13 @@
+<template>
+  <p>about</p>
+</template>
+
+<script>
+export default {
+
+}
+</script>
+
+<style>
+
+</style>

+ 49 - 4
src/views/login.vue

@@ -1,12 +1,57 @@
 <template>
-  <p>login</p>
+  <div class="login-container">
+    <div class="login-form">
+      <div class="login-form-logo">
+        <img src="../assets/logo.png" width="100"/>
+        <h3>荆州市委督查办公平台</h3>
+        <form>
+          <ul>
+            <li><input type="text" v-model="loginForm.userName"/></li>
+            <li><input type="password" v-model="loginForm.password"/></li>
+            <li><button @click="handleLogin" type="button">登录</button></li>
+          </ul>
+        </form>
+      </div>
+    </div>
+  </div>
 </template>
 <script>
+import userApi from "@/api/sys/user";
+import Constant from "@/constant";
+import { setToken} from '@/utils/auth';
+
 export default {
+  name: "login",
+  data() {
+    return {
+      loginForm: {
+        userName: "",
+        password: ""
+      },
+      loading: false
+    };
+  },
+  methods: {
+    handleLogin() {
+      var self = this;
 
-}
-</script>
+      userApi.login(self.loginForm)
+      .then((resp) => {
+        self.loading = false;
 
-<style>
+        if(resp.result){
+          setToken(resp.data);
+          self.$router.push({ path: this.redirect || "/home" });
+        }
+      })
+      .catch(error => {
+        self.loading = false;
+        self.$message.error(error);
+      });
+    }
+  },
+};
+</script>
+<style rel="stylesheet/scss" lang="scss">
 
 </style>

+ 14 - 1
yarn.lock

@@ -5099,6 +5099,11 @@ kind-of@^6.0.0, kind-of@^6.0.2:
   resolved "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
   integrity sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=
 
+klona@^2.0.4:
+  version "2.0.4"
+  resolved "https://registry.npm.taobao.org/klona/download/klona-2.0.4.tgz?cache=0&sync_timestamp=1600226814103&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fklona%2Fdownload%2Fklona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0"
+  integrity sha1-e7Hjr/sMuGJFR+9+j2cI6i4538A=
+
 launch-editor-middleware@^2.2.1:
   version "2.2.1"
   resolved "https://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz#e14b07e6c7154b0a4b86a0fd345784e45804c157"
@@ -5598,7 +5603,7 @@ negotiator@0.6.2:
   resolved "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
   integrity sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=
 
-neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1:
+neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2:
   version "2.6.2"
   resolved "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f"
   integrity sha1-tKr7k+OustgXTKU88WOrfXMIMF8=
@@ -7049,6 +7054,14 @@ safe-regex@^1.1.0:
   resolved "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
   integrity sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=
 
+sass-loader@^11.0.1:
+  version "11.0.1"
+  resolved "https://registry.npm.taobao.org/sass-loader/download/sass-loader-11.0.1.tgz#8672f896593466573b904f47693e0695368e38c9"
+  integrity sha1-hnL4llk0Zlc7kE9HaT4GlTaOOMk=
+  dependencies:
+    klona "^2.0.4"
+    neo-async "^2.6.2"
+
 sax@~1.2.4:
   version "1.2.4"
   resolved "https://registry.npm.taobao.org/sax/download/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9"