Преглед изворни кода

feat(场景联动): 添加设备输出-标签

xieyonghong пре 3 година
родитељ
комит
e37342d43d

+ 1 - 0
src/pages/rule-engine/Scene/Save/action/VariableItems/index.ts

@@ -1,3 +1,4 @@
 export { default as UserList } from './user';
 export { default as OrgList } from './org';
 export { default as BuiltIn } from './builtIn';
+export { default as TagSelect } from './tag';

+ 50 - 0
src/pages/rule-engine/Scene/Save/action/VariableItems/tag.tsx

@@ -0,0 +1,50 @@
+import { Select } from 'antd';
+import { useEffect, useState } from 'react';
+import { queryTag } from '@/pages/rule-engine/Scene/Save/action/service';
+
+interface TagSelectProps {
+  configId?: string;
+  value?: string;
+  onChange?: (value: string) => void;
+}
+
+export default (props: TagSelectProps) => {
+  const [value, setValue] = useState<string | undefined>(props.value);
+  const [options, setOptions] = useState([]);
+
+  useEffect(() => {
+    if (props.configId) {
+      queryTag(props.configId).then((res) => {
+        if (res.status === 200) {
+          setOptions(res.result);
+        } else {
+          setOptions([]);
+        }
+      });
+    } else {
+      setOptions([]);
+    }
+  }, [props.configId]);
+
+  useEffect(() => {
+    setValue(props.value);
+  }, [props.value]);
+
+  return (
+    <Select
+      value={value}
+      placeholder={'请选择标签'}
+      options={options}
+      fieldNames={{
+        label: 'name',
+        value: 'id',
+      }}
+      style={{ width: '100%' }}
+      onChange={(key) => {
+        if (props.onChange) {
+          props.onChange(key);
+        }
+      }}
+    />
+  );
+};

+ 8 - 9
src/pages/rule-engine/Scene/Save/action/device/deviceModal.tsx

@@ -41,7 +41,6 @@ export default (props: DeviceModelProps) => {
   const [value, setValue] = useState<ChangeValueType[]>(props.value || []);
 
   useEffect(() => {
-    console.log('deviceModal', props.value);
     setValue(props.value || []);
     setSelectKeys(props.value || []);
   }, [props.value]);
@@ -109,8 +108,6 @@ export default (props: DeviceModelProps) => {
     },
   ];
 
