Commit c47d5520f0ba97815dbce9e6b799ee4c112607ed

Authored by chenxt
1 parent 4bfa519a

手工机台人脸登录

src/components/Common/CommonInstructSet.js
@@ -865,18 +865,17 @@ const handleSave = (props, instruct) => { @@ -865,18 +865,17 @@ const handleSave = (props, instruct) => {
865 const data = []; 865 const data = [];
866 Object.keys(allSlaveData).forEach(key => { 866 Object.keys(allSlaveData).forEach(key => {
867 const config = props[`${key}Config`]; 867 const config = props[`${key}Config`];
868 - const saveTmpData = key === "master" ? [masterData] : props[`${key}Data`];  
869 - const delTmpData = key === "master" ? null : props[`${key}DelData`]; 868 + const saveTmpData = key === "master" ? (Array.isArray(masterData) ? masterData: [masterData]) : props[`${key}Data`];
  869 + const delTmpData = key === "master" ? null : props[`${key}DelData`] || null;
870 data.push( 870 data.push(
871 commonBusiness.mergeData(key, config.sTbName, saveTmpData, delTmpData) 871 commonBusiness.mergeData(key, config.sTbName, saveTmpData, delTmpData)
872 ); 872 );
873 }); 873 });
874 -  
875 - if (masterData.sId) { 874 + if (Array.isArray(masterData) || masterData.sId) {
876 utils.saveData(props, { 875 utils.saveData(props, {
877 data, 876 data,
878 sClientType: "1", 877 sClientType: "1",
879 - sSysLogSrcId: masterData.sId 878 + sSysLogSrcId: Array.isArray(masterData) ? masterData[0].sId : masterData.sId
880 }); 879 });
881 } 880 }
882 881
src/components/Common/CommonTable/index.js
@@ -4378,7 +4378,7 @@ class CommonTableRc extends React.Component { @@ -4378,7 +4378,7 @@ class CommonTableRc extends React.Component {
4378 if ( 4378 if (
4379 column.dataIndex === "spicture" || 4379 column.dataIndex === "spicture" ||
4380 column.dataIndex === "tableLastEmpty" || 4380 column.dataIndex === "tableLastEmpty" ||
4381 - props?.data?.some(item => 4381 + Array.isArray(props?.data) && props?.data?.some(item =>
4382 item.costomEnabledList?.includes(column.dataIndex) 4382 item.costomEnabledList?.includes(column.dataIndex)
4383 ) 4383 )
4384 ) { 4384 ) {
src/mes/common/commonModelComponent/index.js
@@ -501,7 +501,6 @@ const useCommonModelEvent = props => { @@ -501,7 +501,6 @@ const useCommonModelEvent = props => {
501 } 501 }
502 } 502 }
503 } 503 }
504 -  
505 if (Object.keys(addState).length > 0) { 504 if (Object.keys(addState).length > 0) {
506 props.onSaveState?.({ ...addState }); 505 props.onSaveState?.({ ...addState });
507 } 506 }
@@ -1801,6 +1800,8 @@ const CommonModelComponent = props => { @@ -1801,6 +1800,8 @@ const CommonModelComponent = props => {
1801 }); 1800 });
1802 window.refreshTableList = null; 1801 window.refreshTableList = null;
1803 } 1802 }
  1803 + props.onSaveState({slaveSelectedRowKeys:[]})
  1804 +
