Commit 900bf08f authored by 2breakegg's avatar 2breakegg

'lint'

parent 92f6c5fb
......@@ -9,3 +9,4 @@
# misc
.DS_Store
npm-debug.log*
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectCodeStyleSettingsManager">
<option name="PER_PROJECT_SETTINGS">
<value />
</option>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</component>
</project>
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Eslint" enabled="true" level="ERROR" enabled_by_default="true" />
</profile>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="JSX" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/mycard-account-web.iml" filepath="$PROJECT_DIR$/.idea/mycard-account-web.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="TypeScriptCompiler">
<option name="useConfig" value="true" />
<option name="useService" value="false" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="eb37985e-18dc-4e2f-82ba-9874832785ff" name="Default" comment="lint">
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/codeStyleSettings.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/inspectionProfiles/Project_Default.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/misc.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/modules.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/mycard-account-web.iml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/typescript-compiler.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/vcs.xml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/.gitignore" afterPath="$PROJECT_DIR$/.gitignore" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/components/EmailForm.js" afterPath="$PROJECT_DIR$/src/components/EmailForm.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/components/Example.js" afterPath="$PROJECT_DIR$/src/components/Example.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/components/PasswordForm.js" afterPath="$PROJECT_DIR$/src/components/PasswordForm.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/components/SubmitButton.css" afterPath="$PROJECT_DIR$/src/components/SubmitButton.css" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/components/SubmitButton.js" afterPath="$PROJECT_DIR$/src/components/SubmitButton.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/components/UserNameForm.js" afterPath="$PROJECT_DIR$/src/components/UserNameForm.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/config.js" afterPath="$PROJECT_DIR$/src/config.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/index.js" afterPath="$PROJECT_DIR$/src/index.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/models/auth.js" afterPath="$PROJECT_DIR$/src/models/auth.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/models/common.js" afterPath="$PROJECT_DIR$/src/models/common.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/models/example.js" afterPath="$PROJECT_DIR$/src/models/example.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/models/haha.js" afterPath="$PROJECT_DIR$/src/models/haha.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/models/user.js" afterPath="$PROJECT_DIR$/src/models/user.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/router.js" afterPath="$PROJECT_DIR$/src/router.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/Activate.js" afterPath="$PROJECT_DIR$/src/routes/Activate.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/Forgot.js" afterPath="$PROJECT_DIR$/src/routes/Forgot.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/IndexPage.js" afterPath="$PROJECT_DIR$/src/routes/IndexPage.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/Login.js" afterPath="$PROJECT_DIR$/src/routes/Login.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/Login.less" afterPath="$PROJECT_DIR$/src/routes/Login.less" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/Profiles.js" afterPath="$PROJECT_DIR$/src/routes/Profiles.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/Profiles.less" afterPath="$PROJECT_DIR$/src/routes/Profiles.less" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/Register.js" afterPath="$PROJECT_DIR$/src/routes/Register.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/Register.less" afterPath="$PROJECT_DIR$/src/routes/Register.less" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/routes/Reset.js" afterPath="$PROJECT_DIR$/src/routes/Reset.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/services/auth.js" afterPath="$PROJECT_DIR$/src/services/auth.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/services/user.js" afterPath="$PROJECT_DIR$/src/services/user.js" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/src/utils/request.js" afterPath="$PROJECT_DIR$/src/utils/request.js" />
</list>
<ignored path="$PROJECT_DIR$/.tmp/" />
<ignored path="$PROJECT_DIR$/temp/" />
<ignored path="$PROJECT_DIR$/tmp/" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="TRACKING_ENABLED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="ExecutionTargetManager" SELECTED_TARGET="default_target" />
<component name="FileEditorManager">
<leaf SIDE_TABS_SIZE_LIMIT_KEY="300">
<file leaf-file-name="Login.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/routes/Login.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="703">
<caret line="37" column="101" lean-forward="false" selection-start-line="37" selection-start-column="101" selection-end-line="37" selection-end-column="101" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Activate.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/routes/Activate.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="513">
<caret line="27" column="11" lean-forward="false" selection-start-line="27" selection-start-column="11" selection-end-line="27" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Profiles.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/routes/Profiles.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="38">
<caret line="8" column="27" lean-forward="false" selection-start-line="8" selection-start-column="27" selection-end-line="8" selection-end-column="27" />
<folding>
<element signature="e#0#61#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="router.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/router.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="190">
<caret line="23" column="48" lean-forward="false" selection-start-line="23" selection-start-column="48" selection-end-line="23" selection-end-column="48" />
<folding>
<element signature="e#0#53#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Example.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/components/Example.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="247">
<caret line="13" column="0" lean-forward="true" selection-start-line="13" selection-start-column="0" selection-end-line="13" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PasswordForm.css" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/components/PasswordForm.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="PasswordForm.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/components/PasswordForm.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="570">
<caret line="33" column="56" lean-forward="true" selection-start-line="33" selection-start-column="56" selection-end-line="33" selection-end-column="56" />
<folding>
<element signature="e#0#35#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Register.js" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/routes/Register.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="399">
<caret line="21" column="36" lean-forward="false" selection-start-line="21" selection-start-column="36" selection-end-line="21" selection-end-column="36" />
<folding>
<element signature="e#0#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name=".gitignore" pinned="false" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="228">
<caret line="12" column="0" lean-forward="false" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name=".eslintrc" pinned="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/.eslintrc">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="304">
<caret line="16" column="32" lean-forward="false" selection-start-line="16" selection-start-column="32" selection-end-line="16" selection-end-column="32" />
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FindInProjectRecents">
<findStrings>
<find>WrapperLogin</find>
<find>onSubmitLogin</find>
<find>login</find>
<find>payload</find>
<find>checkPassword</find>
<find>checkEmail</find>
<find>loginFail</find>
<find>active</find>
<find>input</find>
<find>activateState</find>
</findStrings>
</component>
<component name="Git.Settings">
<option name="ROOT_SYNC" value="DONT_SYNC" />
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="IdeDocumentHistory">
<option name="CHANGED_PATHS">
<list>
<option value="$PROJECT_DIR$/src/services/auth.js" />
<option value="$PROJECT_DIR$/src/config.js" />
<option value="$PROJECT_DIR$/src/models/auth.js" />
<option value="$PROJECT_DIR$/src/routes/Activate.js" />
<option value="$PROJECT_DIR$/src/components/EmailForm.js" />
<option value="$PROJECT_DIR$/src/index.js" />
<option value="$PROJECT_DIR$/src/router.js" />
<option value="$PROJECT_DIR$/src/components/PasswordForm.js" />
<option value="$PROJECT_DIR$/src/routes/Login.js" />
<option value="$PROJECT_DIR$/src/routes/Profiles.js" />
<option value="$PROJECT_DIR$/src/routes/Register.js" />
<option value="$PROJECT_DIR$/.gitignore" />
</list>
</option>
</component>
<component name="JsBuildToolGruntFileManager" detection-done="true" sorting="DEFINITION_ORDER" />
<component name="JsBuildToolPackageJson" detection-done="true" sorting="DEFINITION_ORDER">
<package-json value="$PROJECT_DIR$/package.json" />
</component>
<component name="JsFlowSettings">
<service-enabled>false</service-enabled>
<exe-path />
<annotation-enable>false</annotation-enable>
<other-services-enabled>false</other-services-enabled>
</component>
<component name="JsGulpfileManager">
<detection-done>true</detection-done>
<sorting>DEFINITION_ORDER</sorting>
</component>
<component name="NodeModulesDirectoryManager">
<handled-path value="$PROJECT_DIR$/node_modules" />
</component>
<component name="ProjectFrameBounds">
<option name="x" value="-8" />
<option name="y" value="-8" />
<option name="width" value="1936" />
<option name="height" value="1176" />
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="" version="1">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
<manualOrder />
<foldersAlwaysOnTop value="true" />
</navigator>
<panes>
<pane id="Scope" />
<pane id="Scratches" />
<pane id="ProjectPane">
<subPane>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="services" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="routes" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="models" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="mycard-account-web" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="components" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
</panes>
</component>
<component name="PropertiesComponent">
<property name="WebServerToolWindowFactoryState" value="false" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="HbShouldOpenHtmlAsHb" value="" />
<property name="nodejs_interpreter_path" value="C:/Program Files/nodejs/node" />
<property name="node.js.path.for.package.eslint" value="project" />
<property name="node.js.selected.package.eslint" value="E:\zhuye\mycard-account-web\node_modules\eslint" />
<property name="settings.editor.selected.configurable" value="vcs.Git" />
<property name="node.js.path.for.package.standard" value="project" />
<property name="node.js.selected.package.standard" value="" />
</component>
<component name="RunDashboard">
<option name="ruleStates">
<list>
<RuleState>
<option name="name" value="ConfigurationTypeDashboardGroupingRule" />
</RuleState>
<RuleState>
<option name="name" value="StatusDashboardGroupingRule" />
</RuleState>
</list>
</option>
</component>
<component name="RunManager">
<configuration default="true" type="DartCommandLineRunConfigurationType" factoryName="Dart Command Line Application">
<method />
</configuration>
<configuration default="true" type="DartTestRunConfigurationType" factoryName="Dart Test">
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerJest" factoryName="Jest">
<node-interpreter value="project" />
<working-dir value="" />
<envs />
<scope-kind value="ALL" />
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerKarma" factoryName="Karma">
<config-file value="" />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="JavaScriptTestRunnerProtractor" factoryName="Protractor">
<config-file value="" />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
<method />
</configuration>
<configuration default="true" type="NodeJSConfigurationType" factoryName="Node.js" path-to-node="project" working-dir="">
<method />
</configuration>
<configuration default="true" type="cucumber.js" factoryName="Cucumber.js">
<option name="cucumberJsArguments" value="" />
<option name="executablePath" />
<option name="filePath" />
<method />
</configuration>
<configuration default="true" type="js.build_tools.gulp" factoryName="Gulp.js">
<node-interpreter>project</node-interpreter>
<node-options />
<gulpfile />
<tasks />
<arguments />
<envs />
<method />
</configuration>
<configuration default="true" type="js.build_tools.npm" factoryName="npm">
<command value="run" />
<scripts />
<node-interpreter value="project" />
<envs />
<method />
</configuration>
<configuration default="true" type="mocha-javascript-test-runner" factoryName="Mocha">
<node-interpreter>project</node-interpreter>
<node-options />
<working-directory />
<pass-parent-env>true</pass-parent-env>
<envs />
<ui />
<extra-mocha-options />
<test-kind>DIRECTORY</test-kind>
<test-directory />
<recursive>false</recursive>
<method />
</configuration>
</component>
<component name="ShelveChangesManager" show_recycled="false">
<option name="remove_strategy" value="false" />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="eb37985e-18dc-4e2f-82ba-9874832785ff" name="Default" comment="" />
<created>1490847123780</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1490847123780</updated>
<workItem from="1490847126780" duration="9606000" />
<workItem from="1490864807162" duration="4566000" />
<workItem from="1490926971269" duration="431000" />
</task>
<servers />
</component>
<component name="TimeTrackingManager">
<option name="totallyTimeSpent" value="14603000" />
</component>
<component name="TodoView">
<todo-panel id="selected-file">
<is-autoscroll-to-source value="true" />
</todo-panel>
<todo-panel id="all">
<are-packages-shown value="true" />
<is-autoscroll-to-source value="true" />
</todo-panel>
</component>
<component name="ToolWindowManager">
<frame x="-8" y="-8" width="1936" height="1176" extended-state="6" />
<layout>
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.25237092" sideWeight="0.5" order="0" side_tool="false" content_ui="combo" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32917467" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.487524" sideWeight="0.5021075" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.32917467" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="npm" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Terminal" active="true" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" show_stripe_button="true" weight="0.487524" sideWeight="0.49789253" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="2" side_tool="true" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="TypeScriptGeneratedFilesManager">
<option name="processedProjectFiles" value="true" />
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="VcsManagerConfiguration">
<option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="false" />
<MESSAGE value="lint" />
<option name="LAST_COMMIT_MESSAGE" value="lint" />
</component>
<component name="XDebuggerManager">
<breakpoint-manager>
<option name="time" value="2" />
</breakpoint-manager>
<watches-manager />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/routes/Login.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="703">
<caret line="37" column="101" lean-forward="false" selection-start-line="37" selection-start-column="101" selection-end-line="37" selection-end-column="101" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Activate.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="513">
<caret line="27" column="11" lean-forward="false" selection-start-line="27" selection-start-column="11" selection-end-line="27" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Profiles.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="38">
<caret line="8" column="27" lean-forward="true" selection-start-line="8" selection-start-column="27" selection-end-line="8" selection-end-column="27" />
<folding>
<element signature="e#0#61#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/router.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="190">
<caret line="23" column="48" lean-forward="false" selection-start-line="23" selection-start-column="48" selection-end-line="23" selection-end-column="48" />
<folding>
<element signature="e#0#53#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/Haha.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/Haha.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/PasswordForm.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/PasswordForm.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="570">
<caret line="33" column="56" lean-forward="true" selection-start-line="33" selection-start-column="56" selection-end-line="33" selection-end-column="56" />
<folding>
<element signature="e#0#35#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Register.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="2603">
<caret line="140" column="12" lean-forward="false" selection-start-line="140" selection-start-column="12" selection-end-line="140" selection-end-column="12" />
<folding>
<element signature="e#0#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/Example.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Login.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="475">
<caret line="25" column="28" lean-forward="false" selection-start-line="25" selection-start-column="28" selection-end-line="25" selection-end-column="28" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Profiles.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1881">
<caret line="105" column="11" lean-forward="false" selection-start-line="105" selection-start-column="11" selection-end-line="105" selection-end-column="11" />
<folding>
<element signature="e#0#61#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/haha.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/router.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="209">
<caret line="25" column="30" lean-forward="false" selection-start-line="25" selection-start-column="30" selection-end-line="25" selection-end-column="30" />
<folding>
<element signature="e#0#53#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Register.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="38">
<caret line="2" column="33" lean-forward="false" selection-start-line="2" selection-start-column="33" selection-end-line="2" selection-end-column="33" />
<folding>
<element signature="e#0#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Profiles.less">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/auth.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="456">
<caret line="25" column="28" lean-forward="false" selection-start-line="25" selection-start-column="28" selection-end-line="25" selection-end-column="28" />
<folding>
<marker date="1490868302883" expanded="true" signature="77:96" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/config.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="38">
<caret line="2" column="14" lean-forward="false" selection-start-line="2" selection-start-column="14" selection-end-line="2" selection-end-column="14" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Login.less">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/i18n.json">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/IndexPage.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/IndexPage.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Profiles.less">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/config.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="38">
<caret line="2" column="37" lean-forward="false" selection-start-line="2" selection-start-column="12" selection-end-line="2" selection-end-column="37" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/example.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/user.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/services/auth.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="247">
<caret line="16" column="0" lean-forward="true" selection-start-line="16" selection-start-column="0" selection-end-line="16" selection-end-column="0" />
<folding>
<marker date="1490868302883" expanded="true" signature="77:96" ph="{...}" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/user.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-32">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/common.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.editorconfig">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/index.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="633">
<caret line="52" column="34" lean-forward="false" selection-start-line="52" selection-start-column="34" selection-end-line="52" selection-end-column="34" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/EmailForm.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="1140">
<caret line="72" column="30" lean-forward="false" selection-start-line="72" selection-start-column="30" selection-end-line="72" selection-end-column="30" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/auth.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="418">
<caret line="38" column="26" lean-forward="false" selection-start-line="38" selection-start-column="26" selection-end-line="38" selection-end-column="26" />
<folding>
<element signature="e#471#538#0" expanded="false" />
<element signature="e#570#670#0" expanded="false" />
<element signature="e#705#808#0" expanded="false" />
<element signature="e#960#1027#0" expanded="false" />
<element signature="e#1057#1155#0" expanded="false" />
<element signature="e#1192#1291#0" expanded="false" />
<element signature="e#1325#1424#0" expanded="false" />
<element signature="e#1451#1546#0" expanded="false" />
<element signature="e#1580#1676#0" expanded="false" />
<element signature="e#1831#1927#0" expanded="false" />
<element signature="e#1962#2059#0" expanded="false" />
<element signature="e#2091#2188#0" expanded="false" />
<element signature="e#2215#2310#0" expanded="false" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/example.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Reset.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="-754">
<caret line="19" column="33" lean-forward="true" selection-start-line="19" selection-start-column="33" selection-end-line="19" selection-end-column="33" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/models/haha.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="190">
<caret line="10" column="7" lean-forward="false" selection-start-line="10" selection-start-column="7" selection-end-line="10" selection-end-column="7" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/Haha.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/Haha.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/PasswordForm.css">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="0">
<caret line="0" column="0" lean-forward="false" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/PasswordForm.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="570">
<caret line="33" column="56" lean-forward="true" selection-start-line="33" selection-start-column="56" selection-end-line="33" selection-end-column="56" />
<folding>
<element signature="e#0#35#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/router.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="190">
<caret line="23" column="48" lean-forward="false" selection-start-line="23" selection-start-column="48" selection-end-line="23" selection-end-column="48" />
<folding>
<element signature="e#0#53#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Login.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="703">
<caret line="37" column="101" lean-forward="false" selection-start-line="37" selection-start-column="101" selection-end-line="37" selection-end-column="101" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Activate.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="513">
<caret line="27" column="11" lean-forward="false" selection-start-line="27" selection-start-column="11" selection-end-line="27" selection-end-column="11" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Profiles.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="38">
<caret line="8" column="27" lean-forward="false" selection-start-line="8" selection-start-column="27" selection-end-line="8" selection-end-column="27" />
<folding>
<element signature="e#0#61#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/components/Example.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="247">
<caret line="13" column="0" lean-forward="true" selection-start-line="13" selection-start-column="0" selection-end-line="13" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.eslintrc">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="304">
<caret line="16" column="32" lean-forward="false" selection-start-line="16" selection-start-column="32" selection-end-line="16" selection-end-column="32" />
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/routes/Register.js">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="399">
<caret line="21" column="36" lean-forward="false" selection-start-line="21" selection-start-column="36" selection-end-line="21" selection-end-column="36" />
<folding>
<element signature="e#0#63#0" expanded="true" />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/.gitignore">
<provider selected="true" editor-type-id="text-editor">
<state relative-caret-position="228">
<caret line="12" column="0" lean-forward="false" selection-start-line="12" selection-start-column="0" selection-end-line="12" selection-end-column="0" />
<folding />
</state>
</provider>
</entry>
</component>
</project>
\ No newline at end of file
import { Form, Input } from 'antd';
import React from 'react';
import styles from './EmailForm.css';
import {connect} from 'react-redux'
import { Form, Input, Icon, Button } from 'antd'
const FormItem = Form.Item;
import SubmitButton from './SubmitButton'
import { connect } from 'react-redux';
import SubmitButton from './SubmitButton';
const FormItem = Form.Item;
const formItemLayout = {
labelCol: { span: 4 },
wrapperCol: { span: 15 },
}
};
class EmailForm extends React.Component {
onUpdateEmail = (e) => {
const { form, dispatch, data: {id} } = this.props
const { form, dispatch, data: { id } } = this.props;
e && e.preventDefault();
form.validateFieldsAndScroll((err, values) => {
if (!err) {
console.log('Received values of form: ', values);
const { email, password } = values
dispatch({type: "user/updateEmail", payload: { email, password, user_id: id }})
const { email, password } = values;
dispatch({ type: 'user/updateEmail', payload: { email, password, user_id: id } });
}
});
}
};
render(){
render() {
const {form, dispatch, data, checkEmail, isEmailExists} = this.props
const {getFieldDecorator} = form
const {id, email} = data
const { form, dispatch, data, checkEmail, isEmailExists } = this.props;
const { getFieldDecorator } = form;
const { id, email } = data;
const emailProps = {
fromItem: {
label: "email",
label: 'email',
hasFeedback: true,
validateStatus: checkEmail,
help: isEmailExists ? 'email exists' : '',
...formItemLayout
},
decorator: {
initialValue: email
initialValue: email,
},
input: {
placeholder: "email"
}
}
placeholder: 'email',
},
};
const passwordProps = {
fromItem: {
label: "passwrod",
...formItemLayout
label: 'passwrod',
...formItemLayout,
},
decorator: {
rules: [
{ required: true, message: '密码至少为8-24位', pattern: /^.{8,24}$/ }
]
{ required: true, message: '密码至少为8-24位', pattern: /^.{8,24}$/ },
],
},
input: {
placeholder: "password",
type: 'password'
}
}
placeholder: 'password',
type: 'password',
},
};
return (
<Form onSubmit={this.onUpdateEmail}>
<FormItem {...emailProps.fromItem}>
{getFieldDecorator(`email`, {...emailProps.decorator})(
<Input
{...emailProps.input}
onBlur = {() => dispatch({type: 'auth/checkEmail', payload: { ...form.getFieldsValue(), id} })}/>
{getFieldDecorator(`email`, { ...emailProps.decorator })(
<Input
{...emailProps.input}
onBlur={() => dispatch({ type: 'auth/checkEmail', payload: { ...form.getFieldsValue(), id } })}/>,
)}
</FormItem>
<FormItem {...passwordProps.fromItem}>
{getFieldDecorator(`password`, {...passwordProps.decorator})(
<Input {...passwordProps.input} />
{getFieldDecorator('password', { ...passwordProps.decorator })(
<Input {...passwordProps.input} />,
)}
</FormItem>
......@@ -92,20 +92,19 @@ class EmailForm extends React.Component {
}
function mapStateToProps(state, props) {
function mapStateToProps(state) {
const {
user: {data},
auth: {isEmailExists, checkEmail}
} = state
user: { data },
auth: { isEmailExists, checkEmail },
} = state;
return {
data,
checkEmail,
isEmailExists
isEmailExists,
};
}
const WrapperEmailForm = Form.create()(EmailForm)
const WrapperEmailForm = Form.create()(EmailForm);
export default connect(mapStateToProps)(WrapperEmailForm);
......@@ -8,7 +8,6 @@ const Example = () => {
);
};
Example.propTypes = {
};
Example.propTypes = {};
export default Example;
import { Form, Input } from 'antd';
import React from 'react';
import styles from './EmailForm.css';
import {connect} from 'react-redux'
import { Form, Input, Icon, Button } from 'antd'
import { connect } from 'react-redux';
import SubmitButton from './SubmitButton';
const FormItem = Form.Item;
import SubmitButton from './SubmitButton'
const formItemLayout = {
labelCol: { span: 4 },
wrapperCol: { span: 15 },
}
};
class EmailForm extends React.Component {
checkPassword = (rule, value, callback) => {
const form = this.props.form;
if (value && value !== form.getFieldValue('new_password')) {
callback('两次密码输入不符');
} else {
callback();
}
}
checkConfirm = (rule, value, callback) => {
const form = this.props.form;
if (value) {
form.validateFields(['confirm'], { force: true });
}
callback();
}
onSubmit = (e) => {
const { form, dispatch, data: {id} } = this.props
const { form, dispatch, data: { id } } = this.props;
e && e.preventDefault();
form.validateFieldsAndScroll((err, values) => {
if (!err) {
console.log('Received values of form: ', values);
const { email, password } = values
// dispatch({type: "user/updateEmail", payload: { email, password, user_id: id }})
const { email, password } = values;
dispatch({ type: 'user/updateEmail', payload: { email, password, user_id: id } });
}
});
}
};
render(){
checkConfirm = (rule, value, callback) => {
const form = this.props.form;
if (value) {
form.validateFields(['confirm'], { force: true });
}
callback();
};
checkPassword = (rule, value, callback) => {
const form = this.props.form;
if (value && value !== form.getFieldValue('new_password')) {
callback('两次密码输入不符');
} else {
callback();
}
};
render() {
const {form } = this.props
const {getFieldDecorator} = form
const { form } = this.props;
const { getFieldDecorator } = form;
const passwordProps = {
fromItem: {
label: "passwrod",
label: 'passwrod',
...formItemLayout
},
decorator: {
rules: [
{ required: true, message: '密码至少为8-24位', pattern: /^.{8,24}$/ },
{ validator: this.checkConfirm }
]
{ validator: this.checkConfirm },
],
},
input: {
placeholder: "password",
type: 'password'
}
}
placeholder: 'password',
type: 'password',
},
};
const confirmProps = {
fromItem: {
label: "comfirm",
label: 'comfirm',
...formItemLayout
},
decorator: {
rules: [
{ required: true, message: '密码至少为8-24位', pattern: /^.{8,24}$/},
{ validator: this.checkPassword}
]
{ required: true, message: '密码至少为8-24位', pattern: /^.{8,24}$/ },
{ validator: this.checkPassword },
],
},
input: {
placeholder: "confirm",
type: 'password'
}
}
placeholder: 'confirm',
type: 'password',
},
};
return (
<Form onSubmit={this.onSubmit}>
<Form onSubmit={this.onSubmit}>
<FormItem {...passwordProps.fromItem} label="old password">
{getFieldDecorator(`old_password`, {...passwordProps.decorator})(
<Input {...passwordProps.input} />
{getFieldDecorator(`old_password`, { ...passwordProps.decorator })(
<Input {...passwordProps.input} />,
)}
</FormItem>
<FormItem {...passwordProps.fromItem} label="new password">
{getFieldDecorator(`new_password`, {...passwordProps.decorator})(
<Input {...passwordProps.input} />
{getFieldDecorator(`new_password`, { ...passwordProps.decorator })(
<Input {...passwordProps.input} />,
)}
</FormItem>
<FormItem {...confirmProps.fromItem}>
{getFieldDecorator(`confirm`, {...confirmProps.decorator})(
<Input {...confirmProps.input} />
{getFieldDecorator(`confirm`, { ...confirmProps.decorator })(
<Input {...confirmProps.input} />,
)}
</FormItem>
......@@ -113,18 +113,16 @@ class EmailForm extends React.Component {
}
function mapStateToProps(state, props) {
const {
user: {data}
} = state
user: { data },
} = state;
return {
data,
};
}
const WrapperEmailForm = Form.create()(EmailForm)
const WrapperEmailForm = Form.create()(EmailForm);
export default connect(mapStateToProps)(WrapperEmailForm);
.wrapSubmit{
display: flex;
justify-content: center;
}
\ No newline at end of file
.wrapSubmit {
display: flex;
justify-content: center;
}
import { Button } from 'antd';
import React from 'react';
import styles from './SubmitButton.css';
import {Button} from 'antd'
function SubmitButton() {
return (
<div className={styles.wrapSubmit}>
<Button type="primary" htmlType="submit" size="large">提交</Button>
</div>
<div className={styles.wrapSubmit}>
<Button type="primary" htmlType="submit" size="large">提交</Button>
</div>
);
}
......
import { Form, Input } from 'antd';
import React from 'react';
import styles from './EmailForm.css';
import {connect} from 'react-redux'
import { Form, Input, Icon, Button } from 'antd'
import { connect } from 'react-redux';
import SubmitButton from './SubmitButton';
const FormItem = Form.Item;
import SubmitButton from './SubmitButton'
const formItemLayout = {
labelCol: { span: 4 },
wrapperCol: { span: 15 },
}
};
class EmailForm extends React.Component {
onSubmit = (e) => {
const { form, dispatch, data: {id} } = this.props
const { form, dispatch, data: { id } } = this.props;
e && e.preventDefault();
form.validateFieldsAndScroll((err, values) => {
if (!err) {
console.log('Received values of form: ', values);
const { username, password } = values
dispatch({type: "user/updateAccount", payload: { username, password, user_id: id }})
const { username, password } = values;
dispatch({ type: 'user/updateAccount', payload: { username, password, user_id: id } });
}
});
}
};
render(){
render() {
const {form, dispatch, data, checkUsername, isUserNameExists} = this.props
const {getFieldDecorator} = form
const {id, username} = data
const { form, dispatch, data, checkUsername, isUserNameExists } = this.props;
const { getFieldDecorator } = form;
const { id, username } = data;
const usernameProps = {
fromItem: {
label: "username",
label: 'username',
hasFeedback: true,
validateStatus: checkUsername,
help: isUserNameExists ? 'username exists' : '',
...formItemLayout
},
decorator: {
initialValue: username
initialValue: username,
},
input: {
placeholder: "username",
onBlur: () => dispatch({type: 'auth/checkUsername', payload: { ...form.getFieldsValue(), user_id: id } }),
}
}
placeholder: 'username',
onBlur: () => dispatch({ type: 'auth/checkUsername', payload: { ...form.getFieldsValue(), user_id: id } }),
},
};
const passwordProps = {
fromItem: {
label: "passwrod",
label: 'passwrod',
...formItemLayout
},
decorator: {
rules: [
{ required: true, message: '密码至少为8-24位', pattern: /^.{8,24}$/ },
]
],
},
input: {
placeholder: "password",
type: 'password'
}
}
placeholder: 'password',
type: 'password',
},
};
return (
<Form onSubmit={this.onSubmit}>
<FormItem {...usernameProps.fromItem}>
{getFieldDecorator(`username`, {...usernameProps.decorator})(
<Input {...usernameProps.input}/>
{getFieldDecorator(`username`, { ...usernameProps.decorator })(
<Input {...usernameProps.input}/>,
)}
</FormItem>
<FormItem {...passwordProps.fromItem}>
{getFieldDecorator(`password`, {...passwordProps.decorator})(
<Input {...passwordProps.input} />
{getFieldDecorator(`password`, { ...passwordProps.decorator })(
<Input {...passwordProps.input} />,
)}
</FormItem>
......@@ -90,20 +89,19 @@ class EmailForm extends React.Component {
}
function mapStateToProps(state, props) {
const {
user: {data},
auth: {isUserNameExists, checkUsername}
} = state
user: { data },
auth: { isUserNameExists, checkUsername },
} = state;
return {
data,
checkUsername,
isUserNameExists
isUserNameExists,
};
}
const WrapperEmailForm = Form.create()(EmailForm)
const WrapperEmailForm = Form.create()(EmailForm);
export default connect(mapStateToProps)(WrapperEmailForm);
export default {
apiRoot: 'http://localhost:3000',
}
\ No newline at end of file
// apiRoot: 'http://localhost:3000',
apiRoot: 'http://192.168.1.107:3000',
};
import dva from 'dva';
import { browserHistory } from 'dva/router';
import ReactDOM from 'react-dom';
import { browserHistory } from 'dva/router'
import { addLocaleData, IntlProvider } from 'react-intl';
import en from 'react-intl/locale-data/en';
import zh from 'react-intl/locale-data/zh';
import localeData from '../i18n.json';
import './index.css';
import { IntlProvider, addLocaleData } from 'react-intl';
// 1. Initialize
const app = dva({
history: browserHistory
history: browserHistory,
});
app.model(require("./models/user"));
app.model(require('./models/user'));
app.model(require("./models/auth"));
app.model(require('./models/auth'));
app.model(require("./models/haha"));
app.model(require('./models/haha'));
// app.model(require("./models/login"));
app.model(require("./models/common"));
app.model(require('./models/common'));
// 2. Plugins
......@@ -32,23 +35,21 @@ app.model(require("./models/common"));
app.router(require('./router'));
// 5. Start
import en from 'react-intl/locale-data/en'
import zh from 'react-intl/locale-data/zh'
import localeData from '../i18n.json'
addLocaleData([...en, ...zh])
addLocaleData([...en, ...zh]);
/*eslint-disable */
const language = navigator.language || (navigator.languages && navigator.languages[0]) || navigator.userLanguage;
/*eslint-enable */
const languageWithoutRegionCode = language.toLowerCase().split(/[_-]+/)[0];
const messages = localeData[languageWithoutRegionCode] || localeData[language] || localeData.zh;
const App = app.start()
const App = app.start();
ReactDOM.render(
<IntlProvider locale={ language } messages={ messages }>
<App />
</IntlProvider>,
document.getElementById("root")
)
</IntlProvider>,
document.getElementById('root'),
);
import { login, forgot, register, reset, activate, checkUserExists } from '../services/auth'
import { message } from 'antd'
import { message } from 'antd';
import { activate, checkUserExists, forgot, login, register, reset } from '../services/auth';
export default {
......@@ -14,191 +14,197 @@ export default {
isLoginSubmit: false,
isForgotSubmit: false,
isSpinSubmit: false,
register: {}
register: {},
},
reducers: {
change(state, action) {
return {
...state, ...action.payload
}
};
},
checkEmail(state, action) {
return {
...state, ...{
checkEmail: 'validating'
checkEmail: 'validating',
}
}
};
},
checkUsername(state, action) {
return {
...state, ...{
checkUsername: 'validating'
checkUsername: 'validating',
}
}
};
},
activate(state, action) {
return {
...state, ...{
activateState: true
activateState: true,
}
}
};
},
check(state, action) {
return {
...state, ...action.payload
}
};
},
register(state, action) {
return {
...state, ...{
isRegisterSubmit: true
isRegisterSubmit: true,
}
}
};
},
registerSuccess(state, action) {
return {
...state, ...{
isRegisterSubmit: false
isRegisterSubmit: false,
}
}
};
},
registerFail(state, action) {
return {
...state, ...{
isRegisterSubmit: false
isRegisterSubmit: false,
}
}
};
},
login(state, action) {
return {
...state, ...{
isLoginSubmit: true
isLoginSubmit: true,
}
}
};
},
loginSuccess(state, action) {
return {
...state, ...{
isLoginSubmit: false
isLoginSubmit: false,
}
}
};
},
loginFail(state, action) {
return {
...state, ...{
isLoginSubmit: false
isLoginSubmit: false,
}
}
};
},
forgot(state, action) {
return {
...state, ...{
isForgotSubmit: true
isForgotSubmit: true,
}
}
};
},
forgotSuccess(state, action) {
return {
...state, ...{
isForgotSubmit: false
isForgotSubmit: false,
}
}
};
},
forgotFail(state, action) {
return {
...state, ...{
isForgotSubmit: false
isForgotSubmit: false,
}
}
};
},
reset(state, action) {
return {
...state, ...{
isResetSubmit: true
isResetSubmit: true,
}
}
};
},
resetSuccess(state, action) {
return {
...state, ...{
isResetSubmit: false
isResetSubmit: false,
}
}
};
},
resetFail(state, action) {
return {
...state, ...{
isResetSubmit: false
isResetSubmit: false,
}
}
};
},
},
effects: {
*activate({ payload }, { call, put }) {
const { data } = yield call(activate, payload)
const { data } = yield call(activate, payload);
if (data) {
yield put({ type: 'check', payload: { activateState: false } });
}
},
*checkEmail({ payload }, { call, put }) {
const { data } = yield call(checkUserExists, payload)
const { data } = yield call(checkUserExists, payload);
if(data) {
yield put({ type: 'check', payload: { isEmailExists: true , checkEmail: 'warning'}})
if (data) {
yield put({ type: 'check', payload: { isEmailExists: true, checkEmail: 'warning' } });
} else {
yield put({ type: 'check', payload: { isEmailExists: false , checkEmail: 'success'}})
yield put({ type: 'check', payload: { isEmailExists: false, checkEmail: 'success' } });
}
},
*checkUsername({ payload }, { call, put }) {
const { data } = yield call(checkUserExists, payload)
const { data } = yield call(checkUserExists, payload);
if(data) {
yield put({ type: 'check', payload: { isUserNameExists: true , checkUsername: 'warning'}})
if (data) {
yield put({ type: 'check', payload: { isUserNameExists: true, checkUsername: 'warning' } });
} else {
yield put({ type: 'check', payload: { isUserNameExists: false , checkUsername: 'success'}})
yield put({ type: 'check', payload: { isUserNameExists: false, checkUsername: 'success' } });
}
},
*login({ payload }, { call, put }) {
const {data} = yield call(login, payload)
if(data){
yield put({ type: 'loginSuccess' })
yield put({ type: 'user/loginSuccess', payload: { data } })
message.info("登录成功")
} else {
yield put({ type: 'loginFail' })
message.error("登陆失败")
}
const { data } = yield call(login, payload);
if (data) {
yield put({ type: 'loginSuccess' });
yield put({ type: 'user/loginSuccess', payload: { data } });
message.info('登录成功');
} else {
yield put({ type: 'loginFail' });
message.error('登陆失败');
}
},
*forgot({ payload }, { call, put }) {
const { data } = yield call(forgot, payload)
if(data){
yield put({ type: 'forgotSuccess' })
message.info("已发送密码重置邮件")
}else {
yield put({ type: 'forgotFail' })
message.error("密码重置邮件发送失败")
}
const { data } = yield call(forgot, payload);
if (data) {
yield put({ type: 'forgotSuccess' });
message.info('已发送密码重置邮件');
} else {
yield put({ type: 'forgotFail' });
message.error('密码重置邮件发送失败');
}
},
*register({ payload }, { call, put }) {
const {data} = yield call(register, payload)
const { data } = yield call(register, payload);
if(data) {
yield put({ type: 'registerSuccess'})
message.info("注册成功")
} else {
yield put({ type: 'registerFail' })
message.error("注册失败")
}
if (data) {
yield put({ type: 'registerSuccess' });
message.info('注册成功');
} else {
yield put({ type: 'registerFail' });
message.error('注册失败');
}
},
*reset({ payload }, { call, put }) {
const { data } = yield call(reset, payload)
if(data){
yield put({ type: 'resetSuccess' })
message.info("重置成功")
}else{
yield put({ type: 'resetFail' })
message.error("重置失败")
}
const { data } = yield call(reset, payload);
if (data) {
yield put({ type: 'resetSuccess' });
message.info('重置成功');
} else {
yield put({ type: 'resetFail' });
message.error('重置失败');
}
},
},
subscriptions: {},
......
export default {
namespace: 'common',
state: {
},
reducers: {
},
state: {},
reducers: {},
effects: {},
subscriptions: {},
};
export default {
namespace: 'example',
......
export default {
namespace: 'haha',
state: {
text: '123213213'
text: '123213213',
},
reducers: {
change(state, action) {
return {
...state, ...action.payload
}
}
...state, ...action.payload
};
},
},
effects: {},
subscriptions: {},
......
import { routerRedux } from 'dva/router'
import { updateProfile, updateAccount } from '../services/user'
import { message } from 'antd'
import { message } from 'antd';
import { routerRedux } from 'dva/router';
import { updateAccount, updateProfile } from '../services/user';
export default {
namespace: 'user',
state: {
data: {},
isUpdateSubmit: false
isUpdateSubmit: false,
},
reducers: {
loginFromStorage(state, action) {
return {
...state, ...action.payload
}
};
},
loginSuccess(state, action) {
return {
...state, ...action.payload
}
};
},
updateProfile(state, action) {
return {
...state, ...{
isUpdateSubmit: true
isUpdateSubmit: true,
}
}
};
},
updateProfileSuccess(state, action) {
return {
...state, ...action.payload, ...{
isUpdateSubmit: false
isUpdateSubmit: false,
}
}
};
},
updateProfileFail(state, action) {
return {
...state, ...{
isUpdateSubmit: false
isUpdateSubmit: false,
}
}
};
},
updateAccount(state, action) {
return {
...state, ...{
isUpdateSubmit: true
isUpdateSubmit: true,
}
}
};
},
updateAccountSuccess(state, action) {
return {
...state, ...action.payload, ...{
isUpdateSubmit: false
isUpdateSubmit: false,
}
}
};
},
updateAccountFail(state, action) {
return {
...state, ...{
isUpdateSubmit: false
isUpdateSubmit: false,
}
}
};
},
},
effects: {
*loginSuccess({ payload }, { call, put }) {
localStorage.setItem("user", JSON.stringify(payload.data))
localStorage.setItem('user', JSON.stringify(payload.data));
yield put(routerRedux.replace("/profiles"))
yield put(routerRedux.replace('/profiles'));
},
*preLogin({ payload }, { call, put }) {
let user = localStorage.getItem("user")
let user = localStorage.getItem('user');
if(!user){
yield put(routerRedux.replace("/login"))
if (!user) {
yield put(routerRedux.replace('/login'));
}
yield put({type: 'loginFromStorage', payload: { data: JSON.parse(user) }})
yield put({ type: 'loginFromStorage', payload: { data: JSON.parse(user) } });
},
*updateProfile({ payload }, { call, put }) {
let { data } = yield call(updateProfile, payload )
if(data){
yield put({ type: 'updateProfileSuccess', payload: { data } })
message.info("更新成功")
}else {
yield put({ type: 'updateProfileFail' })
message.error("更新失败")
}
let { data } = yield call(updateProfile, payload);
if (data) {
yield put({ type: 'updateProfileSuccess', payload: { data } });
message.info('更新成功');
} else {
yield put({ type: 'updateProfileFail' });
message.error('更新失败');
}
},
*updateAccount({ payload }, { call, put }) {
let { data } = yield call(updateAccount, payload )
if(data){
yield put({ type: 'updateAccountSuccess', payload: { data } })
message.info("更新成功")
}else {
yield put({ type: 'updateAccountFail' })
message.error("更新失败")
}
let { data } = yield call(updateAccount, payload);
if (data) {
yield put({ type: 'updateAccountSuccess', payload: { data } });
message.info('更新成功');
} else {
yield put({ type: 'updateAccountFail' });
message.error('更新失败');
}
},
},
subscriptions: {
setup({ dispatch, history }) {
return history.listen(({ pathname, query}) => {
if(pathname == '/profiles') {
return history.listen(({ pathname, query }) => {
if (pathname == '/profiles') {
dispatch({ type: 'preLogin', payload: query });
dispatch({ type: 'preLogin', payload: query})
}
})
}
});
},
},
};
import { Redirect, Route, Router } from 'dva/router';
import React from 'react';
import { Router, Route, Redirect } from 'dva/router';
import IndexPage from './routes/IndexPage';
import Login from "./routes/Login.js";
import Active from './routes/Activate.js';
import Forgot from "./routes/Forgot.js";
import Forgot from './routes/Forgot.js';
import Register from "./routes/Register.js";
import Login from './routes/Login.js';
import Reset from "./routes/Reset.js";
import Profiles from './routes/Profiles.js';
import Profiles from "./routes/Profiles.js";
import Register from './routes/Register.js';
import Active from "./routes/Activate.js";
import Reset from './routes/Reset.js';
function RouterConfig({ history }) {
return (
<Router history={history}>
<Redirect from="/" to="/login"/>
<Route path="/">
<Route path="/login" component={Login} />
<Route path="/forgot" component={Forgot} />
<Route path="/register" component={Register} />
<Route path="/reset" component={Reset} />
<Route path="/profiles" component={Profiles} />
<Route path="/login" component={Login}/>
<Route path="/forgot" component={Forgot}/>
<Route path="/register" component={Register}/>
<Route path="/reset" component={Reset}/>
<Route path="/profiles" component={Profiles}/>
</Route>
<Route path="/activate" component={Active} />
<Route path="/activate" component={Active}/>
</Router>
);
}
......
import React from 'react';
import { connect } from 'dva';
import styles from './Activate.css';
import { Button } from 'antd';
import { connect } from 'dva';
import React from 'react';
class Active extends React.Component {
handleClick = () => {
const { dispatch, location: { query: { key } } } = this.props
const { dispatch, location: { query: { key } } } = this.props;
dispatch({ type: 'auth/active', payload: { key }})
}
dispatch({ type: 'auth/activate', payload: { key } });
};
render() {
const { activateState } = this.props
const { activateState } = this.props;
return (
<div style={{ display: 'flex', justifyContent:'center', alignItems: 'center', minHeight: '100%'}}>
<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', minHeight: '100%' }}>
<Button type="primary" icon="poweroff" loading={activateState} onClick={this.handleClick}>
激活
</Button>
</div>
)
);
}
}
function mapStateToProps(state) {
const {
auth: { activateState }
} = state
auth: { activateState },
} = state;
return {
activateState
activateState,
};
}
......
import React from 'react';
import { Button, Form, Icon, Input, Select, Spin } from 'antd';
import { connect } from 'dva';
import { Link } from 'dva/router'
import styles from './Login.less';
import { Form, Input, Tooltip, Icon, Cascader, Select, Row, Col, Checkbox, Button, Spin } from 'antd';
import { Link } from 'dva/router';
import React from 'react';
const FormItem = Form.Item;
const Option = Select.Option;
......@@ -21,56 +20,56 @@ const formItemLayout = {
class Login extends React.Component {
onSubmitLogin = (e) => {
const { form, dispatch, params: { id }} = this.props
const { form, dispatch, params: { id } } = this.props;
e && e.preventDefault();
form.validateFieldsAndScroll((err, values) => {
if (!err) {
console.log('Received values of form: ', values);
const {email} = values
dispatch({type: "auth/forgot", payload: {account: email}})
const { email } = values;
dispatch({ type: 'auth/forgot', payload: { account: email } });
}
});
}
};
render() {
const { getFieldDecorator, dispatch } = this.props.form;
const {isForgotSubmit=false} = this.props
const { isForgotSubmit = false } = this.props;
return (
<div style={{ display: 'flex', justifyContent:'center', alignItems: 'center', height: '100%'}}>
<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>
<Spin spinning={isForgotSubmit} delay={500}>
<Form onSubmit={this.onSubmitLogin} className="login-form">
<FormItem>
{getFieldDecorator('email', {
rules: [{ required: true, message: 'Please input your username or email!' }],
})(
<Input prefix={<Icon type="user" style={{ fontSize: 13 }} />} placeholder="username or email" />
)}
</FormItem>
<Button type="primary" htmlType="submit" className="login-form-button">
Send
</Button>
Or <Link to="/login">Sign In</Link>
</Form>
<Form onSubmit={this.onSubmitLogin} className="login-form">
<FormItem>
{getFieldDecorator('email', {
rules: [{ required: true, message: 'Please input your username or email!' }],
})(
<Input prefix={<Icon type="user" style={{ fontSize: 13 }}/>} placeholder="username or email"/>,
)}
</FormItem>
<Button type="primary" htmlType="submit" className="login-form-button">
Send
</Button>
Or <Link to="/login">Sign In</Link>
</Form>
</Spin>
</div>
)
);
}
}
function mapStateToProps(state) {
const {
auth: {isForgotSubmit}
} = state
auth: { isForgotSubmit },
} = state;
return {
isForgotSubmit
isForgotSubmit,
};
}
const WrapperLogin = Form.create()(Login)
const WrapperLogin = Form.create()(Login);
export default connect(mapStateToProps)(WrapperLogin);
import React from 'react';
import { connect } from 'dva';
import React from 'react';
import styles from './IndexPage.css';
function IndexPage() {
return (
<div className={styles.normal}>
<h1 className={styles.title}>Yay! Welcome to dva!</h1>
<div className={styles.welcome} />
<div className={styles.welcome}/>
<ul className={styles.list}>
<li>To get started, edit <code>src/index.js</code> and save to reload.</li>
<li><a href="https://github.com/dvajs/dva-docs/blob/master/v1/en-us/getting-started.md">Getting Started</a></li>
......@@ -15,7 +15,6 @@ function IndexPage() {
);
}
IndexPage.propTypes = {
};
IndexPage.propTypes = {};
export default connect()(IndexPage);
import React from 'react';
import { Button, Checkbox, Form, Icon, Input, Spin } from 'antd';
import { connect } from 'dva';
import { Link } from 'dva/router'
import styles from './Login.less';
import { Form, Input, Tooltip, Icon, Cascader, Select, Row, Col, Checkbox, Button, Spin } from 'antd';
const FormItem = Form.Item;
const Option = Select.Option;
import { Link } from 'dva/router';
import React from 'react';
const FormItem = Form.Item;
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 6 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 14 },
},
};
class Login extends React.Component {
onSubmitLogin = (e) => {
const { form, dispatch, params: { id }} = this.props
const { form, dispatch } = this.props;
if (e) {
e.preventDefault();
}
e && e.preventDefault();
form.validateFieldsAndScroll((err, values) => {
if (!err) {
console.log('Received values of form: ', values);
const {account, password} = values
dispatch({type: "auth/login", payload: {account: account, password}})
const { account, password } = values;
dispatch({ type: 'auth/login', payload: { account, password } });
}
});
}
};
render() {
const { getFieldDecorator, dispatch} = this.props.form;
const { isLoginSubmit=false } = this.props
const { getFieldDecorator } = this.props.form;
const { isLoginSubmit = false } = this.props;
return (
<div style={{ display: 'flex', justifyContent:'center', alignItems: 'center', height: '100%'}}>
<Spin spinning={isLoginSubmit} delay={500}>
<Form onSubmit={this.onSubmitLogin} className="login-form">
<FormItem>
{getFieldDecorator('account', {
rules: [{ required: true, message: 'Please input your account!' }],
})(
<Input prefix={<Icon type="user" style={{ fontSize: 13 }} />} placeholder="Username" />
)}
</FormItem>
<FormItem>
{getFieldDecorator('password', {
rules: [{ required: true, message: 'Please input your Password!' }],
})(
<Input prefix={<Icon type="lock" style={{ fontSize: 13 }} />} type="password" placeholder="Password" />
)}
</FormItem>
<FormItem>
{getFieldDecorator('remember', {
valuePropName: 'checked',
initialValue: true,
})(
<Checkbox>Remember me</Checkbox>
)}
<Link to="/forgot" className="login-form-forgot">Forgot password</Link>
<Button type="primary" htmlType="submit" className="login-form-button">
Log in
</Button>
Or <Link to="/register">register now!</Link>
</FormItem>
</Form>
</Spin>
<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>
<Spin spinning={isLoginSubmit} delay={500}>
<Form onSubmit={this.onSubmitLogin} className="login-form">
<FormItem>
{getFieldDecorator('account', {
rules: [{ required: true, message: 'Please input your account!' }],
})(
<Input prefix={<Icon type="user" style={{ fontSize: 13 }} />} placeholder="Username" />,
)}
</FormItem>
<FormItem>
{getFieldDecorator('password', {
rules: [{ required: true, message: 'Please input your Password!' }],
})(
<Input prefix={<Icon type="lock" style={{ fontSize: 13 }} />} type="password" placeholder="Password" />,
)}
</FormItem>
<FormItem>
{getFieldDecorator('remember', {
valuePropName: 'checked',
initialValue: true,
})(
<Checkbox>Remember me</Checkbox>,
)}
<Link to="/forgot" className="login-form-forgot">Forgot password</Link>
<Button type="primary" htmlType="submit" className="login-form-button">
Log in
</Button>
Or <Link to="/register">register now!</Link>
</FormItem>
</Form>
</Spin>
</div>
)
);
}
}
function mapStateToProps(state) {
const {
auth: {isLoginSubmit}
} = state
auth: { isLoginSubmit },
} = state;
return {
isLoginSubmit
isLoginSubmit,
};
}
const WrapperLogin = Form.create()(Login)
const WrapperLogin = Form.create()(Login);
export default connect(mapStateToProps)(WrapperLogin);
:global {
.login-form {
max-width: 300px;
}
.login-form-forgot {
float: right;
}
.login-form-button {
width: 100%;
}
}
.normal {
}
:global {
.login-form {
max-width: 300px;
}
.login-form-forgot {
float: right;
}
.login-form-button {
width: 100%;
}
}
.normal {
}
import React from 'react';
import { Button, Form, Icon, Input, Spin, Tabs } from 'antd';
import { connect } from 'dva';
import { Link } from 'dva/router'
import React from 'react';
import EmailForm from '../components/EmailForm';
import PasswordForm from '../components/PasswordForm';
import UserNameForm from '../components/UserNameForm';
import styles from './Profiles.less';
import { Form, Input, Icon, Radio, Tag, Tooltip, Button, Select, Tabs, Upload, Modal, Table, Popconfirm, Row, Col, Card, Spin } from 'antd'
const FormItem = Form.Item;
const RadioButton = Radio.Button;
const RadioGroup = Radio.Group;
const Option = Select.Option;
const TabPane = Tabs.TabPane;
const Dragger = Upload.Dragger;
import EmailForm from '../components/EmailForm'
import PasswordForm from '../components/PasswordForm'
import UserNameForm from '../components/UserNameForm'
const formItemLayout = {
labelCol: { span: 4 },
wrapperCol: { span: 15 },
}
};
class Profiles extends React.Component {
onUpdateSubmit = (e) => {
const { form, dispatch, data: {id}} = this.props
const { form, dispatch, data: { id } } = this.props;
e && e.preventDefault();
form.validateFieldsAndScroll((err, values) => {
if (!err) {
console.log('Received values of form: ', values);
const { username, nickname, password } = values
const { username, nickname, password } = values;
dispatch({type: "user/updateProfile", payload: { username, nickname, password, user_id: id }})
dispatch({ type: 'user/updateProfile', payload: { username, nickname, password, user_id: id } });
}
});
}
};
render() {
const { dispatch, form, data, isUpdateSubmit=false, checkUsername, isUserNameExists } = this.props
const { getFieldDecorator } = form;
const { username, nickname, id } = data
const { form, data, isUpdateSubmit = false } = this.props;
const { getFieldDecorator } = form;
const { nickname } = data;
const nicknameProps = {
fromItem: {
label: "nickname",
label: 'nickname',
...formItemLayout
},
decorator: {
initialValue: nickname
initialValue: nickname,
},
input: {
placeholder: "nickname",
}
}
placeholder: 'nickname',
},
};
return (
<Spin spinning={isUpdateSubmit} delay={500}>
<Tabs defaultActiveKey="1" className="app-detail-nav">
<TabPane tab={<span><Icon type="setting" /> 基本信息 </span>} key="1">
<Form onSubmit={this.onUpdateSubmit}>
<Form onSubmit={this.onUpdateSubmit}>
<FormItem {...nicknameProps.fromItem}>
{getFieldDecorator(`nickname`, {...nicknameProps.decorator})(
<Input {...nicknameProps.input}/>
{getFieldDecorator('nickname', { ...nicknameProps.decorator })(
<Input {...nicknameProps.input} />,
)}
</FormItem>
<FormItem>
<div className={styles.wrapSubmit}>
<Button type="primary" htmlType="submit" size="large">提交</Button>
<Button type="primary" htmlType="submit" size="large">提交</Button>
</div>
</FormItem>
</Form>
......@@ -79,40 +74,40 @@ class Profiles extends React.Component {
<TabPane tab={<span><Icon type="setting" /> 账户信息 </span>} key="2">
<Tabs type="card" className="app-detail-nav">
<TabPane tab={"修改用户名"} key={0}>
<TabPane tab={'修改用户名'} key={0}>
<UserNameForm />
</TabPane>
</TabPane>
<TabPane tab={"修改邮箱"} key={1}>
<TabPane tab={'修改邮箱'} key={1}>
<EmailForm />
</TabPane>
</TabPane>
<TabPane tab={"修改密码"} key={2}>
<TabPane tab={'修改密码'} key={2}>
<PasswordForm />
</TabPane>
</TabPane>
</Tabs>
</TabPane>
</Tabs>
</Spin>
)
</Spin>
);
}
}
function mapStateToProps(state, props) {
function mapStateToProps(state) {
const {
user: {data, isUpdateSubmit},
auth: {checkUsername, isEmailExists, isUserNameExists,}
} = state
user: { data, isUpdateSubmit },
auth: { checkUsername, isEmailExists, isUserNameExists, },
} = state;
return {
data,
data,
checkUsername,
isEmailExists,
isEmailExists,
isUserNameExists,
isUpdateSubmit
isUpdateSubmit,
};
}
const WrapperProfiles = Form.create()(Profiles)
const WrapperProfiles = Form.create()(Profiles);
export default connect(mapStateToProps)(WrapperProfiles);
:global {
.app-detail-nav{
}
.ant-card {
margin: 2vh 0;
}
.app-detail-nav .ant-tabs-nav-scroll {
display: flex;
justify-content: center;
}
.ant-upload-select-picture-card i {
font-size: 28px;
color: #999;
}
.ant-upload-select-picture-card .ant-upload-text {
margin-top: 8px;
font-size: 12px;
color: #666;
}
}
.wrapSubmit{
display: flex;
justify-content: center;
}
\ No newline at end of file
:global {
.app-detail-nav {
}
.ant-card {
margin: 2vh 0;
}
.app-detail-nav .ant-tabs-nav-scroll {
display: flex;
justify-content: center;
}
.ant-upload-select-picture-card i {
font-size: 28px;
color: #999;
}
.ant-upload-select-picture-card .ant-upload-text {
margin-top: 8px;
font-size: 12px;
color: #666;
}
}
.wrapSubmit {
display: flex;
justify-content: center;
}
import React from 'react';
import { Button, Form, Icon, Input, Select, Spin } from 'antd';
import { connect } from 'dva';
import { Link } from 'dva/router'
import styles from './Login.less';
import { Form, Input, Tooltip, Icon, Cascader, Select, Row, Col, Checkbox, Button, Spin } from 'antd';
import { Link } from 'dva/router';
import React from 'react';
const FormItem = Form.Item;
const Option = Select.Option;
......@@ -10,21 +9,21 @@ const Option = Select.Option;
class Register extends React.Component {
onSubmitLogin = (e) => {
const { form, dispatch, params: { id }} = this.props
const { form, dispatch, params: { id } } = this.props;
e && e.preventDefault();
form.validateFieldsAndScroll((err, values) => {
if (!err) {
console.log('Received values of form: ', values);
const {email, username, nickname, password, confirm} = values
const { email, username, nickname, password, confirm } = values;
dispatch({type: "auth/register", payload: {email, username, nickname, password }})
dispatch({ type: 'auth/register', payload: { email, username, nickname, password } });
}
});
}
};
checkPassword = (rule, value, callback) => {
const form = this.props.form;
......@@ -33,7 +32,7 @@ class Register extends React.Component {
} else {
callback();
}
}
};
checkConfirm = (rule, value, callback) => {
const form = this.props.form;
......@@ -41,119 +40,123 @@ class Register extends React.Component {
form.validateFields(['confirm'], { force: true });
}
callback();
}
};
render() {
const { dispatch, register, form, checkEmail, checkUsername, isEmailExists, isUserNameExists, isRegisterSubmit } = this.props
const { getFieldDecorator, } = form
const {email={}, username={}, password={} } = register
const { dispatch, register, form, checkEmail, checkUsername, isEmailExists, isUserNameExists, isRegisterSubmit } = this.props;
const { getFieldDecorator, } = form;
const { email = {}, username = {}, password = {} } = register;
const emailProps = {
hasFeedback: true,
validateStatus: checkEmail,
help: isEmailExists ? 'email exists' : ''
}
help: isEmailExists ? 'email exists' : '',
};
const emailInputProps = {
onBlur: () => dispatch({type: 'auth/checkEmail', payload: { ...form.getFieldsValue()} }),
placeholder: "Email",
}
onBlur: () => dispatch({ type: 'auth/checkEmail', payload: { ...form.getFieldsValue() } }),
placeholder: 'Email',
};
const usernameProps = {
hasFeedback: true,
validateStatus: checkUsername,
help: isUserNameExists ? 'username exists' : ''
}
help: isUserNameExists ? 'username exists' : '',
};
const usernameInputProps = {
onBlur: () => dispatch({type: 'auth/checkUsername', payload: { ...form.getFieldsValue()} }),
placeholder: "Username"
}
onBlur: () => dispatch({ type: 'auth/checkUsername', payload: { ...form.getFieldsValue() } }),
placeholder: 'Username',
};
return (
<div style={{ display: 'flex', justifyContent:'center', alignItems: 'center', height: '100%'}}>
<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>
<Spin spinning={isRegisterSubmit} delay={500}>
<Form onSubmit={this.onSubmitLogin} className="login-form">
<FormItem {...emailProps} >
{getFieldDecorator('email', {
rules: [{ required: true, message: '邮箱格式不对!', pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/ }],
}, {
})(
<Input {...emailInputProps} />
)}
</FormItem>
<FormItem {...usernameProps}>
{getFieldDecorator('username', {
rules: [{ required: true, message: '用户名格式有误!', pattern: /^[A-Za-z0-9_\u4E00-\u9FD5\u3400-\u4DBF\u{20000}-\u{2A6DF}\u{2A700}-\u{2CEAF}\uF900–\uFAFF\u{2F800}-\u{2FA1D}\uAC00–\uD7AF\u3040-\u30FF\u31F0–\u31FF\u{1B000}–\u{1B0FF}\u3005]+$/u }],
}, {
})(
<Input {...usernameInputProps}/>
)}
</FormItem>
<FormItem >
{getFieldDecorator('nickname', {
})(
<Input placeholder="nickname[optional]" />
)}
</FormItem>
<FormItem hasFeedback >
{getFieldDecorator('password', {
rules: [{ required: true, message: '密码至少为8-24位', pattern: /^.{8,24}$/ }],
}, {
validator: this.checkConfirm
})(
<Input
prefix={<Icon type="lock" style={{ fontSize: 13 }} />}
type="password"
placeholder="Password" />
)}
</FormItem>
<FormItem hasFeedback >
{getFieldDecorator('confirm', {
rules: [{
required: true, message: '密码至少为8-24位', pattern: /^.{8,24}$/
<Form onSubmit={this.onSubmitLogin} className="login-form">
<FormItem {...emailProps} >
{getFieldDecorator('email', {
rules: [{
required: true,
message: '邮箱格式不对!',
pattern: /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
}],
}, {})(
<Input {...emailInputProps} />,
)}
</FormItem>
<FormItem {...usernameProps}>
{getFieldDecorator('username', {
rules: [{
required: true,
message: '用户名格式有误!',
pattern: /^[A-Za-z0-9_\u4E00-\u9FD5\u3400-\u4DBF\u{20000}-\u{2A6DF}\u{2A700}-\u{2CEAF}\uF900–\uFAFF\u{2F800}-\u{2FA1D}\uAC00–\uD7AF\u3040-\u30FF\u31F0–\u31FF\u{1B000}–\u{1B0FF}\u3005]+$/u,
}],
}, {})(
<Input {...usernameInputProps}/>,
)}
</FormItem>
<FormItem >
{getFieldDecorator('nickname', {})(
<Input placeholder="nickname[optional]"/>,
)}
</FormItem>
<FormItem hasFeedback>
{getFieldDecorator('password', {
rules: [{ required: true, message: '密码至少为8-24位', pattern: /^.{8,24}$/ }],
}, {
validator: this.checkPassword,
}],
})(
<Input
prefix={<Icon type="lock" style={{ fontSize: 13 }} />}
type="password"
onBlur={this.handleConfirmBlur}
placeholder="Password Again" />
)}
</FormItem>
<Button type="primary" htmlType="submit" className="login-form-button">
Register
</Button>
Or <Link to="/login">Sign in!</Link>
</Form>
validator: this.checkConfirm,
})(
<Input
prefix={<Icon type="lock" style={{ fontSize: 13 }}/>}
type="password"
placeholder="Password"/>,
)}
</FormItem>
<FormItem hasFeedback>
{getFieldDecorator('confirm', {
rules: [{
required: true, message: '密码至少为8-24位', pattern: /^.{8,24}$/,
}, {
validator: this.checkPassword,
}],
})(
<Input
prefix={<Icon type="lock" style={{ fontSize: 13 }}/>}
type="password"
onBlur={this.handleConfirmBlur}
placeholder="Password Again"/>,
)}
</FormItem>
<Button type="primary" htmlType="submit" className="login-form-button">
Register
</Button>
Or <Link to="/login">Sign in!</Link>
</Form>
</Spin>
</div>
)
);
}
}
function mapStateToProps(state) {
const {
auth: { register, checkEmail, checkUsername, isEmailExists, isUserNameExists, isRegisterSubmit }
} = state
auth: { register, checkEmail, checkUsername, isEmailExists, isUserNameExists, isRegisterSubmit },
} = state;
return {
register,
checkEmail,
checkUsername,
isEmailExists,
isEmailExists,
isUserNameExists,
isRegisterSubmit
isRegisterSubmit,
};
}
const WrapperRegister = Form.create()(Register)
const WrapperRegister = Form.create()(Register);
export default connect(mapStateToProps)(WrapperRegister);
:global {
.app-detail-nav{
}
.ant-card {
margin: 2vh 0;
}
.app-detail-nav .ant-tabs-nav-scroll {
display: flex;
justify-content: center;
}
.ant-upload-select-picture-card i {
font-size: 28px;
color: #999;
}
.ant-upload-select-picture-card .ant-upload-text {
margin-top: 8px;
font-size: 12px;
color: #666;
}
}
:global {
.app-detail-nav {
}
.ant-card {
margin: 2vh 0;
}
.app-detail-nav .ant-tabs-nav-scroll {
display: flex;
justify-content: center;
}
.ant-upload-select-picture-card i {
font-size: 28px;
color: #999;
}
.ant-upload-select-picture-card .ant-upload-text {
margin-top: 8px;
font-size: 12px;
color: #666;
}
}
import React from 'react';
import { Button, Form, Icon, Input, Select, Spin } from 'antd';
import { connect } from 'dva';
import { Link } from 'dva/router'
import styles from './Login.less';
import { Form, Input, Tooltip, Icon, Cascader, Select, Row, Col, Checkbox, Button, Spin } from 'antd';
import React from 'react';
const FormItem = Form.Item;
const Option = Select.Option;
......@@ -10,19 +8,19 @@ const Option = Select.Option;
class Reset extends React.Component {
onSubmitReset = (e) => {
const { form, dispatch, location: { query: { key, user_id }} } = this.props
const { form, dispatch, location: { query: { key, user_id } } } = this.props;
e && e.preventDefault();
form.validateFieldsAndScroll((err, values) => {
if (!err) {
console.log('Received values of form: ', values);
const {password} = values
console.log(this.props)
dispatch({type: "auth/reset", payload: { password, key, user_id}})
const { password } = values;
console.log(this.props);
dispatch({ type: 'auth/reset', payload: { password, key, user_id } });
}
});
}
};
checkPassword = (rule, value, callback) => {
const form = this.props.form;
......@@ -31,7 +29,7 @@ class Reset extends React.Component {
} else {
callback();
}
}
};
checkConfirm = (rule, value, callback) => {
const form = this.props.form;
......@@ -39,57 +37,57 @@ class Reset extends React.Component {
form.validateFields(['confirm'], { force: true });
}
callback();
}
};
render() {
const { getFieldDecorator } = this.props.form;
const { isResetSubmit=false } = this.props
const { isResetSubmit = false } = this.props;
return (
<div style={{ display: 'flex', justifyContent:'center', alignItems: 'center', height: '100%'}}>
<div style={{ display: 'flex', justifyContent: 'center', alignItems: 'center', height: '100%' }}>
<Spin spinning={isResetSubmit} delay={500}>
<Form onSubmit={this.onSubmitReset} className="login-form">
<Form onSubmit={this.onSubmitReset} className="login-form">
<FormItem>
{getFieldDecorator('password', {
rules: [{ required: true, message: 'Please input your Password!' }],
}, {
validator: this.checkConfirm
})(
<Input prefix={<Icon type="lock" style={{ fontSize: 13 }} />} type="password" placeholder="Password" />
)}
</FormItem>
<FormItem>
{getFieldDecorator('confirm', {
rules: [{
required: true, message: 'Please confirm your password!',
<FormItem>
{getFieldDecorator('password', {
rules: [{ required: true, message: 'Please input your Password!' }],
}, {
validator: this.checkPassword,
}],
})(
<Input type="password" onBlur={this.handleConfirmBlur} placeholder="Password Again" />
)}
</FormItem>
<Button type="primary" htmlType="submit" className="login-form-button">
Submit
</Button>
</Form>
validator: this.checkConfirm,
})(
<Input prefix={<Icon type="lock" style={{ fontSize: 13 }}/>} type="password" placeholder="Password"/>,
)}
</FormItem>
<FormItem>
{getFieldDecorator('confirm', {
rules: [{
required: true, message: 'Please confirm your password!',
}, {
validator: this.checkPassword,
}],
})(
<Input type="password" onBlur={this.handleConfirmBlur} placeholder="Password Again"/>,
)}
</FormItem>
<Button type="primary" htmlType="submit" className="login-form-button">
Submit
</Button>
</Form>
</Spin>
</div>
)
);
}
}
function mapStateToProps(state, props) {
const {
auth: {isResetSubmit}
} = state
auth: { isResetSubmit },
} = state;
return {
isResetSubmit
isResetSubmit,
};
}
const WrapperReset = Form.create()(Reset)
const WrapperReset = Form.create()(Reset);
export default connect(mapStateToProps)(WrapperReset);
import request from '../utils/request';
import config from '../config'
export async function login(params) {
return request(`/signin`, {
method: 'POST',
body: JSON.stringify(params)
})
body: JSON.stringify(params),
});
}
export async function forgot(params) {
return request(`/forgot`, {
method: 'POST',
body: JSON.stringify(params)
})
body: JSON.stringify(params),
});
}
export async function register(params) {
return request(`/signup`, {
method: 'POST',
body: JSON.stringify(params)
})
body: JSON.stringify(params),
});
}
export async function reset(params) {
return request(`/reset`, {
method: 'PATCH',
body: JSON.stringify(params)
})
body: JSON.stringify(params),
});
}
export async function activate(params) {
return request(`/activate`, {
method: 'POST',
body: JSON.stringify(params)
})
body: JSON.stringify(params),
});
}
// deprecated
export async function getUserByEmail(params) {
return request(`/user/${params.email}`, {
method: 'GET'
})
method: 'GET',
});
}
// deprecated
export async function getUserByUsername(params) {
return request(`/user/${params.username}`, {
method: 'GET'
})
method: 'GET',
});
}
export async function checkUserExists(params) {
return request(`/user/exists`, {
method: "POST",
body: JSON.stringify(params)
})
method: 'POST',
body: JSON.stringify(params),
});
}
......
import request from '../utils/request';
import config from '../config'
export async function updateProfile(params) {
return request(`/user/profiles`, {
method: 'PATCH',
body: JSON.stringify(params)
})
body: JSON.stringify(params),
});
}
export async function updateAccount(params) {
return request(`/user/account`, {
method: 'PATCH',
body: JSON.stringify(params)
})
body: JSON.stringify(params),
});
}
......@@ -23,16 +23,16 @@ function checkStatus(response) {
* @return {object} An object containing either "data" or "err"
*/
export default function request(url, options) {
url = `${config.apiRoot}${url}`
if(options && !options.headers && (options.method == 'POST' || options.method == 'PATCH')) {
url = `${config.apiRoot}${url}`;
if (options && !options.headers && (options.method == 'POST' || options.method == 'PATCH')) {
options.headers = {
"content-type": "application/json"
}
'content-type': 'application/json',
};
}
console.log(options)
console.log(options);
return fetch(url, options)
.then(checkStatus)
.then(parseJSON)
.then(data => ({ data }))
.catch(err => ({ err }));
}
};
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment