diff --git a/.umirc.js b/.umirc.js index 9883665..7d8e013 100644 --- a/.umirc.js +++ b/.umirc.js @@ -31,7 +31,7 @@ export default { include: ['dva', 'dva/router', 'dva/saga', 'dva/fetch', 'antd/es'], }, hardSource: /* isMac */ process.platform === 'darwin', - polyfills: ['ie11'], + polyfills: ['ie9'], }, ], ], @@ -56,6 +56,7 @@ export default { services: resolve(__dirname, './src/services'), models: resolve(__dirname, './src/models'), routes: resolve(__dirname, './src/routes'), + api: resolve(__dirname, './src/services/'), }, urlLoaderExcludes: [/\.svg$/], ignoreMomentLocale: true, diff --git a/package.json b/package.json index fe89f5a..81ae5a3 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,6 @@ "private": true, "description": "An admin dashboard application demo built upon Ant Design and UmiJS", "dependencies": { - "@babel/polyfill": "^7.0.0", "antd": "^3.9.2", "axios": "^0.18.0", "babel-eslint": "^9.0.0", @@ -58,21 +57,26 @@ "umi-plugin-react": "^1.0.3" }, "lint-staged": { - "**/*.{js,less}": [ + "src/**/*.js": [ + "eslint --ext .js --fix", + "umi test", "npm run prettier", "git add" ], - "**/*.js": "npm run lint", - "**/*.less": "stylelint --syntax less" + "**/*.less": [ + "stylelint --syntax less", + "npm run prettier", + "git add" + ] }, "scripts": { "analyze": "cross-env ANALYZE=1 umi build", "build": "umi build", - "lint": "eslint --ext .js src", + "lint:js": "eslint --ext .js src", "lint:style": "stylelint \"src/**/*.less\" --syntax less", "start": "umi dev", "test": "umi test", "prettier": "prettier --write 'src/**/*'", - "precommit": "lint-staged" + "precommit": "lint-staged && npm run test" } } diff --git a/public/public/logo.svg b/public/logo.svg similarity index 100% rename from public/public/logo.svg rename to public/logo.svg diff --git a/src/global.js b/src/global.js deleted file mode 100644 index 33b7c42..0000000 --- a/src/global.js +++ /dev/null @@ -1 +0,0 @@ -import '@babel/polyfill' diff --git a/src/models/app.js b/src/models/app.js index 57e15f9..a851ba8 100644 --- a/src/models/app.js +++ b/src/models/app.js @@ -7,8 +7,7 @@ import { routerRedux } from 'dva/router' import { parse, stringify } from 'qs' import config from 'config' import { EnumRoleType } from 'enums' -import { query, logout } from 'services/app' -import * as menusService from 'services/menus' +import { queryMenuList, userLogout, queryUserInfo } from 'api' const { prefix } = config @@ -62,10 +61,10 @@ export default { }, effects: { *query({ payload }, { call, put, select }) { - const { success, user } = yield call(query, payload) + const { success, user } = yield call(queryUserInfo, payload) const { locationPathname } = yield select(_ => _.app) if (success && user) { - const { list } = yield call(menusService.query) + const { list } = yield call(queryMenuList) const { permissions } = user let menu = list if ( @@ -116,7 +115,7 @@ export default { }, *logout({ payload }, { call, put }) { - const data = yield call(logout, parse(payload)) + const data = yield call(userLogout, parse(payload)) if (data.success) { yield put({ type: 'updateState', diff --git a/src/pages/login/model.js b/src/pages/login/model.js index dc6aba0..9094cd0 100644 --- a/src/pages/login/model.js +++ b/src/pages/login/model.js @@ -1,5 +1,5 @@ import { routerRedux } from 'dva/router' -import { login } from './service' +import { loginUser } from 'api' export default { namespace: 'login', @@ -8,7 +8,7 @@ export default { effects: { *login({ payload }, { put, call, select }) { - const data = yield call(login, payload) + const data = yield call(loginUser, payload) const { locationQuery } = yield select(_ => _.app) if (data.success) { const { from } = locationQuery diff --git a/src/pages/login/service.js b/src/pages/login/service.js deleted file mode 100644 index 2bac1bd..0000000 --- a/src/pages/login/service.js +++ /dev/null @@ -1,12 +0,0 @@ -import { request, config } from 'utils' - -const { api } = config -const { userLogin } = api - -export function login(data) { - return request({ - url: userLogin, - method: 'post', - data, - }) -} diff --git a/src/pages/post/model.js b/src/pages/post/model.js deleted file mode 100644 index 19e4018..0000000 --- a/src/pages/post/model.js +++ /dev/null @@ -1,44 +0,0 @@ -import modelExtend from 'dva-model-extend' -import { query } from './service' -import { pageModel } from 'utils/model' - -export default modelExtend(pageModel, { - namespace: 'post', - - subscriptions: { - setup({ dispatch, history }) { - history.listen(location => { - if (location.pathname === '/post') { - dispatch({ - type: 'query', - payload: { - status: 2, - ...location.query, - }, - }) - } - }) - }, - }, - - effects: { - *query({ payload }, { call, put }) { - const data = yield call(query, payload) - if (data.success) { - yield put({ - type: 'querySuccess', - payload: { - list: data.data, - pagination: { - current: Number(payload.page) || 1, - pageSize: Number(payload.pageSize) || 10, - total: data.total, - }, - }, - }) - } else { - throw data - } - }, - }, -}) diff --git a/src/pages/request/index.js b/src/pages/request/index.js index 2e0118d..019f67a 100644 --- a/src/pages/request/index.js +++ b/src/pages/request/index.js @@ -1,19 +1,27 @@ import React from 'react' import Mock from 'mockjs' -import { request, config } from 'utils' +import { request } from 'utils' import { Row, Col, Card, Select, Input, Button } from 'antd' -import styles from './index.less' +import { + userLogin, + queryUser, + createUser, + updateUser, + removeUser, + queryUserInfo, + queryDashboard, + queryUserList, +} from 'api' -const { api } = config -const { dashboard, users, userLogin, user, v1test, v2test } = api +import styles from './index.less' export const requestOptions = [ { - url: user.replace('/:id', ''), + url: queryUserInfo, desc: 'intercept request by mock.js', }, { - url: dashboard, + url: queryDashboard, desc: 'intercept request by mock.js', }, { @@ -26,18 +34,18 @@ export const requestOptions = [ desc: 'intercept request by mock.js', }, { - url: users, + url: queryUserList, desc: 'intercept request by mock.js', }, { - url: user, + url: queryUser, desc: 'intercept request by mock.js', data: Mock.mock({ id: '@id', }), }, { - url: user.replace('/:id', ''), + url: createUser, desc: 'intercept request by mock.js', method: 'post', data: Mock.mock({ @@ -60,7 +68,7 @@ export const requestOptions = [ }), }, { - url: user, + url: updateUser, desc: 'intercept request by mock.js', method: 'patch', data: Mock.mock({ @@ -69,7 +77,7 @@ export const requestOptions = [ }), }, { - url: user, + url: removeUser, desc: 'intercept request by mock.js', method: 'delete', data: Mock.mock({ @@ -77,12 +85,7 @@ export const requestOptions = [ }), }, { - url: v1test, - desc: 'intercept request by mock.js', - method: 'get', - }, - { - url: v2test, + url: '/api/v2/test', desc: 'intercept request by mock.js', method: 'get', }, diff --git a/src/pages/user/$id/models/detail.js b/src/pages/user/$id/models/detail.js index 4e03d5a..1c228e8 100644 --- a/src/pages/user/$id/models/detail.js +++ b/src/pages/user/$id/models/detail.js @@ -1,5 +1,5 @@ import pathToRegexp from 'path-to-regexp' -import { query } from '../../services/user' +import { queryUser } from 'api' export default { namespace: 'userDetail', @@ -21,7 +21,7 @@ export default { effects: { *query({ payload }, { call, put }) { - const data = yield call(query, payload) + const data = yield call(queryUser, payload) const { success, message, status, ...other } = data if (success) { yield put({ diff --git a/src/pages/user/model.js b/src/pages/user/model.js index ea4dcbd..b6a4a42 100644 --- a/src/pages/user/model.js +++ b/src/pages/user/model.js @@ -1,11 +1,15 @@ /* global window */ import modelExtend from 'dva-model-extend' import { config } from 'utils' -import { create, remove, update } from './services/user' -import * as usersService from './services/users' +import { + queryUserList, + createUser, + removeUser, + updateUser, + removeUserList, +} from 'api' import { pageModel } from 'utils/model' -const { query } = usersService const { prefix } = config export default modelExtend(pageModel, { @@ -35,7 +39,7 @@ export default modelExtend(pageModel, { effects: { *query({ payload = {} }, { call, put }) { - const data = yield call(query, payload) + const data = yield call(queryUserList, payload) if (data) { yield put({ type: 'querySuccess', @@ -52,7 +56,7 @@ export default modelExtend(pageModel, { }, *delete({ payload }, { call, put, select }) { - const data = yield call(remove, { id: payload }) + const data = yield call(removeUser, { id: payload }) const { selectedRowKeys } = yield select(_ => _.user) if (data.success) { yield put({ @@ -67,7 +71,7 @@ export default modelExtend(pageModel, { }, *multiDelete({ payload }, { call, put }) { - const data = yield call(usersService.remove, payload) + const data = yield call(removeUserList, payload) if (data.success) { yield put({ type: 'updateState', payload: { selectedRowKeys: [] } }) } else { @@ -76,7 +80,7 @@ export default modelExtend(pageModel, { }, *create({ payload }, { call, put }) { - const data = yield call(create, payload) + const data = yield call(createUser, payload) if (data.success) { yield put({ type: 'hideModal' }) } else { @@ -87,7 +91,7 @@ export default modelExtend(pageModel, { *update({ payload }, { select, call, put }) { const id = yield select(({ user }) => user.currentItem.id) const newUser = { ...payload, id } - const data = yield call(update, newUser) + const data = yield call(updateUser, newUser) if (data.success) { yield put({ type: 'hideModal' }) } else { diff --git a/src/pages/user/services/user.js b/src/pages/user/services/user.js deleted file mode 100644 index 0543499..0000000 --- a/src/pages/user/services/user.js +++ /dev/null @@ -1,36 +0,0 @@ -import { request, config } from 'utils' - -const { api } = config -const { user } = api - -export function query(params) { - return request({ - url: user, - method: 'get', - data: params, - }) -} - -export function create(params) { - return request({ - url: user.replace('/:id', ''), - method: 'post', - data: params, - }) -} - -export function remove(params) { - return request({ - url: user, - method: 'delete', - data: params, - }) -} - -export function update(params) { - return request({ - url: user, - method: 'patch', - data: params, - }) -} diff --git a/src/pages/user/services/users.js b/src/pages/user/services/users.js deleted file mode 100644 index 4c9905c..0000000 --- a/src/pages/user/services/users.js +++ /dev/null @@ -1,20 +0,0 @@ -import { request, config } from 'utils' - -const { api } = config -const { users } = api - -export function query(params) { - return request({ - url: users, - method: 'get', - data: params, - }) -} - -export function remove(params) { - return request({ - url: users + '/delete', - method: 'post', - data: params, - }) -} diff --git a/src/services/api.js b/src/services/api.js new file mode 100644 index 0000000..f372b59 --- /dev/null +++ b/src/services/api.js @@ -0,0 +1,20 @@ +const api = { + queryMenuList: '/menus', + + queryUserInfo: '/user', + logoutUser: '/user/logout', + loginUser: 'POST /user/login', + + queryUser: '/user/:id', + queryUserList: '/users', + updateUser: 'Patch /user/:id', + createUser: 'POST /user/:id', + removeUser: 'DELETE /user/:id', + removeUserList: 'POST /users/delete', + + queryPostList: '/posts', + + queryDashboard: '/dashboard', +} + +export default api diff --git a/src/services/app.js b/src/services/app.js deleted file mode 100644 index 771d167..0000000 --- a/src/services/app.js +++ /dev/null @@ -1,28 +0,0 @@ -import { request, config } from 'utils' - -const { api } = config -const { user, userLogout, userLogin } = api - -export function login(params) { - return request({ - url: userLogin, - method: 'post', - data: params, - }) -} - -export function logout(params) { - return request({ - url: userLogout, - method: 'get', - data: params, - }) -} - -export function query(params) { - return request({ - url: user.replace('/:id', ''), - method: 'get', - data: params, - }) -} diff --git a/src/services/index.js b/src/services/index.js new file mode 100644 index 0000000..0eb64f5 --- /dev/null +++ b/src/services/index.js @@ -0,0 +1,29 @@ +import request from 'utils/request' +import { apiPrefix } from 'utils/config' +import api from './api' + +const gen = params => { + let url = apiPrefix + params + let method = 'GET' + + const paramsArray = params.split(' ') + if (paramsArray.length === 2) { + method = paramsArray[0] + url = apiPrefix + paramsArray[1] + } + + return function(data) { + return request({ + url, + data, + method, + }) + } +} + +const APIFunction = {} +for (const key in api) { + APIFunction[key] = gen(api[key]) +} + +module.exports = APIFunction diff --git a/src/services/menus.js b/src/services/menus.js deleted file mode 100644 index ad87558..0000000 --- a/src/services/menus.js +++ /dev/null @@ -1,12 +0,0 @@ -import { request, config } from 'utils' - -const { api } = config -const { menus } = api - -export function query(params) { - return request({ - url: menus, - method: 'get', - data: params, - }) -} diff --git a/src/utils/config.js b/src/utils/config.js index 225a972..8df3a90 100644 --- a/src/utils/config.js +++ b/src/utils/config.js @@ -5,7 +5,7 @@ module.exports = { name: 'AntD Admin', prefix: 'antdAdmin', footerText: 'Ant Design Admin © 2018 zuiidea', - logo: '/public/logo.svg', + logo: '/logo.svg', openPages: ['/login'], apiPrefix: '/api/v1', APIV1,