Commit ec119f2e authored by LeeJiancong's avatar LeeJiancong

新增物流模板

parents 4183cf29 9743ea94
...@@ -22,3 +22,4 @@ ...@@ -22,3 +22,4 @@
# mockStatic # mockStatic
/.idea /.idea
config/base.config.json
{"global":{"logo":"http://lingxi-frontend-test.oss-cn-hangzhou.aliyuncs.com/images/logo.png","countryList":[{"name":"简体中文-ZH","key":"cn","icon":"http://lingxi-frontend-test.oss-cn-hangzhou.aliyuncs.com/images/china.png"},{"name":"English-EN","key":"en","icon":"http://lingxi-frontend-test.oss-cn-hangzhou.aliyuncs.com/images/us.png"},{"name":"日本語-JP","key":"jp","icon":"http://lingxi-frontend-test.oss-cn-hangzhou.aliyuncs.com/images/japen.png"},{"name":"한국어-KO","key":"ko","icon":"http://lingxi-frontend-test.oss-cn-hangzhou.aliyuncs.com/images/koren.png"}]}} {"userRegister":{"useType":{"memberType":[{"id":1,"typeName":"企业会员"},{"id":2,"typeName":"个人会员"},{"id":3,"typeName":"渠道企业会员"},{"id":4,"typeName":"渠道个人会员"}],"businessType":[{"id":1,"typeName":"new11"},{"id":2,"typeName":"王者农药"}]},"useDetail":[{"groupName":"企业组","elements":[{"id":2,"fieldName":"company","fieldCNName":"企业","fieldType":null,"fieldLength":10,"fieldEmpty":0,"fieldOrder":1,"fieldRemark":"test","checkRules":[]}]},{"groupName":"企业信息","elements":[{"id":3,"fieldName":"company_name","fieldCNName":"公司名称","fieldType":null,"fieldLength":128,"fieldEmpty":1,"fieldOrder":1,"fieldRemark":"","checkRules":[]},{"id":4,"fieldName":"company_type","fieldCNName":"公司类型","fieldType":null,"fieldLength":128,"fieldEmpty":0,"fieldOrder":2,"fieldRemark":"","checkRules":[]}]},{"groupName":"444","elements":[{"id":1,"fieldName":"444","fieldCNName":"44","fieldType":null,"fieldLength":44,"fieldEmpty":1,"fieldOrder":44,"fieldRemark":null,"checkRules":[]}]}]},"global":{"logo":"http://lingxi-frontend-test.oss-cn-hangzhou.aliyuncs.com/images/logo.png","countryList":[{"name":"简体中文-ZH","key":"cn","icon":"http://lingxi-frontend-test.oss-cn-hangzhou.aliyuncs.com/images/china.png"},{"name":"English-EN","key":"en","icon":"http://lingxi-frontend-test.oss-cn-hangzhou.aliyuncs.com/images/us.png"},{"name":"日本語-JP","key":"jp","icon":"http://lingxi-frontend-test.oss-cn-hangzhou.aliyuncs.com/images/japen.png"},{"name":"한국어-KO","key":"ko","icon":"http://lingxi-frontend-test.oss-cn-hangzhou.aliyuncs.com/images/koren.png"}]}}
...@@ -54,7 +54,7 @@ export default defineConfig({ ...@@ -54,7 +54,7 @@ export default defineConfig({
}, },
// icon // icon
// favicon: '', // favicon: '',
hash: true, hash: false,
/** /**
* 会自动添加到网页html的顶部 * 会自动添加到网页html的顶部
*/ */
......
...@@ -34,7 +34,7 @@ const mockData = { ...@@ -34,7 +34,7 @@ const mockData = {
exports.fetchConfig = async () => { exports.fetchConfig = async () => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
setTimeout(() => { setTimeout(() => {
resolve(mockData) resolve(mockData.data)
}, 2* 1000) }, 2* 1000)
}) })
} }
\ No newline at end of file
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
"@umijs/preset-react": "1.x", "@umijs/preset-react": "1.x",
"@umijs/test": "^3.2.0", "@umijs/test": "^3.2.0",
"bizcharts": "^4.0.7", "bizcharts": "^4.0.7",
"god": "0.1.7", "god": "0.1.11",
"lint-staged": "^10.0.7", "lint-staged": "^10.0.7",
"mobx": "^5.15.4", "mobx": "^5.15.4",
"mobx-react": "^6.2.2", "mobx-react": "^6.2.2",
...@@ -41,7 +41,9 @@ ...@@ -41,7 +41,9 @@
}, },
"devDependencies": { "devDependencies": {
"@types/qrcode": "^1.3.4", "@types/qrcode": "^1.3.4",
"axios": "^0.19.2",
"chalk": "^4.1.0", "chalk": "^4.1.0",
"clone": "^2.1.2",
"fs-extra": "^9.0.1", "fs-extra": "^9.0.1",
"gulp": "^4.0.2", "gulp": "^4.0.2",
"json2ts": "^0.0.7", "json2ts": "^0.0.7",
......
...@@ -2,7 +2,9 @@ const path = require('path') ...@@ -2,7 +2,9 @@ const path = require('path')
const Logs = require('./utils/log') const Logs = require('./utils/log')
const fse = require('fs-extra') const fse = require('fs-extra')
const Type = require('./utils/type') const Type = require('./utils/type')
const fetchConfig = require('../demo').fetchConfig
const runFile = './services'
const fetchConfig = require(runFile).fetchConfig
const gulp = require('gulp') const gulp = require('gulp')
const json2ts = require('json2ts') const json2ts = require('json2ts')
...@@ -56,5 +58,5 @@ function genarateDtsFile(json, done) { ...@@ -56,5 +58,5 @@ function genarateDtsFile(json, done) {
*/ */
async function getAsyncConfig(done) { async function getAsyncConfig(done) {
const data = await fetchConfig() const data = await fetchConfig()
genarateBaseJson(data.data, done) genarateBaseJson(data, done)
} }
\ No newline at end of file
/**
* 用于在项目开始前获取所有的配置
* 在项目开始前运行`yarn scripts:build`
* @todo 缺少异常处理清空
* @author xjm
*/
const Axios = require('axios').default;
const deepClone = require('clone')
const demoFetch = require('../../demo').fetchConfig
const isDemo = true
const axios = Axios.create({
baseURL: 'http://10.0.0.25:8100',
responseType: 'json',
})
const serviceConfig = {
// 用于注册页
userRegister: {
useType: {
url: '/member/menu/register/type',
method: 'get'
},
useDetail: {
url: '/member/menu/register/detail',
method: 'get'
}
}
}
// 批量组装接口
async function batchAxiosHttps() {
const asyncHttpQueue = deepClone(serviceConfig)
for (const item in serviceConfig) {
for (const subItem in serviceConfig[item]) {
const data = await axios(serviceConfig[item][subItem])
asyncHttpQueue[item][subItem] = data.data.data
}
}
return isDemo ? Object.assign(asyncHttpQueue, await demoFetch()) : asyncHttpQueue
}
exports.fetchConfig = batchAxiosHttps
\ No newline at end of file
...@@ -5,7 +5,10 @@ import MobxProvider from './store' ...@@ -5,7 +5,10 @@ import MobxProvider from './store'
import '@/global/styles/global.less'; // 导入全局样式 import '@/global/styles/global.less'; // 导入全局样式
let extraRoutes: never[] = [] // 默认引入所有的ant样式, 不引入css因为无法做到变量覆盖
import 'antd/dist/antd.less'
let extraRoutes = []
/** /**
* @description 配置函数,对已配置的路由做修改, 一般与render函数一起结合可根据接口动态配置路由 * @description 配置函数,对已配置的路由做修改, 一般与render函数一起结合可根据接口动态配置路由
......
...@@ -4,7 +4,7 @@ import styles from './index.less' ...@@ -4,7 +4,7 @@ import styles from './index.less'
export interface TextLinkProps { export interface TextLinkProps {
url: string, url: string,
} }
const TextLink:React.FC = (props) => { const TextLink:React.FC<any> = (props) => {
return ( return (
<span className={styles.link}> <span className={styles.link}>
{props.children} {props.children}
......
export interface MemberType {
id: number;
typeName: string;
}
export interface BusinessType {
id: number;
typeName: string;
}
export interface UseType {
memberType: MemberType[];
businessType: BusinessType[];
}
export interface Element {
id: number;
fieldName: string;
fieldCNName: string;
fieldType?: any;
fieldLength: number;
fieldEmpty: number;
fieldOrder: number;
fieldRemark: string;
checkRules: any[];
}
export interface UseDetail {
groupName: string;
elements: Element[];
}
export interface UserRegister {
useType: UseType;
useDetail: UseDetail[];
}
export interface CountryList { export interface CountryList {
name: string; name: string;
key: string; key: string;
...@@ -10,5 +47,6 @@ export interface Global { ...@@ -10,5 +47,6 @@ export interface Global {
} }
export interface RootObject { export interface RootObject {
userRegister: UserRegister;
global: Global; global: Global;
} }
\ No newline at end of file
...@@ -84,4 +84,14 @@ h1, h2, h3, h4, h5, h6 { ...@@ -84,4 +84,14 @@ h1, h2, h3, h4, h5, h6 {
.commonStatusInvalid{ .commonStatusInvalid{
.commonStatus(); .commonStatus();
background-color: @status-invalid; // 无效、未生成 background-color: @status-invalid; // 无效、未生成
}
.sc-fzpans {
display: block;
width: 100%;
}
// 间距
.mr_t-40 {
margin-top: 40px;
} }
\ No newline at end of file
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* @Author: LeeJiancong * @Author: LeeJiancong
* @Date: 2020-07-15 10:31:55 * @Date: 2020-07-15 10:31:55
* @LastEditors: LeeJiancong * @LastEditors: LeeJiancong
* @LastEditTime: 2020-07-16 18:09:37 * @LastEditTime: 2020-07-17 18:04:19
*/ */
import React, { Component, useState,useEffect } from 'react'; import React, { Component, useState,useEffect } from 'react';
import ReactDOM from 'react-dom' import ReactDOM from 'react-dom'
...@@ -22,6 +22,12 @@ import { PageHeaderWrapper } from '@ant-design/pro-layout' ...@@ -22,6 +22,12 @@ import { PageHeaderWrapper } from '@ant-design/pro-layout'
import { MegaLayout, Input, Switch, Select, FormMegaLayout } from '@formily/antd-components' import { MegaLayout, Input, Switch, Select, FormMegaLayout } from '@formily/antd-components'
import ReutrnEle from '@/components/ReturnEle' import ReutrnEle from '@/components/ReturnEle'
import 'antd/dist/antd.css' import 'antd/dist/antd.css'
let selectList: any = [
{ label: '+86', value: '1' },
{ label: 'Two', value: '2' },
{ label: 'Three', value: '3' },
{ label: 'Four', value: '4' }
];
import ChinaImg from '../../../../../mockStatic/china.png' import ChinaImg from '../../../../../mockStatic/china.png'
import gou from '../../../../../mockStatic/gou.png' import gou from '../../../../../mockStatic/gou.png'
import japenImg from '../../../../../mockStatic/japen.png' import japenImg from '../../../../../mockStatic/japen.png'
......
...@@ -107,6 +107,10 @@ ...@@ -107,6 +107,10 @@
margin-bottom: 0; margin-bottom: 0;
} }
} }
.registerForm {
max-width: 335px;
margin: 40px auto;
}
.registerBox { .registerBox {
width: 100%; width: 100%;
...@@ -144,13 +148,14 @@ ...@@ -144,13 +148,14 @@
} }
.continueButton{ .continueButton{
.make-center(block); .make-center(block);
width: 320px; width: 340px;
height: 40px; height: 40px;
.make-center-space(margin, 8); .make-center-space(margin, 8);
} }
.identityRadio{ .identityRadio{
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin: 0 auto;
.make-center(text); .make-center(text);
& label{ & label{
width: 320px; width: 320px;
...@@ -283,4 +288,8 @@ ...@@ -283,4 +288,8 @@
line-height:22px; line-height:22px;
} }
} }
}
.mr_t-40 {
margin-top: 40px;
} }
\ No newline at end of file
// This file is automatically generated.
// Please do not change this file!
interface CssExports {
[x: string]: string | undefined;
'adBox': string;
'businessRadio': string;
'commonPanelTitle': string;
'continueButton': string;
'description': string;
'formBefore': string;
'formBoxStep1': string;
'formBoxStep2': string;
'formBoxStep3': string;
'guid': string;
'identityRadio': string;
'lingxi-business-content1024': string;
'lingxi-business-margin_content': string;
'lingxiBusinessContent1024': string;
'lingxiBusinessMarginContent': string;
'login-ctl': string;
'login-item': string;
'loginCtl': string;
'loginDesc': string;
'loginItem': string;
'loginMain': string;
'loginVerBtn': string;
'loginWrap': string;
'mb-10': string;
'mb-100': string;
'mb-20': string;
'mb-30': string;
'mb-50': string;
'mb10': string;
'mb100': string;
'mb20': string;
'mb30': string;
'mb50': string;
'ml-10': string;
'ml-100': string;
'ml-20': string;
'ml-30': string;
'ml-50': string;
'ml10': string;
'ml100': string;
'ml20': string;
'ml30': string;
'ml50': string;
'mr-10': string;
'mr-100': string;
'mr-20': string;
'mr-30': string;
'mr-50': string;
'mr10': string;
'mr100': string;
'mr20': string;
'mr30': string;
'mr50': string;
'mt-10': string;
'mt-100': string;
'mt-20': string;
'mt-30': string;
'mt-50': string;
'mt10': string;
'mt100': string;
'mt20': string;
'mt30': string;
'mt50': string;
'qrcodeLogin': string;
'register': string;
'registerBox': string;
'scanLoginWrap': string;
'scanTips': string;
'stepWrap': string;
'thirdLogin': string;
}
export const cssExports: CssExports;
export default cssExports;
This diff is collapsed.
import React, { useState, useEffect } from 'react'
export interface UseCountDownProps {
maxTime: number,
minTime: number,
initText: React.ReactNode,
delay: number,
onEnd(): void,
decayRate: number
}
export interface ReturnValue {
start(): void,
text: React.ReactNode,
isActive: boolean
}
const useCountDown = (options: UseCountDownProps): ReturnValue => {
const [activeText, setActiveText] = useState(options.initText)
const [isOpen, setIsOpen] = useState(false)
useEffect(() => {
const { maxTime = 60, minTime = 0, initText = '获取验证码', delay = 1 * 1000, onEnd = () => {}, decayRate = 1 } = options
let activeInterval: any = null
let activeTime = maxTime
if (isOpen) {
activeInterval = setInterval(() => {
if (activeTime === minTime) {
setActiveText(initText)
setIsOpen(false)
clearInterval(activeInterval)
onEnd && onEnd()
} else {
setActiveText((activeTime -= decayRate) + 's')
}
}, delay)
}
return () => {
clearInterval(activeInterval)
}
}, [isOpen])
function start() {
if (isOpen) {
return false
}
setIsOpen(true)
setActiveText(options.maxTime + 's')
}
return {
start,
text: activeText,
isActive: isOpen
}
}
export default useCountDown
\ No newline at end of file
...@@ -7,9 +7,9 @@ ...@@ -7,9 +7,9 @@
"importHelpers": true, "importHelpers": true,
"jsx": "react", "jsx": "react",
"esModuleInterop": true, "esModuleInterop": true,
"noImplicitAny": false,
"sourceMap": true, "sourceMap": true,
"baseUrl": "./", "baseUrl": "./",
"strict": true,
"paths": { "paths": {
"@/*": ["src/*"], "@/*": ["src/*"],
"@mock/*": ["mockStatic/*"], "@mock/*": ["mockStatic/*"],
......
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