100011797 пре 3 година
родитељ
комит
03d9fbf750

BIN
public/images/firmware/cancel.png


+ 9 - 9
src/pages/account/NotificationSubscription/save/index.tsx

@@ -136,21 +136,21 @@ const Save = (props: Props) => {
             title: '通知方式',
             type: 'array',
             required: true,
-            'x-disabled': true,
+            // 'x-disabled': true,
             default: [1],
             enum: [
               {
                 label: '站内通知',
                 value: 1,
               },
-              {
-                label: '邮件通知',
-                value: 2,
-              },
-              {
-                label: '短信通知',
-                value: 3,
-              },
+              // {
+              //   label: '邮件通知',
+              //   value: 2,
+              // },
+              // {
+              //   label: '短信通知',
+              //   value: 3,
+              // },
             ],
             'x-decorator': 'FormItem',
             'x-component': 'Checkbox.Group',

+ 11 - 7
src/pages/device/Firmware/Save/index.tsx

@@ -13,7 +13,6 @@ import { useRef } from 'react';
 import type { ProductItem } from '@/pages/device/Product/typings';
 import { onlyMessage } from '@/utils/util';
 import RemoveData from './RemoveData';
-import encodeQuery from '@/utils/encodeQuery';
 
 interface Props {
   data?: FirmwareItem;
@@ -58,12 +57,17 @@ const Save = (props: Props) => {
     );
   };
   const loadData = async () =>
-    service.queryProduct(
-      encodeQuery({
-        terms: { state: 1 },
-        sorts: { createTime: 'desc' },
-      }),
-    );
+    service.queryProduct({
+      paging: false,
+      terms: [
+        {
+          column: 'state',
+          value: 1,
+        },
+      ],
+      sorts: [{ name: 'name', order: 'desc' }],
+    });
+
   const SchemaField = createSchemaField({
     components: {
       FormItem,

+ 35 - 7
src/pages/device/Firmware/Task/Detail/index.tsx

@@ -1,6 +1,6 @@
 import { PageContainer } from '@ant-design/pro-layout';
 import { observer } from '@formily/react';
-import { Badge, Card, Col, message, Popconfirm, Row } from 'antd';
+import { Badge, Card, message, Popconfirm } from 'antd';
 import type { ActionType, ProColumns } from '@jetlinks/pro-table';
 import ProTable from '@jetlinks/pro-table';
 import { Tooltip } from 'antd';
@@ -21,17 +21,20 @@ colorMap.set('waiting', '#FF9000');
 colorMap.set('loading', '#4293FF');
 colorMap.set('finish', '#24B276');
 colorMap.set('error', '#F76F5D');
+colorMap.set('canceled', '#999');
 
 const state = model<{
   waiting: number;
   loading: number;
   finish: number;
   error: number;
+  canceled: number;
 }>({
   waiting: 0,
-  loading: 2,
-  finish: 4,
+  loading: 0,
+  finish: 0,
   error: 0,
+  canceled: 0,
 });
 
 const Detail = observer(() => {
@@ -66,6 +69,11 @@ const Detail = observer(() => {
       name: '升级失败',
       img: require('/public/images/firmware/error.png'),
     },
+    {
+      key: 'canceled',
+      name: '已停止',
+      img: require('/public/images/firmware/cancel.png'),
+    },
   ];
 
   const statusMap = new Map();
@@ -140,11 +148,28 @@ const Detail = observer(() => {
     }
   };
 
+  const queryCancel = async () => {
+    const resp = await service.historyCount({
+      terms: [
+        {
+          terms: [
+            { column: 'taskId', value: params.id },
+            { column: 'state', value: 'canceled' },
+          ],
+        },
+      ],
+    });
+    if (resp.status === 200) {
+      state.canceled = resp?.result || 0;
+    }
+  };
+
   const handleSearch = () => {
     queryWaiting();
     queryProcessing();
     querySuccess();
     queryFailed();
+    queryCancel();
   };
 
   useEffect(() => {
@@ -188,6 +213,7 @@ const Detail = observer(() => {
       title: '进度',
       ellipsis: true,
       dataIndex: 'progress',
+      valueType: 'digit',
     },
     {
       title: '状态',
@@ -277,9 +303,9 @@ const Detail = observer(() => {
   return (
     <PageContainer>
       <Card style={{ marginBottom: 20 }}>
-        <Row gutter={24}>
+        <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr 1fr 1fr 1fr', gap: 24 }}>
           {arr.map((item) => (
-            <Col span={6} key={item.key}>
+            <div key={item.key}>
               <div className={styles.firmwareDetailCard}>
                 <div className={styles.firmwareDetailCardHeader}>
                   <div className={styles.firmwareDetailCardTitle}>
@@ -313,6 +339,8 @@ const Detail = observer(() => {
                             querySuccess();
                           } else if (item.key === 'loading') {
                             queryProcessing();
+                          } else if (item.key === 'canceled') {
+                            queryCancel();
                           } else {
                             queryFailed();
                           }
@@ -331,9 +359,9 @@ const Detail = observer(() => {
                   <img style={{ width: '100%' }} src={item.img} />
                 </div>
               </div>
-            </Col>
+            </div>
           ))}
-        </Row>
+        </div>
       </Card>
       <SearchComponent<FirmwareItem>
         field={columns}

+ 32 - 28
src/pages/device/Firmware/Task/Save/index.tsx

@@ -5,7 +5,7 @@ import { Form, FormGrid, FormItem, Input, Select, NumberPicker, Radio } from '@f
 import { createForm, onFieldValueChange, onFormInit } from '@formily/core';
 import type { ISchema } from '@formily/json-schema';
 import { service } from '@/pages/device/Firmware';
-import { useEffect, useRef } from 'react';
+import { useEffect, useMemo, useRef } from 'react';
 import { onlyMessage } from '@/utils/util';
 import FSelectDevices from '@/components/FSelectDevices';
 import type { DeviceInstance } from '@/pages/device/Instance/typings';
@@ -21,35 +21,39 @@ interface Props {
 const Save = (props: Props) => {
   const { data, close, visible, ids } = props;
 
-  const form = createForm({
-    validateFirst: true,
-    initialValues: data,
-    effects() {
-      onFormInit(async (form1) => {
-        if (!data?.id) return;
-        form1.setInitialValues({ ...data, upload: { url: data?.url } });
-      });
-      onFieldValueChange('mode', async (field) => {
-        field
-          .query('timeoutSeconds')
-          .take()
-          .setDecoratorProps({
-            gridSpan: field.value === 'push' ? 1 : 2,
+  const form = useMemo(
+    () =>
+      createForm({
+        validateFirst: true,
+        initialValues: data,
+        effects() {
+          onFormInit(async (form1) => {
+            if (!data?.id) return;
+            form1.setInitialValues({ ...data, upload: { url: data?.url } });
           });
-        field
-          .query('responseTimeoutSeconds')
-          .take()
-          .setDecoratorProps({
-            gridSpan: field.value === 'push' ? 1 : 2,
+          onFieldValueChange('mode', async (field) => {
+            field
+              .query('timeoutSeconds')
+              .take()
+              .setDecoratorProps({
+                gridSpan: field.value === 'push' ? 1 : 2,
+              });
+            field
+              .query('responseTimeoutSeconds')
+              .take()
+              .setDecoratorProps({
+                gridSpan: field.value === 'push' ? 1 : 2,
+              });
           });
-      });
-      onFieldValueChange('releaseType', async (field) => {
-        field.setDecoratorProps({
-          gridSpan: field.value === 'all' ? 2 : 1,
-        });
-      });
-    },
-  });
+          onFieldValueChange('releaseType', async (field) => {
+            field.setDecoratorProps({
+              gridSpan: field.value === 'all' ? 2 : 1,
+            });
+          });
+        },
+      }),
+    [],
+  );
 
   const devices = useRef<DeviceInstance[]>([]);
 

+ 17 - 6
src/pages/device/Firmware/index.tsx

@@ -59,12 +59,23 @@ const Firmware = observer(() => {
       dataIndex: 'productName',
       valueType: 'select',
       request: () =>
-        service.queryProduct().then((resp: any) =>
-          (resp?.result || []).map((item: any) => ({
-            label: item.name,
-            value: item.name,
-          })),
-        ),
+        service
+          .queryProduct({
+            paging: false,
+            terms: [
+              {
+                column: 'state',
+                value: 1,
+              },
+            ],
+            sorts: [{ name: 'name', order: 'desc' }],
+          })
+          .then((resp: any) =>
+            (resp?.result || []).map((item: any) => ({
+              label: item.name,
+              value: item.name,
+            })),
+          ),
     },
     {
       title: intl.formatMessage({

+ 3 - 3
src/pages/device/Firmware/service.ts

@@ -56,9 +56,9 @@ class Service extends BaseService<FirmwareItem> {
     });
 
   queryProduct = (params?: any) =>
-    request(`/${SystemConst.API_BASE}/device/product/_query/no-paging?paging=false`, {
-      method: 'GET',
-      params,
+    request(`/${SystemConst.API_BASE}/device/product/detail/_query/no-paging`, {
+      method: 'POST',
+      data: params,
     });
 
   queryDevice = () =>

+ 18 - 6
src/pages/link/AccessConfig/Detail/Access/index.tsx

@@ -45,12 +45,20 @@ const Access = (props: Props) => {
   };
 
   const queryProcotolList = (id?: string, params?: any) => {
-    service.getProtocolList(ProcotoleMapping.get(id), params).then((resp) => {
-      if (resp.status === 200) {
-        setProcotolList(resp.result);
-        setAllProcotolList(resp.result);
-      }
-    });
+    service
+      .getProtocolList(
+        ProcotoleMapping.get(id),
+        encodeQuery({
+          ...params,
+          sorts: { createTime: 'desc' },
+        }),
+      )
+      .then((resp) => {
+        if (resp.status === 200) {
+          setProcotolList(resp.result);
+          setAllProcotolList(resp.result);
+        }
+      });
   };
 
   useEffect(() => {
@@ -287,6 +295,7 @@ const Access = (props: Props) => {
                   );
                   tab!.onTabSaveSuccess = (value: any) => {
                     if (value.status === 200) {
+                      setNetworkCurrent(value.result?.id);
                       queryNetworkList(props.provider?.id, {
                         include: networkCurrent || '',
                       });
@@ -395,6 +404,7 @@ const Access = (props: Props) => {
                           const tab: any = window.open(`${origin}/#${url}`);
                           tab!.onTabSaveSuccess = (value: any) => {
                             if (value.status === 200) {
+                              setNetworkCurrent(value.result?.id);
                               queryNetworkList(props.provider?.id, {
                                 include: networkCurrent || '',
                               });
@@ -444,6 +454,7 @@ const Access = (props: Props) => {
                   const tab: any = window.open(`${origin}/#${url}?save=true`);
                   tab!.onTabSaveSuccess = (resp: any) => {
                     if (resp.status === 200) {
+                      setProcotolCurrent(resp.result?.id);
                       queryProcotolList(props.provider?.id);
                     }
                   };
@@ -509,6 +520,7 @@ const Access = (props: Props) => {
                           const tab: any = window.open(`${origin}/#${url}?save=true`);
                           tab!.onTabSaveSuccess = (resp: any) => {
                             if (resp.status === 200) {
+                              setProcotolCurrent(resp.result?.id);
                               queryProcotolList(props.provider?.id);
                             }
                           };

+ 3 - 1
src/pages/link/Protocol/save/index.tsx

@@ -245,7 +245,9 @@ const Save = (props: Props) => {
 
   const save = async () => {
     const value = await form.submit<ProtocolItem>();
-    const response: any = await service.savePatch({ ...props.data, ...value });
+    const response: any = props.data?.id
+      ? await service.savePatch({ ...props.data, ...value })
+      : await service.save({ ...props.data, ...value });
     if (response && response?.status === 200) {
       onlyMessage('操作成功');
       props.reload();

+ 7 - 7
src/pages/media/Cascade/Publish/index.tsx

@@ -21,21 +21,21 @@ const Publish = (props: Props) => {
 
   const getData = () => {
     let dt = 0;
+    let et = 0;
     const source = new EventSourcePolyfill(activeAPI);
     source.onmessage = (e: any) => {
       const res = JSON.parse(e.data);
-      if (res.success) {
-        const temp = res.result.total;
-        dt += temp;
+      if (res.successful) {
+        dt += 1;
         setCount(dt);
-        // setCountErr(0);
       } else {
-        setCountErr(0);
+        et += 1;
+        setCountErr(et);
+        setFlag(false);
         setErrMessage(res.message);
       }
     };
     source.onerror = () => {
-      setFlag(false);
       source.close();
     };
     source.onopen = () => {};
@@ -72,7 +72,7 @@ const Publish = (props: Props) => {
         <Col span={8}>推送通道数量: {props.data?.count || 0}</Col>
         <Col span={8}>已推送通道数量: {countErr + count}</Col>
       </Row>
-      {flag && (
+      {!flag && (
         <div>
           <Input.TextArea rows={10} value={errMessage} />
         </div>

+ 6 - 4
src/pages/rule-engine/Alarm/Configuration/Save/index.tsx

@@ -51,10 +51,12 @@ const Save = (props: Props) => {
   const getLevel = () => {
     return ConfigService.queryLevel().then((resp) => {
       if (resp.status === 200) {
-        return resp.result?.levels?.map((item: { level: number; title: string }) => ({
-          label: createImageLabel(LevelMap[item.level], item.title),
-          value: item.level,
-        }));
+        return resp.result?.levels
+          ?.filter((i: any) => i?.level && i?.title)
+          .map((item: { level: number; title: string }) => ({
+            label: createImageLabel(LevelMap[item.level], item.title),
+            value: item.level,
+          }));
       }
     });
   };

+ 6 - 4
src/pages/rule-engine/Alarm/Configuration/index.tsx

@@ -93,10 +93,12 @@ const Configuration = () => {
       request: async () => {
         const res = await service.queryDefaultLevel();
         if (res.status === 200) {
-          return (res?.result?.levels || []).map((item: any) => ({
-            label: item.title,
-            value: item.level,
-          }));
+          return (res?.result?.levels || [])
+            .filter((i: any) => i?.level && i?.title)
+            .map((item: any) => ({
+              label: item.title,
+              value: item.level,
+            }));
         }
         return [];
       },