Commit c47d5520f0ba97815dbce9e6b799ee4c112607ed

Authored by chenxt
1 parent 4bfa519a

手工机台人脸登录

src/components/Common/CommonInstructSet.js
... ... @@ -865,18 +865,17 @@ const handleSave = (props, instruct) => {
865 865 const data = [];
866 866 Object.keys(allSlaveData).forEach(key => {
867 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 870 data.push(
871 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 875 utils.saveData(props, {
877 876 data,
878 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 4378 if (
4379 4379 column.dataIndex === "spicture" ||
4380 4380 column.dataIndex === "tableLastEmpty" ||
4381   - props?.data?.some(item =>
  4381 + Array.isArray(props?.data) && props?.data?.some(item =>
4382 4382 item.costomEnabledList?.includes(column.dataIndex)
4383 4383 )
4384 4384 ) {
... ...
src/mes/common/commonModelComponent/index.js
... ... @@ -501,7 +501,6 @@ const useCommonModelEvent = props => {
501 501 }
502 502 }
503 503 }
504   -
505 504 if (Object.keys(addState).length > 0) {
506 505 props.onSaveState?.({ ...addState });
507 506 }
... ... @@ -1801,6 +1800,8 @@ const CommonModelComponent = props => {
1801 1800 });
1802 1801 window.refreshTableList = null;
1803 1802 }
  1803 + props.onSaveState({slaveSelectedRowKeys:[]})
  1804 +
1804 1805 }}
1805 1806 >
1806 1807 {configList
... ...
src/mes/teamInfo/index.js
... ... @@ -44,10 +44,10 @@ const useTeamInfoEvent = props => {
44 44 ...result,
45 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 230 } else if (loginType === 2) {
231 231 // 账号密码登陆
232 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 235 const configReturn = (await commonServices.getService("", configUrl))
237 236 .data;
238 237 if (configReturn.code === 1) {
... ... @@ -277,9 +276,8 @@ const useTeamInfoEvent = props => {
277 276 }
278 277  
279 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 281 const value = {
284 282 username: loginInfo.sUserNo || loginInfo.sUserName,
285 283 password: loginInfo.sPassWord
... ... @@ -299,7 +297,7 @@ const useTeamInfoEvent = props => {
299 297 }
300 298  
301 299 const result = dataset.rows[0];
302   -
  300 +
303 301 resolve(result);
304 302 });
305 303 }
... ... @@ -345,8 +343,8 @@ const useTeamInfoEvent = props => {
345 343 onSuccess: () => {
346 344 handleRefreshDataByTableName(name, props);
347 345 },
348   - onConfirm: () => {},
349   - onError: () => {}
  346 + onConfirm: () => { },
  347 + onError: () => { }
350 348 });
351 349  
352 350 // const tableDataNew = [...tableData];
... ... @@ -358,7 +356,7 @@ const useTeamInfoEvent = props => {
358 356 const handleRefreshDataByTableName = (tableName, props) => {
359 357 const { [`${tableName}Config`]: config } = props;
360 358 handleGetData([{ ...config, specifyTableName: tableName }]);
361   - props.onSaveState({mesRefresh:true})
  359 + props.onSaveState({ mesRefresh: true })
362 360 };
363 361  
364 362 // props.setLoading(false)
... ... @@ -413,9 +411,11 @@ const useTeamInfoEvent = props => {
413 411  
414 412 // 班组信息
415 413 const TeamInfo = baseProps => {
  414 + const bManuals = baseProps?.app?.userinfo?.bManual
416 415 const [faceModal, setFaceModal] = useState(false);
  416 + const { userinfo } = baseProps?.app
417 417 const props = useTeamInfoEvent(
418   - useCommonBase({ ...baseProps, sModelsId: teamInfoSid })
  418 + useCommonBase({ ...baseProps, sModelsId: bManuals ? '172117190122117691507197360' : teamInfoSid })
419 419 );
420 420 const { formData = [] } = props;
421 421 if (!formData.length) return "";
... ... @@ -437,7 +437,7 @@ const TeamInfo = baseProps => {
437 437 const tableProps = {
438 438 ...tableBaseProps,
439 439 tableProps: {
440   - onChange: () => {}
  440 + onChange: () => { }
441 441 // AutoTableHeight: 400,
442 442 },
443 443 fixedHeight: "calc(25vh - 80px)",
... ... @@ -486,8 +486,7 @@ const TeamInfo = baseProps => {
486 486  
487 487 const { sForemanName = "", sIpqcName = "", sEmployeeName = "" } =
488 488 props.slaveData && props.slaveData.length !== 0 ? props.slaveData[0] : {};
489   - const { app } = props;
490   - const { userinfo }= app;
  489 +
491 490 const bManual = userinfo?.bManual;
492 491  
493 492 const { sTeamEmployeeNo = "" } = props.slave0Data?.[0] || {};
... ... @@ -507,78 +506,172 @@ const TeamInfo = baseProps => {
507 506 bManual
508 507 };
509 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 544 return (
511 545 <div className={styles.teamInfo}>
512 546 {bManual ? (
513 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 549 <div className="teamInfoRight">
575 550 <div className="postList">
576 551 <Spin spinning={props.loadings} delay={500}>
577   - <StaticEditTable {...tableProps } fixedHeight={tableHeight} />
  552 + <StaticEditTable {...tableProps} fixedHeight={tableHeight} />
578 553 <CommonOperationBarComponent {...operationBarProps} />
579 554 </Spin>
580 555 </div>
581 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 675 </div>
583 676 ) : (
584 677 // bManual = false 时的布局:维持原样
... ... @@ -662,11 +755,19 @@ const FaceLoginModal = props =&gt; {
662 755  
663 756 // 人脸登录成功回调
664 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 771 // handleSubmit(value);
671 772 };
672 773  
... ... @@ -695,9 +796,9 @@ const FaceLoginModal = props =&gt; {
695 796 };
696 797  
697 798 const TeamJoinInfo = props => {
698   - const { slave1Config, slave1Data} = props;
  799 + const { slave1Config, slave1Data } = props;
699 800 const { app } = props;
700   - const { userinfo }= app;
  801 + const { userinfo } = app;
701 802 const bManual = userinfo?.bManual;
702 803  
703 804 const joinInfoData = commonUtils.filteredArr(
... ... @@ -722,7 +823,7 @@ const TeamJoinInfo = props =&gt; {
722 823 const result = {
723 824 ...commonBusiness.getTableTypes(tableName, props),
724 825 tableProps: {
725   - onChange: () => {}
  826 + onChange: () => { }
726 827 },
727 828 onTableBtnClick: props.onTableBtnClick,
728 829 fixedHeight: tableName === "slave4" ? "230px" : "160px"
... ... @@ -746,7 +847,7 @@ const TeamJoinInfo = props =&gt; {
746 847 });
747 848 props.onChangeRouter({ type: "name", path: ["计划任务", "机台任务"] });
748 849 };
749   - const workHandoverInformation= commonFunc.showLocalMessage(props, 'workHandoverInformation', '上班交接信息');
  850 + const workHandoverInformation = commonFunc.showLocalMessage(props, 'workHandoverInformation', '上班交接信息');
750 851 return (
751 852 <div className="joinInfo">
752 853 <Row className="teamTitle">
... ...
src/mes/teamInfo/index.less
... ... @@ -30,7 +30,11 @@
30 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 38 .teamInfo {
35 39 .size();
36 40  
... ... @@ -46,7 +50,88 @@
46 50 display: flex;
47 51 flex-direction: column;
48 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 135 .teamInfoTop {
51 136 background-color: #fff;
52 137 padding: 10px;
... ... @@ -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 489 .teamInfoRight {
183 490 width: 60%;
... ... @@ -406,4 +713,5 @@
406 713 }
407 714 }
408 715 }
  716 +
409 717 }
... ...