From e3c2f393e6080b5e34c5eb22fb6ed6271e1317bd Mon Sep 17 00:00:00 2001
From: 黄何裕 <1053952480@qq.com>
Date: 星期五, 26 七月 2024 08:58:51 +0800
Subject: [PATCH] 登录页面接口封装
---
src/permission.js | 84 ++--
vue.config.js | 147 +++++----
src/api/user.js | 3
src/views/integral/index.vue | 106 +++++++
src/views/login/index.vue | 167 +++++++---
src/views/student/index.vue | 18
src/router/index.js | 12
.env.development | 2
/dev/null | 25 -
src/views/home/index.vue | 26 +
src/views/rollCall/index.vue | 115 +++++++
src/main.js | 50 +-
src/api/student.js | 48 +++
src/utils/graphql.js | 63 ++++
package.json | 14
src/views/development/index.vue | 8
16 files changed, 653 insertions(+), 235 deletions(-)
diff --git a/.env.development b/.env.development
index de583d0..3796388 100644
--- a/.env.development
+++ b/.env.development
@@ -2,4 +2,4 @@
ENV = 'development'
# base api
-VUE_APP_BASE_API = '/dev-api'
+VUE_APP_BASE_API = 'http://192.168.3.88:18080/dream_test'
diff --git a/mock/index.js b/mock/index.js
deleted file mode 100644
index c514c13..0000000
--- a/mock/index.js
+++ /dev/null
@@ -1,57 +0,0 @@
-const Mock = require('mockjs')
-const { param2Obj } = require('./utils')
-
-const user = require('./user')
-const table = require('./table')
-
-const mocks = [
- ...user,
- ...table
-]
-
-// for front mock
-// please use it cautiously, it will redefine XMLHttpRequest,
-// which will cause many of your third-party libraries to be invalidated(like progress event).
-function mockXHR() {
- // mock patch
- // https://github.com/nuysoft/Mock/issues/300
- Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send
- Mock.XHR.prototype.send = function() {
- if (this.custom.xhr) {
- this.custom.xhr.withCredentials = this.withCredentials || false
-
- if (this.responseType) {
- this.custom.xhr.responseType = this.responseType
- }
- }
- this.proxy_send(...arguments)
- }
-
- function XHR2ExpressReqWrap(respond) {
- return function(options) {
- let result = null
- if (respond instanceof Function) {
- const { body, type, url } = options
- // https://expressjs.com/en/4x/api.html#req
- result = respond({
- method: type,
- body: JSON.parse(body),
- query: param2Obj(url)
- })
- } else {
- result = respond
- }
- return Mock.mock(result)
- }
- }
-
- for (const i of mocks) {
- Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response))
- }
-}
-
-module.exports = {
- mocks,
- mockXHR
-}
-
diff --git a/mock/mock-server.js b/mock/mock-server.js
deleted file mode 100644
index 8941ec0..0000000
--- a/mock/mock-server.js
+++ /dev/null
@@ -1,81 +0,0 @@
-const chokidar = require('chokidar')
-const bodyParser = require('body-parser')
-const chalk = require('chalk')
-const path = require('path')
-const Mock = require('mockjs')
-
-const mockDir = path.join(process.cwd(), 'mock')
-
-function registerRoutes(app) {
- let mockLastIndex
- const { mocks } = require('./index.js')
- const mocksForServer = mocks.map(route => {
- return responseFake(route.url, route.type, route.response)
- })
- for (const mock of mocksForServer) {
- app[mock.type](mock.url, mock.response)
- mockLastIndex = app._router.stack.length
- }
- const mockRoutesLength = Object.keys(mocksForServer).length
- return {
- mockRoutesLength: mockRoutesLength,
- mockStartIndex: mockLastIndex - mockRoutesLength
- }
-}
-
-function unregisterRoutes() {
- Object.keys(require.cache).forEach(i => {
- if (i.includes(mockDir)) {
- delete require.cache[require.resolve(i)]
- }
- })
-}
-
-// for mock server
-const responseFake = (url, type, respond) => {
- return {
- url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
- type: type || 'get',
- response(req, res) {
- console.log('request invoke:' + req.path)
- res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond))
- }
- }
-}
-
-module.exports = app => {
- // parse app.body
- // https://expressjs.com/en/4x/api.html#req.body
- app.use(bodyParser.json())
- app.use(bodyParser.urlencoded({
- extended: true
- }))
-
- const mockRoutes = registerRoutes(app)
- var mockRoutesLength = mockRoutes.mockRoutesLength
- var mockStartIndex = mockRoutes.mockStartIndex
-
- // watch files, hot reload mock server
- chokidar.watch(mockDir, {
- ignored: /mock-server/,
- ignoreInitial: true
- }).on('all', (event, path) => {
- if (event === 'change' || event === 'add') {
- try {
- // remove mock routes stack
- app._router.stack.splice(mockStartIndex, mockRoutesLength)
-
- // clear routes cache
- unregisterRoutes()
-
- const mockRoutes = registerRoutes(app)
- mockRoutesLength = mockRoutes.mockRoutesLength
- mockStartIndex = mockRoutes.mockStartIndex
-
- console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`))
- } catch (error) {
- console.log(chalk.redBright(error))
- }
- }
- })
-}
diff --git a/mock/table.js b/mock/table.js
deleted file mode 100644
index bd0e013..0000000
--- a/mock/table.js
+++ /dev/null
@@ -1,29 +0,0 @@
-const Mock = require('mockjs')
-
-const data = Mock.mock({
- 'items|30': [{
- id: '@id',
- title: '@sentence(10, 20)',
- 'status|1': ['published', 'draft', 'deleted'],
- author: 'name',
- display_time: '@datetime',
- pageviews: '@integer(300, 5000)'
- }]
-})
-
-module.exports = [
- {
- url: '/vue-admin-template/table/list',
- type: 'get',
- response: config => {
- const items = data.items
- return {
- code: 20000,
- data: {
- total: items.length,
- items: items
- }
- }
- }
- }
-]
diff --git a/mock/user.js b/mock/user.js
deleted file mode 100644
index 7555338..0000000
--- a/mock/user.js
+++ /dev/null
@@ -1,84 +0,0 @@
-
-const tokens = {
- admin: {
- token: 'admin-token'
- },
- editor: {
- token: 'editor-token'
- }
-}
-
-const users = {
- 'admin-token': {
- roles: ['admin'],
- introduction: 'I am a super administrator',
- avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
- name: 'Super Admin'
- },
- 'editor-token': {
- roles: ['editor'],
- introduction: 'I am an editor',
- avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',
- name: 'Normal Editor'
- }
-}
-
-module.exports = [
- // user login
- {
- url: '/vue-admin-template/user/login',
- type: 'post',
- response: config => {
- const { username } = config.body
- const token = tokens[username]
-
- // mock error
- if (!token) {
- return {
- code: 60204,
- message: 'Account and password are incorrect.'
- }
- }
-
- return {
- code: 20000,
- data: token
- }
- }
- },
-
- // get user info
- {
- url: '/vue-admin-template/user/info\.*',
- type: 'get',
- response: config => {
- const { token } = config.query
- const info = users[token]
-
- // mock error
- if (!info) {
- return {
- code: 50008,
- message: 'Login failed, unable to get user details.'
- }
- }
-
- return {
- code: 20000,
- data: info
- }
- }
- },
-
- // user logout
- {
- url: '/vue-admin-template/user/logout',
- type: 'post',
- response: _ => {
- return {
- code: 20000,
- data: 'success'
- }
- }
- }
-]
diff --git a/mock/utils.js b/mock/utils.js
deleted file mode 100644
index 95cc27d..0000000
--- a/mock/utils.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * @param {string} url
- * @returns {Object}
- */
-function param2Obj(url) {
- const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
- if (!search) {
- return {}
- }
- const obj = {}
- const searchArr = search.split('&')
- searchArr.forEach(v => {
- const index = v.indexOf('=')
- if (index !== -1) {
- const name = v.substring(0, index)
- const val = v.substring(index + 1, v.length)
- obj[name] = val
- }
- })
- return obj
-}
-
-module.exports = {
- param2Obj
-}
diff --git a/package.json b/package.json
index 2413824..b2b8d29 100644
--- a/package.json
+++ b/package.json
@@ -14,15 +14,26 @@
"test:ci": "npm run lint && npm run test:unit"
},
"dependencies": {
+ "apollo-boost": "^0.4.9",
+ "apollo-cache-inmemory": "^1.6.6",
+ "apollo-client": "^2.6.10",
+ "apollo-link": "^1.2.14",
+ "apollo-link-context": "^1.0.20",
+ "apollo-link-http": "^1.5.17",
"axios": "0.18.1",
"core-js": "3.6.5",
+ "cors": "^2.8.5",
"element-ui": "2.13.2",
+ "graphql": "^16.9.0",
+ "graphql-tag": "^2.12.6",
"js-cookie": "2.2.0",
"normalize.css": "7.0.0",
"nprogress": "0.2.0",
"path-to-regexp": "2.4.0",
"vue": "2.6.10",
+ "vue-apollo": "^3.1.2",
"vue-router": "3.0.6",
+ "vue-wechat-login": "0.0.1",
"vuex": "3.1.0"
},
"devDependencies": {
@@ -48,7 +59,8 @@
"serve-static": "1.13.2",
"svg-sprite-loader": "4.1.3",
"svgo": "1.2.2",
- "vue-template-compiler": "2.6.10"
+ "vue-template-compiler": "2.6.10",
+ "vue-wxlogin": "^1.0.5"
},
"browserslist": [
"> 1%",
diff --git a/src/api/student.js b/src/api/student.js
new file mode 100644
index 0000000..b82eddd
--- /dev/null
+++ b/src/api/student.js
@@ -0,0 +1,48 @@
+import apolloClient from "@/utils/graphql";
+import gql from "graphql-tag";
+
+export function getData(params) {
+ return apolloClient.query({
+ query: gql`
+ query vars($staffId: Int!, $keyword: String, $pageIn: PageIn!) {
+ findPlayerByStaff(
+ staffId: $staffId
+ keyword: $keyword
+ pageIn: $pageIn
+ ) {
+ ls {
+ id
+ name
+ gender
+ mobile
+ user {
+ id
+ name
+ wxOaOpenId
+ }
+ accs {
+ id
+ voucher {
+ id
+ voucherType
+ name
+ }
+ qty
+ freezeQty
+ amt
+ beginDate
+ endDate
+ modifyTime
+ }
+ }
+ pageOut {
+ total
+ index
+ size
+ }
+ }
+ }
+ `,
+ variables: params,
+ });
+}
diff --git a/src/api/user.js b/src/api/user.js
index 8ff4389..f9ac995 100644
--- a/src/api/user.js
+++ b/src/api/user.js
@@ -2,12 +2,11 @@
export function login(data) {
return request({
- url: '/vue-admin-template/user/login',
+ url: '/wx/web/login',
method: 'post',
data
})
}
-
export function getInfo(token) {
return request({
url: '/vue-admin-template/user/info',
diff --git a/src/main.js b/src/main.js
index 6ed0252..09153ea 100644
--- a/src/main.js
+++ b/src/main.js
@@ -1,20 +1,26 @@
-import Vue from 'vue'
+import Vue from "vue";
-import 'normalize.css/normalize.css' // A modern alternative to CSS resets
+import "normalize.css/normalize.css"; // A modern alternative to CSS resets
-import ElementUI from 'element-ui'
-import 'element-ui/lib/theme-chalk/index.css'
+import ElementUI from "element-ui";
+import "element-ui/lib/theme-chalk/index.css";
// import locale from 'element-ui/lib/locale/lang/en' // lang i18n
-import locale from 'element-ui/lib/locale/lang/zh-CN';
-import '@/styles/index.scss' // global css
+import locale from "element-ui/lib/locale/lang/zh-CN";
+import "@/styles/index.scss"; // global css
-import App from './App'
-import store from './store'
-import router from './router'
+import App from "./App";
+import store from "./store";
+import router from "./router";
-import '@/icons' // icon
-import '@/permission' // permission control
+import "@/icons"; // icon
+import "@/permission"; // permission control
+// const cors = require('cors');
+// // 澶勭悊璺ㄥ煙璇锋眰
+// App.use(cors());
+// // 澶勭悊璇锋眰
+// App.use(express.json());//express.json=bodyParser.json
+// App.use(express.urlencoded({ extended: true }));
/**
* If you don't want to use mock-server
* you want to use MockJs for mock api
@@ -23,21 +29,17 @@
* Currently MockJs will be used in the production environment,
* please remove it before going online ! ! !
*/
-if (process.env.NODE_ENV === 'production') {
- const { mockXHR } = require('../mock')
- mockXHR()
-}
+// if (process.env.NODE_ENV === 'production') {
+// const { mockXHR } = require('../mock')
+// mockXHR()
+// }
+Vue.use(ElementUI, { locale });
-// set ElementUI lang to EN
-Vue.use(ElementUI, { locale })
-// 濡傛灉鎯宠涓枃鐗� element-ui锛屾寜濡備笅鏂瑰紡澹版槑
-// Vue.use(ElementUI,{ locale: zhCn })
-
-Vue.config.productionTip = false
+Vue.config.productionTip = false;
new Vue({
- el: '#app',
+ el: "#app",
router,
store,
- render: h => h(App)
-})
+ render: (h) => h(App),
+});
diff --git a/src/permission.js b/src/permission.js
index fa1ea19..d5d1418 100644
--- a/src/permission.js
+++ b/src/permission.js
@@ -10,53 +10,53 @@
const whiteList = ['/login'] // no redirect whitelist
-router.beforeEach(async(to, from, next) => {
- // start progress bar
- NProgress.start()
+// router.beforeEach(async(to, from, next) => {
+// // start progress bar
+// NProgress.start()
- // set page title
- document.title = getPageTitle(to.meta.title)
+// // set page title
+// document.title = getPageTitle(to.meta.title)
- // determine whether the user has logged in
- const hasToken = getToken()
+// // determine whether the user has logged in
+// const hasToken = getToken()
- if (hasToken) {
- if (to.path === '/login') {
- // if is logged in, redirect to the home page
- next({ path: '/' })
- NProgress.done()
- } else {
- const hasGetUserInfo = store.getters.name
- if (hasGetUserInfo) {
- next()
- } else {
- try {
- // get user info
- await store.dispatch('user/getInfo')
+// if (hasToken) {
+// if (to.path === '/login') {
+// // if is logged in, redirect to the home page
+// next({ path: '/' })
+// NProgress.done()
+// } else {
+// const hasGetUserInfo = store.getters.name
+// if (hasGetUserInfo) {
+// next()
+// } else {
+// try {
+// // get user info
+// await store.dispatch('user/getInfo')
- next()
- } catch (error) {
- // remove token and go to login page to re-login
- await store.dispatch('user/resetToken')
- Message.error(error || 'Has Error')
- next(`/login?redirect=${to.path}`)
- NProgress.done()
- }
- }
- }
- } else {
- /* has no token*/
+// next()
+// } catch (error) {
+// // remove token and go to login page to re-login
+// await store.dispatch('user/resetToken')
+// Message.error(error || 'Has Error')
+// next(`/login?redirect=${to.path}`)
+// NProgress.done()
+// }
+// }
+// }
+// } else {
+// /* has no token*/
- if (whiteList.indexOf(to.path) !== -1) {
- // in the free login whitelist, go directly
- next()
- } else {
- // other pages that do not have permission to access are redirected to the login page.
- next(`/login?redirect=${to.path}`)
- NProgress.done()
- }
- }
-})
+// if (whiteList.indexOf(to.path) !== -1) {
+// // in the free login whitelist, go directly
+// next()
+// } else {
+// // other pages that do not have permission to access are redirected to the login page.
+// next(`/login?redirect=${to.path}`)
+// NProgress.done()
+// }
+// }
+// })
router.afterEach(() => {
// finish progress bar
diff --git a/src/router/index.js b/src/router/index.js
index b056c34..b771c56 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -109,6 +109,18 @@
name: 'Development',
component: () => import('@/views/development/index'),
meta: { title: '鎴愰暱', icon: 'tree' }
+ },
+ {
+ path: 'integral',
+ name: 'Integral',
+ component: () => import('@/views/integral/index'),
+ meta: { title: '绉垎', icon: 'tree' }
+ },
+ {
+ path: 'rollCall',
+ name: 'RollCall',
+ component: () => import('@/views/rollCall/index'),
+ meta: { title: '鐐硅瘎', icon: 'tree' }
}
]
},
diff --git a/src/utils/graphql.js b/src/utils/graphql.js
new file mode 100644
index 0000000..3356605
--- /dev/null
+++ b/src/utils/graphql.js
@@ -0,0 +1,63 @@
+// import ApolloClient from 'apollo-boost';
+
+// const apolloClient = new ApolloClient({
+// uri: 'http://127.0.0.1:7001/graphql'
+// })
+
+// export default apolloClient;
+// 瀹氫箟涓嶅悓璇锋眰鍦板潃
+const EFORMURI = "http://192.168.3.88:18080/dream_test/graphql";
+const IOTURI = "https://www.9village.cn/dream_test" + "/graphql";
+// import ApolloClient from 'apollo-boost' //寮曞叆apollo-boost鎻掍欢
+import { ApolloClient } from "apollo-client";
+import { createHttpLink } from "apollo-link-http";
+import { InMemoryCache } from "apollo-cache-inmemory";
+import { ApolloLink } from "apollo-link";
+
+const httpLink = createHttpLink({
+ uri: EFORMURI, //閰嶇疆api璋冪敤杩炴帴
+});
+
+const middlewareLink = new ApolloLink((operation, forward) => {
+ operation.setContext({
+ headers: {
+ Authorization: 'eyJhbGciOiJIUzI1NiJ9.eyJleHBUaW1lIjoiMjAyNC8wNy8yNSAxMTozOSIsInVzZXJJZCI6MSwianRpIjoiZGVkZWRlMWQtYTU4MC00NDkxLWI0YzAtMjA5ODRjYTk3NmE3IiwiaWF0IjoxNzIxODcxNTYyLCJzdWIiOiJ5Y2wiLCJleHAiOjE3MjE4Nzg3NjJ9.gvEk8RHvJD7QQjr83XVwPe9msqEeVITXg3hIJRaNubI',
+ staffId: "1680",
+ playerId: '3350',
+ },
+ }); //request鎷︽埅鍣�
+
+ return forward(operation).map((response) => {
+ return response;
+ }); //response鎷︽埅鍣紝浣嗘槸姝ゅ骞朵笉鑳藉閿欒鍝嶅簲杩涜鎷︽埅
+});
+
+const authLink = middlewareLink.concat(httpLink);
+
+const defaultOptions = {
+ watchQuery: {
+ fetchPolicy: "network-only",
+ errorPolicy: "ignore",
+ },
+ query: {
+ fetchPolicy: "network-only",
+ errorPolicy: "all",
+ },
+};
+
+const apolloClient = new ApolloClient({
+ link: authLink,
+ cache: new InMemoryCache(),
+ connectToDevTools: true,
+ defaultOptions: defaultOptions,
+});
+// const apolloClient = new ApolloClient({
+// uri: 'https://countries.trevorblades.com/',
+// headers:{
+// Authorization: 'eyJhbGciOiJIUzI1NiJ9.eyJleHBUaW1lIjoiMjAyNC8wNy8yNSAxMTozOSIsInVzZXJJZCI6MSwianRpIjoiZGVkZWRlMWQtYTU4MC00NDkxLWI0YzAtMjA5ODRjYTk3NmE3IiwiaWF0IjoxNzIxODcxNTYyLCJzdWIiOiJ5Y2wiLCJleHAiOjE3MjE4Nzg3NjJ9.gvEk8RHvJD7QQjr83XVwPe9msqEeVITXg3hIJRaNubI',
+// staffId: "1680",
+// playerId: '3350',
+// }
+// })
+//瀵煎嚭瀹炰緥
+export default apolloClient;
diff --git a/src/views/development/index.vue b/src/views/development/index.vue
index 5fec51d..c619222 100644
--- a/src/views/development/index.vue
+++ b/src/views/development/index.vue
@@ -65,20 +65,20 @@
element-loading-text="Loading"
fit
>
- <el-table-column label="瀛﹀憳">
+ <el-table-column label="璇剧▼">
<template slot-scope=""> xxxxx </template>
</el-table-column>
<el-table-column label="鏃堕棿" width="80">
<template slot-scope=""> 鐢� </template>
</el-table-column>
- <el-table-column label="鏍囬" width="200">
+ <el-table-column label="瀛﹀憳鏁�" width="200">
<template slot-scope=""> 10086 </template>
</el-table-column>
- <el-table-column label="鐐硅瘎鑰佸笀" width="200">
+ <el-table-column label="宸茶褰曟暟" width="200">
<template slot-scope=""> asfiaf </template>
</el-table-column>
<el-table-column label="鎿嶄綔" width="">
- <template slot-scope=""> 鏌ョ湅 </template>
+ <template slot-scope=""> 璁板綍 </template>
</el-table-column>
</el-table>
</el-tab-pane>
diff --git a/src/views/home/index.vue b/src/views/home/index.vue
index 33e5ab6..6e57039 100644
--- a/src/views/home/index.vue
+++ b/src/views/home/index.vue
@@ -5,16 +5,28 @@
</template>
<script>
-import { mapGetters } from 'vuex'
+import { mapGetters } from "vuex";
+import { login } from "@/api/user";
export default {
- name: 'Dashboard',
+ name: "Dashboard",
computed: {
- ...mapGetters([
- 'name'
- ])
- }
-}
+ ...mapGetters(["name"]),
+ },
+ created() {
+ this.getUserDate();
+ },
+ methods: {
+ getUserDate() {
+ console.log(123);
+ login({
+ code: "031xHA00064oxS1Es0200cRzRF2xHA0t",
+ }).then((res) => {
+ console.log(res);
+ });
+ },
+ },
+};
</script>
<style lang="scss" scoped>
diff --git a/src/views/integral/index.vue b/src/views/integral/index.vue
new file mode 100644
index 0000000..f2ff00c
--- /dev/null
+++ b/src/views/integral/index.vue
@@ -0,0 +1,106 @@
+<template>
+ <div class="app-container">
+ <el-tabs v-model="activeName" @tab-click="handleClick">
+ <el-tab-pane label="鎸夊鍛�" name="first">
+ <div style="display: flex; flex-direction: row-reverse">
+ <div style="width: 300px">
+ <el-input
+ placeholder="鎸夋爣棰樻悳绱�"
+ v-model="input3"
+ class="input-with-select"
+ size="small"
+ >
+ <el-button slot="append" icon="el-icon-search"></el-button>
+ </el-input>
+ </div>
+ </div>
+ <el-table
+ v-loading="listLoading"
+ :data="list"
+ element-loading-text="Loading"
+ fit
+ >
+ <el-table-column label="濮撳悕">
+ <template slot-scope=""> xxxxx </template>
+ </el-table-column>
+ <el-table-column label="绉垎" width="80">
+ <template slot-scope=""> 鐢� </template>
+ </el-table-column>
+ <el-table-column label="鏇存柊鏃堕棿" width="200">
+ <template slot-scope=""> 10086 </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="">
+ <template slot-scope=""> 鍏戞崲 鍙戞斁 </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="鎸夌彮绾�" name="fourth">
+ <div style="display: flex; flex-direction: row-reverse">
+ <div style="width: 300px">
+ <el-input
+ placeholder="鎸夊鍛樺悕绉版悳绱�"
+ v-model="input3"
+ class="input-with-select"
+ size="small"
+ >
+ <el-button slot="append" icon="el-icon-search"></el-button>
+ </el-input>
+ </div>
+ </div>
+ <el-table
+ v-loading="listLoading"
+ :data="list"
+ element-loading-text="Loading"
+ fit
+ >
+ <el-table-column label="鐝骇">
+ <template slot-scope=""> xxxxx </template>
+ </el-table-column>
+ <el-table-column label="瀛﹀憳浜烘暟" width="80">
+ <template slot-scope=""> 鐢� </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="">
+ <template slot-scope=""> 鍙戞斁 </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </template>
+
+ <script>
+ import { getList } from "@/api/table";
+
+ export default {
+ filters: {
+ statusFilter(status) {
+ const statusMap = {
+ published: "success",
+ draft: "gray",
+ deleted: "danger",
+ };
+ return statusMap[status];
+ },
+ },
+ data() {
+ return {
+ list: null,
+ listLoading: true,
+ activeName: "first",
+ };
+ },
+ created() {
+ this.fetchData();
+ },
+ methods: {
+ fetchData() {
+ this.listLoading = true;
+ getList().then((response) => {
+ this.list = response.data.items;
+ this.listLoading = false;
+ });
+ },
+ },
+ };
+ </script>
+
\ No newline at end of file
diff --git a/src/views/login/index.vue b/src/views/login/index.vue
index 1db2464..e100b53 100644
--- a/src/views/login/index.vue
+++ b/src/views/login/index.vue
@@ -1,7 +1,13 @@
<template>
<div class="login-container">
- <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form" auto-complete="on" label-position="left">
-
+ <!-- <el-form
+ ref="loginForm"
+ :model="loginForm"
+ :rules="loginRules"
+ class="login-form"
+ auto-complete="on"
+ label-position="left"
+ >
<div class="title-container">
<h3 class="title">Login Form</h3>
</div>
@@ -37,100 +43,144 @@
@keyup.enter.native="handleLogin"
/>
<span class="show-pwd" @click="showPwd">
- <svg-icon :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'" />
+ <svg-icon
+ :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"
+ />
</span>
</el-form-item>
- <el-button :loading="loading" type="primary" style="width:100%;margin-bottom:30px;" @click.native.prevent="handleLogin">Login</el-button>
+ <el-button
+ :loading="loading"
+ type="primary"
+ style="width: 100%; margin-bottom: 30px"
+ @click.native.prevent="handleLogin"
+ >Login</el-button
+ >
<div class="tips">
- <span style="margin-right:20px;">username: admin</span>
+ <span style="margin-right: 20px">username: admin</span>
<span> password: any</span>
</div>
-
- </el-form>
+ </el-form> -->
+ <div class="wxLogin">
+ <el-card class="main_wx">
+ <wxlogin
+ :appid="appid"
+ :redirect_uri="redirect_uri"
+ scope="snsapi_login"
+ :href="href"
+ :state="state"
+ ></wxlogin>
+ <el-button @click="handleLogin">寮�鍙戠幆澧冧笓鐢ㄥ伔娓℃寜閽�</el-button>
+ </el-card>
+ </div>
</div>
</template>
<script>
-import { validUsername } from '@/utils/validate'
-
+import { validUsername } from "@/utils/validate";
+import wxlogin from "vue-wxlogin";
export default {
- name: 'Login',
+ name: "Login",
+ components: { wxlogin },
data() {
const validateUsername = (rule, value, callback) => {
if (!validUsername(value)) {
- callback(new Error('Please enter the correct user name'))
+ callback(new Error("Please enter the correct user name"));
} else {
- callback()
+ callback();
}
- }
+ };
const validatePassword = (rule, value, callback) => {
if (value.length < 6) {
- callback(new Error('The password can not be less than 6 digits'))
+ callback(new Error("The password can not be less than 6 digits"));
} else {
- callback()
+ callback();
}
- }
+ };
return {
+ appid: "wx7103925df6236723",
+ redirect_uri: encodeURIComponent("https://www.9village.cn"),
+ state: "1",
+ href: "data:text/css;base64,LmltcG93ZXJCb3ggLnFyY29kZSB7CiAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgICB3aWR0aDogMTQwcHg7CiAgICAgICAgICBoZWlnaHQ6IDE0MHB4OwogICAgICAgIH0=", // 鑷畾涔夋牱寮忛摼鎺�
loginForm: {
- username: 'admin',
- password: '111111'
+ username: "admin",
+ password: "111111",
},
loginRules: {
- username: [{ required: true, trigger: 'blur', validator: validateUsername }],
- password: [{ required: true, trigger: 'blur', validator: validatePassword }]
+ username: [
+ { required: true, trigger: "blur", validator: validateUsername },
+ ],
+ password: [
+ { required: true, trigger: "blur", validator: validatePassword },
+ ],
},
loading: false,
- passwordType: 'password',
- redirect: undefined
- }
+ passwordType: "password",
+ redirect: undefined,
+ };
},
watch: {
$route: {
- handler: function(route) {
- this.redirect = route.query && route.query.redirect
+ handler: function (route) {
+ this.redirect = route.query && route.query.redirect;
},
- immediate: true
- }
+ immediate: true,
+ },
+ },
+ mounted() {
+ this.getWeChatUrl();
},
methods: {
+ getWeChatUrl() {
+ // api.wachatQrUrl().then(res => {
+ // if (res && res.code === '0000') {
+ // const data = res.data
+ // this.appid = data.appId
+ // this.redirect_uri = data.wxCallbackUrl + 'weChatLogin'
+ // }
+ // })
+ },
showPwd() {
- if (this.passwordType === 'password') {
- this.passwordType = ''
+ if (this.passwordType === "password") {
+ this.passwordType = "";
} else {
- this.passwordType = 'password'
+ this.passwordType = "password";
}
this.$nextTick(() => {
- this.$refs.password.focus()
- })
+ this.$refs.password.focus();
+ });
},
handleLogin() {
- this.$refs.loginForm.validate(valid => {
- if (valid) {
- this.loading = true
- this.$store.dispatch('user/login', this.loginForm).then(() => {
- this.$router.push({ path: this.redirect || '/' })
- this.loading = false
- }).catch(() => {
- this.loading = false
- })
- } else {
- console.log('error submit!!')
- return false
- }
- })
- }
- }
-}
+ this.$router.push({ path: "/educational/student" });
+ // this.$refs.loginForm.validate((valid) => {
+ // if (valid) {
+ // this.loading = true;
+ // this.$store
+ // .dispatch("user/login", this.loginForm)
+ // .then(() => {
+ // this.$router.push({ path: this.redirect || "/" });
+ // this.loading = false;
+ // })
+ // .catch(() => {
+ // this.loading = false;
+ // });
+ // } else {
+ // console.log("error submit!!");
+ // return false;
+ // }
+ // });
+ },
+ },
+};
</script>
<style lang="scss">
/* 淇input 鑳屾櫙涓嶅崗璋� 鍜屽厜鏍囧彉鑹� */
/* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
-$bg:#283443;
-$light_gray:#fff;
+$bg: #283443;
+$light_gray: #fff;
$cursor: #fff;
@supports (-webkit-mask: none) and (not (cater-color: $cursor)) {
@@ -141,6 +191,9 @@
/* reset element-ui css */
.login-container {
+ display: flex;
+ align-items: center;
+ justify-content: center;
.el-input {
display: inline-block;
height: 47px;
@@ -170,12 +223,18 @@
color: #454545;
}
}
+#weixin{
+ /* background-color: #fcf; */
+ display: flex;
+ justify-content: center;
+ margin-top: -20px;
+}
</style>
<style lang="scss" scoped>
-$bg:#2d3a4b;
-$dark_gray:#889aa4;
-$light_gray:#eee;
+$bg: #ffffff;
+$dark_gray: #889aa4;
+$light_gray: #eee;
.login-container {
min-height: 100%;
diff --git a/src/views/rollCall/index.vue b/src/views/rollCall/index.vue
new file mode 100644
index 0000000..a42846b
--- /dev/null
+++ b/src/views/rollCall/index.vue
@@ -0,0 +1,115 @@
+<template>
+ <div class="app-container">
+ <el-tabs v-model="activeName" @tab-click="handleClick">
+ <el-tab-pane label="鎸夊鍛�" name="first">
+ <div style="display: flex; flex-direction: row-reverse">
+ <div style="width: 300px">
+ <el-input
+ placeholder="鎸夋爣棰樻悳绱�"
+ v-model="input3"
+ class="input-with-select"
+ size="small"
+ >
+ <el-button slot="append" icon="el-icon-search"></el-button>
+ </el-input>
+ </div>
+ </div>
+ <el-table
+ v-loading="listLoading"
+ :data="list"
+ element-loading-text="Loading"
+ fit
+ >
+ <el-table-column label="濮撳悕">
+ <template slot-scope=""> xxxxx </template>
+ </el-table-column>
+ <el-table-column label="璇惧寘/浼氬憳鍗�" width="80">
+ <template slot-scope=""> 鐢� </template>
+ </el-table-column>
+ <el-table-column label="涓婅鏃ユ湡" width="200">
+ <template slot-scope=""> 10086 </template>
+ </el-table-column>
+ <el-table-column label="璇剧▼鏃堕暱" width="200">
+ <template slot-scope=""> 10086 </template>
+ </el-table-column>
+ <el-table-column label="寮�濮嬫椂闂�" width="200">
+ <template slot-scope=""> 10086 </template>
+ </el-table-column>
+ <el-table-column label="璇炬秷鏁伴噺" width="200">
+ <template slot-scope=""> 10086 </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="">
+ <template slot-scope=""> 鍏戞崲 鍙戞斁 </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ <el-tab-pane label="鎸夌彮绾�" name="fourth">
+ <div style="display: flex; flex-direction: row-reverse">
+ <div style="width: 300px">
+ <el-input
+ placeholder="鎸夊鍛樺悕绉版悳绱�"
+ v-model="input3"
+ class="input-with-select"
+ size="small"
+ >
+ <el-button slot="append" icon="el-icon-search"></el-button>
+ </el-input>
+ </div>
+ </div>
+ <el-table
+ v-loading="listLoading"
+ :data="list"
+ element-loading-text="Loading"
+ fit
+ >
+ <el-table-column label="鐝骇">
+ <template slot-scope=""> xxxxx </template>
+ </el-table-column>
+ <el-table-column label="瀛﹀憳浜烘暟" width="80">
+ <template slot-scope=""> 鐢� </template>
+ </el-table-column>
+ <el-table-column label="鎿嶄綔" width="">
+ <template slot-scope=""> 鍙戞斁 </template>
+ </el-table-column>
+ </el-table>
+ </el-tab-pane>
+ </el-tabs>
+ </div>
+ </template>
+
+ <script>
+ import { getList } from "@/api/table";
+
+ export default {
+ filters: {
+ statusFilter(status) {
+ const statusMap = {
+ published: "success",
+ draft: "gray",
+ deleted: "danger",
+ };
+ return statusMap[status];
+ },
+ },
+ data() {
+ return {
+ list: null,
+ listLoading: true,
+ activeName: "first",
+ };
+ },
+ created() {
+ this.fetchData();
+ },
+ methods: {
+ fetchData() {
+ this.listLoading = true;
+ getList().then((response) => {
+ this.list = response.data.items;
+ this.listLoading = false;
+ });
+ },
+ },
+ };
+ </script>
+
\ No newline at end of file
diff --git a/src/views/student/index.vue b/src/views/student/index.vue
index 333ecdc..568500f 100644
--- a/src/views/student/index.vue
+++ b/src/views/student/index.vue
@@ -6,8 +6,8 @@
<el-tab-pane label="宸茶繃鏈�" name="third" />
<el-tab-pane label="宸插仠鐢�" name="fourth" />
</el-tabs>
- <div style="display: flex; flex-direction: row-reverse;">
- <div style="width: 300px;">
+ <div style="display: flex; flex-direction: row-reverse">
+ <div style="width: 300px">
<el-input
placeholder="鎸夊鍚嶆悳绱�"
v-model="input3"
@@ -39,6 +39,7 @@
<el-table-column label="璐︽埛" width="">
<template slot-scope=""> asfiaf </template>
</el-table-column>
+ {{ accountList }}
<!-- <el-table-column label="Author" width="110" align="center">
<template slot-scope="scope">
<span>{{ scope.row.author }}</span>
@@ -65,7 +66,7 @@
</template>
<script>
-import { getList } from "@/api/table";
+import { getData } from "@/api/student";
export default {
filters: {
@@ -83,6 +84,15 @@
list: null,
listLoading: true,
activeName: "first",
+ data: {
+ staffId: "1680",
+ keyword: "",
+ pageIn: {
+ //鍙�夛紝濡傛灉鏄垎椤垫煡璇紝闇�瑕佸姞涓娿��
+ index: 1, //蹇呴��
+ size: 20, //姣忛〉鐨勫ぇ灏忋�傞粯璁�20
+ },
+ },
};
},
created() {
@@ -91,7 +101,7 @@
methods: {
fetchData() {
this.listLoading = true;
- getList().then((response) => {
+ getData(this.data).then((response) => {
this.list = response.data.items;
this.listLoading = false;
});
diff --git a/vue.config.js b/vue.config.js
index 4856ed0..159032f 100644
--- a/vue.config.js
+++ b/vue.config.js
@@ -1,19 +1,19 @@
-'use strict'
-const path = require('path')
-const defaultSettings = require('./src/settings.js')
+"use strict";
+const path = require("path");
+const defaultSettings = require("./src/settings.js");
function resolve(dir) {
- return path.join(__dirname, dir)
+ return path.join(__dirname, dir);
}
-const name = defaultSettings.title || 'vue Admin Template' // page title
+const name = defaultSettings.title || "vue Admin Template"; // page title
// If your port is set to 80,
// use administrator privileges to execute the command line.
// For example, Mac: sudo npm run
// You can change the port by the following methods:
// port = 9528 npm run dev OR npm run dev --port = 9528
-const port = process.env.port || process.env.npm_config_port || 9528 // dev port
+const port = process.env.port || process.env.npm_config_port || 9528; // dev port
// All configuration item explanations can be find in https://cli.vuejs.org/config/
module.exports = {
@@ -24,19 +24,29 @@
* In most cases please use '/' !!!
* Detail: https://cli.vuejs.org/config/#publicpath
*/
- publicPath: '/',
- outputDir: 'dist',
- assetsDir: 'static',
- lintOnSave: process.env.NODE_ENV === 'development',
+ publicPath: "/",
+ outputDir: "dist",
+ assetsDir: "static",
+ lintOnSave: process.env.NODE_ENV === "development",
productionSourceMap: false,
devServer: {
port: port,
open: true,
overlay: {
warnings: false,
- errors: true
+ errors: true,
},
- before: require('./mock/mock-server.js')
+ proxy: {
+ [process.env.VUE_APP_BASE_API]: {
+ // 鍖归厤鎵�鏈変互 '/dev-api'寮�澶寸殑璇锋眰璺緞
+ target: "http://192.168.3.88:18080/dream_test", //绫讳技浜嶯ginx鍙嶅悜浠g悊
+ changeOrigin: true, // 鏀寔璺ㄥ煙
+ pathRewrite: {
+ // 閲嶅啓璺緞: 鍘绘帀璺緞涓紑澶寸殑'/dev-api'
+ ["^" + process.env.VUE_APP_BASE_API]: "",
+ },
+ },
+ },
},
configureWebpack: {
// provide the app's title in webpack's name field, so that
@@ -44,80 +54,75 @@
name: name,
resolve: {
alias: {
- '@': resolve('src')
- }
- }
+ "@": resolve("src"),
+ },
+ },
},
chainWebpack(config) {
// it can improve the speed of the first screen, it is recommended to turn on preload
- config.plugin('preload').tap(() => [
+ config.plugin("preload").tap(() => [
{
- rel: 'preload',
+ rel: "preload",
// to ignore runtime.js
// https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/cli-service/lib/config/app.js#L171
fileBlacklist: [/\.map$/, /hot-update\.js$/, /runtime\..*\.js$/],
- include: 'initial'
- }
- ])
+ include: "initial",
+ },
+ ]);
// when there are many pages, it will cause too many meaningless requests
- config.plugins.delete('prefetch')
+ config.plugins.delete("prefetch");
// set svg-sprite-loader
+ config.module.rule("svg").exclude.add(resolve("src/icons")).end();
config.module
- .rule('svg')
- .exclude.add(resolve('src/icons'))
- .end()
- config.module
- .rule('icons')
+ .rule("icons")
.test(/\.svg$/)
- .include.add(resolve('src/icons'))
+ .include.add(resolve("src/icons"))
.end()
- .use('svg-sprite-loader')
- .loader('svg-sprite-loader')
+ .use("svg-sprite-loader")
+ .loader("svg-sprite-loader")
.options({
- symbolId: 'icon-[name]'
+ symbolId: "icon-[name]",
})
- .end()
+ .end();
- config
- .when(process.env.NODE_ENV !== 'development',
- config => {
- config
- .plugin('ScriptExtHtmlWebpackPlugin')
- .after('html')
- .use('script-ext-html-webpack-plugin', [{
+ config.when(process.env.NODE_ENV !== "development", (config) => {
+ config
+ .plugin("ScriptExtHtmlWebpackPlugin")
+ .after("html")
+ .use("script-ext-html-webpack-plugin", [
+ {
// `runtime` must same as runtimeChunk name. default is `runtime`
- inline: /runtime\..*\.js$/
- }])
- .end()
- config
- .optimization.splitChunks({
- chunks: 'all',
- cacheGroups: {
- libs: {
- name: 'chunk-libs',
- test: /[\\/]node_modules[\\/]/,
- priority: 10,
- chunks: 'initial' // only package third parties that are initially dependent
- },
- elementUI: {
- name: 'chunk-elementUI', // split elementUI into a single package
- priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
- test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
- },
- commons: {
- name: 'chunk-commons',
- test: resolve('src/components'), // can customize your rules
- minChunks: 3, // minimum common number
- priority: 5,
- reuseExistingChunk: true
- }
- }
- })
- // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk
- config.optimization.runtimeChunk('single')
- }
- )
- }
-}
+ inline: /runtime\..*\.js$/,
+ },
+ ])
+ .end();
+ config.optimization.splitChunks({
+ chunks: "all",
+ cacheGroups: {
+ libs: {
+ name: "chunk-libs",
+ test: /[\\/]node_modules[\\/]/,
+ priority: 10,
+ chunks: "initial", // only package third parties that are initially dependent
+ },
+ elementUI: {
+ name: "chunk-elementUI", // split elementUI into a single package
+ priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
+ test: /[\\/]node_modules[\\/]_?element-ui(.*)/, // in order to adapt to cnpm
+ },
+ commons: {
+ name: "chunk-commons",
+ test: resolve("src/components"), // can customize your rules
+ minChunks: 3, // minimum common number
+ priority: 5,
+ reuseExistingChunk: true,
+ },
+ },
+ });
+ // https:// webpack.js.org/configuration/optimization/#optimizationruntimechunk
+ config.optimization.runtimeChunk("single");
+ });
+ },
+};
--
Gitblit v1.8.0