Commit 5ad0fab19d4bde908ce4e9d08a3e7386a7ec5ce6
1 parent
c1b7f387
1.封装上报参数组件,职责清晰
Showing
1 changed file
with
158 additions
and
170 deletions
src/mes/common/commonModelComponent/index.js
| ... | ... | @@ -2338,134 +2338,6 @@ const CommonViewTableComponent = props => { |
| 2338 | 2338 | const { masterData, sModelsType, app } = props |
| 2339 | 2339 | const { bCheck = false } = masterData || {} |
| 2340 | 2340 | const imgSrc = commonBusiness.handleAddIcon(masterData, sModelsType, app); |
| 2341 | - | |
| 2342 | - // 上报参数区域状态管理 | |
| 2343 | - const [reportExpand, setReportExpand] = useState(true); | |
| 2344 | - | |
| 2345 | - // 解析上报参数 | |
| 2346 | - let reportParam = null; | |
| 2347 | - if(true || props.sModelsId === '17087428780006438414984564455000'){ | |
| 2348 | - if(viewRow.sReportParam){ | |
| 2349 | - reportParam = JSON.parse(viewRow.sReportParam); | |
| 2350 | - } | |
| 2351 | - } | |
| 2352 | - | |
| 2353 | - // 构建上报参数的配置 | |
| 2354 | - const reportViewConfigs = reportParam ? Object.keys(reportParam).filter(key => key.startsWith('sParam') && !key.includes('Default') && !key.includes('NotEmpty') && !key.includes('DropDown')).map(key => { | |
| 2355 | - const paramNum = key.replace('sParam', ''); | |
| 2356 | - // 查找对应的下拉数据源 sParamDropDown1, sParamDropDown2... | |
| 2357 | - const dropDownKey = `sParamDropDown${paramNum}`; | |
| 2358 | - const hasDropDown = reportParam[dropDownKey] && Object.keys(reportParam[dropDownKey]).length > 0; | |
| 2359 | - // 将下拉对象转换为数组格式 [{sId, sName}] | |
| 2360 | - const dropDownArray = hasDropDown ? Object.keys(reportParam[dropDownKey]).map(dKey => ({ | |
| 2361 | - sId: dKey, | |
| 2362 | - sName: reportParam[dropDownKey][dKey] | |
| 2363 | - })) : []; | |
| 2364 | - | |
| 2365 | - // 字段名映射:sParam1 -> sParamValue1, sParam2 -> sParamValue2 | |
| 2366 | - const valueKey = `sParamValue${paramNum}`; | |
| 2367 | - | |
| 2368 | - return { | |
| 2369 | - sId: valueKey, // 使用 sParamValue1, sParamValue2 作为字段名 | |
| 2370 | - sName: valueKey, // 使用 sParamValue1, sParamValue2 作为字段名 | |
| 2371 | - showName: reportParam[key] || key, | |
| 2372 | - sControlName: `reportParam_${valueKey}`, | |
| 2373 | - iColValue: 12, | |
| 2374 | - iOrder: parseInt(paramNum) || 0, | |
| 2375 | - bVisible: true, | |
| 2376 | - bReadonly: false, // 允许编辑 | |
| 2377 | - enabled: true, // 确保字段可编辑 | |
| 2378 | - sDefault: '', // 不使用默认值,避免显示 new_type | |
| 2379 | - sDropDownType: hasDropDown ? 'const' : '', // 使用 const 类型而不是 sql | |
| 2380 | - showDropDown: hasDropDown ? dropDownArray : [], // 直接传入数组数据 | |
| 2381 | - dropDownData: hasDropDown ? dropDownArray : [], // 备用数据源 | |
| 2382 | - iTag: 3, // iTag=3 强制允许编辑 | |
| 2383 | - specialControl: false // 确保不是特殊控件 | |
| 2384 | - }; | |
| 2385 | - }) : []; | |
| 2386 | - | |
| 2387 | - // 构建上报参数的视图数据,并合并到主视图数据中 | |
| 2388 | - const reportViewRow = reportParam ? Object.keys(reportParam).filter(key => key.startsWith('sParam') && !key.includes('Default') && !key.includes('NotEmpty') && !key.includes('DropDown')).reduce((acc, key) => { | |
| 2389 | - const paramNum = key.replace('sParam', ''); | |
| 2390 | - const valueKey = `sParamValue${paramNum}`; // 使用 sParamValue1, sParamValue2 | |
| 2391 | - | |
| 2392 | - // 获取 viewRow 中的值 | |
| 2393 | - const viewRowValue = viewRow[valueKey]; | |
| 2394 | - | |
| 2395 | - // 检查 viewRow 值是否有效(不是 undefined、空字符串、new_type、newType) | |
| 2396 | - const isViewRowValueValid = viewRowValue !== undefined && viewRowValue !== '' && viewRowValue !== 'new_type' && viewRowValue !== 'newType'; | |
| 2397 | - | |
| 2398 | - // 获取默认值并检查是否有效 | |
| 2399 | - const defaultValue = reportParam[`${key}Default`]; | |
| 2400 | - const isDefaultValueValid = defaultValue !== undefined && defaultValue !== '' && defaultValue !== 'new_type' && defaultValue !== 'newType'; | |
| 2401 | - | |
| 2402 | - // 优先使用 viewRow 中的有效值,否则使用有效的默认值,否则为空 | |
| 2403 | - acc[valueKey] = isViewRowValueValid ? viewRowValue : (isDefaultValueValid ? defaultValue : ''); | |
| 2404 | - return acc; | |
| 2405 | - }, {}) : {}; | |
| 2406 | - | |
| 2407 | - // 将上报参数数据合并到 viewRow,确保数据同步到主表 | |
| 2408 | - Object.keys(reportViewRow).forEach(key => { | |
| 2409 | - // 如果 viewRow 中已有值,检查是否是无效值(new_type),如果是则替换 | |
| 2410 | - const existingValue = viewRow[key]; | |
| 2411 | - if (existingValue === 'new_type' || existingValue === 'newType') { | |
| 2412 | - viewRow[key] = reportViewRow[key]; | |
| 2413 | - } else if (viewRow[key] === undefined) { | |
| 2414 | - viewRow[key] = reportViewRow[key]; | |
| 2415 | - } | |
| 2416 | - }); | |
| 2417 | - | |
| 2418 | - // 组装 sParams 字段 | |
| 2419 | - if (reportParam && commonUtils.isNotEmptyObject(reportParam)) { | |
| 2420 | - const sParamData = []; | |
| 2421 | - for (const key of Object.keys(reportParam)) { | |
| 2422 | - if (key.startsWith('sParam') && !key.includes('NotEmpty') && !key.includes('DropDown') && !key.includes('Default')) { | |
| 2423 | - const obj = {}; | |
| 2424 | - obj.sId = commonUtils.createSid(); | |
| 2425 | - obj.sParamKey = key; | |
| 2426 | - obj.sParamName = reportParam[key]; | |
| 2427 | - | |
| 2428 | - // 找到数字 | |
| 2429 | - const num = key.replace(/[^\d]/g, '').trim(); | |
| 2430 | - if (Number(num)) { | |
| 2431 | - const number = Number(num); | |
| 2432 | - const sParamDropDownKey = `sParamDropDown${number}`; | |
| 2433 | - obj.sDropDownData = reportParam[sParamDropDownKey]; | |
| 2434 | - | |
| 2435 | - // 从 viewRow 中获取用户输入的值 | |
| 2436 | - const sParamValueKey = `sParamValue${number}`; | |
| 2437 | - const sParamValue = viewRow[sParamValueKey]; | |
| 2438 | - | |
| 2439 | - // 如果有值且不是无效值,才添加到 sParams | |
| 2440 | - if (sParamValue !== undefined && sParamValue !== '' && sParamValue !== 'new_type' && sParamValue !== 'newType') { | |
| 2441 | - obj.sParamValue = sParamValue; | |
| 2442 | - obj.bSelfCbx = true; | |
| 2443 | - } | |
| 2444 | - } | |
| 2445 | - sParamData.push(obj); | |
| 2446 | - } | |
| 2447 | - } | |
| 2448 | - | |
| 2449 | - // 只保留用户选择了的值 | |
| 2450 | - const sParamSeletedData = sParamData.filter(item => item.bSelfCbx); | |
| 2451 | - if (commonUtils.isNotEmptyArr(sParamSeletedData)) { | |
| 2452 | - viewRow.sParams = JSON.stringify(sParamSeletedData); | |
| 2453 | - } else { | |
| 2454 | - viewRow.sParams = ''; | |
| 2455 | - } | |
| 2456 | - } | |
| 2457 | - | |
| 2458 | - const reportProps = { | |
| 2459 | - ...props, | |
| 2460 | - viewConfigs: reportViewConfigs, | |
| 2461 | - tableConfig: config, | |
| 2462 | - iColValueView: 24, | |
| 2463 | - viewRow: viewRow, // 使用合并后的 viewRow | |
| 2464 | - tableName: sName, // 使用与报工信息相同的表名,确保数据正确存储 | |
| 2465 | - enabled: props.enabled, // 继承父组件的 enabled 属性 | |
| 2466 | - enabledNew: props.enabledNew, // 继承父组件的 enabledNew 属性 | |
| 2467 | - onDataChange: props.onDataChange // 确保 onChange 事件能够正确触发 | |
| 2468 | - }; | |
| 2469 | 2341 | return ( |
| 2470 | 2342 | <> |
| 2471 | 2343 | {sName === "master" ? ( |
| ... | ... | @@ -2489,10 +2361,7 @@ const CommonViewTableComponent = props => { |
| 2489 | 2361 | viewProps.enabledNew = false; |
| 2490 | 2362 | } |
| 2491 | 2363 | |
| 2492 | - // 传递上报参数给主视图 | |
| 2493 | - if(reportParam){ | |
| 2494 | - viewProps.reportParam = reportParam; | |
| 2495 | - } | |
| 2364 | + | |
| 2496 | 2365 | |
| 2497 | 2366 | return ( |
| 2498 | 2367 | <> |
| ... | ... | @@ -2502,44 +2371,8 @@ const CommonViewTableComponent = props => { |
| 2502 | 2371 | ); |
| 2503 | 2372 | })} |
| 2504 | 2373 | |
| 2505 | - {/* 上报参数区域 - 只显示一次,放在循环外面 */} | |
| 2506 | - {reportParam && reportViewConfigs.length > 0 && ( | |
| 2507 | - <div style={{ marginTop: '10px', border: '1px solid #d9d9d9', borderRadius: '4px', fontSize: '14px' }}> | |
| 2508 | - {/* 上报参数标题栏 */} | |
| 2509 | - <div | |
| 2510 | - style={{ | |
| 2511 | - display: 'flex', | |
| 2512 | - alignItems: 'center', | |
| 2513 | - height: '36px', | |
| 2514 | - fontSize: '16px', | |
| 2515 | - cursor: 'pointer', | |
| 2516 | - borderBottom: '1px solid #d9d9d9', | |
| 2517 | - paddingLeft: '12px', | |
| 2518 | - fontWeight: 'bold', | |
| 2519 | - color: '#1890ff' | |
| 2520 | - }} | |
| 2521 | - onClick={() => setReportExpand(!reportExpand)} | |
| 2522 | - > | |
| 2523 | - <span style={{ | |
| 2524 | - width: '0', | |
| 2525 | - height: '0', | |
| 2526 | - borderLeft: '6px solid transparent', | |
| 2527 | - borderRight: '6px solid transparent', | |
| 2528 | - borderTop: reportExpand ? '6px solid #1890ff' : 'none', | |
| 2529 | - borderBottom: reportExpand ? 'none' : '6px solid #1890ff', | |
| 2530 | - marginRight: '8px' | |
| 2531 | - }} /> | |
| 2532 | - 上报参数 | |
| 2533 | - </div> | |
| 2534 | - | |
| 2535 | - {/* 上报参数内容 */} | |
| 2536 | - {reportExpand && ( | |
| 2537 | - <div style={{ padding: '10px', fontSize: '14px' }}> | |
| 2538 | - <CommonViewTable {...reportProps} /> | |
| 2539 | - </div> | |
| 2540 | - )} | |
| 2541 | - </div> | |
| 2542 | - )} | |
| 2374 | + {/* 上报参数区域 */} | |
| 2375 | + <ReportParamComponent {...props} viewRow={viewRow} masterData={masterData} config={config} sName={sName} onDataChange={props.onDataChange} /> | |
| 2543 | 2376 | {sName !== "master" ? ( |
| 2544 | 2377 | <CommonOperationBarComponent {...operationBarProps} /> |
| 2545 | 2378 | ) : ( |
| ... | ... | @@ -3347,6 +3180,161 @@ const CommonViewChooseComponent = props => { |
| 3347 | 3180 | ); |
| 3348 | 3181 | }; |
| 3349 | 3182 | |
| 3183 | +// 上报参数组件 | |
| 3184 | +const ReportParamComponent = props => { | |
| 3185 | + const { viewRow, masterData, config, sName, onDataChange } = props; | |
| 3186 | + | |
| 3187 | + const [reportExpand, setReportExpand] = useState(true); | |
| 3188 | + | |
| 3189 | + if (!viewRow || !viewRow.sReportParam) { | |
| 3190 | + return ''; | |
| 3191 | + } | |
| 3192 | + | |
| 3193 | + const reportParam = JSON.parse(viewRow.sReportParam); | |
| 3194 | + | |
| 3195 | + if (!reportParam || !commonUtils.isNotEmptyObject(reportParam)) { | |
| 3196 | + return ''; | |
| 3197 | + } | |
| 3198 | + | |
| 3199 | + const reportViewConfigs = Object.keys(reportParam).filter(key => key.startsWith('sParam') && !key.includes('Default') && !key.includes('NotEmpty') && !key.includes('DropDown')).map(key => { | |
| 3200 | + const paramNum = key.replace('sParam', ''); | |
| 3201 | + const dropDownKey = `sParamDropDown${paramNum}`; | |
| 3202 | + const hasDropDown = reportParam[dropDownKey] && Object.keys(reportParam[dropDownKey]).length > 0; | |
| 3203 | + const dropDownArray = hasDropDown ? Object.keys(reportParam[dropDownKey]).map(dKey => ({ | |
| 3204 | + sId: dKey, | |
| 3205 | + sName: reportParam[dropDownKey][dKey] | |
| 3206 | + })) : []; | |
| 3207 | + | |
| 3208 | + const valueKey = `sParamValue${paramNum}`; | |
| 3209 | + | |
| 3210 | + return { | |
| 3211 | + sId: valueKey, | |
| 3212 | + sName: valueKey, | |
| 3213 | + showName: reportParam[key] || key, | |
| 3214 | + sControlName: `reportParam_${valueKey}`, | |
| 3215 | + iColValue: 12, | |
| 3216 | + iOrder: parseInt(paramNum) || 0, | |
| 3217 | + bVisible: true, | |
| 3218 | + bReadonly: false, | |
| 3219 | + enabled: true, | |
| 3220 | + sDefault: '', | |
| 3221 | + sDropDownType: hasDropDown ? 'const' : '', | |
| 3222 | + showDropDown: hasDropDown ? dropDownArray : [], | |
| 3223 | + dropDownData: hasDropDown ? dropDownArray : [], | |
| 3224 | + iTag: 3, | |
| 3225 | + specialControl: false | |
| 3226 | + }; | |
| 3227 | + }); | |
| 3228 | + | |
| 3229 | + if (reportViewConfigs.length === 0) { | |
| 3230 | + return ''; | |
| 3231 | + } | |
| 3232 | + | |
| 3233 | + const reportViewRow = Object.keys(reportParam).filter(key => key.startsWith('sParam') && !key.includes('Default') && !key.includes('NotEmpty') && !key.includes('DropDown')).reduce((acc, key) => { | |
| 3234 | + const paramNum = key.replace('sParam', ''); | |
| 3235 | + const valueKey = `sParamValue${paramNum}`; | |
| 3236 | + const viewRowValue = viewRow[valueKey]; | |
| 3237 | + const isViewRowValueValid = viewRowValue !== undefined && viewRowValue !== '' && viewRowValue !== 'new_type' && viewRowValue !== 'newType'; | |
| 3238 | + const defaultValue = reportParam[`${key}Default`]; | |
| 3239 | + const isDefaultValueValid = defaultValue !== undefined && defaultValue !== '' && defaultValue !== 'new_type' && defaultValue !== 'newType'; | |
| 3240 | + acc[valueKey] = isViewRowValueValid ? viewRowValue : (isDefaultValueValid ? defaultValue : ''); | |
| 3241 | + return acc; | |
| 3242 | + }, {}); | |
| 3243 | + | |
| 3244 | + Object.keys(reportViewRow).forEach(key => { | |
| 3245 | + const existingValue = viewRow[key]; | |
| 3246 | + if (existingValue === 'new_type' || existingValue === 'newType') { | |
| 3247 | + viewRow[key] = reportViewRow[key]; | |
| 3248 | + } else if (viewRow[key] === undefined) { | |
| 3249 | + viewRow[key] = reportViewRow[key]; | |
| 3250 | + } | |
| 3251 | + }); | |
| 3252 | + | |
| 3253 | + const sParamData = []; | |
| 3254 | + for (const key of Object.keys(reportParam)) { | |
| 3255 | + if (key.includes('sParam') && !key.includes('NotEmpty') && !key.includes('DropDown') && !key.includes('Default')) { | |
| 3256 | + const obj = {}; | |
| 3257 | + obj.sId = commonUtils.createSid(); | |
| 3258 | + obj.sParamKey = key; | |
| 3259 | + obj.sParamName = reportParam[key]; | |
| 3260 | + const num = key.replace(/[^\d]/g, '').trim(); | |
| 3261 | + if (Number(num)) { | |
| 3262 | + const number = Number(num); | |
| 3263 | + const sParamDropDownKey = `sParamDropDown${number}`; | |
| 3264 | + obj.sDropDownData = reportParam[sParamDropDownKey]; | |
| 3265 | + const sParamDefaultKey = `sParamDefault${number}`; | |
| 3266 | + const defaultVal = reportParam[sParamDefaultKey]; | |
| 3267 | + if (defaultVal !== undefined && defaultVal !== '' && defaultVal !== 'new_type' && defaultVal !== 'newType') { | |
| 3268 | + obj.sParamValue = defaultVal; | |
| 3269 | + } else { | |
| 3270 | + obj.sParamValue = ''; | |
| 3271 | + } | |
| 3272 | + const sParamValueKey = `sParamValue${number}`; | |
| 3273 | + const sParamValue = viewRow[sParamValueKey]; | |
| 3274 | + if (commonUtils.isNotEmptyObject(sParamValue) && sParamValue !== '0') { | |
| 3275 | + obj.sParamValue = sParamValue; | |
| 3276 | + obj.bSelfCbx = true; | |
| 3277 | + } | |
| 3278 | + } | |
| 3279 | + sParamData.push(obj); | |
| 3280 | + } | |
| 3281 | + } | |
| 3282 | + | |
| 3283 | + const sParamSeletedData = sParamData.filter(item => item.bSelfCbx); | |
| 3284 | + if (commonUtils.isNotEmptyArr(sParamSeletedData)) { | |
| 3285 | + viewRow.sParams = JSON.stringify(sParamSeletedData); | |
| 3286 | + } else { | |
| 3287 | + viewRow.sParams = ''; | |
| 3288 | + } | |
| 3289 | + | |
| 3290 | + const reportProps = { | |
| 3291 | + ...props, | |
| 3292 | + viewConfigs: reportViewConfigs, | |
| 3293 | + tableConfig: config, | |
| 3294 | + iColValueView: 24, | |
| 3295 | + viewRow: viewRow, | |
| 3296 | + tableName: sName, | |
| 3297 | + enabled: props.enabled, | |
| 3298 | + enabledNew: props.enabledNew, | |
| 3299 | + onDataChange: onDataChange | |
| 3300 | + }; | |
| 3301 | + | |
| 3302 | + return ( | |
| 3303 | + <div style={{ marginTop: '10px', border: '1px solid #d9d9d9', borderRadius: '4px', fontSize: '14px' }}> | |
| 3304 | + <div | |
| 3305 | + style={{ | |
| 3306 | + display: 'flex', | |
| 3307 | + alignItems: 'center', | |
| 3308 | + height: '36px', | |
| 3309 | + fontSize: '16px', | |
| 3310 | + cursor: 'pointer', | |
| 3311 | + borderBottom: '1px solid #d9d9d9', | |
| 3312 | + paddingLeft: '12px', | |
| 3313 | + fontWeight: 'bold', | |
| 3314 | + color: '#1890ff' | |
| 3315 | + }} | |
| 3316 | + onClick={() => setReportExpand(!reportExpand)} | |
| 3317 | + > | |
| 3318 | + <span style={{ | |
| 3319 | + width: '0', | |
| 3320 | + height: '0', | |
| 3321 | + borderLeft: '6px solid transparent', | |
| 3322 | + borderRight: '6px solid transparent', | |
| 3323 | + borderTop: reportExpand ? '6px solid #1890ff' : 'none', | |
| 3324 | + borderBottom: reportExpand ? 'none' : '6px solid #1890ff', | |
| 3325 | + marginRight: '8px' | |
| 3326 | + }} /> | |
| 3327 | + 上报参数 | |
| 3328 | + </div> | |
| 3329 | + {reportExpand && ( | |
| 3330 | + <div style={{ padding: '10px', fontSize: '14px' }}> | |
| 3331 | + <CommonViewTable {...reportProps} /> | |
| 3332 | + </div> | |
| 3333 | + )} | |
| 3334 | + </div> | |
| 3335 | + ); | |
| 3336 | +}; | |
| 3337 | + | |
| 3350 | 3338 | // (定制功能)工单参数详情弹窗 |
| 3351 | 3339 | const CommonParamsModalComponent = props => { |
| 3352 | 3340 | const modalName = "sWorkParamsModalVisible"; // commonParamVisible | ... | ... |