diff --git a/global.d.ts b/global.d.ts index f8ba444..6981aec 100644 --- a/global.d.ts +++ b/global.d.ts @@ -20,3 +20,4 @@ declare namespace NodeJS { declare const CURRENT_VERSION: string declare const CURRENT_GITHASH: string declare const CURRENT_ENV: string + diff --git a/iconfont.json b/iconfont.json index a759b0f..3b833b0 100644 --- a/iconfont.json +++ b/iconfont.json @@ -1,5 +1,5 @@ { - "symbol_url": "//at.alicdn.com/t/c/font_3619513_pecprurprt.js", + "symbol_url": "//at.alicdn.com/t/c/font_3619513_1msan9t0ewxk.js", "save_dir": "./src/components/iconfont", "use_typescript": true, "platforms": ["weapp","h5"], diff --git a/src/common/Enumerate/BaseEnum/index.ts b/src/common/Enumerate/BaseEnum/index.ts new file mode 100644 index 0000000..2fbbb36 --- /dev/null +++ b/src/common/Enumerate/BaseEnum/index.ts @@ -0,0 +1,8 @@ +// 订单类型 +// 0 大货 1 剪板 2 散剪 + +export const enum EnumSaleMode { + Bulk = 0, + Plate = 1, + BulkCut = 2 +} diff --git a/src/common/Enumerate/index.ts b/src/common/Enumerate/index.ts new file mode 100644 index 0000000..a5d1f93 --- /dev/null +++ b/src/common/Enumerate/index.ts @@ -0,0 +1 @@ +export { EnumSaleMode } from './BaseEnum/index' diff --git a/src/components/checkbox/index.module.scss b/src/components/checkbox/index.module.scss index 4c33e14..fdaed3e 100644 --- a/src/components/checkbox/index.module.scss +++ b/src/components/checkbox/index.module.scss @@ -7,6 +7,7 @@ } } .checkbox_main { + flex: 0 0 auto; display: flex; justify-content: center; align-items: center; @@ -14,6 +15,7 @@ background-color: #fff; border: 1px solid #c2c2c2; text-align: center; + overflow: hidden; line-height: 40px; &--normal { width: 40px; diff --git a/src/components/checkbox/index.tsx b/src/components/checkbox/index.tsx index 84aa42d..13c648c 100644 --- a/src/components/checkbox/index.tsx +++ b/src/components/checkbox/index.tsx @@ -11,15 +11,30 @@ type params = { onClose?: () => void //取消触发 status?: boolean //是否选中 disabled?: boolean //是否禁用 + triggerLabel?: boolean // 点击label是否触发选中 circle?: boolean round?: boolean size?: CheckboxSize children?: React.ReactNode customStyles?: React.CSSProperties customClassName?: string + customTextClass?: string } export default forwardRef((props: params, ref) => { - const { onSelect, onClose, status = false, disabled = false, circle = false, round = true, size = 'normal', children, customStyles, customClassName } = props + const { + onSelect, + onClose, + status = false, + disabled = false, + circle = false, + round = true, + triggerLabel = true, + size = 'normal', + children, + customStyles = {}, + customClassName = '', + customTextClass = '', + } = props const [selected, SetSelected] = useState(false) const onSelectEven = () => { if (disabled) return false @@ -32,6 +47,12 @@ export default forwardRef((props: params, ref) => { SetSelected(res) } + const handleClickChildren = (event) => { + if (!triggerLabel){ + return event.stopPropagation() + } + } + const getMainClassName = () => { const classObject = { [styles['checkbox_main--selected']]: selected, @@ -57,13 +78,17 @@ export default forwardRef((props: params, ref) => { SetSelected(status) }, [status]) return ( - onSelectEven()} style={customStyles}> + {selected && } - {children && {children}} + {children && ( + + {children} + + )} ) }) diff --git a/src/components/counter/index1.module.scss b/src/components/counter/index1.module.scss deleted file mode 100644 index fe96cca..0000000 --- a/src/components/counter/index1.module.scss +++ /dev/null @@ -1,37 +0,0 @@ - -.main{ - display: flex; - align-items: center; - justify-content: space-between; - width: 100%; - .reduce, .plus{ - font-size: $font_size_big; - color: $color_main; - width: 46px; - height: 46px; - display: flex; - align-items: center; - justify-content:center; - font-size: 50px; - background-color: $color_main; - color: #fff; - border-radius: 8px; - } - .input{ - display: flex; - align-items: flex-end; - background-color: #fff; - padding: 5px 10px; - box-sizing: border-box; - width: 106px; - border-radius: 10px; - } - input{ - font-size: $font_size_medium; - } - .unit{ - font-size: $font_size_min; - color: $color_font_two; - } - -} \ No newline at end of file diff --git a/src/components/counter/index1.tsx b/src/components/counter/index1.tsx deleted file mode 100644 index d7f632d..0000000 --- a/src/components/counter/index1.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import { Input, View } from "@tarojs/components" -import { useEffect, useMemo, useRef, useState } from "react" -import Big from 'big.js' -import styles from "./index.module.scss" -type params = { - minNum?: number, //最小值 - maxNum?: number, //最大值 - step?: number, //步长 - defaultNum?: number, //默认值 - digits?: number //多少位小数 - onChange?:(val:number) => void, - onBlue?:(val:number) => void, //失去焦点触发 - onClickBtn?:(val:number) => void, - unit?: string -} -export default ({minNum = 0, maxNum = 100, step=1, digits = 0, defaultNum = 0, onChange, onBlue, onClickBtn, unit = ''}: params) => { - const [value, setValue] = useState({count:defaultNum}) - - const onPlus = () => { - let {count} = value - let num_res = Big(count).add(step).toNumber() - num_res = num_res >= maxNum?maxNum:num_res - num_res = formatDigits(num_res) - setValue({...value, count:num_res}) - onChange?.(parseFloat(num_res)) - onClickBtn?.(parseFloat(num_res)) - } - const minus = () => { - let {count} = value - let num_res = Big(count).minus(step).toNumber() - num_res = num_res < minNum?0:num_res - setValue({...value, count:num_res}) - onChange?.(parseFloat(num_res)) - onClickBtn?.(parseFloat(num_res)) - } - - //保留小数 - const formatDigits = (num) => { - num = num + '' - if(num.includes('.')&&digits > 0) { - console.log('num::',num.includes('.')) - let res = num.split('.') - let last_num = res[1].substr(0, digits) - return res[0] + '.' + last_num - } - return parseFloat(num) - } - - //检查数据 - const checkData = (val) => { - let num = parseFloat(val) - if(num > maxNum) return maxNum - if(num < minNum) return minNum - return val - } - - - const onInputEven = (e) => { - let res = e.detail.value - if(res === '') { - setValue({...value, count:minNum}) - onChange?.(minNum) - } - else if(!isNaN(Number(res))) { - let count = formatDigits(res) - count = checkData(count) - setValue({...value, count}) - onChange?.(parseFloat(count as string)) - } else { - let num = parseFloat(res) - if(!isNaN(num)) { - let count = formatDigits(num) - count = checkData(count) - setValue({...value, count}) - onChange?.(count as number) - } else { - setValue({...value, count:defaultNum}) - onChange?.(defaultNum) - } - - } - } - - const onBluerEven = () => { - let num = parseFloat(value.count) - if(!isNaN(num)) { - let count = formatDigits(num) - count = checkData(count) - setValue({...value, count}) - onBlue?.(count as number) - } else { - setValue({...value, count:defaultNum}) - onBlue?.(defaultNum) - } - } - return ( - - minus()}>- - - - {unit} - - onPlus()}>+ - - ) -} \ No newline at end of file diff --git a/src/components/iconfont/h5/IconShouqi.tsx b/src/components/iconfont/h5/IconShouqi.tsx new file mode 100644 index 0000000..85c6745 --- /dev/null +++ b/src/components/iconfont/h5/IconShouqi.tsx @@ -0,0 +1,34 @@ +/* tslint:disable */ +/* eslint-disable */ + +import React, { CSSProperties, SVGAttributes, FunctionComponent } from 'react'; +import { getIconColor } from './helper'; + +interface Props extends Omit, 'color'> { + size?: number; + color?: string | string[]; +} + +const DEFAULT_STYLE: CSSProperties = { + display: 'block', +}; + +const IconShouqi: FunctionComponent = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + ); +}; + +IconShouqi.defaultProps = { + size: 18, +}; + +export default IconShouqi; diff --git a/src/components/iconfont/h5/IconZhankai.tsx b/src/components/iconfont/h5/IconZhankai.tsx new file mode 100644 index 0000000..c22ccc1 --- /dev/null +++ b/src/components/iconfont/h5/IconZhankai.tsx @@ -0,0 +1,34 @@ +/* tslint:disable */ +/* eslint-disable */ + +import React, { CSSProperties, SVGAttributes, FunctionComponent } from 'react'; +import { getIconColor } from './helper'; + +interface Props extends Omit, 'color'> { + size?: number; + color?: string | string[]; +} + +const DEFAULT_STYLE: CSSProperties = { + display: 'block', +}; + +const IconZhankai: FunctionComponent = ({ size, color, style: _style, ...rest }) => { + const style = _style ? { ...DEFAULT_STYLE, ..._style } : DEFAULT_STYLE; + + return ( + + + + ); +}; + +IconZhankai.defaultProps = { + size: 18, +}; + +export default IconZhankai; diff --git a/src/components/iconfont/h5/index.tsx b/src/components/iconfont/h5/index.tsx index 470110e..f8e11eb 100644 --- a/src/components/iconfont/h5/index.tsx +++ b/src/components/iconfont/h5/index.tsx @@ -2,6 +2,8 @@ /* eslint-disable */ import React, { SVGAttributes, FunctionComponent } from 'react'; +import IconZhankai from './IconZhankai'; +import IconShouqi from './IconShouqi'; import IconLujing from './IconLujing'; import IconJizhumima from './IconJizhumima'; import IconAJizhumima from './IconAJizhumima'; @@ -61,6 +63,8 @@ import IconGerenzhongxin from './IconGerenzhongxin'; import IconDingdan from './IconDingdan'; import IconShouye from './IconShouye'; import IconGouwu from './IconGouwu'; +export { default as IconZhankai } from './IconZhankai'; +export { default as IconShouqi } from './IconShouqi'; export { default as IconLujing } from './IconLujing'; export { default as IconJizhumima } from './IconJizhumima'; export { default as IconAJizhumima } from './IconAJizhumima'; @@ -121,7 +125,7 @@ export { default as IconDingdan } from './IconDingdan'; export { default as IconShouye } from './IconShouye'; export { default as IconGouwu } from './IconGouwu'; -export type IconNames = 'icon-lujing' | 'icon-jizhumima' | 'icon-a-jizhumima' | 'icon-weixindenglu' | 'icon-kehuxinxi' | 'icon-yewuyuanqizi' | 'icon-chakanquanbukehu' | 'icon-biyan' | 'icon-bianji' | 'icon-daikuan' | 'icon-cangku' | 'icon-guanlidingdan' | 'icon-mima' | 'icon-guanbi' | 'icon-jianshao' | 'icon-dingwei' | 'icon-saomiao' | 'icon-peihuo' | 'icon-shaixuan' | 'icon-paiming' | 'icon-shanchusousuoxinxi' | 'icon-shijian' | 'icon-sousuo' | 'icon-shouhou' | 'icon-sousuofanhui' | 'icon-sousuoshanchu' | 'icon-tuikuan' | 'icon-tishi' | 'icon-xianxiahuizong' | 'icon-xinzeng' | 'icon-yonghuming' | 'icon-yanjing' | 'icon-yufukuan' | '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'; +export type IconNames = 'icon-zhankai' | 'icon-shouqi' | 'icon-lujing' | 'icon-jizhumima' | 'icon-a-jizhumima' | 'icon-weixindenglu' | 'icon-kehuxinxi' | 'icon-yewuyuanqizi' | 'icon-chakanquanbukehu' | 'icon-biyan' | 'icon-bianji' | 'icon-daikuan' | 'icon-cangku' | 'icon-guanlidingdan' | 'icon-mima' | 'icon-guanbi' | 'icon-jianshao' | 'icon-dingwei' | 'icon-saomiao' | 'icon-peihuo' | 'icon-shaixuan' | 'icon-paiming' | 'icon-shanchusousuoxinxi' | 'icon-shijian' | 'icon-sousuo' | 'icon-shouhou' | 'icon-sousuofanhui' | 'icon-sousuoshanchu' | 'icon-tuikuan' | 'icon-tishi' | 'icon-xianxiahuizong' | 'icon-xinzeng' | 'icon-yonghuming' | 'icon-yanjing' | 'icon-yufukuan' | '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'; interface Props extends Omit, 'color'> { name: IconNames; @@ -131,6 +135,10 @@ interface Props extends Omit, 'color'> { const IconFont: FunctionComponent = ({ name, ...rest }) => { switch (name) { + case 'icon-zhankai': + return ; + case 'icon-shouqi': + return ; case 'icon-lujing': return ; case 'icon-jizhumima': diff --git a/src/components/iconfont/index.h5.tsx b/src/components/iconfont/index.h5.tsx index 6afdfe2..92a658d 100644 --- a/src/components/iconfont/index.h5.tsx +++ b/src/components/iconfont/index.h5.tsx @@ -5,7 +5,7 @@ import React, { FunctionComponent } from 'react'; import Taro from '@tarojs/taro'; import Icon from './h5'; -export type IconNames = 'icon-lujing' | 'icon-jizhumima' | 'icon-a-jizhumima' | 'icon-weixindenglu' | 'icon-kehuxinxi' | 'icon-yewuyuanqizi' | 'icon-chakanquanbukehu' | 'icon-biyan' | 'icon-bianji' | 'icon-daikuan' | 'icon-cangku' | 'icon-guanlidingdan' | 'icon-mima' | 'icon-guanbi' | 'icon-jianshao' | 'icon-dingwei' | 'icon-saomiao' | 'icon-peihuo' | 'icon-shaixuan' | 'icon-paiming' | 'icon-shanchusousuoxinxi' | 'icon-shijian' | 'icon-sousuo' | 'icon-shouhou' | 'icon-sousuofanhui' | 'icon-sousuoshanchu' | 'icon-tuikuan' | 'icon-tishi' | 'icon-xianxiahuizong' | 'icon-xinzeng' | 'icon-yonghuming' | 'icon-yanjing' | 'icon-yufukuan' | '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'; +export type IconNames = 'icon-zhankai' | 'icon-shouqi' | 'icon-lujing' | 'icon-jizhumima' | 'icon-a-jizhumima' | 'icon-weixindenglu' | 'icon-kehuxinxi' | 'icon-yewuyuanqizi' | 'icon-chakanquanbukehu' | 'icon-biyan' | 'icon-bianji' | 'icon-daikuan' | 'icon-cangku' | 'icon-guanlidingdan' | 'icon-mima' | 'icon-guanbi' | 'icon-jianshao' | 'icon-dingwei' | 'icon-saomiao' | 'icon-peihuo' | 'icon-shaixuan' | 'icon-paiming' | 'icon-shanchusousuoxinxi' | 'icon-shijian' | 'icon-sousuo' | 'icon-shouhou' | 'icon-sousuofanhui' | 'icon-sousuoshanchu' | 'icon-tuikuan' | 'icon-tishi' | 'icon-xianxiahuizong' | 'icon-xinzeng' | 'icon-yonghuming' | 'icon-yanjing' | 'icon-yufukuan' | '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'; interface Props { name: IconNames; diff --git a/src/components/iconfont/index.tsx b/src/components/iconfont/index.tsx index 36e3baf..d8063b7 100644 --- a/src/components/iconfont/index.tsx +++ b/src/components/iconfont/index.tsx @@ -3,7 +3,7 @@ import React, { FunctionComponent } from 'react'; -export type IconNames = 'icon-lujing' | 'icon-jizhumima' | 'icon-a-jizhumima' | 'icon-weixindenglu' | 'icon-kehuxinxi' | 'icon-yewuyuanqizi' | 'icon-chakanquanbukehu' | 'icon-biyan' | 'icon-bianji' | 'icon-daikuan' | 'icon-cangku' | 'icon-guanlidingdan' | 'icon-mima' | 'icon-guanbi' | 'icon-jianshao' | 'icon-dingwei' | 'icon-saomiao' | 'icon-peihuo' | 'icon-shaixuan' | 'icon-paiming' | 'icon-shanchusousuoxinxi' | 'icon-shijian' | 'icon-sousuo' | 'icon-shouhou' | 'icon-sousuofanhui' | 'icon-sousuoshanchu' | 'icon-tuikuan' | 'icon-tishi' | 'icon-xianxiahuizong' | 'icon-xinzeng' | 'icon-yonghuming' | 'icon-yanjing' | 'icon-yufukuan' | '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'; +export type IconNames = 'icon-zhankai' | 'icon-shouqi' | 'icon-lujing' | 'icon-jizhumima' | 'icon-a-jizhumima' | 'icon-weixindenglu' | 'icon-kehuxinxi' | 'icon-yewuyuanqizi' | 'icon-chakanquanbukehu' | 'icon-biyan' | 'icon-bianji' | 'icon-daikuan' | 'icon-cangku' | 'icon-guanlidingdan' | 'icon-mima' | 'icon-guanbi' | 'icon-jianshao' | 'icon-dingwei' | 'icon-saomiao' | 'icon-peihuo' | 'icon-shaixuan' | 'icon-paiming' | 'icon-shanchusousuoxinxi' | 'icon-shijian' | 'icon-sousuo' | 'icon-shouhou' | 'icon-sousuofanhui' | 'icon-sousuoshanchu' | 'icon-tuikuan' | 'icon-tishi' | 'icon-xianxiahuizong' | 'icon-xinzeng' | 'icon-yonghuming' | 'icon-yanjing' | 'icon-yufukuan' | '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'; export interface IconProps { name: IconNames; diff --git a/src/components/iconfont/index.weapp.tsx b/src/components/iconfont/index.weapp.tsx index e6284d0..69735af 100644 --- a/src/components/iconfont/index.weapp.tsx +++ b/src/components/iconfont/index.weapp.tsx @@ -4,7 +4,7 @@ import React, { FunctionComponent } from 'react'; import Taro from '@tarojs/taro'; -export type IconNames = 'icon-lujing' | 'icon-jizhumima' | 'icon-a-jizhumima' | 'icon-weixindenglu' | 'icon-kehuxinxi' | 'icon-yewuyuanqizi' | 'icon-chakanquanbukehu' | 'icon-biyan' | 'icon-bianji' | 'icon-daikuan' | 'icon-cangku' | 'icon-guanlidingdan' | 'icon-mima' | 'icon-guanbi' | 'icon-jianshao' | 'icon-dingwei' | 'icon-saomiao' | 'icon-peihuo' | 'icon-shaixuan' | 'icon-paiming' | 'icon-shanchusousuoxinxi' | 'icon-shijian' | 'icon-sousuo' | 'icon-shouhou' | 'icon-sousuofanhui' | 'icon-sousuoshanchu' | 'icon-tuikuan' | 'icon-tishi' | 'icon-xianxiahuizong' | 'icon-xinzeng' | 'icon-yonghuming' | 'icon-yanjing' | 'icon-yufukuan' | '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'; +export type IconNames = 'icon-zhankai' | 'icon-shouqi' | 'icon-lujing' | 'icon-jizhumima' | 'icon-a-jizhumima' | 'icon-weixindenglu' | 'icon-kehuxinxi' | 'icon-yewuyuanqizi' | 'icon-chakanquanbukehu' | 'icon-biyan' | 'icon-bianji' | 'icon-daikuan' | 'icon-cangku' | 'icon-guanlidingdan' | 'icon-mima' | 'icon-guanbi' | 'icon-jianshao' | 'icon-dingwei' | 'icon-saomiao' | 'icon-peihuo' | 'icon-shaixuan' | 'icon-paiming' | 'icon-shanchusousuoxinxi' | 'icon-shijian' | 'icon-sousuo' | 'icon-shouhou' | 'icon-sousuofanhui' | 'icon-sousuoshanchu' | 'icon-tuikuan' | 'icon-tishi' | 'icon-xianxiahuizong' | 'icon-xinzeng' | 'icon-yonghuming' | 'icon-yanjing' | 'icon-yufukuan' | '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'; interface Props { name: IconNames; diff --git a/src/components/iconfont/weapp/weapp.js b/src/components/iconfont/weapp/weapp.js index 4a356cf..580287c 100644 --- a/src/components/iconfont/weapp/weapp.js +++ b/src/components/iconfont/weapp/weapp.js @@ -1,6 +1,6 @@ Component({ properties: { - // icon-lujing | icon-jizhumima | icon-a-jizhumima | icon-weixindenglu | icon-kehuxinxi | icon-yewuyuanqizi | icon-chakanquanbukehu | icon-biyan | icon-bianji | icon-daikuan | icon-cangku | icon-guanlidingdan | icon-mima | icon-guanbi | icon-jianshao | icon-dingwei | icon-saomiao | icon-peihuo | icon-shaixuan | icon-paiming | icon-shanchusousuoxinxi | icon-shijian | icon-sousuo | icon-shouhou | icon-sousuofanhui | icon-sousuoshanchu | icon-tuikuan | icon-tishi | icon-xianxiahuizong | icon-xinzeng | icon-yonghuming | icon-yanjing | icon-yufukuan | 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 + // icon-zhankai | icon-shouqi | icon-lujing | icon-jizhumima | icon-a-jizhumima | icon-weixindenglu | icon-kehuxinxi | icon-yewuyuanqizi | icon-chakanquanbukehu | icon-biyan | icon-bianji | icon-daikuan | icon-cangku | icon-guanlidingdan | icon-mima | icon-guanbi | icon-jianshao | icon-dingwei | icon-saomiao | icon-peihuo | icon-shaixuan | icon-paiming | icon-shanchusousuoxinxi | icon-shijian | icon-sousuo | icon-shouhou | icon-sousuofanhui | icon-sousuoshanchu | icon-tuikuan | icon-tishi | icon-xianxiahuizong | icon-xinzeng | icon-yonghuming | icon-yanjing | icon-yufukuan | 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, }, diff --git a/src/components/iconfont/weapp/weapp.wxml b/src/components/iconfont/weapp/weapp.wxml index 9df2807..a66a6dd 100644 --- a/src/components/iconfont/weapp/weapp.wxml +++ b/src/components/iconfont/weapp/weapp.wxml @@ -1,3 +1,9 @@ + + + + + + diff --git a/src/components/tag/index.module.scss b/src/components/tag/index.module.scss index cb595ee..5c5d6dd 100644 --- a/src/components/tag/index.module.scss +++ b/src/components/tag/index.module.scss @@ -7,6 +7,7 @@ text-align: center; justify-content: center; align-items: center; + box-sizing: border-box; &--normal { font-size: $font_size_medium; height: 40px; @@ -18,18 +19,33 @@ &--circle{ border-radius: 10px; } + &--danger { - background-color: $color_danger; + border: 1px solid $color_danger; + color: $color_danger; } &--primary{ - background-color: $color_main; + border: 1px solid $color_main; + color: $color_main; } &--warning{ - background-color: $color_warning; + border: 1px solid $color_warning; + color: $color_warning; } &--info{ - background-color: $color_info; - color: rgba($color: #333333, $alpha: 0.8); + border: 1px solid $color_info; + color: $color_info; + .tag--text { + color: rgba($color: #333333, $alpha: 0.8) !important; + } + } + &--plain { + background-color: currentColor; + border-color: currentColor; + border: unset; + .tag--text { + color: #ffffff; + } } &--disabled { opacity: $opacity-disabled; diff --git a/src/components/tag/index.tsx b/src/components/tag/index.tsx index 935fe5c..ec3a84f 100644 --- a/src/components/tag/index.tsx +++ b/src/components/tag/index.tsx @@ -1,4 +1,4 @@ -import { View } from '@tarojs/components' +import { View, Text } from '@tarojs/components' import { FC, ReactNode } from 'react' import classnames from 'classnames' import styles from './index.module.scss' @@ -34,12 +34,11 @@ const Tag: FC = (props) => { [styles['tag--plain']]: plain, [styles['tag--circle']]: circle, } - console.log('classObj==>', classObject) return classObject } return ( - {children} + {children} ) } diff --git a/src/pages/shopping/components/bottomEditBar/index.module.scss b/src/pages/shopping/components/bottomEditBar/index.module.scss index 7beeaa8..7ea37b1 100644 --- a/src/pages/shopping/components/bottomEditBar/index.module.scss +++ b/src/pages/shopping/components/bottomEditBar/index.module.scss @@ -5,7 +5,7 @@ justify-content: space-between; background-color: white; padding: 16px 24px; - + .bottomLeft{ margin-left: 12px; .moneyText{ diff --git a/src/pages/shopping/components/colorKindItem/index.module.scss b/src/pages/shopping/components/colorKindItem/index.module.scss new file mode 100644 index 0000000..ed55816 --- /dev/null +++ b/src/pages/shopping/components/colorKindItem/index.module.scss @@ -0,0 +1,65 @@ +.colorKindItem { + width: 100%; + height: 100%; + margin-left: 20px; + padding: 16px 0; + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: space-between; + &__left { + flex: none; + width: 120px; + height: 120px; + border-radius: 8px; + margin-right: 24px; + &--image { + width: 100%; + height: 100%; + } + } + &__center { + display: flex; + flex-flow: column nowrap; + justify-content: space-between; + flex: 1 1 auto; + &--title { + color: $color_font_one; + font-size: 28px; + @include common_ellipsis(2); + } + &--detail { + } + &--ID { + color: rgba($color: #000000, $alpha: 0.4); + font-size: 24px; + @include common_ellipsis(); + } + &--description { + color: rgba($color: #000000, $alpha: 0.4); + font-size: 24px; + @include common_ellipsis(); + } + } + &__right { + flex: none; + display: flex; + flex-flow: column nowrap; + align-items: flex-end; + justify-content: space-around; + align-self: stretch; + &--price { + color: $color_money; + font-weight: 550; + font-size: 28px; + } + &--counter { + } + } +} +.checkbox{ + padding: 0 24px; +} +.selected { + background-color: #F8FAFF; +} diff --git a/src/pages/shopping/components/colorKindItem/index.tsx b/src/pages/shopping/components/colorKindItem/index.tsx new file mode 100644 index 0000000..a589509 --- /dev/null +++ b/src/pages/shopping/components/colorKindItem/index.tsx @@ -0,0 +1,116 @@ +import { View, Text, Image } from '@tarojs/components' +import MCheckbox from '@/components/checkbox' +import Counter from '@/components/counter' +import { FC, memo, ReactNode, useCallback, useEffect, useState } from 'react' +import classnames from 'classnames' +import styles from './index.module.scss' +import { debounce } from '@/common/util' +import { formatPriceDiv } from '@/common/format' +import { EnumSaleMode } from '@/common/Enumerate' + +type PropsType = { + item: Record & object + orderType: EnumSaleMode + isSelected: boolean + onChecked?: Function + onUnChecked?: Function +} + +const selectList = [ + { value: 0, title: '大货', unit: '条', eunit: 'kg', step: 1, digits: 0, minNum: 1, maxNum: 100000, defaultNum: 1 }, + { value: 1, title: '剪板', unit: '米', eunit: 'm', step: 1, digits: 2, minNum: 0.5, maxNum: 9.99, defaultNum: 1 }, + { value: 2, title: '散剪', unit: '米', eunit: 'kg', step: 1, digits: 2, minNum: 3, maxNum: 100000, defaultNum: 3 }, +] + +const ColorKindItem: FC = memo( + (props) => { + const { item, orderType = EnumSaleMode.Bulk, isSelected = false, onChecked, onUnChecked } = props + console.log('重新渲染', item.id, orderType) + //格式化金额 + const formatPirce = useCallback((price) => { + return Number(formatPriceDiv(price)) + }, []) + + //格式化数量 + const formatCount = useCallback((item) => { + return item.sale_mode == EnumSaleMode.Bulk ? item.roll : item.length / 100 + }, []) + + //格式化单位 + const formatUnit = useCallback((item) => { + return item.sale_mode == EnumSaleMode.Bulk ? '条' : '米' + }, []) + + // const [checked, setCheck] = useState(false) + + // useEffect(() => { + // setCheck(isSelected) + // console.log('useEffect', isSelected) + // }, [isSelected]) + + const handleSelect = () => { + console.log('handleSelect') + // setCheck(true) + onChecked && onChecked({ ...item, checked: true }) + } + const handleClose = () => { + // setCheck(false) + onUnChecked && onUnChecked({ ...item, checked: false }) + } + + const getInputValue = debounce(async (num, item) => {}, 300) + + return ( + + + + + + 001# 环保黑 环保黑 环保黑 环保黑 环保黑 环保黑 + + 6002#220G + 流线棉拉架卫衣 + + + + ¥ 37.50/kg + + getInputValue(e, item)} + defaultNum={formatCount(item)} + step={selectList[orderType].step} + digits={selectList[orderType].digits} + onClickBtn={(e) => getInputValue(e, item)} + unit={formatUnit(item)} + minNum={selectList[orderType].minNum} + maxNum={selectList[orderType].maxNum} + /> + + + + ) + }, + (preProp, nextProp) => { + const stringifyPreProp = JSON.stringify(preProp.item) + const stringifyNextProp = JSON.stringify(nextProp.item) + console.log('memo==>', preProp, nextProp); + let needMemoized = true + if (preProp.isSelected !== nextProp.isSelected) { + needMemoized = false + } + if (preProp.orderType !== nextProp.orderType) { + needMemoized = false + } + if (stringifyPreProp !== stringifyNextProp) { + needMemoized = false + } + return needMemoized + }, +) +export default ColorKindItem diff --git a/src/pages/shopping/components/shoppingCartItem/index.module.scss b/src/pages/shopping/components/shoppingCartItem/index.module.scss index 9b40326..afd701c 100644 --- a/src/pages/shopping/components/shoppingCartItem/index.module.scss +++ b/src/pages/shopping/components/shoppingCartItem/index.module.scss @@ -1,8 +1,17 @@ -.layout{ +.layout { margin: 24px; + padding-left: 0; + padding-right: 0; + .checkbox { + padding: 0 24px; + &--text { + width: 100%; + margin-left: 20px; + } + } } -.line{ +.line { margin: 16px 0; } @@ -16,37 +25,40 @@ font-size: 32px; font-family: $font_family; font-weight: 550; + line-height: 2; color: rgba($color: #000000, $alpha: 0.8); margin-right: 16px; } // 汇总 - .summary{ + .summary { color: rgba($color: #000000, $alpha: 0.4); font-size: 24px; - } } .detailBox { box-sizing: border-box; overflow: hidden; - .orderType{ - width: 100%; + .orderTitle { + padding: 0 24px; + display: flex; + align-items: center; + color: $color_font_one; + font-weight: 550; + font-size: 28px; + line-height: 2.5; + } + .orderType { + padding: 0 24px; margin-left: 56px; - .orderTypeTitle{ - color: $color_font_one; - font-weight: 550; - font-size: 28px; - line-height: 2.5; - } - .orderTypeDetail{ + + .orderTypeDetail { display: flex; gap: 0 16px; } } - .orderColor{ - - width: 100%; + .orderColor { + padding: 0 24px; margin-left: 56px; } } @@ -54,3 +66,20 @@ .bottomBox { margin-top: 40px; } + +.drawerButton { + display: flex; + justify-content: center; + align-items: center; + Text { + font-size: 52px; + } +} + +.drawerOpen{ + height: auto; +} +.drawerClose { + + height: 0; +} diff --git a/src/pages/shopping/components/shoppingCartItem/index.tsx b/src/pages/shopping/components/shoppingCartItem/index.tsx index 60bb836..351c243 100644 --- a/src/pages/shopping/components/shoppingCartItem/index.tsx +++ b/src/pages/shopping/components/shoppingCartItem/index.tsx @@ -9,36 +9,118 @@ import MCheckbox from '@/components/checkbox' import Tag from '@/components/tag' import Divider from '@/components/divider' import NormalButton from '@/components/normalButton' +import ColorKindItem from '../colorKindItem' +import { EnumSaleMode } from '@/common/Enumerate' type PropsType = { obj?: any } const DrawerButton = memo<{ isOpen: boolean }>(({ isOpen }) => { - return isOpen ? : + return ( + {isOpen ? : } + ) }) export default memo((props: PropsType) => { + console.log('重新渲染 shoppingCartItem'); const [openDetail, setOpenDetail] = useState(false) const handleOpenDetail = () => { setOpenDetail((isOpen) => !isOpen) + } - const [selected, setSelect] = useState(0) + const [selected, setSelect] = useState(0) - const onSelectOrderType = (type) => { + const onSelectOrderType = (type: EnumSaleMode) => { setSelect(type) } + const [mockList, setMockList] = useState([ + { + sale_mode: 0, + list: [ + { id: 0, sale_mode: 0, roll: 5, length: 0, checked: true }, + { id: 1, sale_mode: 0, roll: 6, length: 0, checked: false }, + { id: 2, sale_mode: 0, roll: 7, length: 0, checked: true }, + ], + }, + { + sale_mode: 1, + list: [ + { id: 5, sale_mode: 1, roll: 0, length: 77700, checked: false }, + { id: 6, sale_mode: 1, roll: 0, length: 7600, checked: true }, + { id: 7, sale_mode: 1, roll: 0, length: 400, checked: true }, + ], + }, + { + sale_mode: 2, + list: [ + { id: 8, sale_mode: 2, roll: 0, length: 11100, checked: false }, + { id: 9, sale_mode: 2, roll: 0, length: 8540, checked: true }, + ], + }, + ]) + + const handleChecked = (current) => { + console.log('handleChecked', current) + const index = mockList.findIndex(item=>item.sale_mode === selected) + const tempList = mockList[index].list.map((item) => { + if (item.id === current.id) { + item = current + } + return item + }) + setMockList((pre=>{ + return pre.map(item=>{ + if(item.sale_mode === selected){ + item.list = tempList + } + return item + }) + })) + } + const handleUnChecked = (current) => { + const index = mockList.findIndex((item) => item.sale_mode === selected) + const tempList = mockList[index].list.map((item) => { + if (item.id === current.id) { + item = current + } + return item + }) + setMockList((pre) => { + return pre.map((item) => { + if (item.sale_mode === selected) { + item.list = tempList + } + return item + }) + }) + } + + const memoList = useMemo(() => { + return mockList[selected].list.map((item, index) => { + return ( + + ) + }) + }, [mockList, selected]) + return ( - + - + 灵玉布行 - + 刘思伟 @@ -49,46 +131,47 @@ export default memo((props: PropsType) => { - + - 订单类型 + 订单类型 onSelectOrderType(0)}> + onClick={() => onSelectOrderType(EnumSaleMode.Bulk)}> 大货 onSelectOrderType(1)}> - 散剪 + onClick={() => onSelectOrderType(EnumSaleMode.Plate)}> + 剪板 onSelectOrderType(2)}> - 剪板 + onClick={() => onSelectOrderType(EnumSaleMode.BulkCut)}> + 散剪 - + 布料颜色 - + 大货单位:条 + {memoList} ) diff --git a/src/pages/shopping/index.config.ts b/src/pages/shopping/index.config.ts index dfe1de6..f0dc887 100644 --- a/src/pages/shopping/index.config.ts +++ b/src/pages/shopping/index.config.ts @@ -1,3 +1,4 @@ export default { navigationBarTitleText: '购物页面', + } diff --git a/src/pages/shopping/index.module.scss b/src/pages/shopping/index.module.scss index e86e601..18722a8 100644 --- a/src/pages/shopping/index.module.scss +++ b/src/pages/shopping/index.module.scss @@ -9,7 +9,9 @@ &--context { justify-content: space-between; height: 100%; - + .shopping__list__container{ + overflow: scroll; + } } } .flexBox { diff --git a/src/pages/shopping/index.tsx b/src/pages/shopping/index.tsx index 4849c82..5101b0c 100644 --- a/src/pages/shopping/index.tsx +++ b/src/pages/shopping/index.tsx @@ -52,7 +52,7 @@ const Shopping: FC = () => { - + {/* { })} */} + {isManage ? ( diff --git a/src/styles/common.scss b/src/styles/common.scss index f3ddc9a..055933b 100644 --- a/src/styles/common.scss +++ b/src/styles/common.scss @@ -52,6 +52,10 @@ $customTabBarHeight: 100px; .justify-between { justify-content: space-between } +.items-center{ + align-items: center; +} + .flex-item { flex: 1 1 auto; } diff --git a/src/styles/iconfont.scss b/src/styles/iconfont.scss index c49b106..e8dae52 100644 --- a/src/styles/iconfont.scss +++ b/src/styles/iconfont.scss @@ -1,6 +1,6 @@ @font-face { font-family: "iconfont"; /* Project id 3619513 */ - src: url('/src/styles/iconfont.ttf?t=1663134774880') format('truetype'); + src: url('/src/styles/iconfont.ttf?t=1663207764776') format('truetype'); } .iconfont { @@ -11,6 +11,14 @@ -moz-osx-font-smoothing: grayscale; } +.icon-zhankai:before { + content: "\e63f"; +} + +.icon-shouqi:before { + content: "\e640"; +} + .icon-lujing:before { content: "\e63e"; } diff --git a/src/styles/iconfont.ttf b/src/styles/iconfont.ttf index 049f955..5fd4ed8 100644 Binary files a/src/styles/iconfont.ttf and b/src/styles/iconfont.ttf differ