Procházet zdrojové kódy

fix:
1.指标创建保存失效-被派生指标的来自指标解析影响

WanRuixiang před 9 měsíci
rodič
revize
0a59210bae

+ 38 - 36
src/app/hooks/useModelConfig.js

@@ -1,4 +1,5 @@
 import {DIM_TYPE_ENUM} from "../constants";
+import {message} from "antd";
 
 export function useModelConfig() {
   /**
@@ -152,7 +153,6 @@ export function useModelConfig() {
   const sqlResultToTable = (model,columns,fields,init,bizs) => {
     try {
       let tableData = [];
-      console.log(bizs)
       columns.forEach(col=>{
         // SQL中摘出的字段、别名、表
         let table="";
@@ -242,46 +242,48 @@ export function useModelConfig() {
    * */
   const initQuickModel=(model,nodes,dimensions,bizs)=>{
     let tableData = [];
+    try {
+      // 插入模型维度
+      nodes.forEach(field => {
+        const initObj = bizs.find(item=>item.name===field.fieldName)
+        if (initObj){
+          tableData.push({
+            ...field,
+            id:Math.random(),
+            bizName:initObj.bizName.replace(model+"_", ""),
+            isKey:DIM_TYPE_ENUM.IDENTIFY===initObj.type,
+            common:DIM_TYPE_ENUM.CATEGORICAL===initObj.type,
+            datetime:DIM_TYPE_ENUM.DATETIME===initObj.type,
+            measure:!initObj.type,
+          });
+        }else {
+          tableData.push(field)
+        }
+      })
+
+      // 插入自定义的维度
+      const insertDims = (dimensions||[]).filter(item=>
+        nodes.findIndex(field=> field.fieldName===item.name)<0
+      );
 
-    // 插入模型维度
-    nodes.forEach(field => {
-      const initObj = bizs.find(item=>item.name===field.fieldName)
-      if (initObj){
+      insertDims.forEach(field=>{
         tableData.push({
           ...field,
           id:Math.random(),
-          bizName:initObj.bizName.replace(model+"_", ""),
-          isKey:DIM_TYPE_ENUM.IDENTIFY===initObj.type,
-          common:DIM_TYPE_ENUM.CATEGORICAL===initObj.type,
-          datetime:DIM_TYPE_ENUM.DATETIME===initObj.type,
-          measure:!initObj.type,
-        });
-      }else {
-        tableData.push(field)
-      }
-    })
-
-    // 插入自定义的维度
-    const insertDims = (dimensions||[]).filter(item=>
-      nodes.findIndex(field=> field.fieldName===item.name)<0
-    );
-
-    insertDims.forEach(field=>{
-      tableData.push({
-        ...field,
-        id:Math.random(),
-        bizName:field.name,
-        isKey:DIM_TYPE_ENUM.IDENTIFY===field.type,
-        common:DIM_TYPE_ENUM.CATEGORICAL===field.type,
-        datetime:DIM_TYPE_ENUM.DATETIME===field.type,
-        measure:false,
-        comment:field.description,
-        disabled:true,
-        fieldName: '自定义',
-        tableName: '自定义',
+          bizName:field.name,
+          isKey:DIM_TYPE_ENUM.IDENTIFY===field.type,
+          common:DIM_TYPE_ENUM.CATEGORICAL===field.type,
+          datetime:DIM_TYPE_ENUM.DATETIME===field.type,
+          measure:false,
+          comment:field.description,
+          disabled:true,
+          fieldName: '自定义',
+          tableName: '自定义',
+        })
       })
-    })
-
+    }catch (error) {
+      message.error('维度初始化失败:'+error)
+    }
     return tableData
   }
 

+ 30 - 22
src/app/pages/IndexDefine/components/IndexCreator.jsx

@@ -250,28 +250,36 @@ const component = forwardRef(({
             label={t("formItem.invokeMethod")}
             valueEnum={INVOKE_TYPE}
           />
-          <Wrapper>
-            <Title className="divider"> {t("title.invokeRule")} </Title>
-          </Wrapper>
-          <ProFormSelect
-            name="incrementPeriod"
-            label={t("formItem.incrementPeriod")}
-            valueEnum={TIME_MODE}
-            rules={[{ required: true }]}
-          />
-          <ProFormSelect
-            name="runCycleCode"
-            label={t("formItem.runCycle")}
-            valueEnum={TIME_MODE}
-            rules={[{ required: true }]}
-          />
-          <ProFormTimePicker name="startTime" width="100%" label={t("formItem.startTime")} initialValue={initialValues?.startTime}/>
-          <ProFormRadio.Group
-            name="way"
-            label={t("formItem.invokeWay")}
-            options={PERSISTENCE_WAY}
-            rules={[{ required: true }]}
-          />
+          <ProFormDependency name={["invokeMethod"]}>
+            {
+              ({ invokeMethod }) =>
+                invokeMethod==='MANUAL' && <>
+                  <Wrapper>
+                    <Title className="divider"> {t("title.invokeRule")} </Title>
+                  </Wrapper>
+                  <ProFormSelect
+                    name="incrementPeriod"
+                    label={t("formItem.incrementPeriod")}
+                    valueEnum={TIME_MODE}
+                    rules={[{ required: true }]}
+                  />
+                  <ProFormSelect
+                    name="runCycleCode"
+                    label={t("formItem.runCycle")}
+                    valueEnum={TIME_MODE}
+                    rules={[{ required: true }]}
+                  />
+                  <ProFormTimePicker name="startTime" width="100%" label={t("formItem.startTime")} initialValue={initialValues?.startTime}/>
+                  <ProFormRadio.Group
+                    name="way"
+                    label={t("formItem.invokeWay")}
+                    options={PERSISTENCE_WAY}
+                    rules={[{ required: true }]}
+                  />
+                </>
+            }
+          </ProFormDependency>
+
         </Card>
       </ProForm>
     </Drawer>

+ 134 - 131
src/app/pages/IndexDefine/index.jsx

@@ -216,150 +216,153 @@ export const IndexDefine = () => {
 
   /** 指标创建表单-提交 */
   const onCreatorFinish = useCallback((values)=>{
-    const {
-      id,type,decimalPlaces,relateDimension,dateDimId,
-      measure,operations,sensitiveLevel,filters,formIndex,incrementPeriod,
-      invokeMethod, periodId,runCycleCode,measureExpr, way, startTime
-    } = values;
-    const formIndexObj=JSON.parse(formIndex)
-    let drillDownDimensions = [];
-    if (relateDimension){
-      dateDimId && drillDownDimensions.push({
-        dimensionId:dateDimId,
-        necessary:false,
-        inheritedFromModel:false
-      })
-      relateDimension.forEach(v=>
-        drillDownDimensions.push({
-        dimensionId:v,
-        necessary:false,
-        inheritedFromModel:false
-      }))
-    }
-    const bizCondition = bizConditionToSQL(filters);
-    // 部分字段需再次处理
-    let params = {
-      ...values,
-      sensitiveLevel:parseInt(sensitiveLevel),
-      typeEnum:TYPE_ENUM.METRIC,
-      dataFormat:{
-        needMultiply100:false,
-        decimalPlaces:decimalPlaces?decimalPlaces:2,
-      },
-      relateDimension:{
-        drillDownDimensions
-      },
-      metricDefineType:DEFINE_TYPE[type],
-      statisticsPeriod:periodId
-    }
-    // 派生指标
-    if (type===FORM_TYPE.DERIVED.value){
-      params.metricDefineByMeasureParams={
-        measures:[
-          {
-            agg:operations,
-            bizName:formIndexObj.bizName,
-            constraint:bizCondition,
-          }
-        ],
-        expr:formIndexObj.expr,
-        filterSql:""
+    try {
+      const {
+        id,type,decimalPlaces,relateDimension,dateDimId,
+        measure,operations,sensitiveLevel,filters,formIndex,incrementPeriod,
+        invokeMethod, periodId,runCycleCode,measureExpr, way, startTime
+      } = values;
+      let drillDownDimensions = [];
+      if (relateDimension){
+        dateDimId && drillDownDimensions.push({
+          dimensionId:dateDimId,
+          necessary:false,
+          inheritedFromModel:false
+        })
+        relateDimension.forEach(v=>
+          drillDownDimensions.push({
+            dimensionId:v,
+            necessary:false,
+            inheritedFromModel:false
+          }))
       }
-    }
-    // 派生指标
-    if (type!==FORM_TYPE.COMPOSITE.value) {
-      params.metricDefineByMetricParams = {}
-    }
-    // 原子指标
-    if (type===FORM_TYPE.ATOMIC.value) {
-      if (measureExpr.expr){
-        params.metricDefineType='CUSTOM'
-        params.metricDefineByMeasureParams = {}
-        params.metricDefineByFieldParams = {
-          fields:measureExpr.metrics.map(item=>({fieldName:item.bizName,agg:'SUM'})),
-          expr:measureExpr.expr,
-          filterSql:""
-        }
-      }else {
+      const bizCondition = bizConditionToSQL(filters);
+      // 部分字段需再次处理
+      let params = {
+        ...values,
+        sensitiveLevel:parseInt(sensitiveLevel),
+        typeEnum:TYPE_ENUM.METRIC,
+        dataFormat:{
+          needMultiply100:false,
+          decimalPlaces:decimalPlaces?decimalPlaces:2,
+        },
+        relateDimension:{
+          drillDownDimensions
+        },
+        metricDefineType:DEFINE_TYPE[type],
+        statisticsPeriod:periodId
+      }
+      // 派生指标
+      if (type===FORM_TYPE.DERIVED.value){
+        const formIndexObj=JSON.parse(formIndex);
         params.metricDefineByMeasureParams={
           measures:[
             {
               agg:operations,
-              bizName:measure,
-              constraint:"",
+              bizName:formIndexObj.bizName,
+              constraint:bizCondition,
             }
           ],
-          expr:measure,
+          expr:formIndexObj.expr,
           filterSql:""
         }
       }
-    }
+      // 派生指标
+      if (type!==FORM_TYPE.COMPOSITE.value) {
+        params.metricDefineByMetricParams = {}
+      }
+      // 原子指标
+      if (type===FORM_TYPE.ATOMIC.value) {
+        if (measureExpr.expr){
+          params.metricDefineType='CUSTOM'
+          params.metricDefineByMeasureParams = {}
+          params.metricDefineByFieldParams = {
+            fields:measureExpr.metrics.map(item=>({fieldName:item.bizName,agg:'SUM'})),
+            expr:measureExpr.expr,
+            filterSql:""
+          }
+        }else {
+          params.metricDefineByMeasureParams={
+            measures:[
+              {
+                agg:operations,
+                bizName:measure,
+                constraint:"",
+              }
+            ],
+            expr:measure,
+            filterSql:""
+          }
+        }
+      }
 
-    // 更新、创建指标
-    if (id){
-      dispatch(updateMetric({
-        params,
-        resolve({id}){
-          dispatch(getIndexByConditions({
-            params:{
-              domainIds: [commonRef.current.treeSelect.id],
-              current:1,
-              pageSize:999
-            },
-          }))
-          dispatch(persistenceConfig({
-            params:{
-              metricId:id,
-              runCycleCode,
-              tableName:'index_metric_'+id,
-              defaultConfig:JSON.stringify({
-                unit:1,
-                period:incrementPeriod,
-                type:invokeMethod,
-                startTime,
-                way
-              }),
-            }
-          }))
+      // 更新、创建指标
+      if (id){
+        dispatch(updateMetric({
+          params,
+          resolve({id}){
+            dispatch(getIndexByConditions({
+              params:{
+                domainIds: [commonRef.current.treeSelect.id],
+                current:1,
+                pageSize:999
+              },
+            }))
+            dispatch(persistenceConfig({
+              params:{
+                metricId:id,
+                runCycleCode,
+                tableName:'index_metric_'+id,
+                defaultConfig:JSON.stringify({
+                  unit:1,
+                  period:incrementPeriod,
+                  type:invokeMethod,
+                  startTime,
+                  way
+                }),
+              }
+            }))
 
-          setOpenCreator(false)
-        }
-      }))
-    }else {
-      dispatch(createMetric({
-        params,
-        resolve({id}){
-          dispatch(getIndexByConditions({
-            params:{
-              domainIds: [commonRef.current.treeSelect.id],
-              current:1,
-              pageSize:999
-            },
-          }))
-          dispatch(persistenceConfig({
-            params:{
-              metricId:id,
-              runCycleCode,
-              tableName:'index_metric_'+id,
-              defaultConfig:JSON.stringify({
-                metricTypeDefaultConfig:{
-                  timeDefaultConfig:{
-                    timeMode:"RECENT",
-                    unit:1,
-                    period:incrementPeriod,
-                    type:invokeMethod,
-                    startTime,
-                    way
-                  }
-                },
-              }),
-            }
-          }))
-          setOpenCreator(false)
-        }
-      }))
+            setOpenCreator(false)
+          }
+        }))
+      }else {
+        dispatch(createMetric({
+          params,
+          resolve({id}){
+            dispatch(getIndexByConditions({
+              params:{
+                domainIds: [commonRef.current.treeSelect.id],
+                current:1,
+                pageSize:999
+              },
+            }))
+            dispatch(persistenceConfig({
+              params:{
+                metricId:id,
+                runCycleCode,
+                tableName:'index_metric_'+id,
+                defaultConfig:JSON.stringify({
+                  metricTypeDefaultConfig:{
+                    timeDefaultConfig:{
+                      timeMode:"RECENT",
+                      unit:1,
+                      period:incrementPeriod,
+                      type:invokeMethod,
+                      startTime,
+                      way
+                    }
+                  },
+                }),
+              }
+            }))
+            setOpenCreator(false)
+          }
+        }))
+      }
+    }catch (error) {
+     throw error;
     }
-
   },[]);
 
   /** 双击打开详情 */

+ 1 - 1
src/app/pages/ModalManage/components/QuickStartStep.jsx

@@ -233,7 +233,7 @@ export const QuickStartStep = memo(({
     })
     // 插入新增的
     const others = items.map((item,index)=>{
-      const findItem = rest.find(node=>node.data.label===item.columnName)
+      const findItem = rest.find(node=>node?.data?.label===item.columnName)
       if (findItem){
         return findItem
       }else {