14 Commits 84fcbc084f ... e6473ddff0

Author SHA1 Message Date
  Renxy e6473ddff0 修改口令密码显示 1 year ago
  Renxy 78e76c45b9 Merge branch 'develop' of http://120.55.44.4:10080/xujunjie/gt_client_pad into develop 1 year ago
  Renxy 0a7f4a9e46 全部已读 1 year ago
  xujunjie 70d7260ce2 Merge branch 'develop' of http://120.55.44.4:10080/xujunjie/gt_client_pad into develop 1 year ago
  xujunjie 7266070f77 口令隐藏密码 1 year ago
  Renxy 381e9caec0 修改样式 1 year ago
  Renxy 0a5445e916 修改派单用户接口 1 year ago
  Renxy 65ac697ebd 修改人中心任务工单负责人字段 1 year ago
  Renxy 98cf9911ed Merge branch 'develop' of http://120.55.44.4:10080/xujunjie/gt_client_pad into develop 1 year ago
  Renxy 5413851306 修改pad端任务工单负责人改为可选多人 1 year ago
  xujunjie 1571a5f166 文案修改 1 year ago
  xujunjie 80078cc615 fixed 1 year ago
  xujunjie ee8b483d0f Merge branch 'develop' of http://120.55.44.4:10080/xujunjie/gt_client_pad into develop 1 year ago
  xujunjie 61efbd5ada 消息初始化tab从url中获取 1 year ago

+ 11 - 0
.eslintrc.js

@@ -1,3 +1,14 @@
 module.exports = {
   extends: require.resolve('@umijs/max/eslint'),
+  rules: {
+    'no-var': 0,
+    'vars-on-top': 0,
+    'spaced-comment': 0,
+    'no-else-return': 0,
+    'prefer-const': 0,
+    'eqeqeq': 0,
+    'comma-dangle': 0,
+    'prefer-destructuring': 0,
+    'jsx-a11y/iframe-has-title': 0,
+  }
 };

+ 3 - 3
src/global.less

