| | |
| | | const enMap = { |
| | | page: { |
| | | map: { |
| | | action: { |
| | | addArea: 'Add Area', |
| | | }, |
| | | prompt: { |
| | | areaName: 'Please enter area name', |
| | | }, |
| | | msg: { |
| | | areaCreated: 'Area "%{name}" created', |
| | | }, |
| | | }, |
| | | }, |
| | | } |
| | |
| | | const zhMap = { |
| | | page: { |
| | | map: { |
| | | action: { |
| | | addArea: '添加区域', |
| | | }, |
| | | prompt: { |
| | | areaName: '请输入区域名称', |
| | | }, |
| | | msg: { |
| | | areaCreated: '区域 "%{name}" 已创建', |
| | | }, |
| | | }, |
| | | }, |
| | | } |
| | |
| | | }, |
| | | }, |
| | | area: { |
| | | title: 'AREA', |
| | | title: 'Area Settings', |
| | | tabs: { |
| | | basic: 'Basic', |
| | | advanced: 'Advanced', |
| | | }, |
| | | form: { |
| | | name: 'Name', |
| | | agv: 'Assign AGVs', |
| | | agvPlaceholder: 'Select AGVs', |
| | | codes: 'Codes in area (%{count})', |
| | | codesEmpty: 'No codes', |
| | | code: 'Area Code', |
| | | maxQty: 'Maximum Quantity', |
| | | speedLimit: 'Speed Limit', |
| | | startX: 'Start X', |
| | | startY: 'Start Y', |
| | | endX: 'End X', |
| | | endY: 'End Y', |
| | | memo: 'Memo', |
| | | priority: 'Priority', |
| | | }, |
| | | confirm: { |
| | | save: 'Save current changes?', |
| | | delete: 'This action cannot be undone. Delete this area?', |
| | | }, |
| | | prompt: { |
| | | nameInput: 'Please enter area name', |
| | | areaName: 'Please enter area name', |
| | | }, |
| | | msg: { |
| | | areaCreated: 'Area "%{name}" created', |
| | | }, |
| | | }, |
| | | }, |
| | |
| | | }, |
| | | area: { |
| | | title: '区域设置', |
| | | tabs: { |
| | | basic: '基础', |
| | | advanced: '高级', |
| | | }, |
| | | form: { |
| | | name: '名称', |
| | | agv: '选择AGV小车', |
| | | agvPlaceholder: '请选择AGV', |
| | | codes: '区域内条码集合 (%{count})', |
| | | codesEmpty: '暂无条码', |
| | | code: '区域编码', |
| | | maxQty: '最大数量', |
| | | speedLimit: '速度限制', |
| | | startX: '起点 X', |
| | | startY: '起点 Y', |
| | | endX: '终点 X', |
| | | endY: '终点 Y', |
| | | memo: '备注', |
| | | priority: '优先级', |
| | | }, |
| | | confirm: { |
| | | save: '确认保存当前修改?', |
| | | delete: '删除后将无法恢复,确认删除?', |
| | | }, |
| | | prompt: { |
| | | nameInput: '请输入区域名称', |
| | | areaName: '请输入区域名称', |
| | | }, |
| | | msg: { |
| | | areaCreated: '区域 "%{name}" 已创建', |
| | | }, |
| | | }, |
| | | }, |
| | |
| | | |
| | | const handleSubmit = (e) => { |
| | | e.preventDefault(); |
| | | const confirmMsg = translate('page.map.area.saveConfirm', { _: '确认保存当前修改?' }); |
| | | const confirmMsg = translate('page.map.area.confirm.save'); |
| | | if (window.confirm(confirmMsg)) { |
| | | onSave?.(); |
| | | } |
| | |
| | | <Grid container spacing={2}> |
| | | <Grid item xs={12}> |
| | | <TextField |
| | | label={translate('page.map.area.code', { _: '区域编码' })} |
| | | label={translate('page.map.area.form.code')} |
| | | fullWidth |
| | | value={areaCode} |
| | | onChange={(e) => setAreaCode(e.target.value)} |
| | |
| | | </Grid> |
| | | <Grid item xs={6}> |
| | | <TextField |
| | | label={translate('page.map.area.maxQty', { _: '最大数量' })} |
| | | label={translate('page.map.area.form.maxQty')} |
| | | fullWidth |
| | | type="number" |
| | | value={maxQty} |
| | |
| | | </Grid> |
| | | <Grid item xs={6}> |
| | | <TextField |
| | | label={translate('page.map.area.speedLimit', { _: '速度限制' })} |
| | | label={translate('page.map.area.form.speedLimit')} |
| | | fullWidth |
| | | type="number" |
| | | value={speedLimit} |
| | |
| | | </Grid> |
| | | <Grid item xs={12} sm={6}> |
| | | <TextField |
| | | label={translate('page.map.area.startX', { _: '起点 X' })} |
| | | label={translate('page.map.area.form.startX')} |
| | | fullWidth |
| | | value={formatCoord(startPoint?.x)} |
| | | InputProps={{ readOnly: true }} |
| | |
| | | </Grid> |
| | | <Grid item xs={12} sm={6}> |
| | | <TextField |
| | | label={translate('page.map.area.startY', { _: '起点 Y' })} |
| | | label={translate('page.map.area.form.startY')} |
| | | fullWidth |
| | | value={formatCoord(startPoint?.y)} |
| | | InputProps={{ readOnly: true }} |
| | |
| | | </Grid> |
| | | <Grid item xs={12} sm={6}> |
| | | <TextField |
| | | label={translate('page.map.area.endX', { _: '终点 X' })} |
| | | label={translate('page.map.area.form.endX')} |
| | | fullWidth |
| | | value={formatCoord(endPoint?.x)} |
| | | InputProps={{ readOnly: true }} |
| | |
| | | </Grid> |
| | | <Grid item xs={12} sm={6}> |
| | | <TextField |
| | | label={translate('page.map.area.endY', { _: '终点 Y' })} |
| | | label={translate('page.map.area.form.endY')} |
| | | fullWidth |
| | | value={formatCoord(endPoint?.y)} |
| | | InputProps={{ readOnly: true }} |
| | |
| | | </Grid> |
| | | <Grid item xs={12}> |
| | | <TextField |
| | | label={translate('page.map.area.priority', { _: '优先级' })} |
| | | label={translate('page.map.area.form.priority')} |
| | | fullWidth |
| | | type="number" |
| | | value={priority} |
| | |
| | | </Grid> |
| | | <Grid item xs={12}> |
| | | <TextField |
| | | label={translate('page.map.area.shape', { _: '备注' })} |
| | | label={translate('page.map.area.form.memo')} |
| | | fullWidth |
| | | multiline |
| | | minRows={3} |
| | |
| | | </Grid> |
| | | <Grid item xs={12}> |
| | | <Button variant="contained" type="submit"> |
| | | {translate('common.action.save', { _: '保存' })} |
| | | {translate('ra.action.save')} |
| | | </Button> |
| | | </Grid> |
| | | </Grid> |
| | |
| | | if (disableSave) { |
| | | return; |
| | | } |
| | | const confirmMsg = translate('page.map.area.saveConfirm', { _: '确认保存当前修改?' }); |
| | | const confirmMsg = translate('page.map.area.confirm.save'); |
| | | if (window.confirm(confirmMsg)) { |
| | | onSave?.(); |
| | | } |
| | |
| | | if (!canDelete) { |
| | | return; |
| | | } |
| | | const confirmMsg = translate('page.map.area.deleteConfirm', { _: '删除后将无法恢复,确认删除?' }); |
| | | const confirmMsg = translate('page.map.area.confirm.delete'); |
| | | if (window.confirm(confirmMsg)) { |
| | | onDelete?.(); |
| | | } |
| | |
| | | <Stack spacing={3} sx={{ mt: 1 }}> |
| | | <Stack direction="row" spacing={1} alignItems="center"> |
| | | <TextField |
| | | label={translate('page.map.area.name', { _: '名称' })} |
| | | label={translate('page.map.area.form.name')} |
| | | size="small" |
| | | fullWidth |
| | | variant="outlined" |
| | |
| | | |
| | | <Box > |
| | | <Typography variant="subtitle2" gutterBottom> |
| | | {translate('page.map.area.agv', { _: '选择AGV小车' })} |
| | | {translate('page.map.area.form.agv')} |
| | | </Typography> |
| | | <Autocomplete |
| | | multiple |
| | |
| | | {...params} |
| | | size="small" |
| | | variant="outlined" |
| | | placeholder={translate('page.map.area.agv.placeholder', { _: '' })} |
| | | placeholder={translate('page.map.area.form.agvPlaceholder')} |
| | | /> |
| | | )} |
| | | /> |
| | |
| | | |
| | | <Box> |
| | | <Typography variant="subtitle2" gutterBottom> |
| | | {translate('page.map.area.barcodes', { _: '区域内条码集合' }) + " (" + codeList.length + ")"} |
| | | {translate('page.map.area.form.codes', { count: codeList.length })} |
| | | </Typography> |
| | | <Paper |
| | | variant="outlined" |
| | |
| | | )) |
| | | ) : ( |
| | | <Typography variant="body2" color="text.secondary"> |
| | | {translate('page.map.area.barcodes.empty', { _: '暂无条码' })} |
| | | {translate('page.map.area.form.codesEmpty')} |
| | | </Typography> |
| | | )} |
| | | </Paper> |
| | |
| | | |
| | | <Box display="flex" justifyContent="space-between" alignItems="center"> |
| | | <Button variant="contained" onClick={handleSaveClick} disabled={disableSave}> |
| | | {translate('common.action.save', { _: '保存' })} |
| | | {translate('ra.action.save')} |
| | | </Button> |
| | | <Button variant="text" color="error" onClick={handleDeleteClick} disabled={!canDelete}> |
| | | {translate('common.action.delete', { _: '删除' })} |
| | | {translate('ra.action.delete')} |
| | | </Button> |
| | | </Box> |
| | | </Stack> |
| | |
| | | variant="fullWidth" |
| | | sx={{ mb: 0 }} |
| | | > |
| | | <Tab label={translate('page.map.area.basic', { _: '基础' })} /> |
| | | <Tab label={translate('page.map.area.advanced', { _: '高级' })} /> |
| | | <Tab label={translate('page.map.area.tabs.basic')} /> |
| | | <Tab label={translate('page.map.area.tabs.advanced')} /> |
| | | </Tabs> |
| | | |
| | | <Divider /> |