✨ feat(优化码单):
This commit is contained in:
parent
3e688d7893
commit
65462bd077
@ -4,6 +4,7 @@ export default {
|
|||||||
pages: [
|
pages: [
|
||||||
'pages/index/index',
|
'pages/index/index',
|
||||||
'pages/user/index',
|
'pages/user/index',
|
||||||
|
'pages/shopCar/index',
|
||||||
],
|
],
|
||||||
window: {
|
window: {
|
||||||
backgroundTextStyle: 'light',
|
backgroundTextStyle: 'light',
|
||||||
@ -20,12 +21,19 @@ export default {
|
|||||||
iconPath: './styles/tabbar/home.png',
|
iconPath: './styles/tabbar/home.png',
|
||||||
selectedIconPath: './styles/tabbar/home_selected.png',
|
selectedIconPath: './styles/tabbar/home_selected.png',
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
pagePath: 'pages/shopCar/index',
|
||||||
|
text: '购物车',
|
||||||
|
iconPath: './styles/tabbar/my.png',
|
||||||
|
selectedIconPath: './styles/tabbar/my_selected.png',
|
||||||
|
},
|
||||||
{
|
{
|
||||||
pagePath: 'pages/user/index',
|
pagePath: 'pages/user/index',
|
||||||
text: '我的',
|
text: '我的',
|
||||||
iconPath: './styles/tabbar/my.png',
|
iconPath: './styles/tabbar/my.png',
|
||||||
selectedIconPath: './styles/tabbar/my_selected.png',
|
selectedIconPath: './styles/tabbar/my_selected.png',
|
||||||
},
|
},
|
||||||
|
|
||||||
],
|
],
|
||||||
color: '#707070',
|
color: '#707070',
|
||||||
selectedColor: '#2680EB',
|
selectedColor: '#2680EB',
|
||||||
@ -191,18 +199,12 @@ export default {
|
|||||||
'codeColorList/index',
|
'codeColorList/index',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
|
||||||
root: 'pages/codeList',
|
|
||||||
pages: [
|
|
||||||
'index',
|
|
||||||
'codeColorList/index',
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
root: 'pages/codeList',
|
root: 'pages/codeList',
|
||||||
pages: [
|
pages: [
|
||||||
'index',
|
'index',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
// export const BASE_URL = `http://10.0.0.5:50001/lymarket`
|
// export const BASE_URL = `http://10.0.0.5:50001/lymarket`
|
||||||
// export const BASE_URL = `http://192.168.0.89:40001/lymarket`
|
// export const BASE_URL = `http://192.168.0.89:40001/lymarket`
|
||||||
// export const BASE_URL = `http://192.168.1.165:40001/lymarket` // 王霞
|
// export const BASE_URL = `http://192.168.1.165:40001/lymarket` // 王霞
|
||||||
// export const BASE_URL = 'https://test.zzfzyc.com/lymarket' // 测试环境
|
export const BASE_URL = 'https://test.zzfzyc.com/lymarket' // 测试环境
|
||||||
// export const BASE_URL = 'https://pre.zzfzyc.com/lymarket' // 预发布
|
// export const BASE_URL = 'https://pre.zzfzyc.com/lymarket' // 预发布
|
||||||
// export const BASE_URL = `http://192.168.1.9:40001/lymarket` // 发
|
// export const BASE_URL = `http://192.168.1.9:40001/lymarket` // 发
|
||||||
// export const BASE_URL = `http://192.168.1.9:50005/lymarket` // 发
|
// export const BASE_URL = `http://192.168.1.9:50005/lymarket` // 发
|
||||||
@ -14,7 +14,7 @@
|
|||||||
// export const BASE_URL = `http://192.168.1.5:40001/lymarket` // 王霞
|
// export const BASE_URL = `http://192.168.1.5:40001/lymarket` // 王霞
|
||||||
// export const BASE_URL = 'http://192.168.1.7:50002/lymarket' // 添
|
// export const BASE_URL = 'http://192.168.1.7:50002/lymarket' // 添
|
||||||
// export const BASE_URL = 'http://192.168.1.28:50002/lymarket' // 婷
|
// export const BASE_URL = 'http://192.168.1.28:50002/lymarket' // 婷
|
||||||
// export const BASE_URL = 'http://192.168.1.42:50001/lymarket' // 杰
|
// export const BASE_URL = 'http://192.168.1.42:50002/lymarket' // 杰
|
||||||
|
|
||||||
// CDN
|
// CDN
|
||||||
// 生成密钥
|
// 生成密钥
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
color: rgba(0, 0, 0, 0.8);
|
color: rgba(0, 0, 0, 0.8);
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
margin-right: 64px;
|
margin-right: 30px;
|
||||||
}
|
}
|
||||||
.form-list-label-required::before {
|
.form-list-label-required::before {
|
||||||
content: '*';
|
content: '*';
|
||||||
@ -21,7 +21,7 @@
|
|||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
.form-list-right-meet {
|
.form-list-right-meet {
|
||||||
background: #f6f6f6;
|
// background: #f6f6f6;
|
||||||
width: 506px;
|
width: 506px;
|
||||||
min-height: 80px;
|
min-height: 80px;
|
||||||
border-radius: 20px;
|
border-radius: 20px;
|
||||||
|
|||||||
@ -42,19 +42,6 @@ const Checkbox = (props: params, ref) => {
|
|||||||
value: status,
|
value: status,
|
||||||
defaultValue: false,
|
defaultValue: false,
|
||||||
})
|
})
|
||||||
// const selectedRef = useRef(status)
|
|
||||||
// if (status !== undefined){
|
|
||||||
// selectedRef.current = status
|
|
||||||
// }
|
|
||||||
// const [, setForceUpdate] = useState({})
|
|
||||||
// const setSelected = useCallback((v: SetStateAction<boolean>) => {
|
|
||||||
// const nextValue = typeof v === 'function' ? (v as (prevValue: boolean) => boolean)(selectedRef.current) : v
|
|
||||||
// console.log('对比',nextValue, selectedRef.current)
|
|
||||||
// if (nextValue === selectedRef.current) return
|
|
||||||
// selectedRef.current = nextValue
|
|
||||||
// console.log('强制刷新', nextValue, selectedRef.current)
|
|
||||||
// setForceUpdate({})
|
|
||||||
// }, [])
|
|
||||||
|
|
||||||
const onSelectEven = () => {
|
const onSelectEven = () => {
|
||||||
if (disabled) { return false }
|
if (disabled) { return false }
|
||||||
@ -96,9 +83,7 @@ const Checkbox = (props: params, ref) => {
|
|||||||
useImperativeHandle(ref, () => ({
|
useImperativeHandle(ref, () => ({
|
||||||
onSelectEven,
|
onSelectEven,
|
||||||
}))
|
}))
|
||||||
// useEffect(() => {
|
|
||||||
// setSelected(status)
|
|
||||||
// }, [status])
|
|
||||||
return (
|
return (
|
||||||
<View className={classnames(customClassName, styles.checkbox)} style={customStyles} onClick={onSelectEven}>
|
<View className={classnames(customClassName, styles.checkbox)} style={customStyles} onClick={onSelectEven}>
|
||||||
{!hiddenCheckboxIcon && (
|
{!hiddenCheckboxIcon && (
|
||||||
|
|||||||
@ -2,6 +2,7 @@
|
|||||||
position: fixed;
|
position: fixed;
|
||||||
font-size: 32px;
|
font-size: 32px;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
z-index: 1300;
|
||||||
.code_list__card {
|
.code_list__card {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 306px;
|
width: 306px;
|
||||||
|
|||||||
@ -8,12 +8,9 @@ import ViewCodeList from '@/components/viewCodeList/index'
|
|||||||
|
|
||||||
interface param {
|
interface param {
|
||||||
y: number
|
y: number
|
||||||
custom_print_id: number
|
|
||||||
sale_order_id: number
|
|
||||||
|
|
||||||
orderObj?: any
|
orderObj?: any
|
||||||
}
|
}
|
||||||
export default ({ y, custom_print_id = 0, sale_order_id = 0, orderObj = {} }: param) => {
|
export default ({ y, orderObj = {} }: param) => {
|
||||||
const [screenHeight, setScreenHeight] = useState({
|
const [screenHeight, setScreenHeight] = useState({
|
||||||
customer_service_y: 0,
|
customer_service_y: 0,
|
||||||
code_list_y: 0,
|
code_list_y: 0,
|
||||||
@ -21,14 +18,16 @@ export default ({ y, custom_print_id = 0, sale_order_id = 0, orderObj = {} }: pa
|
|||||||
const [showCode, setShowCode] = useState(false)
|
const [showCode, setShowCode] = useState(false)
|
||||||
|
|
||||||
const onNavigateTo = () => {
|
const onNavigateTo = () => {
|
||||||
if (custom_print_id) {
|
if (orderObj?.custom_print_id) {
|
||||||
goLink(`/pages/codeSetting/index?custom_print_id=${custom_print_id}`)
|
goLink(`/pages/codeSetting/index?custom_print_id=${orderObj?.custom_print_id}`)
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
goLink(`/pages/codeSetting/index?sale_order_id=${sale_order_id}`)
|
goLink(`/pages/codeSetting/index?sale_order_id=${orderObj?.id}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const [showPopup, setshowPopup] = useState(false)
|
||||||
|
|
||||||
return (<>
|
return (<>
|
||||||
{showCode && <View className={styles.mask} catchMove onClick={() => setShowCode(!showCode)}></View>}
|
{showCode && <View className={styles.mask} catchMove onClick={() => setShowCode(!showCode)}></View>}
|
||||||
<MovableView className={classnames(styles.code_list, styles.fixed_btn)} direction="all" inertia x="630rpx" y={`${y}rpx`}>
|
<MovableView className={classnames(styles.code_list, styles.fixed_btn)} direction="all" inertia x="630rpx" y={`${y}rpx`}>
|
||||||
@ -37,13 +36,13 @@ export default ({ y, custom_print_id = 0, sale_order_id = 0, orderObj = {} }: pa
|
|||||||
<IconFont name="icon-yuanshimadanyulan" size={46} />
|
<IconFont name="icon-yuanshimadanyulan" size={46} />
|
||||||
<Text>原始码单预览</Text>
|
<Text>原始码单预览</Text>
|
||||||
</View>
|
</View>
|
||||||
<View className={styles['code_list__card--item']} >
|
{!!orderObj?.custom_print_id && <View className={styles['code_list__card--item']} >
|
||||||
<IconFont name="icon-zidingyimadanyulan" size={46} />
|
<IconFont name="icon-zidingyimadanyulan" size={46} />
|
||||||
<Text>自定义码单预览</Text>
|
<Text>自定义码单预览</Text>
|
||||||
</View>
|
</View>}
|
||||||
<View className={styles['code_list__card--item']} onClick={onNavigateTo}>
|
<View className={styles['code_list__card--item']} onClick={onNavigateTo}>
|
||||||
<IconFont name="icon-bianjizidingyimadan" size={46} />
|
<IconFont name="icon-bianjizidingyimadan" size={46} />
|
||||||
<Text>{custom_print_id ? '编辑自定义码单' : '新建自定义码单'}</Text>
|
<Text>{orderObj?.custom_print_id ? '编辑自定义码单' : '新建自定义码单'}</Text>
|
||||||
</View>
|
</View>
|
||||||
</View>}
|
</View>}
|
||||||
<View className={styles['code_list--text']} onClick={() => setShowCode(!showCode)}>码单</View>
|
<View className={styles['code_list--text']} onClick={() => setShowCode(!showCode)}>码单</View>
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
z-index: 999;
|
z-index: 1300;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
image {
|
image {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
@ -12,7 +12,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
z-index: 999;
|
z-index: 1300;
|
||||||
position: fixed;
|
position: fixed;
|
||||||
image {
|
image {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
|||||||
@ -21,9 +21,8 @@ interface param {
|
|||||||
messagePath?: string
|
messagePath?: string
|
||||||
showCart?: false|true
|
showCart?: false|true
|
||||||
orderObj?: any
|
orderObj?: any
|
||||||
orderInfo?: any
|
|
||||||
}
|
}
|
||||||
const MoveBtn = ({ orderObj = {}, children = null, onShopClick, showList = [], messageTitle = '', messagePath = '', showCart = false, orderInfo = {} }: param) => {
|
const MoveBtn = ({ orderObj = {}, children = null, onShopClick, showList = [], messageTitle = '', messagePath = '', showCart = false }: param) => {
|
||||||
const userInfo = useSelector(state => state.userInfo)
|
const userInfo = useSelector(state => state.userInfo)
|
||||||
// 获取购物车数据数量
|
// 获取购物车数据数量
|
||||||
const { getShopCount, commonData } = useCommonData()
|
const { getShopCount, commonData } = useCommonData()
|
||||||
@ -103,7 +102,7 @@ const MoveBtn = ({ orderObj = {}, children = null, onShopClick, showList = [], m
|
|||||||
>
|
>
|
||||||
<Image mode="aspectFit" src={formatImgUrl('/mall/float_button_customer_service.png')} />
|
<Image mode="aspectFit" src={formatImgUrl('/mall/float_button_customer_service.png')} />
|
||||||
</MovableView>}
|
</MovableView>}
|
||||||
{onShow('code') && <CodeSelect orderObj={orderObj} y={screenHeight.code as number} custom_print_id={orderInfo?.custom_print_id} sale_order_id={orderInfo?.id} />}
|
{onShow('code') && <CodeSelect orderObj={orderObj} y={screenHeight.code as number} />}
|
||||||
<Customer messageTitle={messageTitle} messagePath={messageTitle} show={customer_service_show} showCard={showCart} onClose={customerClose} />
|
<Customer messageTitle={messageTitle} messagePath={messageTitle} show={customer_service_show} showCard={showCart} onClose={customerClose} />
|
||||||
</MovableArea>
|
</MovableArea>
|
||||||
)
|
)
|
||||||
|
|||||||
@ -1,135 +0,0 @@
|
|||||||
import React, { useContext, useReducer } from 'react'
|
|
||||||
import { CustomPrintCalculationApi } from '@/api/codeManage'
|
|
||||||
|
|
||||||
interface params {
|
|
||||||
productData?: any
|
|
||||||
dispatch?: any
|
|
||||||
}
|
|
||||||
interface PropsType {
|
|
||||||
children: React.ReactNode
|
|
||||||
}
|
|
||||||
|
|
||||||
type ACTIONTYPE =
|
|
||||||
| { type: 'setInitData'; data: any }
|
|
||||||
| { type: 'updateData'; data: any }
|
|
||||||
| { type: 'changeAdjustType'; data: number }
|
|
||||||
| { type: 'changeSaveStatus'; data: boolean }
|
|
||||||
|
|
||||||
function createCtx<A extends {} | null>() {
|
|
||||||
const ctx = React.createContext<A | undefined>(undefined)
|
|
||||||
function useCtx() {
|
|
||||||
const c = useContext(ctx)
|
|
||||||
if (c === undefined) { throw new Error('useCtx must be inside a Provider with a value') }
|
|
||||||
return c
|
|
||||||
}
|
|
||||||
return [useCtx, ctx.Provider] as const
|
|
||||||
}
|
|
||||||
export const [useCurrenCode, CurrentUserProvider] = createCtx<params>()
|
|
||||||
|
|
||||||
export default (props: PropsType) => {
|
|
||||||
const initialState = {
|
|
||||||
data: null, // 码单数据
|
|
||||||
adjust_type: 1, // 码单调整类型
|
|
||||||
custom_print_id: 0, // 自定义码单id
|
|
||||||
sale_order_id: 0, // 销售码单id
|
|
||||||
admin_data: null, // 需要传给后端的数据
|
|
||||||
save_status: false, // 是否保存了数据
|
|
||||||
}
|
|
||||||
function reducer(state: typeof initialState, action: ACTIONTYPE) {
|
|
||||||
switch (action.type) {
|
|
||||||
case 'setInitData':
|
|
||||||
return onInitData(state, action)
|
|
||||||
case 'updateData':
|
|
||||||
return onUpdateData(state, action)
|
|
||||||
case 'changeAdjustType':
|
|
||||||
return { ...state, adjust_type: action.data }
|
|
||||||
case 'changeSaveStatus':
|
|
||||||
return { ...state, save_status: action.data }
|
|
||||||
default:
|
|
||||||
throw new Error('reducer没找到对应的type')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 初始化数据
|
|
||||||
const onInitData = (state, action) => {
|
|
||||||
const { data, custom_print_id, sale_order_id } = action
|
|
||||||
const custom_order_total = {
|
|
||||||
total_weight_error: data?.total_weight_error,
|
|
||||||
total_sale_weight: data?.total_sale_weight,
|
|
||||||
total_amount: data?.total_amount,
|
|
||||||
}
|
|
||||||
data.weight_admin = 0
|
|
||||||
data.price_admin = 0
|
|
||||||
data.weight_error_admin = 0
|
|
||||||
data?.product_details?.map((item, index) => {
|
|
||||||
item.weight_admin = 0
|
|
||||||
item.price_admin = 0
|
|
||||||
item.weight_error_admin = 0
|
|
||||||
item.index_str = index.toString()
|
|
||||||
return item?.product_color_details?.map((citem, cindex) => {
|
|
||||||
citem.index_str = `${item.index_str}_${cindex}` // 通过这个可以快速定位数组位置
|
|
||||||
citem.weight_setting = citem.weight
|
|
||||||
citem.weight_error_setting = citem.weight_error
|
|
||||||
citem.price_setting = citem.price
|
|
||||||
citem.weight_admin = 0
|
|
||||||
citem.price_admin = 0
|
|
||||||
citem.weight_error_admin = 0
|
|
||||||
return citem
|
|
||||||
})
|
|
||||||
})
|
|
||||||
return {
|
|
||||||
...state,
|
|
||||||
data,
|
|
||||||
custom_print_id,
|
|
||||||
sale_order_id,
|
|
||||||
custom_order_total,
|
|
||||||
admin_data: null,
|
|
||||||
init_state: true,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// 后端所需数据
|
|
||||||
const onUpdateData = (state, action) => {
|
|
||||||
const { data } = action
|
|
||||||
const updateData = {
|
|
||||||
adjust_type: parseInt(state.adjust_type),
|
|
||||||
purchaser_form_title_id: 0,
|
|
||||||
custom_print_product: [],
|
|
||||||
price: 0,
|
|
||||||
weight: 0,
|
|
||||||
weight_error: 0,
|
|
||||||
custom_print_id: parseInt(state.custom_print_id!),
|
|
||||||
sale_order_id: parseInt(state.sale_order_id!),
|
|
||||||
}
|
|
||||||
updateData.weight = data?.weight_admin || 0
|
|
||||||
updateData.price = data?.price_admin || 0
|
|
||||||
updateData.weight_error = data?.weight_error_admin || 0
|
|
||||||
data?.product_details?.map((item) => {
|
|
||||||
const product_item = {
|
|
||||||
price: item.price_admin || 0,
|
|
||||||
weight: item.weight_admin || 0,
|
|
||||||
weight_error: item.weight_error_admin || 0,
|
|
||||||
product_id: item.product_id,
|
|
||||||
product_name: item.product_name,
|
|
||||||
custom_print_product_color: [],
|
|
||||||
}
|
|
||||||
item?.product_color_details?.map((citem) => {
|
|
||||||
product_item.custom_print_product_color.push({
|
|
||||||
price: citem.price_admin || 0,
|
|
||||||
weight: citem.weight_admin || 0,
|
|
||||||
weight_error: citem.weight_error_admin || 0,
|
|
||||||
product_color_id: citem.product_color_id,
|
|
||||||
product_color_name: citem.product_color_name,
|
|
||||||
})
|
|
||||||
})
|
|
||||||
updateData.custom_print_product.push(product_item)
|
|
||||||
})
|
|
||||||
return { ...state, admin_data: updateData, data: { ...data } }
|
|
||||||
}
|
|
||||||
|
|
||||||
const [productData, dispatch] = useReducer(reducer, initialState)
|
|
||||||
|
|
||||||
return (
|
|
||||||
<CurrentUserProvider value={{ productData, dispatch }} children={props.children}></CurrentUserProvider>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
43
src/context/ContextShop/index.tsx
Normal file
43
src/context/ContextShop/index.tsx
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
import React, { useContext, useReducer } from 'react'
|
||||||
|
import { useDispatch } from 'react-redux'
|
||||||
|
import { CustomPrintCalculationApi } from '@/api/codeManage'
|
||||||
|
import type { CodeParam } from '@/reducers/codeData'
|
||||||
|
import { useSelector } from '@/reducers/hooks'
|
||||||
|
|
||||||
|
interface params {
|
||||||
|
state: CodeParam
|
||||||
|
dispatch: React.Dispatch<any>
|
||||||
|
}
|
||||||
|
interface PropsType {
|
||||||
|
children: React.ReactNode
|
||||||
|
}
|
||||||
|
|
||||||
|
function createCtx<A extends {} | null>() {
|
||||||
|
const ctx = React.createContext<A | undefined>(undefined)
|
||||||
|
function useCtx() {
|
||||||
|
const c = useContext(ctx)
|
||||||
|
if (c === undefined) { throw new Error('useCtx must be inside a Provider with a value') }
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
return [useCtx, ctx.Provider] as const
|
||||||
|
}
|
||||||
|
export const [useCurrenCode, CurrentProvider] = createCtx<params>()
|
||||||
|
|
||||||
|
// https://dev.to/elisealcala/react-context-with-usereducer-and-typescript-4obm
|
||||||
|
export default (props: PropsType) => {
|
||||||
|
const initialState = { count: 0 }
|
||||||
|
function reducer(state, action) {
|
||||||
|
switch (action.type) {
|
||||||
|
case 'increment':
|
||||||
|
return { count: state.count + 1 }
|
||||||
|
case 'decrement':
|
||||||
|
return { count: state.count - 1 }
|
||||||
|
default:
|
||||||
|
return state
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const [state, dispatch] = useReducer(reducer, initialState)
|
||||||
|
return (
|
||||||
|
<CurrentProvider value={{ state, dispatch }} children={props.children}></CurrentProvider>
|
||||||
|
)
|
||||||
|
}
|
||||||
@ -1,5 +1,6 @@
|
|||||||
import { Text, View } from '@tarojs/components'
|
import { Text, View } from '@tarojs/components'
|
||||||
import { useEffect, useState } from 'react'
|
import { useDidHide, useDidShow } from '@tarojs/taro'
|
||||||
|
import { useEffect, useRef, useState } from 'react'
|
||||||
import ColorItem from '../colorItem'
|
import ColorItem from '../colorItem'
|
||||||
import styles from './index.module.scss'
|
import styles from './index.module.scss'
|
||||||
import IconFont from '@/components/iconfont/iconfont'
|
import IconFont from '@/components/iconfont/iconfont'
|
||||||
@ -8,11 +9,7 @@ import Search from '@/components/search'
|
|||||||
import { GetCustomCodeLApi } from '@/api/codeManage'
|
import { GetCustomCodeLApi } from '@/api/codeManage'
|
||||||
|
|
||||||
export default () => {
|
export default () => {
|
||||||
const [formData, setFormData] = useState({
|
const [formData, setFormData] = useState<{ sale_start_time?: string; sale_end_time?: string; any_query?: string }|null>(null)
|
||||||
sale_start_time: '',
|
|
||||||
sale_end_time: '',
|
|
||||||
any_query: '',
|
|
||||||
})
|
|
||||||
// 获取码单列表
|
// 获取码单列表
|
||||||
const [list, setList] = useState<any[]>([])
|
const [list, setList] = useState<any[]>([])
|
||||||
const { fetchData: getCustomCode } = GetCustomCodeLApi()
|
const { fetchData: getCustomCode } = GetCustomCodeLApi()
|
||||||
@ -20,12 +17,18 @@ export default () => {
|
|||||||
const res = await getCustomCode(formData)
|
const res = await getCustomCode(formData)
|
||||||
setList(() => res.data?.list)
|
setList(() => res.data?.list)
|
||||||
}
|
}
|
||||||
|
const getDataStatus = useRef(false)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
onCustomCode()
|
getDataStatus && onCustomCode()
|
||||||
|
getDataStatus.current = true
|
||||||
}, [formData])
|
}, [formData])
|
||||||
|
|
||||||
|
useDidShow(() => {
|
||||||
|
onCustomCode()
|
||||||
|
})
|
||||||
|
|
||||||
const onSearch = (val) => {
|
const onSearch = (val) => {
|
||||||
setFormData(e => ({ ...e, any_query: val }))
|
formData == null ? setFormData(() => ({ any_query: val })) : setFormData(e => ({ ...e, any_query: val }))
|
||||||
}
|
}
|
||||||
return <View>
|
return <View>
|
||||||
<View className={styles.code_list_search}>
|
<View className={styles.code_list_search}>
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import { useMemo } from 'react'
|
|||||||
import styles from './index.module.scss'
|
import styles from './index.module.scss'
|
||||||
import LabAndImg from '@/components/LabAndImg'
|
import LabAndImg from '@/components/LabAndImg'
|
||||||
import { formatPriceDiv, formatWeightDiv } from '@/common/fotmat'
|
import { formatPriceDiv, formatWeightDiv } from '@/common/fotmat'
|
||||||
|
import { goLink } from '@/common/common'
|
||||||
|
|
||||||
interface Param {
|
interface Param {
|
||||||
info: {
|
info: {
|
||||||
@ -17,6 +18,7 @@ interface Param {
|
|||||||
total_amount: number
|
total_amount: number
|
||||||
total_sale_weight: number
|
total_sale_weight: number
|
||||||
sale_mode_name: string
|
sale_mode_name: string
|
||||||
|
id: number
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
export default (props: Param) => {
|
export default (props: Param) => {
|
||||||
@ -27,7 +29,7 @@ export default (props: Param) => {
|
|||||||
count: `订单信息:共 ${info?.product_count} 种面料,${info?.product_color_count} 种颜色,共 ${info?.roll} 条`,
|
count: `订单信息:共 ${info?.product_count} 种面料,${info?.product_color_count} 种颜色,共 ${info?.roll} 条`,
|
||||||
}
|
}
|
||||||
}, [info])
|
}, [info])
|
||||||
return <View className={styles.code_list_item}>
|
return <View className={styles.code_list_item} >
|
||||||
<View className={styles.code_list_con__title}>
|
<View className={styles.code_list_con__title}>
|
||||||
<Text>订单号:{info?.sale_order_no}</Text>
|
<Text>订单号:{info?.sale_order_no}</Text>
|
||||||
<View className={styles.code_list_con__title_mode}>{info?.sale_mode_name}</View>
|
<View className={styles.code_list_con__title_mode}>{info?.sale_mode_name}</View>
|
||||||
@ -54,7 +56,7 @@ export default (props: Param) => {
|
|||||||
<View className={styles.code_list_number}>{product.count}</View>
|
<View className={styles.code_list_number}>{product.count}</View>
|
||||||
<View className={styles.code_list_bottom}>
|
<View className={styles.code_list_bottom}>
|
||||||
<View className={styles.code_list_bottom_item}>码单浏览</View>
|
<View className={styles.code_list_bottom_item}>码单浏览</View>
|
||||||
<View className={styles.code_list_bottom_item}>码单编辑</View>
|
<View className={styles.code_list_bottom_item} onClick={() => goLink(`/pages/codeSetting/index?custom_print_id=${info.id}`)}>码单编辑</View>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { Text, View } from '@tarojs/components'
|
import { Text, View } from '@tarojs/components'
|
||||||
import { useDidShow } from '@tarojs/taro'
|
import { useDidShow } from '@tarojs/taro'
|
||||||
import { useEffect, useState } from 'react'
|
import { useEffect, useRef, useState } from 'react'
|
||||||
import type { CompanyParam } from '../companyItem'
|
import type { CompanyParam } from '../companyItem'
|
||||||
import CompanyItem from '../companyItem'
|
import CompanyItem from '../companyItem'
|
||||||
import styles from './index.module.scss'
|
import styles from './index.module.scss'
|
||||||
@ -11,12 +11,20 @@ import { goLink } from '@/common/common'
|
|||||||
export default () => {
|
export default () => {
|
||||||
const { fetchData } = weightListApi()
|
const { fetchData } = weightListApi()
|
||||||
const [list, setList] = useState<CompanyParam['value'][]>([])
|
const [list, setList] = useState<CompanyParam['value'][]>([])
|
||||||
|
const getDataList = async() => {
|
||||||
|
const res = await fetchData()
|
||||||
|
setList(() => res.data?.list)
|
||||||
|
}
|
||||||
|
const getDataStatus = useRef(false)
|
||||||
|
useEffect(() => {
|
||||||
|
getDataStatus && getDataList()
|
||||||
|
getDataStatus.current = true
|
||||||
|
}, [])
|
||||||
|
|
||||||
useDidShow(() => {
|
useDidShow(() => {
|
||||||
(async() => {
|
getDataList()
|
||||||
const res = await fetchData()
|
|
||||||
setList(() => res.data?.list)
|
|
||||||
})()
|
|
||||||
})
|
})
|
||||||
|
|
||||||
return <View className={styles.company_main}>
|
return <View className={styles.company_main}>
|
||||||
<View className={styles.company_search}>
|
<View className={styles.company_search}>
|
||||||
<View className={styles['code_list_search--code']}><Search placeholder="请输入单据抬头/客户/单号" /></View>
|
<View className={styles['code_list_search--code']}><Search placeholder="请输入单据抬头/客户/单号" /></View>
|
||||||
|
|||||||
@ -14,9 +14,9 @@ export default () => {
|
|||||||
]
|
]
|
||||||
const [selectIndex, setSelectIndex] = useState(1)
|
const [selectIndex, setSelectIndex] = useState(1)
|
||||||
return <View className={styles.code_list__main}>
|
return <View className={styles.code_list__main}>
|
||||||
<SelectList list={selectList} defaultIndex={selectIndex} onSelect={index => setSelectIndex(index)} />
|
{selectIndex == 1 && <SelectList list={selectList} defaultIndex={selectIndex} onSelect={index => setSelectIndex(index)} />}
|
||||||
{selectIndex == 1 && <CodeModel />}
|
{selectIndex == 1 && <CodeModel />}
|
||||||
{selectIndex == 2 && <CompanyModel />}
|
{selectIndex == 2 && <CompanyModel />}
|
||||||
{/* <TimePickerPopup showTime /> */}
|
<TimePickerPopup showTime />
|
||||||
</View>
|
</View>
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,7 +13,7 @@ export default () => {
|
|||||||
const submit = () => {
|
const submit = () => {
|
||||||
const index = productData.color_item_data.index_str.split(',')[0]
|
const index = productData.color_item_data.index_str.split(',')[0]
|
||||||
productData.data.product_details[index] = productData.color_item_data
|
productData.data.product_details[index] = productData.color_item_data
|
||||||
dispatch({ type: 'updateData', data: { ...productData.data } })
|
dispatch({ type: 'updateData', data: { ...productData.data }, update_status: 1 })
|
||||||
Taro.navigateBack()
|
Taro.navigateBack()
|
||||||
}
|
}
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@ -50,11 +50,12 @@ export default memo((props: Param) => {
|
|||||||
colorInfo.price_admin = updateData.price
|
colorInfo.price_admin = updateData.price
|
||||||
colorInfo.weight_error_admin = updateData.weight_error
|
colorInfo.weight_error_admin = updateData.weight_error
|
||||||
productData.color_item_data.product_color_details[index[1]] = { ...colorInfo }
|
productData.color_item_data.product_color_details[index[1]] = { ...colorInfo }
|
||||||
|
productData.color_item_data = { ...productData.color_item_data }
|
||||||
|
|
||||||
dispatch({ type: 'updateColorData', data: { ...productData.color_item_data }, update_status: 1 })
|
dispatch({ type: 'updateColorData', data: { ...productData.color_item_data }, update_status: 1 })
|
||||||
}, [productData.color_item_data])
|
}, [colorInfo])
|
||||||
|
|
||||||
return <Index colorInfo={productData.color_item_data.product_color_details[index[1]]} onChangeNumber={changeNumber} />
|
return <Index colorInfo={colorInfo} onChangeNumber={changeNumber} />
|
||||||
})
|
})
|
||||||
|
|
||||||
const Index = memo((props: IndexParam) => {
|
const Index = memo((props: IndexParam) => {
|
||||||
@ -62,9 +63,7 @@ const Index = memo((props: IndexParam) => {
|
|||||||
const getNumber: NumberParam = (num, type) => {
|
const getNumber: NumberParam = (num, type) => {
|
||||||
props.onChangeNumber?.(num, type)
|
props.onChangeNumber?.(num, type)
|
||||||
}
|
}
|
||||||
useEffect(() => {
|
console.log('colorInfo777:::', colorInfo)
|
||||||
console.log('colorInfo777:::', colorInfo)
|
|
||||||
}, [colorInfo])
|
|
||||||
const defaultNum = useMemo(() => {
|
const defaultNum = useMemo(() => {
|
||||||
return {
|
return {
|
||||||
weight: Big(colorInfo.weight_admin || 0).div(Big(1000)).toNumber(),
|
weight: Big(colorInfo.weight_admin || 0).div(Big(1000)).toNumber(),
|
||||||
|
|||||||
@ -1,9 +1,5 @@
|
|||||||
import { Text, View } from '@tarojs/components'
|
import { Text, View } from '@tarojs/components'
|
||||||
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
import { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react'
|
||||||
import Big from 'big.js'
|
|
||||||
import type { NumberParam } from '../settingNumber'
|
|
||||||
import SettingNumber from '../settingNumber'
|
|
||||||
import ProductItem from '../productItem'
|
|
||||||
import styles from './index.module.scss'
|
import styles from './index.module.scss'
|
||||||
import ColorBlock from './colorBlock'
|
import ColorBlock from './colorBlock'
|
||||||
import IconFont from '@/components/iconfont/iconfont'
|
import IconFont from '@/components/iconfont/iconfont'
|
||||||
|
|||||||
@ -287,7 +287,7 @@ const Order = () => {
|
|||||||
[orderDetail],
|
[orderDetail],
|
||||||
)
|
)
|
||||||
return (
|
return (
|
||||||
<MoveBtn orderObj={orderDetail} showList={['order', 'code']} orderInfo={orderDetail} messageTitle={orderDetail?.order_no} messagePath={`/pages/order/index?id=${orderDetail?.id}`} showCart>
|
<MoveBtn orderObj={orderDetail} showList={['order', 'code']} messageTitle={orderDetail?.order_no} messagePath={`/pages/order/index?id=${orderDetail?.id}`} showCart>
|
||||||
<View className={styles.order_main}>
|
<View className={styles.order_main}>
|
||||||
{(orderDetail?.status != SaleorderstatusWaitingPrePayment.value && <OrderState orderInfo={orderDetail} />) || (
|
{(orderDetail?.status != SaleorderstatusWaitingPrePayment.value && <OrderState orderInfo={orderDetail} />) || (
|
||||||
<AdvanceOrderState orderInfo={orderDetail} onRefresh={refresh} />
|
<AdvanceOrderState orderInfo={orderDetail} onRefresh={refresh} />
|
||||||
|
|||||||
42
src/pages/shopCar/components/bottomBtn/index.module.scss
Normal file
42
src/pages/shopCar/components/bottomBtn/index.module.scss
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
.Settlement_btn {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 24px 24px 24px 56px;
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
box-sizing: border-box;
|
||||||
|
z-index: 999;
|
||||||
|
.select_text {
|
||||||
|
padding: 0 32px 0 16px;
|
||||||
|
font-size: 28px;
|
||||||
|
}
|
||||||
|
.price_count {
|
||||||
|
flex: 1;
|
||||||
|
font-size: 28px;
|
||||||
|
.price {
|
||||||
|
text {
|
||||||
|
&:nth-child(2) {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.count {
|
||||||
|
font-size: 25px;
|
||||||
|
color: #ccc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.btn {
|
||||||
|
width: 184px;
|
||||||
|
height: 80px;
|
||||||
|
border-radius: 80px;
|
||||||
|
font-size: 30px;
|
||||||
|
font-weight: 500;
|
||||||
|
color: #fff;
|
||||||
|
background-color: #4581ff;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 80px;
|
||||||
|
}
|
||||||
|
}
|
||||||
18
src/pages/shopCar/components/bottomBtn/index.tsx
Normal file
18
src/pages/shopCar/components/bottomBtn/index.tsx
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
import { Text, View } from '@tarojs/components'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
import MCheckbox from '@/components/checkbox'
|
||||||
|
|
||||||
|
export default () => {
|
||||||
|
return <View className={styles.Settlement_btn}>
|
||||||
|
<MCheckbox />
|
||||||
|
<Text className={styles.select_text}>全选</Text>
|
||||||
|
<View className={styles.price_count}>
|
||||||
|
<View className={styles.price}>
|
||||||
|
<Text>预估金额:</Text>
|
||||||
|
<Text>¥3564.00</Text>
|
||||||
|
</View>
|
||||||
|
<View className={styles.count}>已选1种面料,1个颜色,共4条</View>
|
||||||
|
</View>
|
||||||
|
<View className={styles.btn}>结算</View>
|
||||||
|
</View>
|
||||||
|
}
|
||||||
46
src/pages/shopCar/components/productBlock/index.module.scss
Normal file
46
src/pages/shopCar/components/productBlock/index.module.scss
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
.shop_product {
|
||||||
|
padding: 0 32px;
|
||||||
|
background-color: #fff;
|
||||||
|
border-radius: 20px;
|
||||||
|
margin-top: 24px;
|
||||||
|
.shop_product_title {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 80px;
|
||||||
|
align-items: center;
|
||||||
|
.title_desc {
|
||||||
|
flex: 1;
|
||||||
|
margin-left: 20px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
border-bottom: 1px solid #ccc;
|
||||||
|
height: 100%;
|
||||||
|
.model {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
.label {
|
||||||
|
width: 60px;
|
||||||
|
height: 28px;
|
||||||
|
font-size: 20px;
|
||||||
|
background-color: #4581ff;
|
||||||
|
color: #fff;
|
||||||
|
text-align: center;
|
||||||
|
align-items: center;
|
||||||
|
border-radius: 10px;
|
||||||
|
margin-left: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.unit {
|
||||||
|
height: 30px;
|
||||||
|
width: 148px;
|
||||||
|
font-size: 25px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 30px;
|
||||||
|
border: 1px solid red;
|
||||||
|
color: red;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
24
src/pages/shopCar/components/productBlock/index.tsx
Normal file
24
src/pages/shopCar/components/productBlock/index.tsx
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
|
||||||
|
import { Text, View } from '@tarojs/components'
|
||||||
|
import ProductItem from '../productItem'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
import MCheckbox from '@/components/checkbox'
|
||||||
|
|
||||||
|
export default () => {
|
||||||
|
return <View className={styles.shop_product}>
|
||||||
|
<View className={styles.shop_product_title}>
|
||||||
|
<MCheckbox />
|
||||||
|
<View className={styles.title_desc}>
|
||||||
|
<View className={styles.model}>
|
||||||
|
<Text className={styles.name}>0681# 26s全棉平纹</Text>
|
||||||
|
<Text className={styles.label}>大货</Text>
|
||||||
|
</View>
|
||||||
|
<View className={styles.unit}>大货单位:条</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
<ProductItem />
|
||||||
|
<ProductItem />
|
||||||
|
<ProductItem />
|
||||||
|
<ProductItem />
|
||||||
|
</View>
|
||||||
|
}
|
||||||
50
src/pages/shopCar/components/productItem/index.module.scss
Normal file
50
src/pages/shopCar/components/productItem/index.module.scss
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
.shop_product_item_con {
|
||||||
|
padding-bottom: 20px;
|
||||||
|
.shop_product_item {
|
||||||
|
display: flex;
|
||||||
|
padding: 24px 0;
|
||||||
|
.item_con {
|
||||||
|
display: flex;
|
||||||
|
margin-left: 20px;
|
||||||
|
flex: 1;
|
||||||
|
.img {
|
||||||
|
width: 118px;
|
||||||
|
height: 118px;
|
||||||
|
}
|
||||||
|
.item_name_price_count {
|
||||||
|
flex: 1;
|
||||||
|
margin-left: 32px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-between;
|
||||||
|
.name_price {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-size: 28px;
|
||||||
|
text {
|
||||||
|
&:nth-child(2) {
|
||||||
|
color: red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.count {
|
||||||
|
width: 201px;
|
||||||
|
align-self: flex-end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.recommended {
|
||||||
|
height: 60px;
|
||||||
|
padding: 0 20px 0 50px;
|
||||||
|
background-color: #ccc;
|
||||||
|
border-radius: 10px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
font-size: 25px;
|
||||||
|
align-items: center;
|
||||||
|
.icon {
|
||||||
|
transform: rotate(-90deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
36
src/pages/shopCar/components/productItem/index.tsx
Normal file
36
src/pages/shopCar/components/productItem/index.tsx
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import { Text, View } from '@tarojs/components'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
import MCheckbox from '@/components/checkbox'
|
||||||
|
import LabAndImg from '@/components/LabAndImg'
|
||||||
|
import Counter from '@/components/counter'
|
||||||
|
import IconFont from '@/components/iconfont/iconfont'
|
||||||
|
|
||||||
|
export default () => {
|
||||||
|
return <>
|
||||||
|
<View className={styles.shop_product_item_con}>
|
||||||
|
<View className={styles.shop_product_item}>
|
||||||
|
<MCheckbox />
|
||||||
|
<View className={styles.item_con}>
|
||||||
|
<View className={styles.img}>
|
||||||
|
<LabAndImg value={{}}></LabAndImg>
|
||||||
|
</View>
|
||||||
|
<View className={styles.item_name_price_count}>
|
||||||
|
<View className={styles.name_price}>
|
||||||
|
<Text>001# 环保黑</Text>
|
||||||
|
<Text>¥37.50/kg</Text>
|
||||||
|
</View>
|
||||||
|
<View className={styles.count}>
|
||||||
|
<Counter defaultNum={1} />
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
<View className={styles.recommended}>
|
||||||
|
<Text>选择专属一对一配套螺纹推荐</Text>
|
||||||
|
<View className={styles.icon}>
|
||||||
|
<IconFont name="icon-xiala" size={30} />
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
</>
|
||||||
|
}
|
||||||
12
src/pages/shopCar/components/screwed/index.module.scss
Normal file
12
src/pages/shopCar/components/screwed/index.module.scss
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
.screwed_main {
|
||||||
|
position: fixed;
|
||||||
|
width: 700px;
|
||||||
|
height: 500px;
|
||||||
|
margin: auto;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 1300;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
10
src/pages/shopCar/components/screwed/index.tsx
Normal file
10
src/pages/shopCar/components/screwed/index.tsx
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
import { View } from '@tarojs/components'
|
||||||
|
import { memo } from 'react'
|
||||||
|
import Search from '../search'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
|
||||||
|
export default memo(() => {
|
||||||
|
return <View className={styles.screwed_main}>
|
||||||
|
<Search />
|
||||||
|
</View>
|
||||||
|
})
|
||||||
22
src/pages/shopCar/components/search/index.module.scss
Normal file
22
src/pages/shopCar/components/search/index.module.scss
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
.shop_search {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
height: 100px;
|
||||||
|
align-items: center;
|
||||||
|
.search_item {
|
||||||
|
height: 68px;
|
||||||
|
width: 224px;
|
||||||
|
border-radius: 68px;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 68px;
|
||||||
|
font-size: 30px;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
color: rgba(0, 0, 0, 0.8);
|
||||||
|
}
|
||||||
|
.search_item_select {
|
||||||
|
background-color: #cde5ff;
|
||||||
|
color: #4581ff;
|
||||||
|
border: 1px solid #4581ff;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
}
|
||||||
23
src/pages/shopCar/components/search/index.tsx
Normal file
23
src/pages/shopCar/components/search/index.tsx
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
import { Text, View } from '@tarojs/components'
|
||||||
|
import { memo, useEffect, useState } from 'react'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
|
||||||
|
interface Params {
|
||||||
|
defaultIndex?: number
|
||||||
|
onSelect?: (val: number) => void
|
||||||
|
}
|
||||||
|
export default memo((props: Params) => {
|
||||||
|
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 { defaultIndex = 0, onSelect } = props
|
||||||
|
const [index, setIndex] = useState(0)
|
||||||
|
useEffect(() => {
|
||||||
|
defaultIndex !== index && setIndex(defaultIndex)
|
||||||
|
}, [defaultIndex])
|
||||||
|
return <View className={styles.shop_search}>
|
||||||
|
{selectList?.map(item => <View key={item.value} onClick={() => onSelect?.(item.value)} className={styles.search_item}>{item.title}</View>)}
|
||||||
|
</View>
|
||||||
|
})
|
||||||
0
src/pages/shopCar/index.config.ts
Normal file
0
src/pages/shopCar/index.config.ts
Normal file
36
src/pages/shopCar/index.module.scss
Normal file
36
src/pages/shopCar/index.module.scss
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
.shop_main {
|
||||||
|
min-height: 100vh;
|
||||||
|
background-color: #f8f8f8;
|
||||||
|
.shop_header {
|
||||||
|
padding: 0 24px;
|
||||||
|
background-color: #fff;
|
||||||
|
.shop_header_sort {
|
||||||
|
height: 88px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 28px;
|
||||||
|
.sort {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
background-color: rgb(245, 245, 245);
|
||||||
|
height: 55px;
|
||||||
|
padding: 0 24px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
border-radius: 55px;
|
||||||
|
font-size: 25px;
|
||||||
|
}
|
||||||
|
.edit {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
text {
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.shop_con {
|
||||||
|
padding: 0 24px;
|
||||||
|
padding-bottom: 150px;
|
||||||
|
}
|
||||||
|
}
|
||||||
82
src/pages/shopCar/index.tsx
Normal file
82
src/pages/shopCar/index.tsx
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
import { Text, View } from '@tarojs/components'
|
||||||
|
import React, { ReactHTMLElement, memo, useEffect, useRef, useState } from 'react'
|
||||||
|
import styles from './index.module.scss'
|
||||||
|
import Search from './components/search'
|
||||||
|
import ProductBlock from './components/productBlock'
|
||||||
|
import BottomBtn from './components/bottomBtn'
|
||||||
|
import Screwed from './components/screwed'
|
||||||
|
import IconFont from '@/components/iconfont/iconfont'
|
||||||
|
|
||||||
|
export default () => {
|
||||||
|
useEffect(() => {
|
||||||
|
initData()
|
||||||
|
}, [])
|
||||||
|
const [data, setData] = useState<any[]>([])
|
||||||
|
const initData = () => {
|
||||||
|
const product_list: any = []
|
||||||
|
new Array(10).fill('').map((item, index) => {
|
||||||
|
const product: any = {
|
||||||
|
product_code: `100${index}`,
|
||||||
|
product_id: index + 1,
|
||||||
|
product_name: '26s全棉平纹',
|
||||||
|
color_list: [],
|
||||||
|
}
|
||||||
|
new Array(130).fill('').map((citem, cindex) => {
|
||||||
|
product.color_list.push({
|
||||||
|
estimate_amount: 100,
|
||||||
|
estimate_weight: 100,
|
||||||
|
id: 0,
|
||||||
|
lab: {
|
||||||
|
a: 0,
|
||||||
|
b: 0,
|
||||||
|
l: 0,
|
||||||
|
},
|
||||||
|
length: 0,
|
||||||
|
product_code: '00',
|
||||||
|
product_color_code: `00${cindex}}`,
|
||||||
|
product_color_id: cindex + 1,
|
||||||
|
product_color_name: '环保黑',
|
||||||
|
product_id: 0,
|
||||||
|
product_name: 'string',
|
||||||
|
rgb: {
|
||||||
|
b: 0,
|
||||||
|
g: 0,
|
||||||
|
r: 0,
|
||||||
|
},
|
||||||
|
roll: 10,
|
||||||
|
sale_mode: 0,
|
||||||
|
sale_mode_name: '大货',
|
||||||
|
sale_offset: 500,
|
||||||
|
sale_price: 500,
|
||||||
|
standard_price: 500,
|
||||||
|
texture_url: '',
|
||||||
|
weight_error: 500,
|
||||||
|
})
|
||||||
|
})
|
||||||
|
product_list.push(product)
|
||||||
|
})
|
||||||
|
setData(product_list)
|
||||||
|
}
|
||||||
|
|
||||||
|
return <View className={styles.shop_main}>
|
||||||
|
<View className={styles.shop_header}>
|
||||||
|
<View className={styles.shop_header_sort}>
|
||||||
|
<View className={styles.sort}>
|
||||||
|
<IconFont name="icon-paixu" size={30} />
|
||||||
|
<Text>添加时间降序</Text>
|
||||||
|
</View>
|
||||||
|
<View className={styles.edit}>
|
||||||
|
<IconFont name="icon-guanli" size={43} />
|
||||||
|
<Text>编辑</Text>
|
||||||
|
</View>
|
||||||
|
</View>
|
||||||
|
<Search />
|
||||||
|
</View>
|
||||||
|
<View className={styles.shop_con}>
|
||||||
|
{data?.map((item, index) => <ProductBlock key={index} />)}
|
||||||
|
</View>
|
||||||
|
<BottomBtn />
|
||||||
|
{/* <Screwed /> */}
|
||||||
|
<View className="common_safe_area_y"></View>
|
||||||
|
</View>
|
||||||
|
}
|
||||||
@ -1,6 +1,14 @@
|
|||||||
|
.add-code-header-main {
|
||||||
|
padding: 20px;
|
||||||
|
min-height: 100vh;
|
||||||
|
background-color: #f7f7f7ff;
|
||||||
|
}
|
||||||
.add-address {
|
.add-address {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
background-color: #fff;
|
||||||
|
padding-bottom: 20px;
|
||||||
|
border-radius: 16px;
|
||||||
.add-address-default {
|
.add-address-default {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
|||||||
@ -127,51 +127,54 @@ export default () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View className="add-address">
|
<View className="add-code-header-main">
|
||||||
<FromList
|
<View className="add-address">
|
||||||
onInput={(ev: any) => setFormData({ ...formData, title: ev.detail.value })}
|
<FromList
|
||||||
value={formData.title}
|
onInput={(ev: any) => setFormData({ ...formData, title: ev.detail.value })}
|
||||||
label="公司抬头"
|
value={formData.title}
|
||||||
placeholder="请输入码单显示抬头信息"
|
label="公司抬头"
|
||||||
/>
|
placeholder="请输入码单显示抬头信息"
|
||||||
<FromList
|
/>
|
||||||
onInput={(ev: any) => setFormData({ ...formData, purchaser_name: ev.detail.value })}
|
<FromList
|
||||||
value={formData.purchaser_name}
|
onInput={(ev: any) => setFormData({ ...formData, purchaser_name: ev.detail.value })}
|
||||||
label="客户名称"
|
value={formData.purchaser_name}
|
||||||
placeholder="请输入码单显示客户名称"
|
label="客户名称"
|
||||||
/>
|
placeholder="请输入码单显示客户名称"
|
||||||
<FromList
|
/>
|
||||||
onInput={(ev: any) => setFormData({ ...formData, phone: ev.detail.value })}
|
<FromList
|
||||||
value={formData.phone}
|
onInput={(ev: any) => setFormData({ ...formData, phone: ev.detail.value })}
|
||||||
label="电话号码"
|
value={formData.phone}
|
||||||
placeholder="请输入码单显示联系号码"
|
label="电话号码"
|
||||||
/>
|
placeholder="请输入码单显示联系号码"
|
||||||
<View className="add-address-default">
|
/>
|
||||||
<Text>设为默认抬头</Text>
|
<View className="add-address-default">
|
||||||
<View onClick={() => setFormData({ ...formData, is_default: !formData.is_default })}>
|
<Text>设为默认抬头</Text>
|
||||||
{formData.is_default
|
<View onClick={() => setFormData({ ...formData, is_default: !formData.is_default })}>
|
||||||
? (
|
{formData.is_default
|
||||||
<View className="add-address-default-active">
|
? (
|
||||||
<Text className="iconfont icon-tick" />
|
<View className="add-address-default-active">
|
||||||
</View>
|
<Text className="iconfont icon-tick" />
|
||||||
)
|
</View>
|
||||||
: (
|
)
|
||||||
<View className="add-address-default-noactive"></View>
|
: (
|
||||||
)}
|
<View className="add-address-default-noactive"></View>
|
||||||
|
)}
|
||||||
|
</View>
|
||||||
</View>
|
</View>
|
||||||
</View>
|
<View className="weight_bottom_btn_con">
|
||||||
<View className="weight_bottom_btn_con">
|
<View className="weight_bottom_btn">
|
||||||
<View className="weight_bottom_btn">
|
<Button hoverClass="none" className="add-address-save" onClick={handleUpdate}>
|
||||||
<Button hoverClass="none" className="add-address-save" onClick={handleUpdate}>
|
{type === 'add' ? '取消' : '删除'}
|
||||||
{type === 'add' ? '取消' : '删除'}
|
</Button>
|
||||||
</Button>
|
<Button hoverClass="none" className="add-address-save" onClick={handleSave}>
|
||||||
<Button hoverClass="none" className="add-address-save" onClick={handleSave}>
|
{type === 'add' ? '提交' : '修改'}
|
||||||
{type === 'add' ? '提交' : '修改'}
|
</Button>
|
||||||
</Button>
|
</View>
|
||||||
|
<View className="common_safe_area_y"></View>
|
||||||
</View>
|
</View>
|
||||||
<View className="common_safe_area_y"></View>
|
|
||||||
</View>
|
|
||||||
|
|
||||||
|
</View>
|
||||||
</View>
|
</View>
|
||||||
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user