diff --git a/.eslintrc b/.eslintrc index ec9427d..430d6ac 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,5 +1,5 @@ { - "extends": ["taro/react"], + "extends": ["taro/react","plugin:react-hooks/recommended"], "rules": { "react/jsx-uses-react": "off", "react/react-in-jsx-scope": "off" diff --git a/README.md b/README.md new file mode 100644 index 0000000..7f863a5 --- /dev/null +++ b/README.md @@ -0,0 +1,168 @@ +# 阿里图标库 iconfont 使用 Symbol 我们使用了 taro-iconfont-cli 这个库 + +用法如下: + +# 支持平台 + +* 微信小程序 +* 支付宝小程序 +* 百度小程序 +* 头条小程序 +* QQ小程序 +* H5 + +# 特性 +1、一键生成标准组件,多端支持 +
+2、使用方便,import即可 +
+3、支持多色彩 +
+4、支持自定义颜色 +
+5、支持es6和typescript两种模式 + +# Step 1 +安装插件 + +**如果您使用Taro2.x,请安装 `taro-iconfont-cli@2.1.0`,并阅读旧版的[README.md](https://github.com/iconfont-cli/taro-iconfont-cli/blob/v2.1.0/README.md)** + +```bash +# Yarn +yarn add taro-iconfont-cli --dev + +# Npm +npm install taro-iconfont-cli --save-dev +``` + + +# Step 2 +生成配置文件 +```bash +npx iconfont-init + +# 可传入配置输出路径 +# npx iconfont-init --output iconfont.json +``` +此时项目根目录会生成一个`iconfont.json`的文件,内容如下: +```json +{ + "symbol_url": "请参考README.md,复制 http://iconfont.cn 官网提供的JS链接", + "save_dir": "./src/components/iconfont", + "use_typescript": false, + "platforms": "*", + "use_rpx": true, + "trim_icon_prefix": "icon", + "default_icon_size": 18, + "design_width": 750 +} +``` +### 配置参数说明: +### symbol_url +请直接复制[iconfont](http://iconfont.cn)官网提供的项目链接。请务必看清是`.js`后缀而不是.css后缀。如果你现在还没有创建iconfont的仓库,那么可以填入这个链接去测试:`http://at.alicdn.com/t/font_1373348_kk9y3jk2omq.js` + +
+ +![](https://github.com/fwh1990/mini-program-iconfont-cli/blob/master/images/symbol-url.png?raw=true) + +### save_dir +根据iconfont图标生成的组件存放的位置。每次生成组件之前,该文件夹都会被清空。 + +### use_typescript +如果您的项目使用Typescript编写,请设置为true。这个选项将决定生成的图标组件是`.tsx`还是`.js`后缀。 + +当该值为false时,我们会为您的图标生成`.js`和`.d.ts`两个文件,以便您能享受到最好的开发体验。 + +### platforms +选择需要支持的平台,默认是`*`,意味着所有平台都需要支持(如果有)。如果你只想支持部分平台,也可以设置成数组: +```json5 +{ + // 选择你需要的平台 + // 说明 => weapp: 微信 | swan: 百度 | alipay: 支付宝 | tt: 字节跳动 + "platforms": ["weapp", "swan", "alipay", "h5", "tt", "qq"] +} +``` + +### use_rpx +是否使用[尺寸单位rpx](https://developers.weixin.qq.com/miniprogram/dev/framework/view/wxss.html#%E5%B0%BA%E5%AF%B8%E5%8D%95%E4%BD%8D)还是普通的像素单位`px`。默认值为true,与Taro保持一致的缩放。您也可以设置为false,强制使用`px` + +### design_width +若 `use_rpx: true` 且当前设计图尺寸不为 750 时,可以通过修改这个字段来修改设计尺寸。 + +### trim_icon_prefix +如果你的图标有通用的前缀,而你在使用的时候又不想重复去写,那么可以通过这种配置这个选项把前缀统一去掉。 + +### default_icon_size +我们将为每个生成的图标组件加入默认的字体大小,当然,你也可以通过传入props的方式改变这个size值。 + + +# Step 3 +开始生成Taro标准组件 +```bash +npx iconfont-taro + +# 可传入配置文件路径 +# npx iconfont-taro --config iconfont.json +``` +生成后查看您设置的保存目录中是否含有所有的图标 + +------- + +在生成代码之前,你可以顺便参考[snapshots目录](https://github.com/iconfont-cli/taro-iconfont-cli/tree/master/snapshots)自动生成的快照文件。 + +# Step 4 +由于Taro3.0的架构变更,您需要在`src/app.config.js`下填写一次`usingComponents`。 +```typescript +// src/app.config.js +import { useGlobalIconFont } from './components/iconfont/helper'; + +export default { + usingComponents: Object.assign(useGlobalIconFont()), +} +``` + +这并不是一个多好的方案,毕竟还需要开发者关注这个细节。也许能用webpack的plugin解决或者等官方推出更好的方案,有任何更好的idea欢迎提供。 + +# 使用 +在Page中使用图标 +```jsx harmony +import React, { Component } from 'react'; +import IconFont from '../components/iconfont'; + +class App extends Component { + render() { + return ; + } +} + +export default App; +``` +更多用法: +```jsx harmony +// 原色彩 + + +// 单色:红色 + + +// 多色:红色+橘色 + + +// 不同格式的颜色写法 + + + +// 与文字对齐 + + Hello + + +``` + +# 更新图标 +当您在iconfont.cn中的图标有变更时,只需更改配置`symbol_url`,然后再次执行`Step 3`即可生成最新的图标组件 +```bash +# 修改 symbol_url 配置后执行: +npx iconfont-taro +``` + diff --git a/config/dev.js b/config/dev.js index e3a0d8a..4e1656f 100644 --- a/config/dev.js +++ b/config/dev.js @@ -37,8 +37,9 @@ module.exports = { alias: { '@': path.resolve(__dirname, '..', 'src'), }, + sass: { - resource: path.resolve(__dirname, '..', 'src/styles/common.scss'), + resource: [path.resolve(__dirname, '..', 'src/styles/common.scss'), path.resolve(__dirname, '..', 'src/styles/iconfont.scss')], }, // plugins: [ // '@tarojs/plugin-react-devtools' diff --git a/config/index.js b/config/index.js index 87d9bca..3b436bc 100644 --- a/config/index.js +++ b/config/index.js @@ -19,6 +19,7 @@ const CURRENT_VERSION = `Version: ${JSON.stringify(process.env.CODE_BRANCH || ve ) const config = { + appid: 'wx64fe67f111d52457', // 测试/体验环境 projectName: 'SpiderSteward', date: '2022-4-6', designWidth: 750, @@ -43,7 +44,9 @@ const config = { postcss: { pxtransform: { enable: true, - config: {}, + config: { + onePxTransform: false, + }, }, url: { enable: true, diff --git a/config/pre.js b/config/pre.js index 232a1c5..6238010 100644 --- a/config/pre.js +++ b/config/pre.js @@ -3,6 +3,7 @@ module.exports = { env: { NODE_ENV: '"pre"', }, + outputRoot: 'build', defineConstants: { CURRENT_BASE_URL: '"https://pre.zzfzyc.com/lymarket"', }, @@ -38,6 +39,6 @@ module.exports = { '@': path.resolve(__dirname, '..', 'src'), }, sass: { - resource: path.resolve(__dirname, '..', 'src/styles/common.scss'), + resource: [path.resolve(__dirname, '..', 'src/styles/common.scss'), path.resolve(__dirname, '..', 'src/styles/iconfont.scss')], }, } diff --git a/config/prod.js b/config/prod.js index 4e3a20d..507a409 100644 --- a/config/prod.js +++ b/config/prod.js @@ -3,6 +3,7 @@ module.exports = { env: { NODE_ENV: '"production"', }, + outputRoot: 'build', defineConstants: { CURRENT_BASE_URL: '"https://www.zzfzyc.com/lymarket"', }, diff --git a/global.d.ts b/global.d.ts index 947366a..f8ba444 100644 --- a/global.d.ts +++ b/global.d.ts @@ -19,4 +19,4 @@ declare namespace NodeJS { declare const CURRENT_VERSION: string declare const CURRENT_GITHASH: string -declare const CURRENT_ENV: string \ No newline at end of file +declare const CURRENT_ENV: string diff --git a/iconfont.json b/iconfont.json new file mode 100644 index 0000000..33de02e --- /dev/null +++ b/iconfont.json @@ -0,0 +1,10 @@ +{ + "symbol_url": "//at.alicdn.com/t/c/font_3619513_mrvpsyqxmzr.js", + "save_dir": "./src/components/iconfont", + "use_typescript": false, + "platforms": ["weapp","h5"], + "use_rpx": true, + "trim_icon_prefix": "", + "default_icon_size": 18, + "design_width": 750 +} diff --git a/package.json b/package.json index af1d38f..97bb42b 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "css": "sass" }, "scripts": { + "init:iconfont": "npx iconfont-taro", "build:weapp": "taro build --type weapp", "build:swan": "taro build --type swan", "build:alipay": "taro build --type alipay", @@ -18,17 +19,17 @@ "build:qq": "taro build --type qq", "build:jd": "taro build --type jd", "build:quickapp": "taro build --type quickapp", - "dev:weapp": "npm run build:weapp -- --watch", + "dev:weapp": "npm run init:iconfont && npm run build:weapp -- --watch", "dev:swan": "npm run build:swan -- --watch", "dev:alipay": "npm run build:alipay -- --watch", "dev:tt": "npm run build:tt -- --watch", - "dev:h5": "npm run build:h5 -- --watch", + "dev:h5": "npm run init:iconfont && npm run build:h5 -- --watch", "dev:rn": "npm run build:rn -- --watch", "dev:qq": "npm run build:qq -- --watch", "dev:jd": "npm run build:jd -- --watch", "dev:quickapp": "npm run build:quickapp -- --watch", - "build:weapp:pre": "cross-env NODE_ENV=pre taro build --type weapp", - "dev:weapp:pre": "cross-env NODE_ENV=pre npm run build:weapp -- --watch" + "build:weapp:pre": "npm run init:iconfont && cross-env NODE_ENV=pre taro build --type weapp", + "dev:weapp:pre": "npm run init:iconfont && cross-env NODE_ENV=pre npm run build:weapp -- --watch" }, "browserslist": [ "last 3 versions", @@ -44,6 +45,7 @@ "@tarojs/runtime": "3.5.4", "@tarojs/taro": "3.5.4", "big.js": "^6.2.1", + "classname": "^0.0.0", "dayjs": "^1.11.3", "qs": "^6.10.3", "react": "^18.2.0", @@ -75,6 +77,7 @@ "eslint-plugin-react-hooks": "^4.2.0", "react-refresh": "0.11.0", "stylelint": "9.3.0", + "taro-iconfont-cli": "^3.3.0", "typescript": "^4.1.0", "webpack": "^5.74.0" } diff --git a/src/app.config.ts b/src/app.config.ts index 6425366..6e8358b 100644 --- a/src/app.config.ts +++ b/src/app.config.ts @@ -1,11 +1,13 @@ +import { useGlobalIconFont } from './components/iconfont/helper' export default defineAppConfig({ - pages: ['pages/user/index', + pages: [ 'pages/index/index', 'pages/order/index', 'pages/shopping/index', 'pages/searchPage/index', 'pages/customerPage/index', 'pages/saleuserPage/index', + 'pages/user/index', 'pages/orderDetails/index' ], window: { @@ -16,30 +18,23 @@ export default defineAppConfig({ backgroundColor: '#ffffff', }, tabBar: { + custom: true, list: [ { pagePath: 'pages/index/index', text: '首页', - iconPath: './styles/tabbar/list.png', - selectedIconPath: './styles/tabbar/list_on.png', }, { pagePath: 'pages/shopping/index', text: '购物', - iconPath: './styles/tabbar/order.png', - selectedIconPath: './styles/tabbar/order_on.png', }, { pagePath: 'pages/order/index', text: '订单', - iconPath: './styles/tabbar/order.png', - selectedIconPath: './styles/tabbar/order_on.png', }, { pagePath: 'pages/user/index', text: '我的', - iconPath: './styles/tabbar/my.png', - selectedIconPath: './styles/tabbar/my_on.png', }, ], color: '#707070', @@ -47,5 +42,9 @@ export default defineAppConfig({ backgroundColor: '#fff', borderStyle: 'white', }, + usingComponents: { + 'custom-wrapper': '/custom-wrapper', + ...useGlobalIconFont(), + }, subPackages: [], }) diff --git a/src/app.scss b/src/app.scss index c393d5e..e4f700b 100644 --- a/src/app.scss +++ b/src/app.scss @@ -1,6 +1,16 @@ @import './styles/common.scss'; @import './styles/iconfont.scss'; -page{ - height: 100%; - -} \ No newline at end of file + +/** + 由于Cover-view标签并不支持iconfont 所以需要把 .ttf 转成 base64 之后得到的 stylesheet.css 文件覆盖掉 iconfont.css 里的 @font-face 即可 + [转换工具](https://transfonter.org/) + [教程](https://blog.csdn.net/VoidLuffy/article/details/123530341) + [相关说明](https://developers.weixin.qq.com/community/develop/doc/000a60f7d58a982f08d7ddfc456000) +*/ + +// 总高度 - 自定义tabbar高度 - apple小黑条高度 +page { + height: calc(100% - #{$customTabBarHeight} - constant(safe-area-inset-bottom)); + height: calc(100% - #{$customTabBarHeight} - env(safe-area-inset-bottom)); + background-color: #f7f7f7; +} diff --git a/src/components/iconCard/index.module.scss b/src/components/iconCard/index.module.scss new file mode 100644 index 0000000..d36c6aa --- /dev/null +++ b/src/components/iconCard/index.module.scss @@ -0,0 +1,11 @@ +.iconCard { + display: flex; + flex-flow: column nowrap; + justify-content: center; + align-items: center; + &-name{ + font-size: 26px; + color: #333; + margin-top: 16px; + } +} diff --git a/src/components/iconCard/index.tsx b/src/components/iconCard/index.tsx new file mode 100644 index 0000000..14a8fee --- /dev/null +++ b/src/components/iconCard/index.tsx @@ -0,0 +1,26 @@ +import { View } from "@tarojs/components" +import { FC, ReactNode } from "react" +import IconFont from "../iconfont" +import styles from './index.module.scss' + +type IconfontName = Parameters['0']['name'] + +interface PropsType { + iconName: IconfontName + title: string + children?: ReactNode + onClick?: Function +} +const IconCard: FC = (props) => { + const { iconName, title, onClick } = props + const handleClick = (event) => { + onClick && onClick(event) + } + return ( + + + {title} + + ) +} +export default IconCard diff --git a/src/components/iconfont/h5/IconDingdan.js b/src/components/iconfont/h5/IconDingdan.js new file mode 100644 index 0000000..ed26299 --- /dev/null +++ b/src/components/iconfont/h5/IconDingdan.js @@ -0,0 +1,27 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconDingdan = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + ); +}; + +IconDingdan.defaultProps = { + size: 18, +}; + +export default IconDingdan; diff --git a/src/components/iconfont/h5/IconDingdan1.js b/src/components/iconfont/h5/IconDingdan1.js new file mode 100644 index 0000000..6646be2 --- /dev/null +++ b/src/components/iconfont/h5/IconDingdan1.js @@ -0,0 +1,27 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconDingdan1 = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + ); +}; + +IconDingdan1.defaultProps = { + size: 18, +}; + +export default IconDingdan1; diff --git a/src/components/iconfont/h5/IconDizhi.js b/src/components/iconfont/h5/IconDizhi.js new file mode 100644 index 0000000..d13f9ac --- /dev/null +++ b/src/components/iconfont/h5/IconDizhi.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconDizhi = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconDizhi.defaultProps = { + size: 18, +}; + +export default IconDizhi; diff --git a/src/components/iconfont/h5/IconDuizhang.js b/src/components/iconfont/h5/IconDuizhang.js new file mode 100644 index 0000000..1c054ec --- /dev/null +++ b/src/components/iconfont/h5/IconDuizhang.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconDuizhang = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconDuizhang.defaultProps = { + size: 18, +}; + +export default IconDuizhang; diff --git a/src/components/iconfont/h5/IconFahuoliebiao.js b/src/components/iconfont/h5/IconFahuoliebiao.js new file mode 100644 index 0000000..6186db7 --- /dev/null +++ b/src/components/iconfont/h5/IconFahuoliebiao.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconFahuoliebiao = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconFahuoliebiao.defaultProps = { + size: 18, +}; + +export default IconFahuoliebiao; diff --git a/src/components/iconfont/h5/IconGerenzhongxin.js b/src/components/iconfont/h5/IconGerenzhongxin.js new file mode 100644 index 0000000..0e0396a --- /dev/null +++ b/src/components/iconfont/h5/IconGerenzhongxin.js @@ -0,0 +1,27 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconGerenzhongxin = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + ); +}; + +IconGerenzhongxin.defaultProps = { + size: 18, +}; + +export default IconGerenzhongxin; diff --git a/src/components/iconfont/h5/IconGerenzhongxin1.js b/src/components/iconfont/h5/IconGerenzhongxin1.js new file mode 100644 index 0000000..e2048e9 --- /dev/null +++ b/src/components/iconfont/h5/IconGerenzhongxin1.js @@ -0,0 +1,27 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconGerenzhongxin1 = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + ); +}; + +IconGerenzhongxin1.defaultProps = { + size: 18, +}; + +export default IconGerenzhongxin1; diff --git a/src/components/iconfont/h5/IconGouwu.js b/src/components/iconfont/h5/IconGouwu.js new file mode 100644 index 0000000..acd351f --- /dev/null +++ b/src/components/iconfont/h5/IconGouwu.js @@ -0,0 +1,27 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconGouwu = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + ); +}; + +IconGouwu.defaultProps = { + size: 18, +}; + +export default IconGouwu; diff --git a/src/components/iconfont/h5/IconGouwu1.js b/src/components/iconfont/h5/IconGouwu1.js new file mode 100644 index 0000000..710069f --- /dev/null +++ b/src/components/iconfont/h5/IconGouwu1.js @@ -0,0 +1,27 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconGouwu1 = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + ); +}; + +IconGouwu1.defaultProps = { + size: 18, +}; + +export default IconGouwu1; diff --git a/src/components/iconfont/h5/IconLingquseka.js b/src/components/iconfont/h5/IconLingquseka.js new file mode 100644 index 0000000..a910c42 --- /dev/null +++ b/src/components/iconfont/h5/IconLingquseka.js @@ -0,0 +1,37 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconLingquseka = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + + ); +}; + +IconLingquseka.defaultProps = { + size: 18, +}; + +export default IconLingquseka; diff --git a/src/components/iconfont/h5/IconMadanguanli.js b/src/components/iconfont/h5/IconMadanguanli.js new file mode 100644 index 0000000..03d55ed --- /dev/null +++ b/src/components/iconfont/h5/IconMadanguanli.js @@ -0,0 +1,45 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconMadanguanli = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + + + + ); +}; + +IconMadanguanli.defaultProps = { + size: 18, +}; + +export default IconMadanguanli; diff --git a/src/components/iconfont/h5/IconPandiansaoma.js b/src/components/iconfont/h5/IconPandiansaoma.js new file mode 100644 index 0000000..cedaa00 --- /dev/null +++ b/src/components/iconfont/h5/IconPandiansaoma.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconPandiansaoma = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconPandiansaoma.defaultProps = { + size: 18, +}; + +export default IconPandiansaoma; diff --git a/src/components/iconfont/h5/IconQianzhicangkucun.js b/src/components/iconfont/h5/IconQianzhicangkucun.js new file mode 100644 index 0000000..6f58e2d --- /dev/null +++ b/src/components/iconfont/h5/IconQianzhicangkucun.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconQianzhicangkucun = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconQianzhicangkucun.defaultProps = { + size: 18, +}; + +export default IconQianzhicangkucun; diff --git a/src/components/iconfont/h5/IconQusechazhao.js b/src/components/iconfont/h5/IconQusechazhao.js new file mode 100644 index 0000000..95db3db --- /dev/null +++ b/src/components/iconfont/h5/IconQusechazhao.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconQusechazhao = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconQusechazhao.defaultProps = { + size: 18, +}; + +export default IconQusechazhao; diff --git a/src/components/iconfont/h5/IconShouhouzhongxin.js b/src/components/iconfont/h5/IconShouhouzhongxin.js new file mode 100644 index 0000000..097a48a --- /dev/null +++ b/src/components/iconfont/h5/IconShouhouzhongxin.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconShouhouzhongxin = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconShouhouzhongxin.defaultProps = { + size: 18, +}; + +export default IconShouhouzhongxin; diff --git a/src/components/iconfont/h5/IconShoukuanliebiao.js b/src/components/iconfont/h5/IconShoukuanliebiao.js new file mode 100644 index 0000000..58aee55 --- /dev/null +++ b/src/components/iconfont/h5/IconShoukuanliebiao.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconShoukuanliebiao = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconShoukuanliebiao.defaultProps = { + size: 18, +}; + +export default IconShoukuanliebiao; diff --git a/src/components/iconfont/h5/IconShouye.js b/src/components/iconfont/h5/IconShouye.js new file mode 100644 index 0000000..eab00c2 --- /dev/null +++ b/src/components/iconfont/h5/IconShouye.js @@ -0,0 +1,27 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconShouye = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + ); +}; + +IconShouye.defaultProps = { + size: 18, +}; + +export default IconShouye; diff --git a/src/components/iconfont/h5/IconShouye1.js b/src/components/iconfont/h5/IconShouye1.js new file mode 100644 index 0000000..ccceea2 --- /dev/null +++ b/src/components/iconfont/h5/IconShouye1.js @@ -0,0 +1,27 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconShouye1 = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + ); +}; + +IconShouye1.defaultProps = { + size: 18, +}; + +export default IconShouye1; diff --git a/src/components/iconfont/h5/IconTihuoliebiao.js b/src/components/iconfont/h5/IconTihuoliebiao.js new file mode 100644 index 0000000..e406a31 --- /dev/null +++ b/src/components/iconfont/h5/IconTihuoliebiao.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconTihuoliebiao = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconTihuoliebiao.defaultProps = { + size: 18, +}; + +export default IconTihuoliebiao; diff --git a/src/components/iconfont/h5/IconWodekefu.js b/src/components/iconfont/h5/IconWodekefu.js new file mode 100644 index 0000000..2b23a1f --- /dev/null +++ b/src/components/iconfont/h5/IconWodekefu.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconWodekefu = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconWodekefu.defaultProps = { + size: 18, +}; + +export default IconWodekefu; diff --git a/src/components/iconfont/h5/IconWodeshoucang.js b/src/components/iconfont/h5/IconWodeshoucang.js new file mode 100644 index 0000000..4c13ed5 --- /dev/null +++ b/src/components/iconfont/h5/IconWodeshoucang.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconWodeshoucang = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconWodeshoucang.defaultProps = { + size: 18, +}; + +export default IconWodeshoucang; diff --git a/src/components/iconfont/h5/IconXiaoshou.js b/src/components/iconfont/h5/IconXiaoshou.js new file mode 100644 index 0000000..cdd6508 --- /dev/null +++ b/src/components/iconfont/h5/IconXiaoshou.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconXiaoshou = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconXiaoshou.defaultProps = { + size: 18, +}; + +export default IconXiaoshou; diff --git a/src/components/iconfont/h5/IconYangpinduibi.js b/src/components/iconfont/h5/IconYangpinduibi.js new file mode 100644 index 0000000..6844d9f --- /dev/null +++ b/src/components/iconfont/h5/IconYangpinduibi.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconYangpinduibi = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconYangpinduibi.defaultProps = { + size: 18, +}; + +export default IconYangpinduibi; diff --git a/src/components/iconfont/h5/IconYansequyang.js b/src/components/iconfont/h5/IconYansequyang.js new file mode 100644 index 0000000..4139fe7 --- /dev/null +++ b/src/components/iconfont/h5/IconYansequyang.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconYansequyang = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconYansequyang.defaultProps = { + size: 18, +}; + +export default IconYansequyang; diff --git a/src/components/iconfont/h5/IconYaoqingma.js b/src/components/iconfont/h5/IconYaoqingma.js new file mode 100644 index 0000000..aadc7cf --- /dev/null +++ b/src/components/iconfont/h5/IconYaoqingma.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconYaoqingma = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconYaoqingma.defaultProps = { + size: 18, +}; + +export default IconYaoqingma; diff --git a/src/components/iconfont/h5/IconYuncangkucun.js b/src/components/iconfont/h5/IconYuncangkucun.js new file mode 100644 index 0000000..25db8f7 --- /dev/null +++ b/src/components/iconfont/h5/IconYuncangkucun.js @@ -0,0 +1,32 @@ +/* eslint-disable */ + +import React from 'react'; +import { getIconColor } from './helper'; + +const DEFAULT_STYLE = { + display: 'block', +}; + +const IconYuncangkucun = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + + ); +}; + +IconYuncangkucun.defaultProps = { + size: 18, +}; + +export default IconYuncangkucun; diff --git a/src/components/iconfont/h5/helper.js b/src/components/iconfont/h5/helper.js new file mode 100644 index 0000000..b566c4c --- /dev/null +++ b/src/components/iconfont/h5/helper.js @@ -0,0 +1,17 @@ +/* eslint-disable */ + +/** + * @param {string | string[] | undefined} color + * @param {number} index + * @param {string} defaultColor + * @return {string} + */ +export const getIconColor = (color, index, defaultColor) => { + return color + ? ( + typeof color === 'string' + ? color + : color[index] || defaultColor + ) + : defaultColor; +}; diff --git a/src/components/iconfont/h5/index.js b/src/components/iconfont/h5/index.js new file mode 100644 index 0000000..52377bf --- /dev/null +++ b/src/components/iconfont/h5/index.js @@ -0,0 +1,117 @@ +/* eslint-disable */ + +import React from 'react'; +import IconWodekefu from './IconWodekefu'; +import IconDizhi from './IconDizhi'; +import IconShouhouzhongxin from './IconShouhouzhongxin'; +import IconWodeshoucang from './IconWodeshoucang'; +import IconShoukuanliebiao from './IconShoukuanliebiao'; +import IconMadanguanli from './IconMadanguanli'; +import IconQusechazhao from './IconQusechazhao'; +import IconPandiansaoma from './IconPandiansaoma'; +import IconYaoqingma from './IconYaoqingma'; +import IconDuizhang from './IconDuizhang'; +import IconTihuoliebiao from './IconTihuoliebiao'; +import IconYangpinduibi from './IconYangpinduibi'; +import IconYansequyang from './IconYansequyang'; +import IconFahuoliebiao from './IconFahuoliebiao'; +import IconYuncangkucun from './IconYuncangkucun'; +import IconXiaoshou from './IconXiaoshou'; +import IconQianzhicangkucun from './IconQianzhicangkucun'; +import IconLingquseka from './IconLingquseka'; +import IconGouwu1 from './IconGouwu1'; +import IconDingdan1 from './IconDingdan1'; +import IconGerenzhongxin1 from './IconGerenzhongxin1'; +import IconShouye1 from './IconShouye1'; +import IconGerenzhongxin from './IconGerenzhongxin'; +import IconDingdan from './IconDingdan'; +import IconShouye from './IconShouye'; +import IconGouwu from './IconGouwu'; +export { default as IconWodekefu } from './IconWodekefu'; +export { default as IconDizhi } from './IconDizhi'; +export { default as IconShouhouzhongxin } from './IconShouhouzhongxin'; +export { default as IconWodeshoucang } from './IconWodeshoucang'; +export { default as IconShoukuanliebiao } from './IconShoukuanliebiao'; +export { default as IconMadanguanli } from './IconMadanguanli'; +export { default as IconQusechazhao } from './IconQusechazhao'; +export { default as IconPandiansaoma } from './IconPandiansaoma'; +export { default as IconYaoqingma } from './IconYaoqingma'; +export { default as IconDuizhang } from './IconDuizhang'; +export { default as IconTihuoliebiao } from './IconTihuoliebiao'; +export { default as IconYangpinduibi } from './IconYangpinduibi'; +export { default as IconYansequyang } from './IconYansequyang'; +export { default as IconFahuoliebiao } from './IconFahuoliebiao'; +export { default as IconYuncangkucun } from './IconYuncangkucun'; +export { default as IconXiaoshou } from './IconXiaoshou'; +export { default as IconQianzhicangkucun } from './IconQianzhicangkucun'; +export { default as IconLingquseka } from './IconLingquseka'; +export { default as IconGouwu1 } from './IconGouwu1'; +export { default as IconDingdan1 } from './IconDingdan1'; +export { default as IconGerenzhongxin1 } from './IconGerenzhongxin1'; +export { default as IconShouye1 } from './IconShouye1'; +export { default as IconGerenzhongxin } from './IconGerenzhongxin'; +export { default as IconDingdan } from './IconDingdan'; +export { default as IconShouye } from './IconShouye'; +export { default as IconGouwu } from './IconGouwu'; + +const IconFont = ({ name, ...rest }) => { + switch (name) { + case 'icon-wodekefu': + return ; + case 'icon-dizhi': + return ; + case 'icon-shouhouzhongxin': + return ; + case 'icon-wodeshoucang': + return ; + case 'icon-shoukuanliebiao': + return ; + case 'icon-madanguanli': + return ; + case 'icon-qusechazhao': + return ; + case 'icon-pandiansaoma': + return ; + case 'icon-yaoqingma': + return ; + case 'icon-duizhang': + return ; + case 'icon-tihuoliebiao': + return ; + case 'icon-yangpinduibi': + return ; + case 'icon-yansequyang': + return ; + case 'icon-fahuoliebiao': + return ; + case 'icon-yuncangkucun': + return ; + case 'icon-xiaoshou': + return ; + case 'icon-qianzhicangkucun': + return ; + case 'icon-lingquseka': + return ; + case 'icon-gouwu1': + return ; + case 'icon-dingdan1': + return ; + case 'icon-gerenzhongxin1': + return ; + case 'icon-shouye1': + return ; + case 'icon-gerenzhongxin': + return ; + case 'icon-dingdan': + return ; + case 'icon-shouye': + return ; + case 'icon-gouwu': + return ; + + } + + return null; +}; + +export default IconFont; diff --git a/src/components/iconfont/helper.d.ts b/src/components/iconfont/helper.d.ts new file mode 100644 index 0000000..24a9a53 --- /dev/null +++ b/src/components/iconfont/helper.d.ts @@ -0,0 +1,2 @@ +/* eslint-disable */ +export declare var useGlobalIconFont: () => { iconfont: string }; diff --git a/src/components/iconfont/helper.js b/src/components/iconfont/helper.js new file mode 100644 index 0000000..2caa692 --- /dev/null +++ b/src/components/iconfont/helper.js @@ -0,0 +1,9 @@ +/* eslint-disable */ +const useGlobalIconFont = () => { + return { + iconfont: `components/iconfont/${process.env.TARO_ENV}/${process.env.TARO_ENV}`, + }; +}; + +// es modules is unavaiable. +module.exports.useGlobalIconFont = useGlobalIconFont; diff --git a/src/components/iconfont/index.d.ts b/src/components/iconfont/index.d.ts new file mode 100644 index 0000000..ff53197 --- /dev/null +++ b/src/components/iconfont/index.d.ts @@ -0,0 +1,13 @@ +/* eslint-disable */ +import React, { FunctionComponent } from 'react'; + +interface Props { + name: 'icon-wodekefu' | 'icon-dizhi' | 'icon-shouhouzhongxin' | 'icon-wodeshoucang' | 'icon-shoukuanliebiao' | 'icon-madanguanli' | 'icon-qusechazhao' | 'icon-pandiansaoma' | 'icon-yaoqingma' | 'icon-duizhang' | 'icon-tihuoliebiao' | 'icon-yangpinduibi' | 'icon-yansequyang' | 'icon-fahuoliebiao' | 'icon-yuncangkucun' | 'icon-xiaoshou' | 'icon-qianzhicangkucun' | 'icon-lingquseka' | 'icon-gouwu1' | 'icon-dingdan1' | 'icon-gerenzhongxin1' | 'icon-shouye1' | 'icon-gerenzhongxin' | 'icon-dingdan' | 'icon-shouye' | 'icon-gouwu'; + size?: number; + color?: string | string[]; + style?: React.CSSProperties; +} + +declare const IconFont: FunctionComponent; + +export default IconFont; diff --git a/src/components/iconfont/index.h5.js b/src/components/iconfont/index.h5.js new file mode 100644 index 0000000..80b208b --- /dev/null +++ b/src/components/iconfont/index.h5.js @@ -0,0 +1,17 @@ +/* eslint-disable */ + +import React from 'react'; +import Taro from '@tarojs/taro'; +import Icon from './h5'; + +const IconFont = (props) => { + const { name, size, color, style } = props; + + return ; +}; + +IconFont.defaultProps = { + size: 18, +}; + +export default IconFont; diff --git a/src/components/iconfont/index.js b/src/components/iconfont/index.js new file mode 100644 index 0000000..9236f4b --- /dev/null +++ b/src/components/iconfont/index.js @@ -0,0 +1,7 @@ +/* eslint-disable */ + +const IconFont = () => { + return null; +}; + +export default IconFont; diff --git a/src/components/iconfont/index.weapp.js b/src/components/iconfont/index.weapp.js new file mode 100644 index 0000000..731305b --- /dev/null +++ b/src/components/iconfont/index.weapp.js @@ -0,0 +1,16 @@ +/* eslint-disable */ + +import React from 'react'; +import Taro from '@tarojs/taro'; + +const IconFont = (props) => { + const { name, size, color, style } = props; + + return ; +}; + +IconFont.defaultProps = { + size: 18, +}; + +export default IconFont; diff --git a/src/components/iconfont/weapp/weapp.js b/src/components/iconfont/weapp/weapp.js new file mode 100644 index 0000000..54b2aaf --- /dev/null +++ b/src/components/iconfont/weapp/weapp.js @@ -0,0 +1,63 @@ +Component({ + properties: { + // icon-wodekefu | icon-dizhi | icon-shouhouzhongxin | icon-wodeshoucang | icon-shoukuanliebiao | icon-madanguanli | icon-qusechazhao | icon-pandiansaoma | icon-yaoqingma | icon-duizhang | icon-tihuoliebiao | icon-yangpinduibi | icon-yansequyang | icon-fahuoliebiao | icon-yuncangkucun | icon-xiaoshou | icon-qianzhicangkucun | icon-lingquseka | icon-gouwu1 | icon-dingdan1 | icon-gerenzhongxin1 | icon-shouye1 | icon-gerenzhongxin | icon-dingdan | icon-shouye | icon-gouwu + name: { + type: String, + }, + // string | string[] + color: { + type: null, + observer: function(color) { + this.setData({ + colors: this.fixColor(), + isStr: typeof color === 'string', + }); + } + }, + size: { + type: Number, + value: 18, + observer: function(size) { + this.setData({ + svgSize: size / 750 * wx.getSystemInfoSync().windowWidth, + }); + }, + }, + }, + data: { + colors: '', + svgSize: 18 / 750 * wx.getSystemInfoSync().windowWidth, + quot: '"', + isStr: true, + }, + methods: { + fixColor: function() { + var color = this.data.color; + var hex2rgb = this.hex2rgb; + + if (typeof color === 'string') { + return color.indexOf('#') === 0 ? hex2rgb(color) : color; + } + + return color.map(function (item) { + return item.indexOf('#') === 0 ? hex2rgb(item) : item; + }); + }, + hex2rgb: function(hex) { + var rgb = []; + + hex = hex.substr(1); + + if (hex.length === 3) { + hex = hex.replace(/(.)/g, '$1$1'); + } + + hex.replace(/../g, function(color) { + rgb.push(parseInt(color, 0x10)); + return color; + }); + + return 'rgb(' + rgb.join(',') + ')'; + } + } +}); diff --git a/src/components/iconfont/weapp/weapp.json b/src/components/iconfont/weapp/weapp.json new file mode 100644 index 0000000..a89ef4d --- /dev/null +++ b/src/components/iconfont/weapp/weapp.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} diff --git a/src/components/iconfont/weapp/weapp.wxml b/src/components/iconfont/weapp/weapp.wxml new file mode 100644 index 0000000..9d62d6c --- /dev/null +++ b/src/components/iconfont/weapp/weapp.wxml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/components/iconfont/weapp/weapp.wxss b/src/components/iconfont/weapp/weapp.wxss new file mode 100644 index 0000000..9f68d1a --- /dev/null +++ b/src/components/iconfont/weapp/weapp.wxss @@ -0,0 +1,3 @@ +.icon { + background-repeat: no-repeat; +} diff --git a/src/components/layoutBlock/index.module.scss b/src/components/layoutBlock/index.module.scss new file mode 100644 index 0000000..0e3b807 --- /dev/null +++ b/src/components/layoutBlock/index.module.scss @@ -0,0 +1,16 @@ +.layoutBlock { + display: flex; + flex-flow: row nowrap; + background-color: #fff; + padding: 32px; + margin-bottom: 20px; + &--row { + flex-flow: row nowrap; + } + &--col { + flex-flow: column nowrap; + } + &--circle { + border-radius: 20px; + } +} diff --git a/src/components/layoutBlock/index.tsx b/src/components/layoutBlock/index.tsx new file mode 100644 index 0000000..057c0fe --- /dev/null +++ b/src/components/layoutBlock/index.tsx @@ -0,0 +1,34 @@ +import { View } from '@tarojs/components' +import { FC, ReactNode } from 'react' +import classnames from 'classname' +import styles from './index.module.scss' + +type FlexDirection = 'row' | 'col' + +interface PropsType { + flexDirection?: FlexDirection + + circle?: boolean + children?: ReactNode + customStyle?: React.CSSProperties + +} + +const LayoutBlock: FC = (props) => { + const { flexDirection = 'col', circle = false, children } = props + + const getClassName = () => { + const classObject = { + [styles['layoutBlock--circle']]: circle, + [styles[`layoutBlock--${flexDirection}`]]: flexDirection, + } + return classObject + } + + return + + {children} + + +} +export default LayoutBlock diff --git a/src/components/normalButton/index.module.scss b/src/components/normalButton/index.module.scss new file mode 100644 index 0000000..f5beb07 --- /dev/null +++ b/src/components/normalButton/index.module.scss @@ -0,0 +1,37 @@ +.button { + display: flex; + padding: 0 40px; + height: 36PX; + border: 1px solid $color_main; + background-color: #fff; + text-align: center; + flex-flow: row nowrap; + justify-content: center; + align-items: center; + &--normal { + height: 36PX; + font-size: $font_size_medium; + } + &--small { + height: 30PX; + font-size: $font_size_min; + } + &--disabled { + opacity: $opacity-disabled; + } + &--primary { + border: 1px solid $color_main; + color: $color_main; + } + &--danger { + border: 1px solid $color_danger; + color: $color_danger; + } + &--warning { + border: 1px solid $color_warning; + color: $color_warning; + } + &--circle { + border-radius: 50px; + } +} diff --git a/src/components/normalButton/index.tsx b/src/components/normalButton/index.tsx new file mode 100644 index 0000000..89a22a3 --- /dev/null +++ b/src/components/normalButton/index.tsx @@ -0,0 +1,43 @@ +import { View } from '@tarojs/components' +import { FC, ReactNode } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' + +type ButtonType = 'primary' | 'danger' | 'warning' +type ButtonSize = 'normal' | 'small' + +interface PropsType { + size?: ButtonSize + type?: ButtonType + circle?: boolean + disabled?: boolean + children?: ReactNode + onClick?: Function +} + +const NormalButton: FC = ({ type = 'primary', size = 'normal', circle = false, disabled = false, children, onClick }) => { + const getClassName = () => { + const classObject = { + [styles[`button--disabled`]]: disabled, + [styles[`button--${size}`]]: size, + [styles[`button--${type}`]]: type, + [styles['button--circle']]: circle, + } + console.log('classObj==>button', classObject) + return classObject + } + + const handleClick = (event) => { + if (disabled) { + return + } + onClick && onClick(event) + } + + return ( + + {children} + + ) +} +export default NormalButton diff --git a/src/components/tag/index.module.scss b/src/components/tag/index.module.scss new file mode 100644 index 0000000..b4ac861 --- /dev/null +++ b/src/components/tag/index.module.scss @@ -0,0 +1,33 @@ +.tag { + display: inline-flex; + flex-flow: row nowrap; + padding: 0 20px; + height: 60px; + color: #fff; + text-align: center; + justify-content: center; + align-items: center; + &--normal { + font-size: $font_size_medium; + height: 40px; + } + &--small{ + font-size: $font_size_min; + height: 30px; + } + &--circle{ + border-radius: 10px; + } + &--danger { + background-color: $color_danger; + } + &--primary{ + background-color: $color_main; + } + &--warning{ + background-color: $color_warning; + } + &--disabled { + opacity: $opacity-disabled; + } +} diff --git a/src/components/tag/index.tsx b/src/components/tag/index.tsx new file mode 100644 index 0000000..3b9485b --- /dev/null +++ b/src/components/tag/index.tsx @@ -0,0 +1,43 @@ +import { View } from '@tarojs/components' +import { FC, ReactNode } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' + +type TagSize = 'small' | 'normal' +type TagType = 'primary' | 'danger' | 'warning' + +interface PropsType { + type?: TagType + disabled?: boolean + size?: TagSize + children?: ReactNode + onClick?: Function + circle?: boolean + customStyle?: React.CSSProperties +} + +const Tag: FC = ({ type = 'primary', size = 'normal', disabled = false, children, onClick, circle = false, customStyle = {} }) => { + const handleClick = (event) => { + if (disabled) { + return + } + onClick && onClick(event) + } + + const getClassName = () => { + const classObject = { + [styles['tag--disabled']]: disabled, + [styles[`tag--${size}`]]: size, + [styles[`tag--${type}`]]: type, + [styles['tag--circle']]: circle, + } + console.log('classObj==>', classObject) + return classObject + } + return ( + + {children} + + ) +} +export default Tag diff --git a/src/constants/common.ts b/src/constants/common.ts index d14b9fd..2a5c78b 100644 --- a/src/constants/common.ts +++ b/src/constants/common.ts @@ -1,3 +1,3 @@ export const SET_SHOPCOUNT = 'set_shopCount' export const CLEAR_SHOPCOUNT = 'clear_shopCount' -export const STORAGE_SHOPCOUNT = 'storage_shopcount' \ No newline at end of file +export const STORAGE_SHOPCOUNT = 'storage_shopcount' diff --git a/src/constants/tabbar.ts b/src/constants/tabbar.ts new file mode 100644 index 0000000..0c30219 --- /dev/null +++ b/src/constants/tabbar.ts @@ -0,0 +1,3 @@ +export enum TabBarType { + SET_SELECTED = 'setSelected' +} diff --git a/src/custom-tab-bar/index.config.ts b/src/custom-tab-bar/index.config.ts new file mode 100644 index 0000000..6d6cc11 --- /dev/null +++ b/src/custom-tab-bar/index.config.ts @@ -0,0 +1,3 @@ +export default { + component: true, +} diff --git a/src/custom-tab-bar/index.module.scss b/src/custom-tab-bar/index.module.scss new file mode 100644 index 0000000..3075c58 --- /dev/null +++ b/src/custom-tab-bar/index.module.scss @@ -0,0 +1,41 @@ +.customTabBar { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + height: $customTabBarHeight; + display: flex; + flex-flow: row nowrap; + padding-bottom: env(safe-area-inset-bottom); + background-color: #fff; + z-index: 9999; + box-shadow: 0 11px 7px 8px #c2c2c2; + &-line { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 1px; + transform: scaleY(0.5); + } + &-item { + flex: 1; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + flex-flow: column nowrap; + &-icon { + width: 56px; + height: 56px; + font-size: 60px; + } + &-title { + margin-top: 10px; + font-size: 20px; + } + } +} +.selected { + color: $color_main; +} diff --git a/src/custom-tab-bar/index.tsx b/src/custom-tab-bar/index.tsx new file mode 100644 index 0000000..539b268 --- /dev/null +++ b/src/custom-tab-bar/index.tsx @@ -0,0 +1,73 @@ +import { CoverImage, View } from '@tarojs/components' +import { FC, useMemo, useState } from 'react' +import styles from './index.module.scss' +import IconFont from '@/components/iconfont' +import classname from 'classname' +import Taro, { useDidShow, useRouter } from '@tarojs/taro' +import { useSelector } from '@/reducers/hooks' +import { useDispatch } from 'react-redux' +import { Dispatch } from 'redux' +import { TabBarType } from '@/constants/tabbar' +import { TabBarAction } from '@/reducers/tabBar' + +type IconfontName = Parameters['0']['name'] + +type TabBarIndexMap = { + [Property: number]: { + id: number + pagePath: string + text: string + iconPath: IconfontName + selectedIconPath: IconfontName + } +} + +const CustomTabBar: FC = () => { + console.log('重新渲染') + + + + const { selectedId, tabItem } = useSelector((state) => { + console.log('sdfasdfa', state) + return state.tabBarData + }) + // const tabBarIndexMap = useMemo(() => { + // let map: TabBarIndexMap = {} + // for (let i = 0; i < tabItem.length; i++) { + // map[tabItem[i].id] = tabItem[i] + // } + // return map + // }, [tabItem]) + console.log('selectedId', selectedId) + + const dispatch = useDispatch>() + + const handleSelectTabItem = (id: TabBarIndexMap[number]['id']) => { + return () => { + setSelected(id) + Taro.switchTab({ url: tabItem.find(item=>item.id === id)?.pagePath! }) + } + } + const setSelected = (id: TabBarIndexMap[number]['id']) => { + dispatch({ type: TabBarType.SET_SELECTED, data: { tabItem, selectedId: id } }) + } + + return ( + + + {tabItem.map((item, index) => { + return ( + + + + {item.text} + + ) + })} + + ) +} +export default CustomTabBar diff --git a/src/pages/index/index.tsx b/src/pages/index/index.tsx index 523b94b..dd843ce 100644 --- a/src/pages/index/index.tsx +++ b/src/pages/index/index.tsx @@ -6,7 +6,7 @@ import MoveBtn from '@/components/moveBtn' import ShopCart from '@/components/shoppingCart' import { goLink } from '@/common/common' import styles from './index.module.scss' -import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import { kindListApi, ProductListApi } from '@/api/index' // import useLogin from '@/use/useLogin' import { mpproductcolorlist, mpsaleOrderpreView } from "@/api/order" @@ -296,4 +296,4 @@ export default () => { // ) } -// oninputEvent={(e, item) => { oninputEvent(e, item) }} \ No newline at end of file +// oninputEvent={(e, item) => { oninputEvent(e, item) }} diff --git a/src/pages/shopping/index.tsx b/src/pages/shopping/index.tsx index 2ae0ef7..2558ab4 100644 --- a/src/pages/shopping/index.tsx +++ b/src/pages/shopping/index.tsx @@ -1,9 +1,13 @@ import { isEmptyObject } from '@/common/common' import { View } from '@tarojs/components' +import Taro, { useDidShow } from '@tarojs/taro' +import { useMemo } from 'react' const User = () => { const obj = {} console.log(isEmptyObject(obj)) + + return sdfasdfasdf } export default User diff --git a/src/pages/user/index.config.ts b/src/pages/user/index.config.ts index 90ec98a..5531ea2 100644 --- a/src/pages/user/index.config.ts +++ b/src/pages/user/index.config.ts @@ -4,5 +4,5 @@ export default definePageConfig({ navigationBarBackgroundColor: '#4581FF', backgroundColor: '#4581FF', backgroundColorTop: '#4581FF', - enablePullDownRefresh: true + enablePullDownRefresh: true, }) diff --git a/src/pages/user/index.module.scss b/src/pages/user/index.module.scss index c4c3e5e..a1f1daf 100644 --- a/src/pages/user/index.module.scss +++ b/src/pages/user/index.module.scss @@ -1,5 +1,97 @@ -.main{ - width: 100%; - min-height: 100vh; - background: linear-gradient(to bottom, $color_main 25%, $color_bg_one 42%); +page{ + position: relative; + +} +.main { + background: linear-gradient(to bottom, $color_main 25%, $color_bg_one 42%); + padding: 24px; + padding-bottom: 0; + box-sizing: border-box; + overflow-y: scroll; + height: 100%; +} +.userAvatar { + position: relative; + width: 122px; + height: 122px; + border-radius: 50%; + background-color: #fff; + overflow: hidden; + &-text { + display: block; + width: 100%; + position: absolute; + left: 0; + bottom: 0; + height: 31px; + color: #fff; + text-align: center; + line-height: 31px; + font-size: 20px; + background-color: rgba($color: #000000, $alpha: 0.33); + } + +} +.topBar { + display: flex; + flex-flow: row nowrap; + justify-content: space-between; + align-items: center; + .left { + } + .middle { + margin: 0 40px; + flex: 1 1 auto; + } + .right { + } +} +.bottomBar { + display: flex; + flex-flow: row nowrap; + align-items: center; + border-radius: 16px; + background-color: #f6f6f6; + margin-top: 20px; + padding: 15px; +} +.username { + display: block; + font-size: 36px; + font-weight: 600; +} +.userno { + display: block; + font-size: 28px; + color: $color_font_two; +} +.userTitle { + color: #626262; + font-weight: 600; + font-size: $font_size_medium; + margin-left: 20px; +} +.grid-container{ + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-column-gap: 32px; + grid-row-gap: 32px; +} +.layoutTabBar { + display: flex; + flex-flow: row nowrap; + justify-content: space-between; + align-items: center; +} +.layoutTitle { + font-size: 32px; + font-weight: 600; + color: #333; + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + margin-bottom: 20px; + +} +.layoutDescription { + font-size: 24px; + color: $color_main; } diff --git a/src/pages/user/index.tsx b/src/pages/user/index.tsx index ebf4f98..74a38c7 100644 --- a/src/pages/user/index.tsx +++ b/src/pages/user/index.tsx @@ -1,27 +1,192 @@ import { isEmptyObject } from '@/common/common' -import { Button, View } from '@tarojs/components' -import { FC, memo, useState } from 'react' +import { Button, View, Image, Text } from '@tarojs/components' +import { FC, memo, useMemo, useState } from 'react' import styles from './index.module.scss' -const SonComp: FC = memo(() => { - return 我改变了吗{new Date().getTime()} -}) +import defaultAvatar from '../../styles/image/defaultAvatar.png' +import NormalButton from '@/components/normalButton' +import Tag from '@/components/tag' +import Divider from '@/components/Divider' +import LayoutBlock from '@/components/layoutBlock' +import IconCard from '@/components/iconCard' +import IconFont from '@/components/iconfont' + +type IconfontName = Parameters['0']['name'] +type IconCardType = { + iconName: IconfontName, + name: string, + path: string +} + +// 用户信息 +const UserInfo: FC = () => { + const [userInfo, setUserInfo] = useState({ + avatarUrl: '', + username: '', + userno: '', + }) + + + const feature: IconCardType[] = [ + { + iconName: 'icon-lingquseka', + name: '领取色卡', + path: '', + }, + { + iconName: 'icon-pandiansaoma', + name: '盘点扫码', + path: '', + }, + { + iconName: 'icon-fahuoliebiao', + name: '发货列表', + path: '', + }, + { + iconName: 'icon-yaoqingma', + name: '邀请码', + path: '', + }, + { + iconName: 'icon-tihuoliebiao', + name: '提货列表', + path: '', + }, + { + iconName: 'icon-shouhouzhongxin', + name: '退货退款', + path: '', + }, + { + iconName: 'icon-shoukuanliebiao', + name: '收款列表', + path: '', + }, + { + iconName: 'icon-shoukuanliebiao', + name: '客户列表', + path: '', + }, + ] + + const fabric: IconCardType[] = [ + { + iconName: 'icon-yansequyang', + name: '颜色取样', + path: '', + }, + { + iconName: 'icon-qusechazhao', + name: '取色查找', + path: '', + }, + { + iconName: 'icon-yangpinduibi', + name: '样品对比', + path: '', + }, + ] + + const statisticAnalysis: IconCardType[] = [ + { + iconName: 'icon-xiaoshou', + name: '销售', + path: '', + }, + { + iconName: 'icon-duizhang', + name: '对账', + path: '', + }, + { + iconName: 'icon-yuncangkucun', + name: '云仓库存', + path: '', + }, + { + iconName: 'icon-qianzhicangkucun', + name: '前置仓库存', + path: '', + }, + ] + + const handleLogout = () => {} + + return ( + <> + + + + + + + 杨子杰 + 064 + + + + 退出登录 + + + + + + IT部门 + + + IT-开发总监 + + + + 功能特色 + + {feature.map((item) => { + return + })} + + + + 布料取色 + + {fabric.map((item) => { + return + })} + + + + 统计分析 + + {statisticAnalysis.map((item) => { + return + })} + + + {/* + + 客户列表 + 查看全部客户 ▶ + + asdfasdfasdfas + */} + + ) +} +// 用户头像 +const UserAvatar = ({ src }) => { + return ( + + + {src ? null : 编辑} + + ) +} // 我的 const User = () => { - const obj = {} - console.log(isEmptyObject(obj)) - const [count, setCount] = useState(0) - const handleCount = () => { - setCount((prev) => { - return prev + 1 - }) - } return ( <> - - sdfasdfasdf {count} - - + + ) diff --git a/src/reducers/hooks.ts b/src/reducers/hooks.ts index e2f3457..ccc4573 100644 --- a/src/reducers/hooks.ts +++ b/src/reducers/hooks.ts @@ -1,10 +1,12 @@ //该方法纯粹只是个Ts类型定义文件 import { useSelector as useReduxSelector, TypedUseSelectorHook } from 'react-redux'; -import { DataParam } from './userInfo'; +import { DataParam as userInfoParam } from './userInfo'; import { DataParam as commonDataParam } from './commonData'; +import { TabBarData as tabbarDataParam } from './tabBar'; type Params = { - userInfo: DataParam, - commonData: commonDataParam + userInfo: userInfoParam + commonData: commonDataParam + tabBarData: tabbarDataParam } -export const useSelector: TypedUseSelectorHook = useReduxSelector; \ No newline at end of file +export const useSelector: TypedUseSelectorHook = useReduxSelector; diff --git a/src/reducers/index.ts b/src/reducers/index.ts index 1b859e6..f5294cc 100644 --- a/src/reducers/index.ts +++ b/src/reducers/index.ts @@ -1,8 +1,18 @@ import { combineReducers } from 'redux' import userInfo from './userInfo' import commonData from './commonData' +import tabBarReducer from './tabBar' -export default combineReducers({ - userInfo, - commonData -}) \ No newline at end of file +export type Reducers = { + userInfo: typeof userInfo + commonData: typeof commonData + tabBarData: typeof tabBarReducer +} + +export type ReducersKey = keyof Reducers + +export default combineReducers({ + userInfo, + commonData, + tabBarData: tabBarReducer, +}) diff --git a/src/reducers/tabBar.ts b/src/reducers/tabBar.ts new file mode 100644 index 0000000..638bc96 --- /dev/null +++ b/src/reducers/tabBar.ts @@ -0,0 +1,72 @@ +import { TabBarType } from '../constants/tabbar' +import IconFont from '@/components/iconfont' + +type IconfontName = Parameters['0']['name'] + +type TabBarIndexMap = { + [Property: number]: { + id: number + pagePath: string + text: string + iconPath: IconfontName + selectedIconPath: IconfontName + } +} + + +const INITIAL_STATE = { + selectedId: 1, + tabItem: [ + { + id: 1, + pagePath: '/pages/index/index', + text: '首页', + iconPath: 'icon-shouye1', + selectedIconPath: 'icon-shouye', + }, + { + id: 2, + pagePath: '/pages/shopping/index', + text: '购物', + iconPath: 'icon-gouwu1', + selectedIconPath: 'icon-gouwu', + }, + { + id: 3, + pagePath: '/pages/order/index', + text: '订单', + iconPath: 'icon-dingdan1', + selectedIconPath: 'icon-dingdan', + }, + { + id: 4, + pagePath: '/pages/user/index', + text: '我的', + iconPath: 'icon-gerenzhongxin1', + selectedIconPath: 'icon-gerenzhongxin', + }, + ], +} + +export type TabBarData = { + selectedId: number + tabItem: TabBarIndexMap[number][] +} + +export type TabBarAction = { + type: TabBarType + data: TabBarData +} +// TabBarReducer +export default (state = INITIAL_STATE, action: TabBarAction) => { + const { type, data } = action + switch (type) { + case TabBarType.SET_SELECTED: + return { + ...state, + selectedId: data.selectedId, + } + default: + return state + } +} diff --git a/src/styles/common.scss b/src/styles/common.scss index 11655cf..9f2f08b 100644 --- a/src/styles/common.scss +++ b/src/styles/common.scss @@ -1,33 +1,44 @@ - -$color_bg_one: #F8F8F8; -$color_font_one: #3C3C3C; -$color_font_two: #ABABAB; +$color_bg_one: #f8f8f8; +$color_font_one: #3c3c3c; +$color_font_two: #ababab; $color_font_three: #707070; -$color_main: #4581FF; +$color_main: #4581ff; + +$color_danger: #e64340; +$color_warning: #e6a23c; + +$opacity-disabled: 0.3; +$borderStyle: solid; +$borderColor: #ebebeb; $font_size_big: 32px; $font_size: 28px; $font_size_medium: 24px; $font_size_min: 22px; +$customTabBarHeight: 100px; + + //安全底部距离 .common_safe_area_y { - width: 100%; - height: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */ - height: env(safe-area-inset-bottom); /* 兼容 iOS >= 11.2 */ + width: 100%; + height: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */ + height: env(safe-area-inset-bottom); /* 兼容 iOS >= 11.2 */ } //省略号 -@mixin common_ellipsis($params:1) { - overflow: hidden; - display: -webkit-box; - white-space:normal; - text-overflow:ellipsis; - word-break:break-all; - -webkit-box-orient: vertical; - -webkit-line-clamp: $params; - - +@mixin common_ellipsis($params: 1) { + overflow: hidden; + display: -webkit-box; + white-space: normal; + text-overflow: ellipsis; + word-break: break-all; + -webkit-box-orient: vertical; + -webkit-line-clamp: $params; } +.full-100 { + width: 100%; + height: 100%; +} diff --git a/src/styles/iconfont.scss b/src/styles/iconfont.scss index e08c56e..5da1113 100644 --- a/src/styles/iconfont.scss +++ b/src/styles/iconfont.scss @@ -1,8 +1,9 @@ +/* CDN 服务仅供平台体验和调试使用,平台不承诺服务的稳定性,企业客户需下载字体包自行发布使用并做好备份。 */ @font-face { - font-family: "iconfont"; - /* Project id 2987621 */ - src: url('iconfont.ttf?t=1661926630273') format('truetype'); - + font-family: 'iconfont'; /* Project id 3619513 */ + src: url('//at.alicdn.com/t/c/font_3619513_g8r6ax9bp1n.woff2?t=1662609560991') format('woff2'), + url('//at.alicdn.com/t/c/font_3619513_g8r6ax9bp1n.woff?t=1662609560991') format('woff'), + url('//at.alicdn.com/t/c/font_3619513_g8r6ax9bp1n.ttf?t=1662609560991') format('truetype'); } .iconfont { @@ -13,222 +14,219 @@ -moz-osx-font-smoothing: grayscale; } -.icon-A:before { - content: "\e6ea"; +.icon-yewuyuanqizi:before { + content: "\e639"; } -.icon-erweima:before { - content: "\e7b5"; +.icon-chakanquanbukehu:before { + content: "\e638"; } -.icon-xtianzhangqi:before { - content: "\e66a"; -} - -.icon-yucunkuan:before { - content: "\e66c"; -} - -.icon-a-tuikuanshouhou:before { - content: "\e65c"; -} - -.icon-yifahuo:before { - content: "\e65b"; -} - -.icon-daipeibu:before { - content: "\e662"; -} - -.icon-guanbi:before { - content: "\e641"; -} - -.icon-a-saoyisao2:before { - content: "\e613"; -} - -.icon-guanyuquse:before { - content: "\e635"; -} - -.icon-yangpinduibi:before { - content: "\e631"; -} - -.icon-lingquseka:before { - content: "\e632"; -} - -.icon-sehaochazhao:before { - content: "\e633"; -} - -.icon-jichuguanli:before { - content: "\e634"; -} - -.icon-yuncangkucun:before { - content: "\e630"; -} - -.icon-shangchuanzhaopian:before { - content: "\e62f"; -} - -.icon-zhushi:before { - content: "\e62d"; -} - -.icon-shenqingtuihuo:before { - content: "\e62e"; -} - -.icon-quxiaodingdanxiao:before { - content: "\e62c"; -} - -.icon-tuihuo1:before { - content: "\e62a"; -} - -.icon-a-fenqishangchengyifahuo:before { - content: "\e62b"; -} - -.icon-peibu:before { - content: "\e626"; -} - -.icon-dingdanbishu:before { - content: "\e627"; -} - -.icon-guanyufahuo:before { - content: "\e628"; -} - -.icon-tuihuo:before { - content: "\e629"; -} - -.icon-rili:before { - content: "\e625"; -} - -.icon-jiangpai:before { - content: "\e624"; -} - -.icon-xiaoshou:before { - content: "\e623"; -} - -.icon-cangkuguanli:before { - content: "\e61f"; -} - -.icon-zhibiaoduizhang:before { - content: "\e620"; -} - -.icon-a-tongji1:before { - content: "\e621"; -} - -.icon-shaixuan:before { - content: "\e622"; -} - -.icon-xiangxiagengduo:before { - content: "\e61e"; -} - -.icon-gongnengdingyi:before { - content: "\e61a"; -} - -.icon-rukuguanli:before { - content: "\e61b"; -} - -.icon-shenqing:before { - content: "\e61c"; -} - -.icon-kehuguanli:before { - content: "\e61d"; -} - -.icon-a-phone1:before { - content: "\e619"; -} - -.icon-a-saoyisao2:before { - content: "\e613"; -} - -.icon-ico_zhongyaofangguanli_zhongyaopandian:before { - content: "\e615"; -} - -.icon-seka:before { - content: "\e616"; -} - -.icon-xiaoshoutongji:before { - content: "\e617"; -} - -.icon-gengduo:before { - content: "\e618"; -} - -.icon-lajitong:before { - content: "\e60c"; -} - -.icon-jian:before { - content: "\e60b"; -} - -.icon-jia:before { - content: "\e60a"; -} - -.icon-a-tick1:before { - content: "\e609"; -} - -.icon-a-cuowuwrong:before { - content: "\e608"; -} - -.icon-more:before { - content: "\e606"; +.icon-biyan:before { + content: "\e637"; } .icon-bianji:before { - content: "\e607"; + content: "\e61e"; } -.icon-wode:before { - content: "\e602"; +.icon-daikuan:before { + content: "\e61f"; } -.icon-shangpinguanli:before { - content: "\e603"; +.icon-cangku:before { + content: "\e620"; } -.icon-dingdan:before { +.icon-guanlidingdan:before { + content: "\e621"; +} + +.icon-mima:before { + content: "\e622"; +} + +.icon-guanbi:before { + content: "\e623"; +} + +.icon-jianshao:before { + content: "\e624"; +} + +.icon-dingwei:before { + content: "\e625"; +} + +.icon-saomiao:before { + content: "\e626"; +} + +.icon-peihuo:before { + content: "\e627"; +} + +.icon-shaixuan:before { + content: "\e628"; +} + +.icon-paiming:before { + content: "\e629"; +} + +.icon-shanchusousuoxinxi:before { + content: "\e62a"; +} + +.icon-shijian:before { + content: "\e62b"; +} + +.icon-sousuo:before { + content: "\e62c"; +} + +.icon-shouhou:before { + content: "\e62d"; +} + +.icon-sousuofanhui:before { + content: "\e62e"; +} + +.icon-sousuoshanchu:before { + content: "\e62f"; +} + +.icon-tuikuan:before { + content: "\e630"; +} + +.icon-tishi:before { + content: "\e631"; +} + +.icon-xianxiahuizong:before { + content: "\e632"; +} + +.icon-xinzeng:before { + content: "\e633"; +} + +.icon-yonghuming:before { + content: "\e634"; +} + +.icon-yanjing:before { + content: "\e635"; +} + +.icon-yufukuan:before { + content: "\e636"; +} + +.icon-wodekefu:before { + content: "\e60c"; +} + +.icon-dizhi:before { + content: "\e60d"; +} + +.icon-shouhouzhongxin:before { + content: "\e60e"; +} + +.icon-wodeshoucang:before { + content: "\e60f"; +} + +.icon-shoukuanliebiao:before { + content: "\e610"; +} + +.icon-madanguanli:before { + content: "\e611"; +} + +.icon-qusechazhao:before { + content: "\e612"; +} + +.icon-pandiansaoma:before { + content: "\e613"; +} + +.icon-yaoqingma:before { + content: "\e614"; +} + +.icon-duizhang:before { + content: "\e615"; +} + +.icon-tihuoliebiao:before { + content: "\e616"; +} + +.icon-yangpinduibi:before { + content: "\e617"; +} + +.icon-yansequyang:before { + content: "\e618"; +} + +.icon-fahuoliebiao:before { + content: "\e619"; +} + +.icon-yuncangkucun:before { + content: "\e61a"; +} + +.icon-xiaoshou:before { + content: "\e61b"; +} + +.icon-qianzhicangkucun:before { + content: "\e61c"; +} + +.icon-lingquseka:before { + content: "\e61d"; +} + +.icon-gouwu1:before { + content: "\e608"; +} + +.icon-dingdan1:before { + content: "\e609"; +} + +.icon-gerenzhongxin1:before { + content: "\e60a"; +} + +.icon-shouye1:before { + content: "\e60b"; +} + +.icon-gerenzhongxin:before { content: "\e604"; } -.icon-fenlei:before { +.icon-dingdan:before { content: "\e605"; } -.icon-a-sousuo1:before { - content: "\e601"; -} \ No newline at end of file +.icon-shouye:before { + content: "\e606"; +} + +.icon-gouwu:before { + content: "\e607"; +} + diff --git a/src/styles/iconfont.ttf b/src/styles/iconfont.ttf index 598c57d..baa548b 100644 Binary files a/src/styles/iconfont.ttf and b/src/styles/iconfont.ttf differ diff --git a/src/styles/image/defaultAvatar.png b/src/styles/image/defaultAvatar.png new file mode 100644 index 0000000..d55d148 Binary files /dev/null and b/src/styles/image/defaultAvatar.png differ diff --git a/src/styles/tabbar/list.png b/src/styles/tabbar/list.png deleted file mode 100644 index 4f29b95..0000000 Binary files a/src/styles/tabbar/list.png and /dev/null differ diff --git a/src/styles/tabbar/list_on.png b/src/styles/tabbar/list_on.png deleted file mode 100644 index 5d116c8..0000000 Binary files a/src/styles/tabbar/list_on.png and /dev/null differ diff --git a/src/styles/tabbar/my.png b/src/styles/tabbar/my.png deleted file mode 100644 index cff9c48..0000000 Binary files a/src/styles/tabbar/my.png and /dev/null differ diff --git a/src/styles/tabbar/my_on.png b/src/styles/tabbar/my_on.png deleted file mode 100644 index f987eb6..0000000 Binary files a/src/styles/tabbar/my_on.png and /dev/null differ diff --git a/src/styles/tabbar/order.png b/src/styles/tabbar/order.png deleted file mode 100644 index 72ea1c9..0000000 Binary files a/src/styles/tabbar/order.png and /dev/null differ diff --git a/src/styles/tabbar/order_on.png b/src/styles/tabbar/order_on.png deleted file mode 100644 index 9a32e1f..0000000 Binary files a/src/styles/tabbar/order_on.png and /dev/null differ diff --git a/yarn.lock b/yarn.lock index fffa0e0..174e4d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3514,6 +3514,13 @@ aws4@^1.8.0: resolved "https://registry.npmmirror.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59" integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== +axios@^0.19.0: + version "0.19.2" + resolved "https://registry.npmmirror.com/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27" + integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA== + dependencies: + follow-redirects "1.5.10" + babel-code-frame@6.26.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.npmmirror.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -4800,6 +4807,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" +classname@^0.0.0: + version "0.0.0" + resolved "https://registry.npmmirror.com/classname/-/classname-0.0.0.tgz#43d171b484e354c7a293a5b78004df6852db20d6" + integrity sha512-kkhsspEJdUW+VhuvNzb2sQf0KbafDPfd36dB1qf03Uu42dWZwMQzaQuyNkaRr5ir0ZiAN0+TlH/EOOfwb/aaXg== + classnames@^2.2.5: version "2.3.1" resolved "https://registry.npmmirror.com/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e" @@ -4936,6 +4948,11 @@ colorette@^2.0.10: resolved "https://registry.npmmirror.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== +colors@^1.3.3, colors@^1.4.0: + version "1.4.0" + resolved "https://registry.npmmirror.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" @@ -5493,6 +5510,13 @@ debug@4.3.4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3. dependencies: ms "2.1.2" +debug@=3.1.0, debug@~3.1.0: + version "3.1.0" + resolved "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + debug@^3.0.0, debug@^3.2.6, debug@^3.2.7: version "3.2.7" resolved "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" @@ -5500,13 +5524,6 @@ debug@^3.0.0, debug@^3.2.6, debug@^3.2.7: dependencies: ms "^2.1.1" -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.npmmirror.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.npmmirror.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -6792,6 +6809,13 @@ flatted@^2.0.0: resolved "https://registry.npmmirror.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== +follow-redirects@1.5.10: + version "1.5.10" + resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a" + integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ== + dependencies: + debug "=3.1.0" + follow-redirects@^1.0.0: version "1.15.1" resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" @@ -7033,7 +7057,7 @@ glob@7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.6: +glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" resolved "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -7501,6 +7525,16 @@ human-signals@^2.1.0: resolved "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +iconfont-parser@^1.0.0: + version "1.0.0" + resolved "https://registry.npmmirror.com/iconfont-parser/-/iconfont-parser-1.0.0.tgz#1fa61be02677005a9a014653ef2eeb7503c3538a" + integrity sha512-3RJceYHEjaqYyeDdfSAb1vP1x1Eb7ZtC9Xwetj+axm85sBlJU7HMvdNLVpwm/3g5eghYOdkQK+epUITZGAIqKQ== + dependencies: + axios "^0.19.0" + colors "^1.4.0" + tslib "^1.10.0" + xml2js "^0.4.22" + iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -9023,6 +9057,20 @@ mini-css-extract-plugin@2.4.6: dependencies: schema-utils "^4.0.0" +mini-program-iconfont-cli@0.6.1: + version "0.6.1" + resolved "https://registry.npmmirror.com/mini-program-iconfont-cli/-/mini-program-iconfont-cli-0.6.1.tgz#61d08cf05bf5a51c82a75c4afcf77224e20ed06c" + integrity sha512-69FsU+tSevwmHBiL55535Hfh1q0ciRpNyYtiTBZw2bvw9lvW3N/SCTg395P0rkisWMqf1Ki9VYIWeaONvNWy2Q== + dependencies: + axios "^0.19.0" + colors "^1.3.3" + fs-extra "^8.1.0" + glob "^7.1.4" + minimist "^1.2.5" + mkdirp "^0.5.1" + tslib "^1.10.0" + xml2js "^0.4.19" + minimalistic-assert@^1.0.0: version "1.0.1" resolved "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -10610,6 +10658,19 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" +react-iconfont-cli@2.0.2: + version "2.0.2" + resolved "https://registry.npmmirror.com/react-iconfont-cli/-/react-iconfont-cli-2.0.2.tgz#547d872e5d76796230877176e397bc6ed3337467" + integrity sha512-43NP+dsk08XwJf8oXfrDwHk1WeE76vy1Xzbd2zz7WjjxsdblF9h/oalFMPclZSibIirwsckz3L0IV+42Yu//iQ== + dependencies: + colors "^1.3.3" + glob "^7.1.4" + iconfont-parser "^1.0.0" + lodash "^4.17.15" + minimist "^1.2.5" + mkdirp "^0.5.1" + tslib "^1.10.0" + react-is@^16.13.1, react-is@^16.7.0: version "16.13.1" resolved "https://registry.npmmirror.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -10620,6 +10681,19 @@ react-is@^18.0.0: resolved "https://registry.npmmirror.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-native-iconfont-cli@2.2.4: + version "2.2.4" + resolved "https://registry.npmmirror.com/react-native-iconfont-cli/-/react-native-iconfont-cli-2.2.4.tgz#9bc3b18653105950646f8e5f5fcde9f8835d76f3" + integrity sha512-qTjfHG2f/sc3/YKWZJvIJk/SwiTu8C9/SvtoLxRX+GM/6pvOJq0ge6rcV3vTh4s3QJDuNDOD6+a4hGD6vv2vSg== + dependencies: + colors "^1.3.3" + glob "^7.1.4" + iconfont-parser "^1.0.0" + lodash "^4.17.15" + minimist "^1.2.5" + mkdirp "^0.5.1" + tslib "^1.10.0" + react-reconciler@0.27.0: version "0.27.0" resolved "https://registry.npmmirror.com/react-reconciler/-/react-reconciler-0.27.0.tgz#360124fdf2d76447c7491ee5f0e04503ed9acf5b" @@ -12204,6 +12278,21 @@ taro-css-to-react-native@3.3.10: css-mediaquery "^0.1.2" postcss-value-parser "^3.3.0" +taro-iconfont-cli@^3.3.0: + version "3.3.0" + resolved "https://registry.npmmirror.com/taro-iconfont-cli/-/taro-iconfont-cli-3.3.0.tgz#b4d3f83598099d84bdc61435cadf4a8a584a29d7" + integrity sha512-lkZE/zaL0J3a6ymlUp1sMBiM8krJkDh0ZsrzB5FM2IGdgQO1/4Vs7N2hzTEVZ7EZoV/6hBqL0YwzTXg4MpuJMg== + dependencies: + colors "^1.4.0" + fs-extra "^8.1.0" + iconfont-parser "^1.0.0" + mini-program-iconfont-cli "0.6.1" + minimist "^1.2.5" + mkdirp "^0.5.1" + react-iconfont-cli "2.0.2" + react-native-iconfont-cli "2.2.4" + tslib "^2.3.1" + tarojs@^2.1.1: version "2.1.1" resolved "https://registry.npmmirror.com/tarojs/-/tarojs-2.1.1.tgz#d56b50608b01de4efd6f245ecbf8cc3cd632173f" @@ -12404,7 +12493,7 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: resolved "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.0.3, tslib@^2.3.0: +tslib@^2.0.3, tslib@^2.3.0, tslib@^2.3.1: version "2.4.0" resolved "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== @@ -13148,7 +13237,7 @@ xml-parse-from-string@^1.0.0: resolved "https://registry.npmmirror.com/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz#a9029e929d3dbcded169f3c6e28238d95a5d5a28" integrity sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g== -xml2js@^0.4.19, xml2js@^0.4.5: +xml2js@^0.4.19, xml2js@^0.4.22, xml2js@^0.4.5: version "0.4.23" resolved "https://registry.npmmirror.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==