Skip to content

Commit

Permalink
feat: 采购需求
Browse files Browse the repository at this point in the history
  • Loading branch information
Zhou-Bill committed Oct 8, 2024
1 parent 2311760 commit 54d57b7
Show file tree
Hide file tree
Showing 13 changed files with 420 additions and 26 deletions.
3 changes: 3 additions & 0 deletions global.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,8 @@ declare module 'gm-x-printer' {
class EditorManage<T extends EditorProps> extends React.Component<T, any> {}
class EditorBoxLabel<T extends EditorProps> extends React.Component<T, any> {}
class EditEshopOrder<T extends EditorProps> extends React.Component<T, any> {}
class EditorPurchaseDemand<T extends EditorProps> extends React.Component<T, any> {}

class Printer<T extends PrinterProps> extends React.Component<T, any> {}
class BatchPrinter<T extends BatchPrinterProps> extends React.Component<
T,
Expand Down Expand Up @@ -92,6 +94,7 @@ declare module 'gm-x-printer' {
EditorBoxLabel,
EditorManage,
EditEshopOrder,
EditorPurchaseDemand,
Printer,
BatchPrinter,
EditorMaterialRequisition,
Expand Down
56 changes: 33 additions & 23 deletions src/common/editor_edit_field.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,7 @@ class EditorField extends React.Component {
onChange={this.handleChangeBlock.bind(this, 'style')}
/>
)}
{(type === 'image' ||
type === 'qrcode' ||
type === 'qrcode_trace' ) && (
{(type === 'image' || type === 'qrcode' || type === 'qrcode_trace') && (
<div>
<Size
style={style}
Expand Down Expand Up @@ -151,7 +149,14 @@ class EditorField extends React.Component {
}

renderTable() {
const { tableDataKeyList, editStore, type, showMergeOption } = this.props
const {
tableDataKeyList,
editStore,
type,
showMergeOption,
showProductPermutation = true,
renderExtra
} = this.props
const { head, headStyle, text, style } =
editStore.computedSelectedInfo || {}
return (
Expand Down Expand Up @@ -203,25 +208,27 @@ class EditorField extends React.Component {
/>
px
</Flex>
{showProductPermutation && (
<>
<Gap height='5px' />
<Flex alignCenter>
<Flex alignCenter>{i18next.t('商品排列')}</Flex>
<Select
className='gm-printer-edit-select'
value={editStore.computedTableArrange}
onChange={editStore.setTableArrange}
>
<Option value='lateral'>{i18next.t('横向排列')}</Option>
<Option value='vertical'>{i18next.t('纵向排列')}</Option>
</Select>
</Flex>

<Gap height='5px' />

<Flex alignCenter>
<Flex alignCenter>{i18next.t('商品排列')}</Flex>
<Select
className='gm-printer-edit-select'
value={editStore.computedTableArrange}
onChange={editStore.setTableArrange}
>
<Option value='lateral'>{i18next.t('横向排列')}</Option>
<Option value='vertical'>{i18next.t('纵向排列')}</Option>
</Select>
</Flex>

<Flex alignCenter className='gm-padding-top-5 gm-text-desc'>
{i18next.t('商品排列仅适用于双栏商品设置')}
</Flex>

<Flex alignCenter className='gm-padding-top-5 gm-text-desc'>
{i18next.t('商品排列仅适用于双栏商品设置')}
</Flex>
</>
)}
{renderExtra && renderExtra()}
<Gap height='5px' />
{type === 'OUT_STOCK' && showMergeOption && (
<Flex>
Expand Down Expand Up @@ -329,7 +336,10 @@ EditorField.propTypes = {
editStore: PropTypes.object,
tableDataKeyList: PropTypes.array,
type: PropTypes.string,
showMergeOption: PropTypes.bool
showMergeOption: PropTypes.bool,
/** 是否显示商品排列 */
showProductPermutation: PropTypes.bool,
renderExtra: PropTypes.func
}

export default EditorField
4 changes: 2 additions & 2 deletions src/common/editor_store.js
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ class EditorStore {
}
}).join('/')
} else {
return v.style ? v.style.height : ''
return v?.style ? v.style.height : ''
}
}).join('_')
}
Expand Down Expand Up @@ -596,7 +596,7 @@ class EditorStore {
text: `{{qrcode_trace}}`
})
break

// 备注单元格
case 'remark':
blocks.push({
Expand Down
66 changes: 66 additions & 0 deletions src/components/checkbox/group.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import React, { useEffect, useRef } from 'react'
import { Flex, Checkbox } from '../index'
import PropTypes from 'prop-types'

const CheckboxGroup = props => {
const { options = [], value, onChange } = props

const [innerValue, setInnerValue] = React.useState(() => {
if (value !== undefined) {
return value
} else {
return []
}
})

const isFirstRender = useRef(true)

useEffect(() => {
if (value === undefined && !isFirstRender.current) {
setInnerValue(value)
}
isFirstRender.current = false
}, [value])

const mergedValue = value === undefined ? innerValue : value

const handleChange = (val, isChecked) => {
let res = [...mergedValue]
if (isChecked) {
res = [...res, val]
} else {
res = mergedValue.filter(item => item !== val)
}
if (value === undefined) {
setInnerValue(res)
}
onChange && onChange(res)
}

return (
<Flex row>
{options.map(_item => {
const isChecked = mergedValue.includes(_item.value)
return (
<Checkbox
key={_item.value}
onChange={() => handleChange(_item.value, !isChecked)}
checked={isChecked}
>
<span>
{_item.label} {isChecked}
</span>
</Checkbox>
)
})}
</Flex>
)
}

CheckboxGroup.propTypes = {
options: PropTypes.array,
value: PropTypes.any,
onChange: PropTypes.func
}

export default CheckboxGroup
54 changes: 54 additions & 0 deletions src/components/checkbox/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import React, { useEffect, useRef, useState } from 'react'
import Flex from '../flex'
import classNames from 'classnames'
import PropTypes from 'prop-types'

const Checkbox = props => {
const { checked, onChange, children } = props
const [innerChecked, setInnerChecked] = useState(() => {
if (checked !== undefined) {
return checked
} else {
return false
}
})

const isFirstRender = useRef(true)

const mergedValue = checked === undefined ? innerChecked : checked

useEffect(() => {
if (checked === undefined && !isFirstRender.current) {
setInnerChecked(checked)
}
isFirstRender.current = false
}, [checked])

const handleChange = isChecked => {
console.log(isChecked)
if (checked === undefined) {
setInnerChecked(isChecked)
}
onChange && onChange(isChecked)
}

return (
<div onClick={e => handleChange(!mergedValue)}>
<Flex className='checkbox'>
<div
className={classNames('checkbox__inner', {
'checkbox__inner--checked': mergedValue
})}
/>
<>{children}</>
</Flex>
</div>
)
}

Checkbox.propTypes = {
checked: PropTypes.bool,
onChange: PropTypes.func
}

export default Checkbox
23 changes: 23 additions & 0 deletions src/components/checkbox/index.less
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
.checkbox {
margin-right: 8px;
.checkbox__inner {
width: 16px;
height: 16px;
border: 1px solid #ccc;
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
margin-right: 8px;
}

.checkbox__inner--checked {
&::after {
content: '';
display: block;
width: 10px;
height: 10px;
background-color: #56a3f2;
}
}
}
6 changes: 5 additions & 1 deletion src/components/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import Switch from './switch'
import ToolTip from './tooltip'
import Radio from './radio'
import TagSelect from './tag_select'
import Checkbox from './checkbox'
import CheckboxGroup from './checkbox/group'

export {
Flex,
Expand All @@ -20,7 +22,9 @@ export {
Switch,
ToolTip,
Radio,
TagSelect
TagSelect,
Checkbox,
CheckboxGroup
}

export * from './svg'
1 change: 1 addition & 0 deletions src/components/index.less
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@
@import './css/button.less';
@import './tooltip/style.less';
@import './tag_select/style.less';
@import './checkbox/index.less';
55 changes: 55 additions & 0 deletions src/editor_purchase_demand/context_menu.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import React from 'react'
import PropTypes from 'prop-types'
import CommonContextMenu from '../common/common_context_menu'
import { inject, observer } from 'mobx-react'
import { Printer } from '../printer'

const blockTypeList = []

@inject('editStore')
@observer
class ContextMenu extends React.Component {
handleChangeTableDataKey = (key, name) => {
const { editStore } = this.props

editStore.changeTableDataKey(name, key)
}

handleChangeTableData = isAutoFilling => {
const { editStore } = this.props
editStore.handleChangeTableData(isAutoFilling)
}

/** 右键table */
renderOrderActionBtn = name => {
return <></>
}

render() {
const { editStore, uploadQiniuImage } = this.props
return (
<CommonContextMenu
renderTableAction={this.renderOrderActionBtn}
insertBlockList={blockTypeList}
uploadQiniuImage={uploadQiniuImage}
>
<Printer
key={editStore.computedPrinterKey}
selected={editStore.selected}
selectedRegion={editStore.selectedRegion}
isAutoFilling={false}
lineheight={editStore.computedTableCustomerRowHeight}
config={editStore.config}
data={editStore.mockData}
getremainpageHeight={editStore.setRemainPageHeight}
updateData={editStore.updateData}
/>
</CommonContextMenu>
)
}
}
ContextMenu.propTypes = {
editStore: PropTypes.object,
uploadQiniuImage: PropTypes.func
}
export default ContextMenu
Loading

0 comments on commit 54d57b7

Please sign in to comment.