1804 }} 1805 }}
1805 > 1806 >
1806 {configList 1807 {configList
src/mes/teamInfo/index.js
@@ -44,10 +44,10 @@ const useTeamInfoEvent = props => { @@ -44,10 +44,10 @@ const useTeamInfoEvent = props => {
44 ...result, 44 ...result,
45 bFinish: true 45 bFinish: true
46 }; 46 };
47 - props.onSaveState({ ...addState, loadings: false ,mesRefresh:false}); 47 + props.onSaveState({ ...addState, loadings: false, mesRefresh: false });
48 } 48 }
49 }, 49 },
50 - [formData,mesRefresh] 50 + [formData, mesRefresh]
51 ); 51 );
52 52
53 // 监听人员表第一条数据的实际上班人员 53 // 监听人员表第一条数据的实际上班人员
@@ -230,9 +230,8 @@ const useTeamInfoEvent = props => { @@ -230,9 +230,8 @@ const useTeamInfoEvent = props => {
230 } else if (loginType === 2) { 230 } else if (loginType === 2) {
231 // 账号密码登陆 231 // 账号密码登陆
232 let loginConfig; 232 let loginConfig;
233 - const configUrl = `${  
234 - commonConfig.server_host  
235 - }business/getModelBysId/${sModelsId}?sModelsId=${sModelsId}&sName=/commonAuto`; 233 + const configUrl = `${commonConfig.server_host
  234 + }business/getModelBysId/${sModelsId}?sModelsId=${sModelsId}&sName=/commonAuto`;
236 const configReturn = (await commonServices.getService("", configUrl)) 235 const configReturn = (await commonServices.getService("", configUrl))
237 .data; 236 .data;
238 if (configReturn.code === 1) { 237 if (configReturn.code === 1) {
@@ -277,9 +276,8 @@ const useTeamInfoEvent = props => { @@ -277,9 +276,8 @@ const useTeamInfoEvent = props => {
277 } 276 }
278 277
279 const { sBrandsId, sSubsidiaryId } = mesSysbrands; 278 const { sBrandsId, sSubsidiaryId } = mesSysbrands;
280 - const url = `${  
281 - commonConfig.server_host  
282 - }userloginUserNo/${sBrandsId}/${sSubsidiaryId}`; 279 + const url = `${commonConfig.server_host
  280 + }userloginUserNo/${sBrandsId}/${sSubsidiaryId}`;
283 const value = { 281 const value = {
284 username: loginInfo.sUserNo || loginInfo.sUserName, 282 username: loginInfo.sUserNo || loginInfo.sUserName,
285 password: loginInfo.sPassWord 283 password: loginInfo.sPassWord
@@ -299,7 +297,7 @@ const useTeamInfoEvent = props => { @@ -299,7 +297,7 @@ const useTeamInfoEvent = props => {
299 } 297 }
300 298
301 const result = dataset.rows[0]; 299 const result = dataset.rows[0];
302 - 300 +
303 resolve(result); 301 resolve(result);
304 }); 302 });
305 } 303 }
@@ -345,8 +343,8 @@ const useTeamInfoEvent = props => { @@ -345,8 +343,8 @@ const useTeamInfoEvent = props => {
345 onSuccess: () => { 343 onSuccess: () => {
346 handleRefreshDataByTableName(name, props); 344 handleRefreshDataByTableName(name, props);
347 }, 345 },
348 - onConfirm: () => {},  
349 - onError: () => {} 346 + onConfirm: () => { },
  347 + onError: () => { }
350 }); 348 });
351 349
352 // const tableDataNew = [...tableData]; 350 // const tableDataNew = [...tableData];
@@ -358,7 +356,7 @@ const useTeamInfoEvent = props => { @@ -358,7 +356,7 @@ const useTeamInfoEvent = props => {
358 const handleRefreshDataByTableName = (tableName, props) => { 356 const handleRefreshDataByTableName = (tableName, props) => {
359 const { [`${tableName}Config`]: config } = props; 357 const { [`${tableName}Config`]: config } = props;
360 handleGetData([{ ...config, specifyTableName: tableName }]); 358 handleGetData([{ ...config, specifyTableName: tableName }]);
361 - props.onSaveState({mesRefresh:true}) 359 + props.onSaveState({ mesRefresh: true })
362 }; 360 };
363 361
364 // props.setLoading(false) 362 // props.setLoading(false)
@@ -413,9 +411,11 @@ const useTeamInfoEvent = props => { @@ -413,9 +411,11 @@ const useTeamInfoEvent = props => {
413 411
414 // 班组信息 412 // 班组信息
415 const TeamInfo = baseProps => { 413 const TeamInfo = baseProps => {
  414 + const bManuals = baseProps?.app?.userinfo?.bManual
416 const [faceModal, setFaceModal] = useState(false); 415 const [faceModal, setFaceModal] = useState(false);
  416 + const { userinfo } = baseProps?.app
417 const props = useTeamInfoEvent( 417 const props = useTeamInfoEvent(
418 - useCommonBase({ ...baseProps, sModelsId: teamInfoSid }) 418 + useCommonBase({ ...baseProps, sModelsId: bManuals ? '172117190122117691507197360' : teamInfoSid })
419 ); 419 );
420 const { formData = [] } = props; 420 const { formData = [] } = props;
421 if (!formData.length) return ""; 421 if (!formData.length) return "";
@@ -437,7 +437,7 @@ const TeamInfo = baseProps => { @@ -437,7 +437,7 @@ const TeamInfo = baseProps => {
437 const tableProps = { 437 const tableProps = {
438 ...tableBaseProps, 438 ...tableBaseProps,
439 tableProps: { 439 tableProps: {
440 - onChange: () => {} 440 + onChange: () => { }
441 // AutoTableHeight: 400, 441 // AutoTableHeight: 400,
442 }, 442 },
443 fixedHeight: "calc(25vh - 80px)", 443 fixedHeight: "calc(25vh - 80px)",
@@ -486,8 +486,7 @@ const TeamInfo = baseProps => { @@ -486,8 +486,7 @@ const TeamInfo = baseProps => {
486 486
487 const { sForemanName = "", sIpqcName = "", sEmployeeName = "" } = 487 const { sForemanName = "", sIpqcName = "", sEmployeeName = "" } =
488 props.slaveData && props.slaveData.length !== 0 ? props.slaveData[0] : {}; 488 props.slaveData && props.slaveData.length !== 0 ? props.slaveData[0] : {};
489 - const { app } = props;  
490 - const { userinfo }= app; 489 +
491 const bManual = userinfo?.bManual; 490 const bManual = userinfo?.bManual;
492 491
493 const { sTeamEmployeeNo = "" } = props.slave0Data?.[0] || {}; 492 const { sTeamEmployeeNo = "" } = props.slave0Data?.[0] || {};
@@ -507,78 +506,172 @@ const TeamInfo = baseProps => { @@ -507,78 +506,172 @@ const TeamInfo = baseProps => {
507 bManual 506 bManual
508 }; 507 };
509 const tableHeight = bManual ? "calc(88vh - 80px)" : "calc(25vh - 80px)"; 508 const tableHeight = bManual ? "calc(88vh - 80px)" : "calc(25vh - 80px)";
  509 + let bManualTableProps
  510 + let bManualSlaveTableProps
  511 + if (bManual) {
  512 + const tableBaseProps = commonBusiness.getTableTypes("master", props);
  513 + const slaveTableBaseProps = commonBusiness.getTableTypes("slave", props);
  514 + bManualTableProps = {
  515 + ...tableBaseProps,
  516 + fixedHeight: "calc(50vh - 218px)"
  517 + }
  518 + bManualSlaveTableProps = {
  519 + ...slaveTableBaseProps,
  520 + fixedHeight: "calc(50vh - 126px)"
  521 +
  522 + }
  523 + }
  524 + const handleSave = (props) => {
  525 + props.onExecInstructSet({
  526 + btnConfig: {
  527 + showName: "保存",
  528 + sInstruct: JSON.stringify([
  529 + {
  530 + opr: "save",
  531 + },
  532 + {
  533 + opr: "refresh",
  534 + },
  535 + ])
  536 + },
  537 + inscallback: () => {
  538 + props.onSaveState({
  539 + currentId: props.masterData.sId, enabled: false
  540 + });
  541 + }
  542 + });
  543 + }
510 return ( 544 return (
511 <div className={styles.teamInfo}> 545 <div className={styles.teamInfo}>
512 {bManual ? ( 546 {bManual ? (
513 // bManual = true 时的布局:左右结构 547 // bManual = true 时的布局:左右结构
514 - <div className="teamInfoManual">  
515 - <div className="teamInfoLeft">  
516 - <div className="teamInfoTop">  
517 - <h2>  
518 - <img src={teaIcon} />  
519 - 班组信息  
520 - </h2>  
521 - <div className="userWorkBox">  
522 - <div className="workTop">  
523 - {props.app.userinfo.sJzPicturePath ? (  
524 - <img  
525 - src={`${commonConfig.file_host}file/download?savePathStr=${props.app.userinfo.sJzPicturePath}&sModelsId=100&token=${props.token}`}  
526 - onError={event => {  
527 - event.target.src = userImgs;  
528 - }}  
529 - />  
530 - ) : (  
531 - <img src={userImgs} />  
532 - )}  
533 - <ul>  
534 - <li>  
535 - <label>机长</label>  
536 - <span>{sEmployeeName}</span>  
537 - </li>  
538 - <li>  
539 - <label>班组</label>  
540 - <span>{props.app.userinfo?.sTeamNo}</span>  
541 - </li>  
542 - <li>  
543 - <label>班次</label>  
544 - <span>  
545 - {props.app.userinfo?.sShift == "1"  
546 - ? "白班"  
547 - : props.app.userinfo?.sShift == "2"  
548 - ? "夜班"  
549 - : ""}  
550 - </span>  
551 - </li>  
552 - </ul>  
553 - </div>  
554 - <ul>  
555 - <li>  
556 - <label>{foremanConfig.showName}</label>  
557 - <span>{sForemanName}</span>  
558 - </li>  
559 - <li>  
560 - <label>  
561 - {props.app.userinfo?.iInterface == 10  
562 - ? "OQC/姓名"  
563 - : ipqcConfig.showName}  
564 - </label>  
565 - <span>{sIpqcName}</span>  
566 - </li>  
567 - </ul>  
568 - </div>  
569 - </div>  
570 - <div className="teamInfoLeftdiv">  
571 - <TeamJoinInfo {...props} />  
572 - </div>  
573 - </div> 548 + <div className="teamInfoManual" >
574 <div className="teamInfoRight"> 549 <div className="teamInfoRight">
575 <div className="postList"> 550 <div className="postList">
576 <Spin spinning={props.loadings} delay={500}> 551 <Spin spinning={props.loadings} delay={500}>
577 - <StaticEditTable {...tableProps } fixedHeight={tableHeight} /> 552 + <StaticEditTable {...tableProps} fixedHeight={tableHeight} />
578 <CommonOperationBarComponent {...operationBarProps} /> 553 <CommonOperationBarComponent {...operationBarProps} />
579 </Spin> 554 </Spin>
580 </div> 555 </div>
581 </div> 556 </div>
  557 + {
  558 + bManuals ?
  559 + <div className="teamInfoLefts">
  560 + <Spin spinning={props.loadings} delay={500}>
  561 + <div className="teamInfoTops" >
  562 + <div className={styles.boxFlex}><h2>
  563 + <img src={teaIcon} />
  564 + {bManualTableProps?.config?.showName}
  565 + </h2>
  566 +
  567 + </div>
  568 + <StaticEditTable {...bManualTableProps} />
  569 + <div style={{ marginBottom: '28px' }}></div>
  570 + <Button
  571 + type="primary"
  572 + style={{ position: 'absolute', right: '10px', bottom: ' 4px', }}
  573 + onClick={() => {
  574 + handleSave(props)
  575 + }}
  576 +
  577 + >
  578 + {'保存'}
  579 + </Button>
  580 + </div>
  581 + </Spin>
  582 + <Spin spinning={props.loadings} delay={500}>
  583 + <div className="teamInfoTops" >
  584 + <div className={styles.boxFlex}><h2>
  585 + <img src={teaIcon} />
  586 + {bManualSlaveTableProps?.config?.showName}
  587 + </h2>
  588 + <Button
  589 + type="primary"
  590 + onClick={() => {
  591 + console.log(1111111);
  592 + setFaceModal(true);
  593 + }}
  594 +
  595 + >
  596 + {'扫脸添加'}
  597 + </Button>
  598 + </div>
  599 + <StaticEditTable {...bManualSlaveTableProps} />
  600 + <div style={{ marginBottom: '28px' }}></div>
  601 + <Button
  602 + type="primary"
  603 + style={{ position: 'absolute', right: '10px', bottom: ' 4px', }}
  604 + onClick={() => {
  605 + handleSave(props)
  606 + }}
  607 +
  608 + >
  609 + {'保存'}
  610 + </Button>
  611 + </div>
  612 + </Spin>
  613 + </div>
  614 + : <div className="teamInfoLeft">
  615 + <div className="teamInfoTop">
  616 + <h2>
  617 + <img src={teaIcon} />
  618 + 班组信息
  619 + </h2>
  620 + <div className="userWorkBox">
  621 + <div className="workTop">
  622 + {props.app.userinfo.sJzPicturePath ? (
  623 + <img
  624 + src={`${commonConfig.file_host}file/download?savePathStr=${props.app.userinfo.sJzPicturePath}&sModelsId=100&token=${props.token}`}
  625 + onError={event => {
  626 + event.target.src = userImgs;
  627 + }}
  628 + />
  629 + ) : (
  630 + <img src={userImgs} />
  631 + )}
  632 + <ul>
  633 + <li>
  634 + <label>机长</label>
  635 + <span>{sEmployeeName}</span>
  636 + </li>
  637 + <li>
  638 + <label>班组</label>
  639 + <span>{props.app.userinfo?.sTeamNo}</span>
  640 + </li>
  641 + <li>
  642 + <label>班次</label>
  643 + <span>
  644 + {props.app.userinfo?.sShift == "1"
  645 + ? "白班"
  646 + : props.app.userinfo?.sShift == "2"
  647 + ? "夜班"
  648 + : ""}
  649 + </span>
  650 + </li>
  651 + </ul>
  652 + </div>
  653 + <ul>
  654 + <li>
  655 + <label>{foremanConfig.showName}</label>
  656 + <span>{sForemanName}</span>
  657 + </li>
  658 + <li>
  659 + <label>
  660 + {props.app.userinfo?.iInterface == 10
  661 + ? "OQC/姓名"
  662 + : ipqcConfig.showName}
  663 + </label>
  664 + <span>{sIpqcName}</span>
  665 + </li>
  666 + </ul>
  667 + </div>
  668 + </div>
  669 + <div className="teamInfoLeftdiv">
  670 + <TeamJoinInfo {...props} />
  671 + </div>
  672 + </div>
  673 + }
  674 +
582 </div> 675 </div>
583 ) : ( 676 ) : (
584 // bManual = false 时的布局:维持原样 677 // bManual = false 时的布局:维持原样
@@ -662,11 +755,19 @@ const FaceLoginModal = props =&gt; { @@ -662,11 +755,19 @@ const FaceLoginModal = props =&gt; {
662 755
663 // 人脸登录成功回调 756 // 人脸登录成功回调
664 const handleIdentifySuccess = e => { 757 const handleIdentifySuccess = e => {
665 - // const { sBrandsId: sParentId, sSubsidiaryId: sId, sEmployeeNo } = e.dataset.rows[0];  
666 - // // ZY0232  
667 - // const value = {  
668 - // sParentId, sId, sEmployeeNo  
669 - // }; 758 + const { sBrandsId: sParentId, sSubsidiaryId: sId, sEmployeeNo } = e.dataset.rows[0];
  759 + // ZY0232
  760 + const value = {
  761 + sParentId, sId, sEmployeeNo
  762 + };
  763 + const { slaveData = [] } = props
  764 + const faceData = {... e.dataset.rows[0],handleType:'add'}
  765 + const list = [
  766 + ...slaveData,
  767 + faceData
  768 + ]
  769 + props.onSaveState({ slaveData: list });
  770 + setFaceModal(false)
670 // handleSubmit(value); 771 // handleSubmit(value);
671 }; 772 };
672 773
@@ -695,9 +796,9 @@ const FaceLoginModal = props =&gt; { @@ -695,9 +796,9 @@ const FaceLoginModal = props =&gt; {
695 }; 796 };
696 797
697 const TeamJoinInfo = props => { 798 const TeamJoinInfo = props => {
698 - const { slave1Config, slave1Data} = props; 799 + const { slave1Config, slave1Data } = props;
699 const { app } = props; 800 const { app } = props;
700 - const { userinfo }= app; 801 + const { userinfo } = app;
701 const bManual = userinfo?.bManual; 802 const bManual = userinfo?.bManual;
702 803
703 const joinInfoData = commonUtils.filteredArr( 804 const joinInfoData = commonUtils.filteredArr(
@@ -722,7 +823,7 @@ const TeamJoinInfo = props =&gt; { @@ -722,7 +823,7 @@ const TeamJoinInfo = props =&gt; {
722 const result = { 823 const result = {
723 ...commonBusiness.getTableTypes(tableName, props), 824 ...commonBusiness.getTableTypes(tableName, props),
724 tableProps: { 825 tableProps: {
725 - onChange: () => {} 826 + onChange: () => { }
726 }, 827 },
727 onTableBtnClick: props.onTableBtnClick, 828 onTableBtnClick: props.onTableBtnClick,
728 fixedHeight: tableName === "slave4" ? "230px" : "160px" 829 fixedHeight: tableName === "slave4" ? "230px" : "160px"
@@ -746,7 +847,7 @@ const TeamJoinInfo = props =&gt; { @@ -746,7 +847,7 @@ const TeamJoinInfo = props =&gt; {
746 }); 847 });
747 props.onChangeRouter({ type: "name", path: ["计划任务", "机台任务"] }); 848 props.onChangeRouter({ type: "name", path: ["计划任务", "机台任务"] });
748 }; 849 };
749 - const workHandoverInformation= commonFunc.showLocalMessage(props, 'workHandoverInformation', '上班交接信息'); 850 + const workHandoverInformation = commonFunc.showLocalMessage(props, 'workHandoverInformation', '上班交接信息');
750 return ( 851 return (
751 <div className="joinInfo"> 852 <div className="joinInfo">
752 <Row className="teamTitle"> 853 <Row className="teamTitle">
src/mes/teamInfo/index.less
@@ -30,7 +30,11 @@ @@ -30,7 +30,11 @@
30 padding-bottom: 25px; 30 padding-bottom: 25px;
31 } 31 }
32 32
33 - 33 +.boxFlex{
  34 + display: flex;
  35 + align-items: center;
  36 + justify-content: space-between;
  37 +}
34 .teamInfo { 38 .teamInfo {
35 .size(); 39 .size();
36 40
@@ -46,7 +50,88 @@ @@ -46,7 +50,88 @@
46 display: flex; 50 display: flex;
47 flex-direction: column; 51 flex-direction: column;
48 gap: 10px; 52 gap: 10px;
  53 + .teamInfoTops {
  54 + background-color: #fff;
  55 + padding: 10px;
  56 + border-radius: 5px;
  57 + box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.05);
  58 + height: 50%;
  59 + h2 {
  60 + font-weight: 600;
  61 + font-size: 18px;
  62 + color: #1890ff;
  63 + .flex(center);
  64 + gap: 8px;
  65 +
  66 + img {
  67 + width: 24px;
  68 + }
  69 + }
  70 +
  71 + .userWorkBox {
  72 + height: calc(100% - 37px);
  73 + display: flex;
  74 + gap: 10px;
  75 + flex-direction: column;
  76 + text-wrap: nowrap;
  77 +
  78 + .workTop {
  79 + display: flex;
  80 + background: #f2f2f2;
  81 + gap: 20px;
  82 + height: 70%;
  83 +
  84 + ul {
  85 + width: calc(65% - 10px);
  86 + display: flex;
  87 + flex-direction: column;
  88 + justify-content: space-evenly;
  89 + font-size: 1.3em;
  90 + padding: 15px 0;
  91 + list-style: none;
  92 + }
  93 + }
  94 +
  95 + img {
  96 + width: 35%;
  97 + background: #cccccc;
  98 + }
  99 +
  100 + & > ul {
  101 + height: 30%;
  102 + background: #f2f2f2;
  103 + padding: 10px 20px;
  104 + font-size: 1.3em;
  105 +
  106 + display: flex;
  107 + flex-direction: column;
  108 + justify-content: center;
  109 + align-items: flex-start;
49 110
  111 + li {
  112 + width: 100%;
  113 + display: flex;
  114 + align-items: center;
  115 + }
  116 +
  117 + label {
  118 + width: 115px;
  119 + display: block;
  120 + text-align: end;
  121 + }
  122 + }
  123 +
  124 + label {
  125 + font-weight: 600;
  126 +
  127 + &::after {
  128 + content: ":";
  129 + margin: 0 4px;
  130 + margin-right: 6px;
  131 + }
  132 + }
  133 + }
  134 + }
50 .teamInfoTop { 135 .teamInfoTop {
51 background-color: #fff; 136 background-color: #fff;
52 padding: 10px; 137 padding: 10px;
@@ -177,7 +262,229 @@ @@ -177,7 +262,229 @@
177 } 262 }
178 } 263 }
179 } 264 }
  265 + .teamInfoLefts {
  266 + display: flex;
  267 + flex-direction: column;
  268 + gap: 10px;
  269 + width: 40%;
  270 + .teamInfoTops {
  271 + background-color: #fff;
  272 + padding: 10px;
  273 + border-radius: 5px;
  274 + box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.05);
  275 + height: 50%;
  276 + position: relative;
  277 + .loginSubmit {
  278 + position: absolute;
  279 + right: 10px;
  280 + bottom: 0;
  281 + }
  282 + h2 {
  283 + font-weight: 600;
  284 + font-size: 18px;
  285 + color: #1890ff;
  286 + .flex(center);
  287 + gap: 8px;
  288 +
  289 + img {
  290 + width: 24px;
  291 + }
  292 + }
  293 +
  294 + .userWorkBox {
  295 + height: calc(100% - 37px);
  296 + display: flex;
  297 + gap: 10px;
  298 + flex-direction: column;
  299 + text-wrap: nowrap;
  300 +
  301 + .workTop {
  302 + display: flex;
  303 + background: #f2f2f2;
  304 + gap: 20px;
  305 + height: 70%;
  306 +
  307 + ul {
  308 + width: calc(65% - 10px);
  309 + display: flex;
  310 + flex-direction: column;
  311 + justify-content: space-evenly;
  312 + font-size: 1.3em;
  313 + padding: 15px 0;
  314 + list-style: none;
  315 + }
  316 + }
  317 +
  318 + img {
  319 + width: 35%;
  320 + background: #cccccc;
  321 + }
  322 +
  323 + & > ul {
  324 + height: 30%;
  325 + background: #f2f2f2;
  326 + padding: 10px 20px;
  327 + font-size: 1.3em;
  328 +
  329 + display: flex;
  330 + flex-direction: column;
  331 + justify-content: center;
  332 + align-items: flex-start;
  333 +
  334 + li {
  335 + width: 100%;
  336 + display: flex;
  337 + align-items: center;
  338 + }
  339 +
  340 + label {
  341 + width: 115px;
  342 + display: block;
  343 + text-align: end;
  344 + }
  345 + }
  346 +
  347 + label {
  348 + font-weight: 600;
  349 +
  350 + &::after {
  351 + content: ":";
  352 + margin: 0 4px;
  353 + margin-right: 6px;
  354 + }
  355 + }
  356 + }
  357 + }
  358 + .teamInfoTop {
  359 + background-color: #fff;
  360 + padding: 10px;
  361 + border-radius: 5px;
  362 + box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.05);
  363 + height: 30%;
  364 +
  365 + h2 {
  366 + font-weight: 600;
  367 + font-size: 18px;
  368 + color: #1890ff;
  369 + .flex(center);
  370 + gap: 8px;
  371 +
  372 + img {
  373 + width: 24px;
  374 + }
  375 + }
  376 +
  377 + .userWorkBox {
  378 + height: calc(100% - 37px);
  379 + display: flex;
  380 + gap: 10px;
  381 + flex-direction: column;
  382 + text-wrap: nowrap;
180 383
  384 + .workTop {
  385 + display: flex;
  386 + background: #f2f2f2;
  387 + gap: 20px;
  388 + height: 70%;
  389 +
  390 + ul {
  391 + width: calc(65% - 10px);
  392 + display: flex;
  393 + flex-direction: column;
  394 + justify-content: space-evenly;
  395 + font-size: 1.3em;
  396 + padding: 15px 0;
  397 + list-style: none;
  398 + }
  399 + }
  400 +
  401 + img {
  402 + width: 35%;
  403 + background: #cccccc;
  404 + }
  405 +
  406 + & > ul {
  407 + height: 30%;
  408 + background: #f2f2f2;
  409 + padding: 10px 20px;
  410 + font-size: 1.3em;
  411 +
  412 + display: flex;
  413 + flex-direction: column;
  414 + justify-content: center;
  415 + align-items: flex-start;
  416 +
  417 + li {
  418 + width: 100%;
  419 + display: flex;
  420 + align-items: center;
  421 + }
  422 +
  423 + label {
  424 + width: 115px;
  425 + display: block;
  426 + text-align: end;
  427 + }
  428 + }
  429 +
  430 + label {
  431 + font-weight: 600;
  432 +
  433 + &::after {
  434 + content: ":";
  435 + margin: 0 4px;
  436 + margin-right: 6px;
  437 + }
  438 + }
  439 + }
  440 + }
  441 +
  442 +
  443 + .teamInfoLeftdiv {
  444 + flex: 1;
  445 + background-color: #fff;
  446 + border-radius: 5px;
  447 + box-shadow: 0px 2px 2px 0px rgba(0, 0, 0, 0.05);
  448 + overflow: hidden;
  449 +
  450 + .joinInfo{
  451 + height: 90%;
  452 + }
  453 +
  454 + // 添加infoBox样式
  455 + .infoBox {
  456 + padding: 10px;
  457 + height: calc(100% / 3); // 三个infoBox均等高度
  458 + background-color: #fff;
  459 + border-bottom: 1px solid #f0f0f0;
  460 +
  461 + &:last-child {
  462 + border-bottom: none;
  463 + }
  464 +
  465 + h2 {
  466 + font-weight: 600;
  467 + font-size: 16px;
  468 + color: #333;
  469 + margin-bottom: 8px;
  470 + .flex(center);
  471 + gap: 8px;
  472 +
  473 + img {
  474 + width: 18px;
  475 + }
  476 + }
  477 +
  478 + .infoBorBox {
  479 + height: calc(100% - 32px);
  480 + background-color: #f2f2f2;
  481 + padding: 8px;
  482 + border-radius: 4px;
  483 + overflow: auto;
  484 + }
  485 + }
  486 + }
  487 + }
181 488
182 .teamInfoRight { 489 .teamInfoRight {
183 width: 60%; 490 width: 60%;
@@ -406,4 +713,5 @@ @@ -406,4 +713,5 @@
406 } 713 }
407 } 714 }
408 } 715 }
  716 +
409 } 717 }