From df30a0ffc7a1c0be76be50f52d3acc1c0e5a7763 Mon Sep 17 00:00:00 2001 From: Zoe Date: Sat, 26 Jan 2019 23:54:02 +0800 Subject: [PATCH 1/2] =?UTF-8?q?UI=E9=87=8D=E6=96=B0=E5=8C=B9=E9=85=8D?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E5=9B=BE=EF=BC=8C=E6=B7=BB=E5=8A=A0=E6=98=B5?= =?UTF-8?q?=E7=A7=B0=EF=BC=8C=E6=89=8B=E6=9C=BA=E9=82=AE=E7=AE=B1=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + configs/webpack.config.js | 15 +- index.html | 3 + package.json | 4 +- scripts/start.js | 2 +- src/Util/enum.ts | 4 + src/Util/regExps.ts | 3 + src/Util/utils.ts | 3 + .../Icons/\345\244\264\345\203\217.png" | Bin 0 -> 6185 bytes .../Icons/\346\267\273\345\212\240.png" | Bin 0 -> 2891 bytes .../images/logo\345\233\276\346\241\210.png" | Bin 0 -> 13413 bytes src/assets/images/react.png | Bin 3633 -> 0 bytes src/index.tsx | 5 +- src/models/app/app.model.ts | 7 + src/pages/Common/Input.tsx | 43 +++++ src/pages/Common/SignItem.tsx | 18 ++ src/pages/Common/index.module.less | 25 +++ src/pages/Common/index.tsx | 40 +++++ src/pages/Login/index.tsx | 62 +++++++ src/pages/Main/index.module.less | 35 ++++ src/pages/Main/index.tsx | 167 ++++++++++++++++++ src/pages/Register/index.module.less | 52 ++++++ src/pages/Register/index.tsx | 149 ++++++++++++++++ src/pages/Welcome/index.module.less | 69 +++++++- src/pages/Welcome/index.tsx | 36 +++- src/router.tsx | 9 +- src/style.less | 12 ++ 27 files changed, 743 insertions(+), 21 deletions(-) create mode 100644 src/Util/enum.ts create mode 100644 src/Util/regExps.ts create mode 100644 src/Util/utils.ts create mode 100644 "src/assets/Icons/\345\244\264\345\203\217.png" create mode 100644 "src/assets/Icons/\346\267\273\345\212\240.png" create mode 100644 "src/assets/images/logo\345\233\276\346\241\210.png" delete mode 100644 src/assets/images/react.png create mode 100644 src/models/app/app.model.ts create mode 100644 src/pages/Common/Input.tsx create mode 100644 src/pages/Common/SignItem.tsx create mode 100644 src/pages/Common/index.module.less create mode 100644 src/pages/Common/index.tsx create mode 100644 src/pages/Login/index.tsx create mode 100644 src/pages/Main/index.module.less create mode 100644 src/pages/Main/index.tsx create mode 100644 src/pages/Register/index.module.less create mode 100644 src/pages/Register/index.tsx create mode 100644 src/style.less diff --git a/.gitignore b/.gitignore index fcd0041..e2838ea 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ node_modules public .idea .git +.yarn.lock diff --git a/configs/webpack.config.js b/configs/webpack.config.js index 368e725..2265d64 100644 --- a/configs/webpack.config.js +++ b/configs/webpack.config.js @@ -63,16 +63,14 @@ module.exports = argv => ({ use: [ MiniCssExtractPlugin.loader, { loader: 'css-loader' }, - { - loader: 'less-loader', + { loader: 'less-loader', options: { + modules:false, modifyVars: theme, - javascriptEnabled: true, - }, - }, + javascriptEnabled: true + }}, ], exclude: /\.module\.less$/, - include: /node_modules/, }, { @@ -129,11 +127,10 @@ module.exports = argv => ({ devServer: { contentBase: SRC, hot: true, + host:"0.0.0.0", inline: true, disableHostCheck: true, - historyApiFallback: { - disableDotRule: true, - }, + historyApiFallback:true, stats: 'minimal', clientLogLevel: 'warning', }, diff --git a/index.html b/index.html index 5f33cb5..2f2f093 100644 --- a/index.html +++ b/index.html @@ -34,6 +34,9 @@ transform: translateX(-50%); } + + 河码 +
diff --git a/package.json b/package.json index e84a6d3..e589a5f 100644 --- a/package.json +++ b/package.json @@ -61,8 +61,8 @@ "@types/react-dom": "^16.0.11", "antd-mobile": "^2.2.8", "dva": "^2.4.1", - "react": "^16.6.3", - "react-dom": "^16.6.3", + "react": "^16.8.0-alpha.1", + "react-dom": "^16.8.0-alpha.1", "tslib": "^1.9.3" }, "husky": { diff --git a/scripts/start.js b/scripts/start.js index 0136277..3fd17e0 100644 --- a/scripts/start.js +++ b/scripts/start.js @@ -21,6 +21,6 @@ const devServerOptions = Object.assign({}, config.devServer, { const server = new webpackDevServer(compiler, devServerOptions); -server.listen(8080, '127.0.0.1', () => { +server.listen(8080, '0.0.0.0', () => { console.log('Starting server on http://localhost:8080'); }); diff --git a/src/Util/enum.ts b/src/Util/enum.ts new file mode 100644 index 0000000..6d7baf5 --- /dev/null +++ b/src/Util/enum.ts @@ -0,0 +1,4 @@ +export enum ESignMethod { + Email = 'email', + Phone = 'phone', +} diff --git a/src/Util/regExps.ts b/src/Util/regExps.ts new file mode 100644 index 0000000..e30ad70 --- /dev/null +++ b/src/Util/regExps.ts @@ -0,0 +1,3 @@ +export const USER_NAME_REGEXP = /^[A-Za-z0-9_\-\u4e00-\u9fa5]+$/; +export const PHONE_REGEXP = /^0?(13|14|15|18|17)[0-9]{9}$/; +export const EMAIL_REGEXP = /^\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}$/; diff --git a/src/Util/utils.ts b/src/Util/utils.ts new file mode 100644 index 0000000..1de0b85 --- /dev/null +++ b/src/Util/utils.ts @@ -0,0 +1,3 @@ +export function arrayLast(arr: T[]): T { + return arr[arr.length - 1]; +} diff --git "a/src/assets/Icons/\345\244\264\345\203\217.png" "b/src/assets/Icons/\345\244\264\345\203\217.png" new file mode 100644 index 0000000000000000000000000000000000000000..ada87a3216f92eace1a28ace2ceb080cc9323502 GIT binary patch literal 6185 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 Hu0mjf*Da4? literal 0 HcmV?d00001 diff --git "a/src/assets/Icons/\346\267\273\345\212\240.png" "b/src/assets/Icons/\346\267\273\345\212\240.png" new file mode 100644 index 0000000000000000000000000000000000000000..cbab15b806cb88769f51591972e4e773ab8e7ebf GIT binary patch literal 2891 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 pQ)_o?nO3Cn)2f6$fubp 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 void; + rule: RegExp | RegExp[]; +} + +export const Input = (props: IInputProps) => { + const [isOk, setOk] = React.useState(false); + const [isShowInfo, setShowInfo] = React.useState(false); + + const handleChange = (e: React.ChangeEvent) => { + const regs = []; + if (Array.isArray(props.rule)) regs.push(...props.rule); + else regs.push(props.rule); + setOk(regs.some(r => r.test(e.target.value))); + }; + + return ( +
+ setShowInfo(true)} + onBlur={() => setShowInfo(false)} + /> + {isShowInfo && ( + <> + {isOk ? ( + + + + ) : ( +
+ )} + + )} +
+ ); +}; diff --git a/src/pages/Common/SignItem.tsx b/src/pages/Common/SignItem.tsx new file mode 100644 index 0000000..6d25c89 --- /dev/null +++ b/src/pages/Common/SignItem.tsx @@ -0,0 +1,18 @@ +import * as React from 'react'; + +interface IRegisterItem { + title: string; + className?: string; +} + +export class SignItem extends React.Component { + render() { + const { title } = this.props; + return ( + <> +

{title}

+ {this.props.children} + + ); + } +} diff --git a/src/pages/Common/index.module.less b/src/pages/Common/index.module.less new file mode 100644 index 0000000..8a64472 --- /dev/null +++ b/src/pages/Common/index.module.less @@ -0,0 +1,25 @@ +:global{ + .am-input-error-extra{ + position: absolute; + right: 0; + top: calc(~"50% - 12.5px"); + height: 42px; + width: 42px; + margin-left: 6px; + background-image: url("data:image/svg+xml;charset=utf-8,"); + background-size: 42px auto; + } +} +img{ + width: 100%; + height: 100%; +} + +.commonInput{ + position: relative; + &>span{ + position: absolute; + right: 0; + top: calc(~"50% - 12.5px"); + } +} diff --git a/src/pages/Common/index.tsx b/src/pages/Common/index.tsx new file mode 100644 index 0000000..a41651c --- /dev/null +++ b/src/pages/Common/index.tsx @@ -0,0 +1,40 @@ +import { Picker } from 'antd-mobile'; +import { PickerData } from 'antd-mobile/lib/picker/PropsType'; +import * as React from 'react'; +import { useState } from 'react'; +import styles from '../Register/index.module.less'; +import { SignItem } from './SignItem'; + +interface IPickerProps { + data: PickerData[]; + title: string; + head: string; +} + +export const PickerComponent = (props: IPickerProps) => { + const [val, setVal] = useState(props.data[0].label); + + return ( + +

Coderiver会基于您的角色向您推荐相关项目和团队

+
{props.head}
+ setVal(props.data[val].label as string)}> + {val} + +
+ ); +}; + +interface IAvater { + url: string; + style?: React.CSSProperties; + className?: string; +} + +export const Avater = (props: IAvater) => { + return ( +
+ +
+ ); +}; diff --git a/src/pages/Login/index.tsx b/src/pages/Login/index.tsx new file mode 100644 index 0000000..36fa913 --- /dev/null +++ b/src/pages/Login/index.tsx @@ -0,0 +1,62 @@ +import { Button, Icon } from 'antd-mobile'; +import { Link, Redirect, Route, Switch } from 'dva/router'; +import { History } from 'history'; +import * as React from 'react'; +import { ESignMethod } from 'Util/enum'; +import styles from '../Register/index.module.less'; +import { SignItem } from '@pages/Common/SignItem'; + +export interface ILoginProps { + history: History; +} + +export class Login extends React.Component { + constructor(props) { + super(props); + this.state = { + method: ESignMethod.Phone, + }; + } + private handleMethod = () => { + let nextUrl = this.state.method === ESignMethod.Email ? 'phone' : 'email'; + this.setState({ method: nextUrl as ESignMethod }); + this.props.history.replace('/login/' + nextUrl); + }; + public render() { + return ( +
+
+ this.props.history.goBack()} /> +
+ + + + + + +
输入密码
+ +
+
+ + + +
+
+ ); + } +} + +const InputEmail = () => ( + <> +
输入邮箱
+ + +); + +const InputPhone = () => ( + <> +
手机号码
+ + +); diff --git a/src/pages/Main/index.module.less b/src/pages/Main/index.module.less new file mode 100644 index 0000000..42bcd57 --- /dev/null +++ b/src/pages/Main/index.module.less @@ -0,0 +1,35 @@ +.main{ + padding: 40px 0; + + h1,h5{ + padding: 0 40px; + margin: 0; + } + .content{ + padding: 40px; + } + .title{ + display: flex; + justify-content: space-between; + align-items: center; + } + .itemIcon,.itemIconLg{ + width: 22px; + height: 22px; + background-position: center; + background-size: 100% 100%; + background-repeat: no-repeat; + } + .itemIconLg{ + width: 36px; + height: 36px + } +} + +:global{ + .am-tabs-tab-bar-wrap{ + position: fixed; + bottom: 0; + width: 100%; + } +} diff --git a/src/pages/Main/index.tsx b/src/pages/Main/index.tsx new file mode 100644 index 0000000..14d11e9 --- /dev/null +++ b/src/pages/Main/index.tsx @@ -0,0 +1,167 @@ +import * as React from 'react'; +import { TabBar } from 'antd-mobile'; +import styles from './index.module.less'; +import { Avater } from '@pages/Common'; +import avater from '@assets/Icons/头像.png'; + +export interface IMainProps {} + +export class MainComponent extends React.Component { + constructor(props) { + super(props); + this.state = { + selectedTab: 'redTab', + hidden: false, + }; + } + + renderContent(pageText) { + return
haha
; + } + + render() { + return ( +
+
Hi,Mike
+

+ 为您推荐 + +

+