@@ -326,7 +326,7 @@ input[type='reset'] {
 .ant-table-wrapper .ant-table-thead > tr > th,
 .ant-table-wrapper .ant-table-tbody > tr > td {
   border-radius: 0;
-  padding: 0.12rem 0.10rem;
+  padding: 0.12rem 0.1rem;
   font-size: 0.28rem;
   color: rgba(97, 93, 93, 1);
   line-height: 0.32rem;
@@ -369,11 +369,11 @@ input[type='reset'] {
   padding: 0.04rem 0.11rem;
 }
 
-.ant-select-single:not(.ant-select-customize-input) .ant-select-selector {
+.ant-select:not(.ant-select-customize-input) .ant-select-selector {
   height: auto;
   padding: 0.04rem 0.11rem;
 }
-.ant-select-single .ant-select-selector {
+.ant-select .ant-select-selector {
   font-size: 0.26rem;
 }
 .ant-checkbox-wrapper {

+ 12 - 8
src/pages/Center/MyTask/Detail/TaskDetail.js

@@ -81,9 +81,10 @@ function TaskDetail(props) {
         MandateType: MandateType.find(
           (item) => item.value === result.data.MandateType,
         ),
-        ResponsiblePeople: userList.find(
-          (item) => item.ID === result.data.ResponsiblePeople,
-        ),
+        ResponsiblePeople: result.data.ResponsiblePeople.split(',')
+          .map((cur) => userList.find((item) => item.ID == Number(cur))?.CName)
+          .filter((item) => item)
+          .join(','),
         CreateTime: dayjs(result.data.CreateTime).format('YYYY-MM-DD HH:mm'),
       };
       const workOrder = result.data.Records.map((item) => {
@@ -92,7 +93,12 @@ function TaskDetail(props) {
           CreateTime: dayjs(item.CreateTime).format('YYYY-MM-DD HH:mm'),
           Status: OrderStatus.find((status) => status.value === item.Status),
           RecordType: OrderType.find((type) => type.value === item.RecordType),
-          Responsible: userList.find((user) => user.ID === item.Responsible),
+          Responsible: item.Responsible.split(',')
+            .map(
+              (cur) => userList.find((item) => item.ID == Number(cur))?.CName,
+            )
+            .filter((item) => item)
+            .join(','),
         };
       });
       const children = result.data.MandateChild;
@@ -131,9 +137,7 @@ function TaskDetail(props) {
                     </Col>
                     <Col className={styles.fontS30} span={14}>
                       工单负责人:
-                      {typeof record.Responsible === 'number'
-                        ? '-'
-                        : record.Responsible?.CName}
+                      {record.Responsible}
                     </Col>
                   </Row>
                 </div>
@@ -283,7 +287,7 @@ function TaskDetail(props) {
             </Col>
             <Col className={styles.fontS30}>
               {/*// @ts-ignore*/}
-              任务负责人:{mandateDetail?.ResponsiblePeople?.CName}
+              任务负责人:{mandateDetail?.ResponsiblePeople}
             </Col>
           </Row>
         </div>

+ 22 - 15
src/pages/Center/MyTask/Detail/WorkOrderDetail.js

@@ -56,11 +56,15 @@ const WorkOrderDetail = (props) => {
         Clean: temp.Clean,
         Check: temp.Check,
         Repairman:
-          userList.find((item) => item.ID === temp.MaintenancePerson) || '-',
+          temp.ResponsiblePeople.split(',')
+            .map(
+              (cur) => userList.find((item) => item.ID == Number(cur))?.CName,
+            )
+            .filter((item) => item)
+            .join(',') || '-',
         DispatchMan:
-          userList.find(
-            (item) => (item.ID = temp.Operators[0]?.Operator?.ID),
-          ) || '-',
+          userList.find((item) => (item.ID = temp.Operators[0]?.Operator?.ID))
+            ?.CName || '-',
         OrderStatus:
           OrderStatus.find((item) => item.value === temp.Status) || '-',
         MandateImages:
@@ -100,9 +104,14 @@ const WorkOrderDetail = (props) => {
           ? dayjs(temp.RepairTime).format('YYYY-MM-DD HH:mm')
           : '-',
         Reason: temp.Reason,
-        Repairman: userList.find((item) => item.ID === temp.Repairman) || '-',
-        DispatchMan:
-          userList.find((item) => item.ID === temp.operator_id) || '-',
+        Repairman:
+          temp.Repairman.split(',')
+            .map(
+              (cur) => userList.find((item) => item.ID == Number(cur))?.CName,
+            )
+            .filter((item) => item)
+            .join(',') || '-',
+        DispatchMan: temp.operator_name || '-',
         OrderStatus:
           OrderStatus.find((item) => item.value === temp.AcceptanceStatus) ||
           '-',
@@ -138,9 +147,9 @@ const WorkOrderDetail = (props) => {
             dayjs(temp.actual_end_time).format('YYYY-MM-DD HH:mm')) ||
           '-',
         Reason: temp.detail,
-        Repairman: userList.find((item) => item.ID === temp.operator_id) || '-',
+        Repairman: temp.operator_name || '-',
         DispatchMan:
-          userList.find((item) => item.ID === temp.checker_id) || '-',
+          userList.find((item) => item.ID === temp.checker_id)?.CName || '-',
         OrderStatus:
           OrderStatus.find((item) => item.value === temp.status) || '-',
         MandateImages:
@@ -178,8 +187,7 @@ const WorkOrderDetail = (props) => {
           ? dayjs(result.actual_end_time.Time).format('YYYY-MM-DD HH:mm')
           : '-',
         Reason: result.note,
-        Repairman:
-          userList.find((user) => user.ID === result.operator_id) || '-',
+        Repairman: operator_name || '-',
         DispatchMan: '-',
         OrderStatus:
           OrderStatus.find((status) => status.value === result.status) || '-',
@@ -206,8 +214,7 @@ const WorkOrderDetail = (props) => {
             ? dayjs(temp.actual_end_time).format('YYYY-MM-DD HH:mm')
             : '-',
           Reason: temp.detail,
-          Repairman:
-            userList.find((user) => user.ID === temp.operator_id) || '-',
+          Repairman: temp.operator_name || '-',
           DispatchMan: '-',
           OrderStatus:
             OrderStatus.find((status) => status.value === temp.status) || '-',
@@ -316,7 +323,7 @@ const WorkOrderDetail = (props) => {
                 </Col>
                 <Col className={styles.fontS28} span={9}>
                   {/* @ts-ignore */}
-                  工单负责人:{orderInfo?.Repairman?.CName || '-'}
+                  工单负责人:{orderInfo?.Repairman}
                 </Col>
               </Row>
               <Row className={styles.rowMargin}>
@@ -326,7 +333,7 @@ const WorkOrderDetail = (props) => {
                 </Col>
                 <Col className={styles.fontS28} span={9}>
                   {/* @ts-ignore */}
-                  派单人员:{orderInfo?.DispatchMan?.CName || '-'}
+                  派单人员:{orderInfo?.DispatchMan || '-'}
                 </Col>
               </Row>
               <Row className={styles.rowMargin}>

+ 12 - 6
src/pages/Center/MyTask/List/TaskList.js

@@ -148,19 +148,25 @@ const MyTaskList = (props) => {
       MandateClass: MandateClass.find(
         (itemClass) => itemClass.value === item.MandateClass,
       ),
-      ResponsiblePeople: userList.find(
-        (user) => user.ID === item.ResponsiblePeople,
-      ),
+      ResponsiblePeople: item.ResponsiblePeople.split(',')
+        .map((cur) => userList.find((item) => item.ID == Number(cur))?.CName)
+        .filter((item) => item)
+        .join(','),
       CreateTime: dayjs(item.CreateTime).format('YYYY-MM-DD HH:mm'),
     };
 
+    console.log('------------------', formatItem);
+
     const workOrder = item.Records.map((record) => {
       return {
         ...record,
         key: record.Id,
         Status: OrderStatus.find((status) => status.value === record.Status),
         RecordType: OrderType.find((type) => type.value === record.RecordType),
-        Responsible: userList.find((user) => user.ID === record.Responsible),
+        Responsible: record.Responsible.split(',')
+          .map((cur) => userList.find((item) => item.ID == Number(cur))?.CName)
+          .filter((item) => item)
+          .join(','),
         CreateTime: dayjs(record.CreateTime).format('YYYY-MM-DD HH:mm'),
       };
     });
@@ -193,7 +199,7 @@ const MyTaskList = (props) => {
                     </span>
                   </Col>
                   <Col className={styles.fontS30} span={13}>
-                    工单负责人:{order.Responsible?.CName}
+                    工单负责人:{order.Responsible}
                   </Col>
                 </Row>
               </div>
@@ -266,7 +272,7 @@ const MyTaskList = (props) => {
               }}
             >
               <Col span={11} className={styles.fontS30}>
-                任务负责人: {formatItem.ResponsiblePeople?.CName || '-'}
+                任务负责人: {formatItem.ResponsiblePeople || '-'}
               </Col>
               <Col span={8} className={styles.fontS30}>
                 任务状态: {formatItem.Status?.label || '-'}

+ 8 - 2
src/pages/Center/MyTask/List/WorkOrderList.js

@@ -65,7 +65,7 @@ const WorkOrderList = (props) => {
             <Row justify="space-between" style={{ marginBottom: '0.2rem' }}>
               <Col className={styles.fontS24}>{workOrder?.CreateTime}</Col>
               <Col className={styles.fontS24}>
-                工单负责人:{workOrder?.Repairman?.CName || '-'}
+                工单负责人:{workOrder?.Repairman || '-'}
               </Col>
             </Row>
             <Row justify="space-between">
@@ -126,7 +126,13 @@ const WorkOrderList = (props) => {
               CreateTime: item.CreateTime
                 ? dayjs(item.CreateTime).format('YYYY-MM-DD HH:mm')
                 : '-',
-              Repairman: userList.find((user) => item.Responsible === user.ID),
+              Repairman: item.Responsible.split(',')
+                .map(
+                  (cur) =>
+                    userList.find((item) => item.ID == Number(cur))?.CName,
+                )
+                .filter((item) => item)
+                .join(','),
               OrderStatus: OrderStatus.find(
                 (status) => status.value === item.Status,
               ),

+ 11 - 7
src/pages/EqSelfInspection/components/Detail.js

@@ -114,7 +114,11 @@ function Detail(props) {
           </Row>
           <Row>
             {result.map((item, index) => (
-              <Col span={index == 0 ? 10 : 7} className={styles.cardText}>
+              <Col
+                span={index == 0 ? 10 : 7}
+                className={styles.cardText}
+                key={item.label}
+              >
                 {index == 0 && '自检结果:'}
                 {item.label}-
                 <span style={{ color: item.color }}>{item.value}</span>
@@ -128,7 +132,7 @@ function Detail(props) {
         onChange={(check) => {
           // 未勾选则认为全部显示
           if (check.length == 0) {
-            setStatusCheck([1, 2, 3]);
+            setStatusCheck([0, 1, 2]);
           } else {
             setStatusCheck(check);
           }
@@ -186,7 +190,7 @@ function DeviceReport(props) {
 
   // 子集全部隐藏的情况下,父级也隐藏
   const show = useMemo(() => {
-    let total = subStatus.reduce((item, total) => (total += item), 0);
+    let total = subStatus.reduce((item, total) => total + item, 0);
     return total > 0;
   }, [subStatus]);
 
@@ -257,7 +261,7 @@ function SecureReport(props) {
 
   // 子集全部隐藏的情况下,父级也隐藏
   const show = useMemo(() => {
-    let total = subStatus.reduce((item, total) => (total += item), 0);
+    let total = subStatus.reduce((item, total) => total + item, 0);
     return total > 0;
   }, [subStatus]);
 
@@ -282,7 +286,7 @@ function SecureReport(props) {
   });
   useEffect(() => {
     setDumuList(data?.dumuList);
-    data?.dumuList?.map((item) => {
+    data?.dumuList?.forEach((item) => {
       detailRun(item.id);
     });
   }, [data?.dumuList]);
@@ -353,8 +357,8 @@ function AalysisTable(props) {
         if (record.fix_plan instanceof Array) {
           return (
             <div>
-              {record.fix_plan.map((item) => (
-                <div style={{ lineHeight: 1.8 }}>
+              {record.fix_plan.map((item, index) => (
+                <div style={{ lineHeight: 1.8 }} key={index}>
                   {item.content}
                   <MandateBtn relationId={record.id} />
                 </div>

+ 2 - 0
src/pages/EqSelfInspection/index.js

@@ -7,6 +7,8 @@ import dayjs from 'dayjs';
 import { useEffect, useMemo, useState } from 'react';
 import styles from './index.less';
 
+const { Option } = Select;
+
 const EqSelfInspection = (props) => {
   const { dispatch, autoReport, patrolList, loading } = props;
   const { projectId } = useParams();

+ 1 - 1
src/pages/Home/QualityMng.js

@@ -162,7 +162,7 @@ export const WaterQuality = ({ showTip = false }) => {
           </li>
           <li>
             <div className={styles.pageTopValue}>{getValue(snapshot?.dph)}</div>
-            <div>外供水(PH)</div>
+            <div>外供水PH</div>
           </li>
         </ul>
       </div>

+ 15 - 1
src/pages/Home/index.js

@@ -190,6 +190,7 @@ const SelfInspection = connect(({ eqSelfInspection, loading }) => ({
 }))((props) => {
   const { autoReport, dispatch, loading } = props;
   const { projectId } = useParams();
+  var timer = null;
 
   const renderStatus = () => {
     if (loading) return <LoadingOutlined />;
@@ -207,13 +208,26 @@ const SelfInspection = connect(({ eqSelfInspection, loading }) => ({
     );
   };
 
-  useEffect(() => {
+  const getAutoData = () => {
     dispatch({
       type: 'eqSelfInspection/getAutoPatrol',
       payload: {
         projectId,
       },
     });
+    
+  };
+
+  useEffect(() => {
+    getAutoData();
+    timer = setInterval(() => {
+      getAutoData();
+    }, 60 * 1000);
+    console.log('timer start:', timer);
+    return () => {
+      console.log('timer clear:', timer);
+      clearInterval(timer);
+    };
   }, []);
 
   return (

+ 44 - 10
src/pages/MessageCenter/index.js

@@ -1,11 +1,15 @@
 import PageContent from '@/components/PageContent';
 import TabsContent from '@/components/TabsContent';
-import { getNotificationList } from '@/services/message';
+import {
+  getAllRead,
+  getNotificationList,
+  readNotification,
+} from '@/services/message';
 import { UnityAction } from '@/utils/utils';
 import { useParams, useRequest, useSearchParams } from '@umijs/max';
 import { Button, Spin } from 'antd';
 import dayjs from 'dayjs';
-import { useState } from 'react';
+import { useRef, useState } from 'react';
 import styles from './index.less';
 const icon1 = require('@/assets/message/work.png');
 const icon2 = require('@/assets/message/check.png');
@@ -14,7 +18,8 @@ const icon3 = require('@/assets/message/warning.png');
 const MessageCenter = () => {
   const { projectId } = useParams();
   const [searchParams] = useSearchParams();
-  const [tab, setTab] = useState('2');
+  const [tab, setTab] = useState(searchParams.get('type') || '1');
+  const msgTypeRef = useRef();
   //, msgType: 工况:11, 自检:12,  预警:13
   const { data, run, loading } = useRequest(() =>
     getNotificationList({ projectId, msgType: 11 }, { manual: true }),
@@ -34,32 +39,61 @@ const MessageCenter = () => {
     loading: loadingSelf,
   } = useRequest(() => getNotificationList({ projectId, msgType: 12 }));
 
+  const { run: runAllRead } = useRequest(
+    () =>
+      getAllRead({
+        project_id: projectId * 1,
+        msg_type: msgTypeRef.current,
+      }),
+    {
+      manual: true,
+      onSuccess: () => {
+        UnityAction.sendMsg('notiReadAll', '');
+        switch (tab) {
+          case '1':
+            runSelf();
+            break;
+          case '2':
+            runWarning();
+            break;
+          case '3':
+            run();
+            break;
+        }
+      },
+    },
+  );
+
   const handleTabsChange = (tab) => {
     setTab(tab);
     switch (tab) {
       case '1':
+        msgTypeRef.current = 12;
         runSelf();
         break;
       case '2':
+        msgTypeRef.current = 13;
         runWarning();
         break;
       case '3':
+        msgTypeRef.current = 11;
         run();
         break;
     }
   };
 
-  const handleReadClick = () => {
-    UnityAction.sendMsg('notiReadAll', '');
-  };
-
   const handlerSeeClick = (item) => {
+    readNotification(item.ID);
     if (tab === '3') {
       // if (item?.MandateId) {
       UnityAction.sendMsg('OpenTaskModal', `mandate_id=${item.MandateId}`);
+      run();
       // }
     } else if (tab == '1') {
       UnityAction.sendMsg('notiZiJian', item.PatrolId);
+      runSelf();
+    } else {
+      runWarning();
     }
   };
 
@@ -84,7 +118,7 @@ const MessageCenter = () => {
                 <div className={styles.right}>
                   <div
                     className={
-                      item?.ReadStatus ? styles.redPoint : styles.nonePoint
+                      item.ReadStatus === 0 ? styles.redPoint : styles.nonePoint
                     }
                   />
                   <Button
@@ -106,7 +140,7 @@ const MessageCenter = () => {
     <PageContent tabs>
       <TabsContent
         center={false}
-        defaultActiveKey={searchParams.get('type') || '2'}
+        defaultActiveKey={tab}
         onChange={handleTabsChange}
         items={[
           {
@@ -140,7 +174,7 @@ const MessageCenter = () => {
           },
         ]}
       />
-      <div className={styles.allRead} onClick={handleReadClick}>
+      <div className={styles.allRead} onClick={runAllRead}>
         全部已读
       </div>
     </PageContent>

+ 3 - 1
src/pages/SafetyManagement/Command/index.js

@@ -51,7 +51,9 @@ const CommandModal = () => {
       >
         <div className={styles.upContent}>
           {new Array(8).fill('').map((item, idx) => (
-            <div className={styles.upItem}>{values[idx]}</div>
+            <div className={styles.upItem}>
+              {values[idx] || values[idx] == 0 ? '*' : ''}
+            </div>
           ))}
         </div>
         <div className={styles.numContent}>

+ 1 - 1
src/pages/Smart/ConditionDetection.js

@@ -47,7 +47,7 @@ const ConditionDetection = (props) => {
 
   return (
     <PageContent closeable={false}>
-      <PageTitle returnable>工况测</PageTitle>
+      <PageTitle returnable>工况测</PageTitle>
 
       <div className="content-tab">
         <div className={styles.circle}>

+ 2 - 2
src/pages/SmartOps/components/VideoAnalysis.js

@@ -490,7 +490,7 @@ function AllContent({ videoData = {}, selectedName, setSelectedName }) {
           scroll={{ y: 400 }}
         />
       </div> */}
-      <div className={styles.box}>
+      {/* <div className={styles.box}>
         <ModuleTitle title="视频识别" />
         <Table
           dataSource={dumu_list}
@@ -503,7 +503,7 @@ function AllContent({ videoData = {}, selectedName, setSelectedName }) {
           pagination={false}
           scroll={{ y: 400 }}
         />
-      </div>
+      </div> */}
     </div>
   );
 }

+ 3 - 2
src/pages/SmartOps/index.less

@@ -1,5 +1,5 @@
 .topContent {
-  padding: 0.08rem 0.12rem;
+  padding: 0.16rem 0.12rem;
   margin: 0.16rem 0;
   color: #1c50b3;
   font-size: 0.26rem;
@@ -10,6 +10,7 @@
     .time {
       // font-size: 0.2rem;
       color: #6e6e6e;
+      margin-left: 0.14rem;
     }
     .iconLeft {
       width: 0.38rem;
@@ -20,12 +21,12 @@
     .iconRight {
       .iconLeft;
       margin-left: 0.2rem;
+      margin-right: 0.14rem;
       background: url('@/assets/smartOps/icon07.png') no-repeat center;
       background-size: 100% 100%;
     }
   }
   .overview {
-    margin: 0.1rem 0;
     display: flex;
     align-items: center;
     justify-content: center;

+ 5 - 1
src/pages/SmartOps/operationManage/CostAnalysis/CostAnalysis.js

@@ -150,7 +150,11 @@ const CostAnalysis = () => {
       <div>
         <SubTitle title={'数据曲线'} fontSize="0.26rem" />
         <div className={styles.timeBtn}>
-          <RangePicker inputReadOnly onChange={handleTimeRangeChange} />
+          <RangePicker
+            inputReadOnly
+            onChange={handleTimeRangeChange}
+            style={{ width: '4rem' }}
+          />
           <Button
             type="primary"
             shape="round"

+ 14 - 9
src/pages/TaskManage/Detail/TaskDetail/TaskDetail.tsx

@@ -259,6 +259,7 @@ const DispatchTaskModal = (props: any) => {
     if (!value) {
       return;
     }
+    value.operator_id = value.operator_id.join(',');
     onOK(value);
   };
 
@@ -291,6 +292,7 @@ const DispatchTaskModal = (props: any) => {
           rules={[{ required: true, message: '请选择操作人' }]}
         >
           <Select
+            mode="multiple"
             options={userList
               .filter(
                 (item) =>
@@ -387,9 +389,10 @@ function TaskDetail(props: IPropsType) {
         MandateType: MandateType.find(
           (item) => item.value === result.data.MandateType,
         ),
-        ResponsiblePeople: userList.find(
-          (item) => item.ID === result.data.ResponsiblePeople,
-        ),
+        ResponsiblePeople: result.data.ResponsiblePeople.split(',')
+          .map((cur) => userList.find((item) => item.ID == Number(cur))?.CName)
+          .filter((item) => item)
+          .join(','),
         CreateTime: dayjs(result.data.CreateTime).format('YYYY-MM-DD HH:mm'),
       };
       const workOrder = result.data.Records.map((item: IWorkOrderType) => {
@@ -398,7 +401,12 @@ function TaskDetail(props: IPropsType) {
           CreateTime: dayjs(item.CreateTime).format('YYYY-MM-DD HH:mm'),
           Status: OrderStatus.find((status) => status.value === item.Status),
           RecordType: OrderType.find((type) => type.value === item.RecordType),
-          Responsible: userList.find((user) => user.ID === item.Responsible),
+          Responsible: item.Responsible.split(',')
+            .map(
+              (cur) => userList.find((item) => item.ID == Number(cur))?.CName,
+            )
+            .filter((item) => item)
+            .join(','),
         };
       });
       const children = result.data.MandateChild;
@@ -437,9 +445,7 @@ function TaskDetail(props: IPropsType) {
                     </Col>
                     <Col className={styles.fontS30} span={14}>
                       工单负责人:
-                      {typeof record.Responsible === 'number'
-                        ? '-'
-                        : record.Responsible?.CName}
+                      {record.Responsible}
                     </Col>
                   </Row>
                 </div>
@@ -714,8 +720,7 @@ function TaskDetail(props: IPropsType) {
                 任务状态:{mandateDetail?.Status?.label}
               </Col>
               <Col className={styles.fontS30}>
-                {/*// @ts-ignore*/}
-                任务负责人:{mandateDetail?.ResponsiblePeople?.CName}
+                任务负责人:{mandateDetail?.ResponsiblePeople}
               </Col>
             </Row>
           </div>

+ 10 - 0
src/pages/TaskManage/Detail/TaskDetail/taskDetail.less

@@ -155,6 +155,8 @@
     .ant-modal-title {
       font-size: 0.28rem;
     }
+
+    .ant-select:not(.ant-select-customize-input) .ant-select-selector,
     .ant-select-single:not(.ant-select-customize-input) .ant-select-selector {
       height: 0.6rem;
       padding-top: 0.15rem;
@@ -185,6 +187,14 @@
     .ant-picker {
       height: 0.6rem;
     }
+    .ant-select-selection-placeholder {
+      position: absolute;
+      top: 50%;
+      inset-inline-start: 11px;
+      inset-inline-end: 11px;
+      transform: translateY(-50%);
+      transition: all 0.3s;
+    }
   }
 }
 

+ 13 - 6
src/pages/TaskManage/Detail/TaskList/TaskList.tsx

@@ -195,9 +195,13 @@ const TaskList: React.FC<IPropsType> = (props) => {
       MandateClass: MandateClass.find(
         (itemClass) => itemClass.value === item.MandateClass,
       ),
-      ResponsiblePeople: userList.find(
-        (user) => user.ID === item.ResponsiblePeople,
-      ),
+      ResponsiblePeople: item.ResponsiblePeople.split(',')
+        .map((cur) => userList.find((item) => item.ID == Number(cur))?.CName)
+        .filter((item) => item)
+        .join(','),
+      // userList.find(
+      //   (user) => user.ID === item.ResponsiblePeople,
+      // ),
       CreateTime: dayjs(item.CreateTime).format('YYYY-MM-DD HH:mm'),
     };
 
@@ -207,7 +211,10 @@ const TaskList: React.FC<IPropsType> = (props) => {
         key: record.Id,
         Status: OrderStatus.find((status) => status.value === record.Status),
         RecordType: OrderType.find((type) => type.value === record.RecordType),
-        Responsible: userList.find((user) => user.ID === record.Responsible),
+        Responsible: record.Responsible.split(',')
+          .map((cur) => userList.find((item) => item.ID == Number(cur))?.CName)
+          .filter((item) => item)
+          .join(','),
         CreateTime: dayjs(record.CreateTime).format('YYYY-MM-DD HH:mm'),
       };
     });
@@ -240,7 +247,7 @@ const TaskList: React.FC<IPropsType> = (props) => {
                     </span>
                   </Col>
                   <Col className={styles.fontS30} span={13}>
-                    工单负责人:{order.Responsible?.CName}
+                    工单负责人:{order.Responsible}
                   </Col>
                 </Row>
               </div>
@@ -313,7 +320,7 @@ const TaskList: React.FC<IPropsType> = (props) => {
               }}
             >
               <Col span={11} className={styles.fontS30}>
-                任务负责人: {formatItem.ResponsiblePeople?.CName || '-'}
+                任务负责人: {formatItem.ResponsiblePeople || '-'}
               </Col>
               <Col span={8} className={styles.fontS30}>
                 任务状态: {formatItem.Status?.label || '-'}

+ 2 - 2
src/pages/TaskManage/Detail/TaskList/taskList.types.ts

@@ -26,7 +26,7 @@ export interface IWorkOrderType {
   Note: string;
   PlanDoneTime: string;
   RecordType: number | DefaultOptionType;
-  Responsible: number | IUserType;
+  Responsible: string;
   Status: number | DefaultOptionType;
 }
 
@@ -35,7 +35,7 @@ export interface IMandateDetailType {
   ProjectId: number;
   MandateType: number | DefaultOptionType;
   MandateClass: number | DefaultOptionType;
-  ResponsiblePeople: number | IUserType;
+  ResponsiblePeople: string;
   Detail: string;
   MandateChild: IMandateChildType[];
   Records: IWorkOrderType[];

+ 23 - 16
src/pages/TaskManage/Detail/TaskOrder/TaskOrder.tsx

@@ -32,8 +32,8 @@ interface IOrderInfo {
   PlanTime: string;
   RepairTime: string;
   Reason: string;
-  Repairman: string | IUserType;
-  DispatchMan: string | IUserType;
+  Repairman: string;
+  DispatchMan: string;
   OrderStatus: string | DefaultOptionType;
   Lubrication?: number;
   Fasten?: number;
@@ -86,11 +86,15 @@ const TaskOrder: React.FC<IPropsType> = (props) => {
         Clean: temp.Clean,
         Check: temp.Check,
         Repairman:
-          userList.find((item) => item.ID === temp.MaintenancePerson) || '-',
+          temp.MaintenancePerson.split(',')
+            .map(
+              (cur) => userList.find((item) => item.ID == Number(cur))?.CName,
+            )
+            .filter((item) => item)
+            .join(',') || '-',
         DispatchMan:
-          userList.find(
-            (item) => (item.ID = temp.Operators[0]?.Operator?.ID),
-          ) || '-',
+          userList.find((item) => (item.ID = temp.Operators[0]?.Operator?.ID))
+            ?.CName || '-',
         OrderStatus:
           OrderStatus.find((item) => item.value === temp.Status) || '-',
         MandateImages:
@@ -130,7 +134,13 @@ const TaskOrder: React.FC<IPropsType> = (props) => {
           ? dayjs(temp.RepairTime).format('YYYY-MM-DD HH:mm')
           : '-',
         Reason: temp.Reason,
-        Repairman: userList.find((item) => item.ID === temp.Repairman) || '-',
+        Repairman:
+          temp.Repairman.split(',')
+            .map(
+              (cur) => userList.find((item) => item.ID == Number(cur))?.CName,
+            )
+            .filter((item) => item)
+            .join(',') || '-',
         DispatchMan: '-',
         OrderStatus:
           OrderStatus.find((item) => item.value === temp.AcceptanceStatus) ||
@@ -168,9 +178,9 @@ const TaskOrder: React.FC<IPropsType> = (props) => {
             ? dayjs(temp.actual_end_time).format('YYYY-MM-DD HH:mm')
             : '-',
         Reason: temp.detail,
-        Repairman: userList.find((item) => item.ID === temp.operator_id) || '-',
+        Repairman: temp.operator_name || '-',
         DispatchMan:
-          userList.find((item) => item.ID === temp.checker_id) || '-',
+          userList.find((item) => item.ID === temp.checker_id)?.CName || '-',
         OrderStatus:
           OrderStatus.find((item) => item.value === temp.status) || '-',
         MandateImages:
@@ -208,8 +218,7 @@ const TaskOrder: React.FC<IPropsType> = (props) => {
           : '-',
         Reason: result.note,
         Repairman: '-',
-        DispatchMan:
-          userList.find((user) => user.ID === result.operator_id) || '-',
+        DispatchMan: result.operator_name || '-',
         OrderStatus:
           OrderStatus.find((status) => status.value === result.status) || '-',
       };
@@ -237,8 +246,7 @@ const TaskOrder: React.FC<IPropsType> = (props) => {
               ? dayjs(temp.actual_end_time).format('YYYY-MM-DD HH:mm')
               : '-',
           Reason: temp.detail,
-          Repairman:
-            userList.find((user) => user.ID === temp.operator_id) || '-',
+          Repairman: temp.operator_name || '-',
           DispatchMan: '-',
           OrderStatus:
             OrderStatus.find((status) => status.value === temp.status) || '-',
@@ -345,8 +353,7 @@ const TaskOrder: React.FC<IPropsType> = (props) => {
                     '-'}
                 </Col>
                 <Col className={styles.fontS28} span={9}>
-                  {/* @ts-ignore */}
-                  工单负责人:{orderInfo?.Repairman?.CName || '-'}
+                  工单负责人:{orderInfo?.Repairman || '-'}
                 </Col>
               </Row>
               <Row className={styles.rowMargin}>
@@ -356,7 +363,7 @@ const TaskOrder: React.FC<IPropsType> = (props) => {
                 </Col>
                 <Col className={styles.fontS28} span={9}>
                   {/* @ts-ignore */}
-                  派单人员:{orderInfo?.DispatchMan?.CName || '-'}
+                  派单人员:{orderInfo?.DispatchMan || '-'}
                 </Col>
               </Row>
               <Row className={styles.rowMargin}>

+ 16 - 14
src/pages/TaskManage/Detail/WorkOrderList/WorkOrderList.js

@@ -74,7 +74,7 @@ const WorkOrderList = (props) => {
             <Row justify="space-between" style={{ marginBottom: '0.2rem' }}>
               <Col className={styles.fontS24}>{workOrder?.CreateTime}</Col>
               <Col className={styles.fontS24}>
-                工单负责人:{workOrder?.Repairman?.CName || '-'}
+                工单负责人:{workOrder?.Repairman || '-'}
               </Col>
             </Row>
             <Row justify="space-between">
@@ -169,22 +169,24 @@ const WorkOrderList = (props) => {
         let temp = [];
         if (result?.data?.list) {
           temp = result.data.list.map((item) => {
+            let names = item?.operator_name;
+            if (order_type === 2) {
+              names = item.Repairman.split(',')
+                .map((cur) => userList.find((item) => item.ID == cur)?.CName)
+                .filter((item) => item)
+                .join(',');
+            } else if (order_type === 3) {
+              names = item.MaintenancePerson.split(',')
+                .map((cur) => userList.find((item) => item.ID == cur)?.CName)
+                .filter((item) => item)
+                .join(',');
+            } else if (order_type === 5) {
+              temp = '-';
+            }
             return {
               ...item,
               CreateTime: formatCreateTime(item),
-              Repairman: userList.find((user) => {
-                let temp = -1;
-                if (order_type === 2) {
-                  temp = item.Repairman;
-                } else if (order_type === 3) {
-                  temp = item.MaintenancePerson;
-                } else if (order_type === 5) {
-                  temp = '-';
-                } else {
-                  temp = item.operator_id;
-                }
-                return temp === user.ID;
-              }),
+              Repairman: names,
               OrderStatus: OrderStatus.find((status) => {
                 let temp = -1;
                 if (order_type === 2) {

+ 20 - 13
src/pages/TaskManage/Popup/WorkOrderModal.js

@@ -51,8 +51,7 @@ const WorkOrderModal = (props) => {
               mandate_class !== 2 ? temp.detail : renderReason(temp.detail),
             Repairman:
               userList.find((item) => item.ID === temp.checker_id) || '-',
-            DispatchMan:
-              userList.find((item) => item.ID === temp.operator_id) || '-',
+            DispatchMan: temp.operator_name,
             OrderStatus:
               OrderStatus.find((item) => item.value === temp.status) || '-',
             MandateImages:
@@ -96,9 +95,14 @@ const WorkOrderModal = (props) => {
               '-',
             Reason: temp.Reason,
             Repairman:
-              userList.find((item) => item.ID === temp.Repairman) || '-',
-            DispatchMan:
-              userList.find((item) => item.ID === temp.operator_id) || '-',
+              temp.Repairman.split(',')
+                .map(
+                  (cur) =>
+                    userList.find((item) => item.ID == Number(cur))?.CName,
+                )
+                .filter((item) => item)
+                .join(',') || '-',
+            DispatchMan: temp.operator_name,
             OrderStatus:
               OrderStatus.find(
                 (item) => item.value === temp.AcceptanceStatus,
@@ -138,8 +142,13 @@ const WorkOrderModal = (props) => {
               dayjs(temp.RepairTime).format('YYYY-MM-DD HH:mm') || '-',
             Reason: temp.Note,
             Repairman:
-              userList.find((item) => item.ID === temp.MaintenancePerson) ||
-              '-',
+              temp.MaintenancePerson.split(',')
+                .map(
+                  (cur) =>
+                    userList.find((item) => item.ID == Number(cur))?.CName,
+                )
+                .filter((item) => item)
+                .join(',') || '-',
             DispatchMan:
               userList.find(
                 (item) => (item.ID = temp.Operators[0]?.Operator?.ID),
@@ -184,8 +193,7 @@ const WorkOrderModal = (props) => {
             : '-',
           Reason: result.note,
           Repairman: '-',
-          DispatchMan:
-            userList.find((user) => user.ID === result.operator_id) || '-',
+          DispatchMan: temp.operator_name,
           OrderStatus:
             OrderStatus.find((status) => status.value === result.status) || '-',
         };
@@ -213,8 +221,7 @@ const WorkOrderModal = (props) => {
             ? dayjs(temp.actual_end_time).format('YYYY-MM-DD HH:mm')
             : '-',
           Reason: temp.detail,
-          Repairman:
-            userList.find((user) => user.ID === temp.operator_id) || '-',
+          Repairman: temp.operator_name,
           DispatchMan: '-',
           OrderStatus:
             OrderStatus.find((status) => status.value === temp.status) || '-',
@@ -336,7 +343,7 @@ const WorkOrderModal = (props) => {
                 </Col>
                 <Col span={8} className={styles.fontS32}>
                   {/*// @ts-ignore*/}
-                  工单负责人:{orderInfo?.Repairman?.CName || '-'}
+                  工单负责人:{orderInfo?.Repairman}
                 </Col>
               </Row>
               <Row>
@@ -344,7 +351,7 @@ const WorkOrderModal = (props) => {
                   工单状态:{orderInfo?.OrderStatus?.label}
                 </Col>
                 <Col span={8} className={styles.fontS32}>
-                  派单人员:{orderInfo?.DispatchMan?.CName}
+                  派单人员:{orderInfo?.DispatchMan}
                 </Col>
               </Row>
               <Row>

+ 12 - 6
src/pages/TaskManage/components/MandateDetail.js

@@ -97,9 +97,10 @@ const MandateDetail = (props) => {
           MandateType: MandateType.find(
             (item) => item.value === result.data.MandateType,
           ),
-          ResponsiblePeople: userList.find(
-            (item) => item.ID === result.data.ResponsiblePeople,
-          ),
+          names: result.data.ResponsiblePeople.split(',')
+            .map((cur) => userList.find((item) => item.ID == cur)?.CName)
+            .filter((item) => item)
+            .join(','),
           CreateTime: dayjs(result.data.CreateTime).format('YYYY-MM-DD HH:mm'),
         };
         const workOrder = result.data.Records.map((item) => {
@@ -110,7 +111,10 @@ const MandateDetail = (props) => {
             RecordType: OrderType.find(
               (type) => type.value === item.RecordType,
             ),
-            Responsible: userList.find((user) => user.ID === item.Responsible),
+            Responsible: item.Responsible.split(',')
+              .map((cur) => userList.find((item) => item.ID == cur)?.CName)
+              .filter((item) => item)
+              .join(','),
           };
         });
         if (
@@ -237,7 +241,7 @@ const MandateDetail = (props) => {
                 </span>
               </Col>
               <Col className={styles.fontS32}>
-                任务负责人:{mandateDetail?.ResponsiblePeople?.CName || '-'}
+                任务负责人:{mandateDetail?.names || '-'}
               </Col>
             </Row>
           </div>
@@ -344,7 +348,7 @@ const MandateDetail = (props) => {
                     </span>
                   </Col>
                   <Col className={styles.fontS32}>
-                    工单负责人:{item?.Responsible?.CName}
+                    工单负责人:{item?.Responsible || '-'}
                   </Col>
                 </Row>
               </div>
@@ -656,6 +660,7 @@ const DispatchTaskModal = (props) => {
     if (!value) {
       return;
     }
+    value.operator_id = value.operator_id.join(',');
     onOK(value);
   };
 
@@ -689,6 +694,7 @@ const DispatchTaskModal = (props) => {
           rules={[{ required: true, message: '请选择操作人' }]}
         >
           <Select
+            mode="multiple"
             options={userList
               ?.filter(
                 (item) =>

+ 1 - 1
src/pages/TaskManage/components/MandateDetail.less

@@ -110,7 +110,7 @@
     .ant-modal-title {
       font-size: 0.28rem;
     }
-    .ant-select-single:not(.ant-select-customize-input) .ant-select-selector {
+    .ant-select:not(.ant-select-customize-input) .ant-select-selector {
       height: 0.6rem;
       padding-top: 0.15rem;
     }

+ 1 - 1
src/pages/TaskManage/index.types.ts

@@ -12,7 +12,7 @@ export interface IMandateType {
   ProjectId: number;
   MandateType: number | DefaultOptionType;
   MandateClass: number | DefaultOptionType;
-  ResponsiblePeople: number;
+  ResponsiblePeople: string;
   Detail: string;
   Summary: string;
   CreateTime: string;

+ 6 - 6
src/pages/TaskManage/models/user.js

@@ -1,13 +1,13 @@
-import { queryUserList } from "../../../services/user";
+import { queryDispatchUserList } from '@/services/user';
 
 export default {
-    namespace: 'taskUser',
+  namespace: 'taskUser',
   state: {
     userList: [],
   },
   effects: {
     *fetchUserList({ payload }, { call, put }) {
-      const response = yield call(queryUserList, payload);
+      const response = yield call(queryDispatchUserList, payload);
       if (response) {
         yield put({
           type: 'userListHandler',
@@ -17,12 +17,12 @@ export default {
     },
   },
 
-  reducers:{
+  reducers: {
     userListHandler(state, { payload }) {
       return {
         ...state,
         userList: payload,
       };
     },
-  }
-};
+  },
+};

+ 22 - 0
src/services/message.js

@@ -10,6 +10,16 @@ import { request } from 'umi';
 export async function getNotificationList(params) {
   return request(`/api/v1/notification/list?${stringify(params)}`);
 }
+/**
+ * 消息推送
+ * @param {number} messageId 消息ID
+ * @returns
+ */
+export async function readNotification(messageId) {
+  return request(`/api/v1/notification/read/${messageId}`, {
+    method: 'PUT',
+  });
+}
 
 /**
  * 待办事项
@@ -19,3 +29,15 @@ export async function getNotificationList(params) {
 export async function getPendingList(params) {
   return request(`/api/v1/pending/list?${stringify(params)}`);
 }
+
+/**
+ * 全部已读
+ * @param {object} project_id
+ * @returns
+ */
+export async function getAllRead(data) {
+  return request(`/api/v1/notification/all_read`, {
+    method: 'POST',
+    data,
+  });
+}

+ 4 - 0
src/services/user.js

@@ -11,3 +11,7 @@ export async function queryCurrentV2() {
 export async function queryDailyWorkReport(project_id) {
   return request(`/api/v1//mandate/daily-work-report?project_id=${project_id}`);
 }
+//获取派遣工单用户列表
+export async function queryDispatchUserList(param) {
+  return request(`/api/v1/user/record/${param.project_id}`);
+}