-  console.log(selectKeys.map((item) => item.value));
-
   return (
     <>
       {visible && (
@@ -149,12 +146,14 @@ export default (props: DeviceModelProps) => {
             search={false}
             rowSelection={{
               selectedRowKeys: selectKeys.map((item) => item.value),
-              onSelect: (a: any, b: any, selectedRowKeys) => {
-                console.log(selectedRowKeys);
-              },
-              onChange: (selectedRowKeys, selectedRows) => {
-                console.log(selectedRows);
-                setSelectKeys(selectedRows.map((item) => ({ name: item.name, value: item.id })));
+              onSelect: (selectedRow: any, selected: any) => {
+                let newSelectKeys = [...selectKeys];
+                if (selected) {
+                  newSelectKeys.push({ name: selectedRow.name, value: selectedRow.id });
+                } else {
+                  newSelectKeys = newSelectKeys.filter((item) => item.value !== selectedRow.id);
+                }
+                setSelectKeys(newSelectKeys);
               },
             }}
             request={(params) => queryDevice(params)}

+ 6 - 1
src/pages/rule-engine/Scene/Save/action/device/index.tsx

@@ -45,7 +45,7 @@ export default (props: DeviceProps) => {
 
   const getProducts = async () => {
     const resp = await getProductList({ paging: false });
-    if (resp.status === 200) {
+    if (resp && resp.status === 200) {
       setProductList(resp.result);
     }
   };
@@ -122,6 +122,11 @@ export default (props: DeviceProps) => {
           <TagModal tagData={tagList} />
         </Form.Item>
       )}
+      {selector === SourceEnum.relation && (
+        <Form.Item name={[name, 'device', 'selectorValues']} {...props.restField}>
+          <Select style={{ width: 300 }} />
+        </Form.Item>
+      )}
       <Form.Item
         name={[name, 'device', 'message', 'messageType']}
         initialValue={MessageTypeEnum.WRITE_PROPERTY}

+ 15 - 13
src/pages/rule-engine/Scene/Save/action/device/tagModal.tsx

@@ -63,7 +63,6 @@ export default (props: TagModalProps) => {
           }
           return valueItem;
         });
-      console.log(names);
       setNameList(names);
       setTagList(newTagList);
     } else {
@@ -119,16 +118,20 @@ export default (props: TagModalProps) => {
           />
         );
       case 'date':
-        // @ts-ignore
         return (
-          <DatePicker
-            value={record.value && moment(record.value)}
-            format={record.format || 'YYYY-MM-DD HH:mm:ss'}
-            style={{ width: '100%' }}
-            onChange={(_, date) => {
-              record.value = date;
-            }}
-          />
+          <>
+            {
+              // @ts-ignore
+              <DatePicker
+                value={record.value && moment(record.value)}
+                format={record.format || 'YYYY-MM-DD HH:mm:ss'}
+                style={{ width: '100%' }}
+                onChange={(_, date) => {
+                  record.value = date;
+                }}
+              />
+            }
+          </>
         );
       default:
         return (
@@ -154,15 +157,14 @@ export default (props: TagModalProps) => {
             .filter((item) => !!item.value)
             .map((item: any) => {
               return {
-                column: item.value,
+                column: item.id,
                 type: item.type,
-                name: item.id,
+                value: item.value,
               };
             });
           if (props.onChange) {
             props.onChange(newValue);
           }
-          console.log(newValue);
           setVisible(false);
           setTagList([{}]);
         }}

+ 27 - 28
src/pages/rule-engine/Scene/Save/action/messageContent.tsx

@@ -1,6 +1,11 @@
 import { Col, Form, Row } from 'antd';
 import type { FormInstance } from 'antd';
-import { BuiltIn, OrgList, UserList } from '@/pages/rule-engine/Scene/Save/action/VariableItems';
+import {
+  BuiltIn,
+  OrgList,
+  UserList,
+  TagSelect,
+} from '@/pages/rule-engine/Scene/Save/action/VariableItems';
 import { InputFile } from '@/pages/rule-engine/Scene/Save/components';
 
 interface MessageContentProps {
@@ -24,43 +29,37 @@ export default (props: MessageContentProps) => {
               {props.template.variableDefinitions.map((item: any, index: number) => {
                 const type = item.expands?.businessType || item.type;
                 const _name = [props.name, 'notify', 'variables', item.id];
+                let initialValue = undefined;
+                if (type === 'user') {
+                  initialValue = {
+                    source: 'relation',
+                    value: undefined,
+                  };
+                } else if (['date', 'number', 'string'].includes(type)) {
+                  initialValue = {
+                    source: 'fixed',
+                    value: undefined,
+                  };
+                }
                 return (
                   <Col span={12} key={`${item.id}_${index}`}>
-                    {type === 'user' ? (
-                      <Form.Item
-                        name={_name}
-                        label={item.name}
-                        initialValue={{
-                          source: 'relation',
-                          value: undefined,
-                        }}
-                      >
+                    <Form.Item name={_name} label={item.name} initialValue={initialValue}>
+                      {type === 'user' ? (
                         <UserList
                           notifyType={props.notifyType}
                           configId={props.configId}
                           type={props.triggerType}
                         />
-                      </Form.Item>
-                    ) : type === 'org' ? (
-                      <Form.Item name={_name} label={item.name}>
+                      ) : type === 'org' ? (
                         <OrgList notifyType={props.notifyType} configId={props.configId} />
-                      </Form.Item>
-                    ) : type === 'file' ? (
-                      <Form.Item name={_name} label={item.name}>
+                      ) : type === 'file' ? (
                         <InputFile />
-                      </Form.Item>
-                    ) : (
-                      <Form.Item
-                        name={_name}
-                        label={item.name}
-                        initialValue={{
-                          source: 'fixed',
-                          value: undefined,
-                        }}
-                      >
+                      ) : type === 'tag' ? (
+                        <TagSelect configId={props.configId} />
+                      ) : (
                         <BuiltIn type={props.triggerType} data={item} />
-                      </Form.Item>
-                    )}
+                      )}
+                    </Form.Item>
                   </Col>
                 );
               })}

+ 4 - 0
src/pages/rule-engine/Scene/Save/action/service.ts

@@ -65,3 +65,7 @@ export const queryWechatUsers = (id: string) =>
 // 微信部门
 export const queryWechatDepartments = (id: string) =>
   request(`${SystemConst.API_BASE}/notifier/wechat/corp/${id}/departments`, { method: 'GET' });
+
+// 根据配置ID获取标签推送
+export const queryTag = (id: string) =>
+  request(`${SystemConst.API_BASE}/notifier/wechat/corp/${id}/tags`, { method: 'GET' });