From fbd0fcb5c471f23d2b5e9d003707fdf7f1c252e8 Mon Sep 17 00:00:00 2001 From: zuiidea Date: Thu, 27 Apr 2017 17:59:39 +0800 Subject: [PATCH] user detail --- src/models/user.js | 6 ++-- src/models/user/detail.js | 51 +++++++++++++++++++++++++++++++ src/router.js | 8 +++++ src/routes/user/UserModal.js | 6 ++-- src/routes/user/detail/index.js | 29 ++++++++++++++++++ src/routes/user/detail/index.less | 14 +++++++++ src/routes/user/index.js | 6 ++-- 7 files changed, 112 insertions(+), 8 deletions(-) create mode 100644 src/routes/user/detail/index.less diff --git a/src/models/user.js b/src/models/user.js index 80a80e2..3ca2d4a 100644 --- a/src/models/user.js +++ b/src/models/user.js @@ -60,7 +60,7 @@ export default { }, *'delete' ({ payload }, { call, put }) { const data = yield call(remove, { id: payload }) - if (data && data.success) { + if (data.success) { yield put({ type: 'requery' }) } else { throw data @@ -69,7 +69,7 @@ export default { *create ({ payload }, { call, put }) { yield put({ type: 'hideModal' }) const data = yield call(create, payload) - if (data && data.success) { + if (data.success) { yield put({ type: 'requery' }) } else { throw data @@ -80,7 +80,7 @@ export default { const id = yield select(({ user }) => user.currentItem.id) const newUser = { ...payload, id } const data = yield call(update, newUser) - if (data && data.success) { + if (data.success) { yield put({ type: 'requery' }) } else { throw data diff --git a/src/models/user/detail.js b/src/models/user/detail.js index e69de29..559a7be 100644 --- a/src/models/user/detail.js +++ b/src/models/user/detail.js @@ -0,0 +1,51 @@ +import pathToRegexp from 'path-to-regexp' +import { query } from '../../services/user' + +export default { + + namespace: 'userDetail', + + state: { + data: {}, + }, + + subscriptions: { + setup ({ dispatch, history }) { + history.listen(() => { + const match = pathToRegexp('/user/:id').exec(location.pathname) + if (match) { + dispatch({ type: 'query', payload: { id: match[1] } }) + } + }) + }, + }, + + effects: { + *query ({ + payload, + }, { call, put }) { + const data = yield call(query, payload) + const { success, message, status, ...other } = data + if (success) { + yield put({ + type: 'querySuccess', + payload: { + data: other, + }, + }) + } else { + throw data + } + }, + }, + + reducers: { + querySuccess (state, { payload }) { + const { data } = payload + return { + ...state, + data, + } + }, + }, +} diff --git a/src/router.js b/src/router.js index 318af94..ac52a9a 100644 --- a/src/router.js +++ b/src/router.js @@ -37,6 +37,14 @@ const Routers = function ({ history, app }) { cb(null, require('./routes/user/')) }, 'user') }, + }, { + path: 'user/:id', + getComponent (nextState, cb) { + require.ensure([], require => { + registerModel(app, require('./models/user/detail')) + cb(null, require('./routes/user/detail/')) + }, 'user-detail') + }, }, { path: 'login', getComponent (nextState, cb) { diff --git a/src/routes/user/UserModal.js b/src/routes/user/UserModal.js index 2a67af9..42b18fc 100644 --- a/src/routes/user/UserModal.js +++ b/src/routes/user/UserModal.js @@ -105,7 +105,8 @@ const modal = ({ rules: [ { required: true, - message: '不能为空', + message: '请填写正确手机号', + pattern: /^1[34578]\d{9}$/, }, ], })()} @@ -116,7 +117,8 @@ const modal = ({ rules: [ { required: true, - message: '不能为空', + message: '请填写正确邮箱', + pattern: /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/, }, ], })()} diff --git a/src/routes/user/detail/index.js b/src/routes/user/detail/index.js index e69de29..501518c 100644 --- a/src/routes/user/detail/index.js +++ b/src/routes/user/detail/index.js @@ -0,0 +1,29 @@ +import React from 'react' +import PropTypes from 'prop-types' +import { connect } from 'dva' +import styles from './index.less' + +const Detail = ({ userDetail }) => { + const { data } = userDetail + const content = [] + for (let key in data) { + if ({}.hasOwnProperty.call(data, key)) { + content.push(
+
{key}
+
{String(data[key])}
+
) + } + } + return (
+
+ {content} +
+
) +} + +Detail.propTypes = { + userDetail: PropTypes.object, + loading: PropTypes.bool, +} + +export default connect(({ userDetail, loading }) => ({ userDetail, loading: loading.models.userDetail }))(Detail) diff --git a/src/routes/user/detail/index.less b/src/routes/user/detail/index.less new file mode 100644 index 0000000..f72c1a9 --- /dev/null +++ b/src/routes/user/detail/index.less @@ -0,0 +1,14 @@ +.content { + line-height: 2.4; + font-size: 14px; + + .item { + display: flex; + + & > div { + &:first-child { + width: 100px; + } + } + } +} diff --git a/src/routes/user/index.js b/src/routes/user/index.js index cddc2ce..7193ce2 100644 --- a/src/routes/user/index.js +++ b/src/routes/user/index.js @@ -6,7 +6,7 @@ import UserList from './UserList' import UserFilter from './UserFilter' import UserModal from './UserModal' -function Users ({ location, dispatch, user, loading }) { +const User = ({ location, dispatch, user, loading }) => { const { list, pagination, currentItem, modalVisible, modalType, isMotion } = user const { field, keyword } = location.query @@ -101,11 +101,11 @@ function Users ({ location, dispatch, user, loading }) { ) } -Users.propTypes = { +User.propTypes = { user: PropTypes.object, location: PropTypes.object, dispatch: PropTypes.func, loading: PropTypes.bool, } -export default connect(({ user, loading }) => ({ user, loading: loading.models.user }))(Users) +export default connect(({ user, loading }) => ({ user, loading: loading.models.user }))(User)