大货码单对接完成

This commit is contained in:
2023-01-10 11:49:26 +08:00
parent 6048dd888c
commit 7f101dabd3
25 changed files with 789 additions and 285 deletions
+206
View File
@@ -0,0 +1,206 @@
// 自定义码单
import type { adjustType } from '@/common/enum'
import type { CompanyItem } from '@/pages/codeSetting/components/payeeHead'
export interface customPrintProductColor {
price: number
product_color_id: number
product_color_name: string
weight: number
weight_error: number
}
export interface customPrintProduct {
custom_print_product_color: customPrintProductColor[]
price: number
product_id: number
product_name: string
weight: number
weight_error: number
}
export interface adminParam {
adjust_type: number
custom_print_id: number
sale_order_id: number
custom_print_product: customPrintProduct[]
price: number
purchaser_form_title_id: number
weight: number
weight_error: number
}
export interface CodeParam {
data: any // 码单数据
adjust_type: adjustType// 码单调整类型
custom_print_id: number // 自定义码单id
sale_order_id: number // 销售码单id
admin_data: adminParam|null // 需要传给后端的数据
save_status: boolean // 是否保存了数据
color_item_data: any // 当前编辑的颜色数据
update_status: 0|1|2
purchaser_form_title: CompanyItem // 码单抬头
}
type Action = {
type: string
}&CodeParam
const INIT_USER: CodeParam = {
data: null, // 码单数据
adjust_type: 1, // 码单调整类型
custom_print_id: 0, // 自定义码单id
sale_order_id: 0, // 销售码单id
admin_data: null, // 需要传给后端的数据
color_item_data: null,
update_status: 0, // 1代表修改了数量,2代表修改了名称
purchaser_form_title: {
title: '',
purchaser_name: '',
phone: '',
id: 0,
},
}
export default function counter(state = INIT_USER, action: Action) {
const { type, data, admin_data } = action
switch (type) {
case 'setInitData':
return onInitData(state, action)
case 'updateData':
return onUpdateData(state, action)
case 'changeAdjustType':
return { ...state, adjust_type: data }
case 'setColorData':
return { ...state, color_item_data: JSON.parse(JSON.stringify(data)) }
case 'updateColorData':
return { ...state, color_item_data: data }
case 'setPurchaserFormTitle':
return onUpdatePurchaserFormTitle(state, action)
default:
return state
}
}
// 初始化数据
const onInitData = (state, action: Action) => {
const { data = {}, custom_print_id, sale_order_id, adjust_type } = action
const updateData: adminParam = {
adjust_type: parseInt(adjust_type.toString()),
custom_print_product: [],
price: data?.price_admin || 0,
weight: data?.weight_admin || 0,
weight_error: data?.weight_error_admin || 0,
custom_print_id: parseInt(custom_print_id.toString()),
sale_order_id: parseInt(custom_print_id.toString()),
purchaser_form_title_id: data?.default_title_id,
}
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()
item.sale_mode_name = data.sale_mode_name
item.sale_mode = data.sale_mode
const product_item: customPrintProduct = {
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, 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
citem.sale_mode_name = data.sale_mode_name
citem.sale_mode = data.sale_mode
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)
})
// 抬头
const purchaser_form_title = {
id: data?.default_title_id,
title: data?.title_name,
purchaser_name: data?.purchaser_name,
phone: data?.purchaser_phone,
}
return {
...state,
data,
custom_print_id,
sale_order_id,
custom_order_total,
admin_data: updateData,
init_state: true,
update_status: 0,
color_item_data: null,
purchaser_form_title,
adjust_type,
}
}
// 后端所需数据
const onUpdateData = (state, action) => {
const { data, update_status } = action
const updateData: adminParam = {
adjust_type: parseInt(state.adjust_type),
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!),
purchaser_form_title_id: parseInt(state.purchaser_form_title.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: customPrintProduct = {
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 }, update_status }
}
// 更新码单抬头
const onUpdatePurchaserFormTitle = (state, action) => {
const { data } = action
state.admin_data.purchaser_form_title_id = data.id
return { ...state, purchaser_form_title: data }
}
+5 -3
View File
@@ -1,12 +1,14 @@
// 该方法纯粹只是个Ts类型定义文件
import type { TypedUseSelectorHook } from 'react-redux'
import type { TypedUseSelectorHook } from 'react-redux'
import { useSelector as useReduxSelector } from 'react-redux'
import type { DataParam } from './userInfo'
import type { DataParam as commonDataParam } from './commonData'
import type { DataParam as commonDataParam } from './commonData'
import type { CodeParam } from './codeData'
interface Params {
userInfo: DataParam
commonData: commonDataParam
codeData: CodeParam
}
export const useSelector: TypedUseSelectorHook<Params> = useReduxSelector
export const useSelector: TypedUseSelectorHook<Params> = useReduxSelector
+3 -1
View File
@@ -1,8 +1,10 @@
import { combineReducers } from 'redux'
import userInfo from './userInfo'
import commonData from './commonData'
import codeData from './codeData'
export default combineReducers({
userInfo,
commonData,
})
codeData,
})