Leo 2 yıl önce
ebeveyn
işleme
5a33d0c057

+ 23 - 5
src/component/CronSelect.jsx

@@ -128,11 +128,29 @@ const CronSelect = ({ cron_data }, ref) => {
 
   const onCronTypeChange = e => {
     setCronType(e.target.value)
-    setMinVal('')
-    setHourVal('')
-    setDayVal('')
-    setWeekVal('')
-    setMonthVal('')
+    console.log(e.target.value)
+    switch (e.target.value) {
+      case '0':
+        setHourVal(1)
+        break
+      case '1':
+        setMinVal(0)
+        setHourVal(0)
+        break
+      case '2':
+        setWeekVal(1)
+        setMinVal(0)
+        setHourVal(0)
+        break
+      case '3':
+        setMinVal(0)
+        setHourVal(0)
+        setDayVal(1)
+        setMonthVal(1)
+        break
+      default:
+        break
+    }
   }
   const onChangeHourType = val => {
     setHourType(val)

+ 29 - 29
src/module/datasource/component/DatasourceEdit.jsx

@@ -30,7 +30,10 @@ export default function DatasourceAdd({ ds_id, ds_info, setDsModalVisible }) {
   const [loading, setLoading] = useState(false)
 
   const [keytabFile, setKeytabFile] = useState([])
-  const [krd5File, setKrd5File] = useState([])
+  const [krb5File, setKrb5File] = useState([])
+
+  const [keytabUrl, setKeytabUrl] = useState(null)
+  const [krb5Url, setKrb5Url] = useState(null)
 
   const [useSSL, setUseSSL] = useState(false)
   // Form表单
@@ -52,7 +55,9 @@ export default function DatasourceAdd({ ds_id, ds_info, setDsModalVisible }) {
     setUseSSL(ds_info.use_ssl === 1)
     if (ds_info.kerberos) {
       setKeytabFile([])
-      setKrd5File([])
+      setKrb5File([])
+      setKeytabUrl(ds_info.keytab)
+      setKrb5Url(ds_info.krb5config)
       setKerberosServiceName(ds_info.kerberos_service_name)
       setPrincipal(ds_info.principal)
     }
@@ -72,7 +77,7 @@ export default function DatasourceAdd({ ds_id, ds_info, setDsModalVisible }) {
     try {
       await form.validateFields(fields)
       setLoading(true)
-      const testData = form.getFieldsValue(fields)
+      const testData = form.getFieldsValue()
       const params = {
         ...testData,
         tag: form.getFieldValue('tag').join('/'),
@@ -83,14 +88,17 @@ export default function DatasourceAdd({ ds_id, ds_info, setDsModalVisible }) {
       params['use_ssl'] = useSSL ? 1 : 0
       params['kerberos'] = kerbsValid ? 1 : 0
       if (kerbsValid) {
+        let keytab = keytabUrl
+        let krb5config = krb5Url
+        console.log(keytab, krb5config)
         if (keytabFile && keytabFile.length) {
-          const keytab = await uploadKerbFile(keytabFile)
-          params['keytab'] = keytab
+          keytab = await uploadKerbFile(keytabFile)
         }
-        if (krd5File && krd5File.length) {
-          const krb5config = await uploadKerbFile(krd5File)
-          params['krb5config'] = krb5config
+        if (krb5File && krb5File.length) {
+          krb5config = await uploadKerbFile(krb5File)
         }
+        params['keytab'] = keytab
+        params['krb5config'] = krb5config
         params['kerberos_service_name'] = kerberosServiceName
         params['principal'] = principal
       }
@@ -110,18 +118,8 @@ export default function DatasourceAdd({ ds_id, ds_info, setDsModalVisible }) {
     form
       .validateFields()
       .then(async () => {
-        const fields = [
-          'datasource_name',
-          'datasource',
-          'database_name',
-          'jdbc_username',
-          'jdbc_password',
-          'jdbc_url',
-          'comments',
-          'tag',
-        ]
         const params = {
-          ...form.getFieldsValue(fields),
+          ...form.getFieldsValue(),
           tag: form.getFieldValue('tag').join('/'),
         }
         if (params.jdbc_password) {
@@ -130,14 +128,16 @@ export default function DatasourceAdd({ ds_id, ds_info, setDsModalVisible }) {
         params['use_ssl'] = useSSL ? 1 : 0
         params['kerberos'] = kerbsValid ? 1 : 0
         if (kerbsValid) {
+          let keytab = keytabUrl
+          let krb5config = krb5Url
           if (keytabFile && keytabFile.length) {
-            const keytab = await uploadKerbFile(keytabFile)
-            params['keytab'] = keytab
+            keytab = await uploadKerbFile(keytabFile)
           }
-          if (krd5File && krd5File.length) {
-            const krb5config = await uploadKerbFile(krd5File)
-            params['krb5config'] = krb5config
+          if (krb5File && krb5File.length) {
+            krb5config = await uploadKerbFile(krb5File)
           }
+          params['keytab'] = keytab
+          params['krb5config'] = krb5config
           params['kerberos_service_name'] = kerberosServiceName
           params['principal'] = principal
         }
@@ -193,16 +193,16 @@ export default function DatasourceAdd({ ds_id, ds_info, setDsModalVisible }) {
 
   const krd5UpProps = {
     onRemove: file => {
-      const index = krd5File.indexOf(file)
-      const newFileList = krd5File.slice()
+      const index = krb5File.indexOf(file)
+      const newFileList = krb5File.slice()
       newFileList.splice(index, 1)
-      setKrd5File(newFileList)
+      setKrb5File(newFileList)
     },
     beforeUpload: file => {
-      setKrd5File([...krd5File, file])
+      setKrb5File([...krb5File, file])
       return false
     },
-    krd5File,
+    krb5File,
   }
   return (
     <ProForm

+ 55 - 10
src/module/datasource/component/StepThree.jsx

@@ -6,7 +6,7 @@ import syncImgUrl from '../style/img/sync.png'
 import warningImgUrl from '../style/img/warning.png'
 import deleteImgUrl from '../style/img/delete.png'
 import { getTableSchema } from '../services'
-import { Tooltip } from 'antd'
+import { Button, Space, Tooltip } from 'antd'
 
 const StepThreeDiv = styled.div`
   .title {
@@ -71,7 +71,7 @@ const StepThreeDiv = styled.div`
     align-items: center;
     height: 33px;
     font-size: 12px;
-    margin-bottom: 1em;
+    // margin-bottom: 1em;
   }
   .mapping__content {
     height: 500px;
@@ -174,6 +174,37 @@ export default function StepThree({
   const deleteMapping = mapping => {
     setSyncMappings(syncMappings.filter(item => item !== mapping))
   }
+  const selectedAll = () => {
+    const indexs = []
+    datasourceFields.forEach((item, index) => {
+      const sourceType = datasourceFields[index].type.split('(')[0]
+      const syncType = syncFields[index]?.type.split('(')[0]
+      const ds_field = datasourceFields[index].value
+      const sy_field = syncFields[index]?.value
+      const sameType =
+        index > syncFields.length - 1
+          ? false
+          : sourceType === syncType ||
+            (checkType(sourceType) && checkType(syncType))
+      if (ds_field === sy_field && sameType) indexs.push(index)
+    })
+    const ds_sync = indexs.map(item => {
+      const datasourceField = `${datasourceFields[item].value}: ${datasourceFields[item].type}`
+      const syncField = `${syncFields[item].value}: ${syncFields[item].type}`
+      return {
+        datasourceField,
+        syncField,
+        key: {
+          drawData: datasourceFields[item].key,
+          loadData: syncFields[item].key,
+        },
+      }
+    })
+    setSyncMappings([...ds_sync])
+  }
+  const checkType = type => {
+    return ['varchar', 'string'].includes(type)
+  }
   return (
     <StepThreeDiv>
       <p className="title">配置转换规则</p>
@@ -184,9 +215,14 @@ export default function StepThree({
             <span>
               提取源:{drawDataForm.getFieldValue('datasource_table')}
             </span>
-            <span>
-              加载源:{loadDataForm.getFieldValue('datasource_table')}
-            </span>
+            <Space>
+              <span>
+                加载源:{loadDataForm.getFieldValue('datasource_table')}
+              </span>
+              <Button type="link" onClick={selectedAll} style={{ padding: 0 }}>
+                全选
+              </Button>
+            </Space>
           </div>
           <div className="table__content">
             <ReactSortable
@@ -208,24 +244,33 @@ export default function StepThree({
               {datasourceFields.map((item, index) => {
                 const sourceType = datasourceFields[index]?.type.split('(')[0]
                 const syncType = syncFields[index]?.type.split('(')[0]
+                const ds_field = datasourceFields[index]?.value
+                const sy_field = syncFields[index]?.value
                 const sameType =
                   index > syncFields.length - 1
                     ? false
                     : sourceType === syncType ||
-                      (['varchar', 'string'].includes(sourceType) &&
-                        ['varchar', 'string'].includes(syncType))
+                      (checkType(sourceType) && checkType(syncType))
                 return (
                   <div className="sync__img" key={item?.key}>
                     <img
-                      src={sameType ? syncImgUrl : warningImgUrl}
+                      src={
+                        ds_field === sy_field && sameType
+                          ? syncImgUrl
+                          : warningImgUrl
+                      }
                       alt=""
                       onClick={() => {
-                        if (sameType) syncFieldData(index)
+                        if (ds_field === sy_field && sameType)
+                          syncFieldData(index)
                       }}
                       style={{
                         width: '20px',
                         height: '20px',
-                        cursor: sameType ? 'pointer' : 'no-drop',
+                        cursor:
+                          ds_field === sy_field && sameType
+                            ? 'pointer'
+                            : 'no-drop',
                       }}
                     />
                   </div>

+ 19 - 5
src/module/tasklog/component/TaskLogWatcher.jsx

@@ -1,6 +1,6 @@
 import { Button, Card, Checkbox, message, Space, Table } from 'antd'
 import React, { useEffect, useState } from 'react'
-import { useLocation } from 'react-router-dom'
+import { useLocation, useNavigate } from 'react-router-dom'
 import styled from 'styled-components'
 import { getAllTask, getTaskLog } from '../services/index'
 import moment from 'moment'
@@ -53,6 +53,7 @@ let timeout = null
 
 const TaskLogWatcher = () => {
   const { state } = useLocation()
+  const navigate = useNavigate()
   const [logData, setLogData] = useState('暂无日志')
   // 初始化节点列表
   const [jobList, setJobList] = useState([])
@@ -147,12 +148,14 @@ const TaskLogWatcher = () => {
       if (!['success', 'failed'].includes(data.data.status) && autoRefresh) {
         timeout = setTimeout(() => {
           fetchTaskLog(params)
-        }, 3000)
+        }, 5000)
       } else {
-        const index = jobList.findIndex(item => (item.key = record.key))
+        const index = jobList.findIndex(item => item.key === record.key)
         const list = [...jobList]
-        list[index].handleResult = data.data.status === 'success' ? 2 : 3
-        setJobList(list)
+        if (list[index]) {
+          list[index].handleResult = data.data.status === 'success' ? 2 : 3
+          setJobList(list)
+        }
       }
     } else {
       message.error(data.msg)
@@ -172,6 +175,10 @@ const TaskLogWatcher = () => {
     fetchTaskLog(selectJob)
   }
 
+  const returnLogTable = () => {
+    navigate(-1)
+  }
+
   useEffect(() => {
     fetchAllTask()
   }, [state])
@@ -229,6 +236,13 @@ const TaskLogWatcher = () => {
                 自动刷新
               </Checkbox>
               <Button onClick={onClickRefresh}>刷新</Button>
+              <Button
+                type="primary"
+                onClick={() => {
+                  returnLogTable()
+                }}>
+                返回上一级
+              </Button>
             </Space>
           </div>
           <pre className="log">{logData}</pre>

+ 10 - 23
src/module/taskmgmt/component/TaskCreaterView.jsx

@@ -148,31 +148,18 @@ const TaskCreaterView = () => {
             if (taskFormData.executionCycle === 2) {
               params['cron_expression'] = cron_data
             }
+            let res = {}
+            if (state !== null) {
+              params['id'] = state.id
+              res = await updateJmJobInfo(params)
+            } else {
+              res = await createJmJob(params)
+            }
 
-            // 单位非空判断
-            if (
-              taskFormData.executionCycle === 1 ||
-              cron_data?.minute ||
-              cron_data?.hour ||
-              cron_data?.week ||
-              cron_data?.month ||
-              cron_data?.cron_expression
-            ) {
-              let res = {}
-              if (state !== null) {
-                params['id'] = state.id
-                res = await updateJmJobInfo(params)
-              } else {
-                res = await createJmJob(params)
-              }
-
-              if (res.data.code === 200) {
-                navigate(-1)
-              } else {
-                message.error(res.data.msg)
-              }
+            if (res.data.code === 200) {
+              navigate(-1)
             } else {
-              message.error('定时规则数据有误')
+              message.error(res.data.msg)
             }
           })
           .catch(err => {