nanjingliujinyu 5 bulan lalu
induk
melakukan
af03506c15

+ 51 - 0
ruoyi-ui/src/api/service/timing.js

@@ -0,0 +1,51 @@
+import request from "@/utils/request";
+
+export function snailList(query) {
+  return request({
+    url: '/snail/job/jobList',
+    method: 'get',
+    params: query
+  })
+}
+export function addSnail(data) {
+  return request({
+    url: "/snail/job",
+    method: 'post',
+    data:data
+  });
+}
+export function snailDe(query) {
+  return request({
+    url: '/snail/job/getJobDetail',
+    method: 'get',
+    params: query
+  })
+}
+export function snailEdit(data) {
+  return request({
+    url: '/snail/job',
+    method: 'put',
+    data: data
+  })
+}
+export function delSnamil(id) {
+  return request({
+    url: '/snail/job/job',
+    method: 'delete',
+    params: id
+  })
+}
+export function snailSta(query) {
+  return request({
+    url: '/snail/job/updateJobStatus',
+    method: 'get',
+    params: query
+  })
+}
+export function snailTri(query) {
+  return request({
+    url: '/snail/job/triggerJob',
+    method: 'get',
+    params: query
+  })
+}

+ 5 - 5
ruoyi-ui/src/views/register/modelData/index.vue

@@ -41,11 +41,11 @@ const data =  ref([
         value:'dataSource',
         id:'1'
     },
-    {
-        label:'元数据',
-        value:'metaData',
-        id:'2'
-    },
+    // {
+    //     label:'元数据',
+    //     value:'metaData',
+    //     id:'2'
+    // },
     {
         label:'数据集(编辑)',
         value:'dataUn',

+ 380 - 256
ruoyi-ui/src/views/service/timing/index.vue

@@ -5,63 +5,40 @@
             <div>
                 组名称
             </div>
-            <el-select
-            v-model="serzu"
-            class="noBorSel"
-            placeholder=""
-            style="width: 10%;margin-left: 1%;"
-            >
-                <el-option
-                v-for="item in optionsShuLei"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-                />
-            </el-select>
+            <el-input size="mini" v-model="groupName" style="width: 10%;margin-left: 1%;" placeholder="" />
             <div style="margin-left: 2%;">
                 任务名称
             </div>
-            <el-input size="mini" v-model="formTree.itemNo" style="width: 10%;margin-left: 1%;" placeholder="" />
+            <el-input size="mini" v-model="jobName" style="width: 10%;margin-left: 1%;" placeholder="" />
             <div style="margin-left: 2%;">
                 执行器名称
             </div>
-            <el-input size="mini" v-model="formTree.itemNo" style="width: 10%;margin-left: 1%;" placeholder="" />
+            <el-input size="mini" v-model="executorInfo" style="width: 10%;margin-left: 1%;" placeholder="" />
             <div style="margin-left: 2%;">
                 状态
             </div>
             <el-select
-            v-model="serzu"
+            v-model="jobStatus"
             class="noBorSel"
             placeholder=""
             style="width: 10%;margin-left: 1%;"
             >
-                <el-option
-                v-for="item in optionsShuLei"
-                :key="item.value"
-                :label="item.label"
-                :value="item.value"
-                />
+                <el-option label="启用" :value="0" />
+                <el-option label="禁用" :value="1" />
             </el-select>
-            <div style="margin-left: 2%;">
-                负责人
-            </div>
-            <el-input size="mini" v-model="formTree.itemNo" style="width: 10%;margin-left: 1%;" placeholder="" />
-            <el-button type="" @click="showAdd" size="mini" style="margin-left:auto;" :icon="RefreshRight">重置 </el-button>
-            <el-button type="primary" @click="showAdd" size="mini" style="margin-left:1%;" :icon="Search">搜索 </el-button>
+            <!-- <el-button type="" @click="" size="mini" style="margin-left:auto;" :icon="RefreshRight">重置 </el-button> -->
+            <el-button type="primary" @click="getTable" size="mini" style="margin-left:auto;" :icon="Search">搜索 </el-button>
         </div>
-        <el-divider/>
-        <div style="width: 98%;margin-left: 1%;">
+        <!-- <el-divider/> -->
+        <div style="width: 99%;margin-left: 1%;margin-top: 1%;">
             <div style="display: flex;justify-content: space-between;width: 100%;align-items: center;">
                 <div style="font-weight: bold;">
                     定时任务列表
                 </div>
                 <div style="display: flex;width: 50%;">
                     <el-button plain type="primary" @click="showAdd" size="mini" style="margin-left:auto;" :icon="Plus">新增 </el-button>
-                    <el-button plain type="primary"  size="mini" style="margin-left:1%;" :icon="Upload">导入</el-button>
-                    <el-button plain type="primary"  size="mini" style="margin-left:1%;" :icon="Download">导出</el-button>
-                    <el-button type="danger" plain size="mini" style="margin-left:1%;" :icon="Delete">批量删除</el-button>
-                    <el-button plain type=""  size="mini" style="margin-left:1%;" :icon="RefreshRight">刷新</el-button>
-                    <el-dropdown trigger="click" v-model="dropdownVisible" @visible-change="handleVisibleChange" style="margin-left:1%;">
+                    <el-button type="danger" @click="delAll" plain size="mini" style="margin-left:1%;" :icon="Delete">删除</el-button>
+                    <!-- <el-dropdown trigger="click" v-model="dropdownVisible" @visible-change="handleVisibleChange" style="margin-left:1%;">
                         <el-button type="primary" plain size="mini" style="margin-left:1%;" :icon="Setting">列设置</el-button>
                         <template #dropdown>
                             <el-dropdown-menu style="width: 150px;">
@@ -106,7 +83,7 @@
                                 </el-dropdown-item>
                             </el-dropdown-menu>
                         </template>
-                    </el-dropdown>
+                    </el-dropdown> -->
                 </div>
             </div>
         </div>
@@ -115,6 +92,7 @@
         style="width: 100%;margin-left: 0%;margin-top:1%;"
         :cell-style="{ paddingTop:'3px',paddingBottom:'3px' }"
         :header-cell-style="{height: heightAll*0.01+'px',}"
+        @selection-change="handleSelectionChange" 
         :row-style="{ fontSize: '16px',textAlign:'center'}"
         border 
         :height="tableheight">
@@ -128,45 +106,45 @@
         <el-table-column prop="groupName" label="组名称" width="160" v-if="showTablepane.zm"/>
         <el-table-column prop="executorInfo" label="执行器名称" width="160" v-if="showTablepane.zx"/>
         <el-table-column prop="ownerName" label="负责人" width="160" v-if="showTablepane.fz"/>
-        <el-table-column prop="labels" label="标签" width="140" v-if="showTablepane.bq">
-            <template #default="scope">
-                <el-tag>测试</el-tag>
-                <div v-for="item in scope.row.labels">
-                  <el-tag></el-tag>
-                </div>
-            </template>
-        </el-table-column>
-        <el-table-column prop="nextTriggerAt" label="触发时间" width="140" v-if="showTablepane.cf">
+        <el-table-column prop="nextTriggerAt" label="触发时间" width="180" v-if="showTablepane.cf">
         </el-table-column>
         <el-table-column prop="jobStatus" label="状态" width="170" v-if="showTablepane.zt">
             <template #default="scope">
-                <el-switch v-model="scope.row.jobStatus"/>
+                <el-switch @change="changejobStatus(scope.row)" v-model="scope.row.jobStatus"/>
             </template>
         </el-table-column>
-        <el-table-column prop="itemNotes" label="任务类型" width="170" v-if="showTablepane.rwl">
+        <el-table-column prop="taskType" label="任务类型" width="170" v-if="showTablepane.rwl">
             <template #default="scope">
-                <el-tag>测试</el-tag>
+                <el-tag v-if="scope.row.taskType==1" type="success">集群</el-tag>
+                <el-tag v-if="scope.row.taskType==2" type="info">广播</el-tag>
+                <el-tag v-if="scope.row.taskType==3" type="warning">Sharding</el-tag>
+                <el-tag v-if="scope.row.taskType==4" type="danger">Map</el-tag>
+                <el-tag v-if="scope.row.taskType==5">MapReduce</el-tag>
             </template>
         </el-table-column>
-        <el-table-column prop="itemNotes" label="触发类型" width="170" v-if="showTablepane.cfl">
+        <el-table-column prop="triggerType" label="触发类型" width="170" v-if="showTablepane.cfl">
             <template #default="scope">
-                <el-tag>测试</el-tag>
+                <el-tag v-if="scope.row.triggerType==2">固定时间</el-tag>
+                <el-tag v-if="scope.row.triggerType==3">CRON 表达式</el-tag>
+                <el-tag v-if="scope.row.triggerType==99">工作流</el-tag>
             </template>
         </el-table-column>
-        <el-table-column prop="itemNotes" label="间隔时长" width="170" v-if="showTablepane.jg"/>
-        <el-table-column prop="itemNotes" label="阻塞策略" width="170" v-if="showTablepane.zs">
+        <el-table-column prop="retryInterval" label="间隔时长" width="170" v-if="showTablepane.jg"/>
+        <el-table-column prop="blockStrategy" label="阻塞策略" width="170" v-if="showTablepane.zs">
             <template #default="scope">
-                <el-tag>测试</el-tag>
+                <el-tag v-if="scope.row.blockStrategy==1">丢弃</el-tag>
+                <el-tag v-if="scope.row.blockStrategy==2">覆盖</el-tag>
+                <el-tag v-if="scope.row.blockStrategy==3">并行</el-tag>
             </template>
         </el-table-column>
-        <el-table-column prop="itemNotes" label="超时时间(秒)" width="170" v-if="showTablepane.cs"/>
-        <el-table-column prop="itemNotes" label="更新时间" width="170" v-if="showTablepane.gx"/>
+        <el-table-column prop="executorTimeout" label="超时时间(秒)" width="170" v-if="showTablepane.cs"/>
+        <el-table-column prop="updateDt" label="更新时间" width="170" v-if="showTablepane.gx"/>
         <el-table-column prop="address" label="操作" width="222" fixed="right">
             <template #default="scope">
                 <div style="display: flex;justify-content: space-between;width: 100%;">
                     <el-button type="primary" @click="showEdit(scope.row)" size="mini" text style="margin-left: 1%;">编辑</el-button>
-                    <el-button @click="showDe(scope.row)" type="primary" text size="mini" style="margin-left: 1%;">执行</el-button>
-                    <el-button @click="delRow(scope.row)" type="danger" text size="mini" style="margin-left: 1%;">更多</el-button>
+                    <el-button @click="snaliTrigger(scope.row)" type="primary" text size="mini" style="margin-left: 1%;">执行</el-button>
+                    <el-button @click="delRow(scope.row)" type="danger" text size="mini" style="margin-left: 1%;">删除</el-button>
                 </div>
             </template>
         </el-table-column>
@@ -197,7 +175,7 @@
                 <el-col :span="8">
                 <el-form-item label="组名称:" prop="groupName" style="">
                     <div style="display: flex;width: 100%;justify-content: space-between;">
-                        <el-input  v-model="formJi.groupName" style="width: 100%;"/>
+                        <el-input :disabled="!isAddTa" v-model="formJi.groupName" style="width: 100%;"/>
                     </div>
                 </el-form-item>
                 </el-col>
@@ -211,7 +189,7 @@
         </el-row>
         <el-row :gutter="48">
             <el-col :span="15">
-            <el-form-item label="标签:" prop="" style="">
+            <!-- <el-form-item label="标签:" prop="" style="">
                  <div 
                     v-if="parTag.length==0"
                     @click='addTag'
@@ -238,15 +216,15 @@
                         <el-icon @click="addTag" style="margin-left: 3%;color: #337ecc;cursor: pointer;"><Plus /></el-icon>
                     </div>
                 </div>
-            </el-form-item>
+            </el-form-item> -->
             </el-col>
         </el-row>
         <el-row :gutter="48">
             <el-col :span="8">
-                <el-form-item label="状态:">
-                    <el-radio-group v-model="formJi.jobStatus" class="custom-radio-group" style="width: 100%;margin-top: -1%;">
-                        <el-radio :label=0 size="large">启用</el-radio>
-                        <el-radio :label=1 size="large">禁用</el-radio>
+                <el-form-item label="状态:" prop="jobStatus">
+                    <el-radio-group :disabled="!isAddTa" v-model="formJi.jobStatus" class="custom-radio-group" style="width: 100%;margin-top: -1%;">
+                        <el-radio :label=1 size="large">启用</el-radio>
+                        <el-radio :label=0 size="large">禁用</el-radio>
                     </el-radio-group>
                 </el-form-item>
             </el-col>
@@ -254,7 +232,7 @@
         </el-row>
         <el-row :gutter="48">
             <el-col :span="8">
-                <el-form-item label="任务类型:">
+                <el-form-item label="任务类型:" prop="taskType">
                     <el-select
                     v-model="formJi.taskType"
                     class="noBorSel"
@@ -271,106 +249,82 @@
                 </el-form-item>
             </el-col>
         </el-row>
-        <el-form-item label="执行器名称:">
-            <div style="display: flex;width: 50%;align-items: center;">
-                <el-radio-group @change="showCode" v-model="formJi.executorInfo" class="custom-radio-group" style="width: 100%;margin-top: -0.5%;">
-                    <el-radio label="自定义执行器" size="large">自定义执行器</el-radio>
-                    <el-radio label="内置执行器" size="large">内置执行器</el-radio>
-                </el-radio-group>
-                <el-select
-                v-if="formJi.executorInfo=='内置执行器'"
-                v-model="serzu"
-                class="noBorSel"
-                placeholder=""
-                style="width: 70%;margin-left: 1%;"
-                >
-                    <el-option
-                    v-for="item in optionsShuLei"
-                    :key="item.value"
-                    :label="item.label"
-                    :value="item.value"
-                    />
-                </el-select>
-                <el-input v-if="formJi.executorInfo=='自定义执行器'" v-model="formZu.dcNote" style="width: 75%;" placeholder="请输入自定义执行器名称"/>
+        <el-form-item label="执行器名称:" prop="executorInfo">
+            <div style="display: flex;width: 100%;align-items: center;">
+                <el-input  v-model="formJi.executorInfo" style="width: 75%;" placeholder=""/>
             </div>
         </el-form-item>
-        <div v-if="formJi.executorInfo=='自定义执行器'" style="margin-top: 4%;">
+        <div style="margin-top: 0%;">
             <el-form-item label="方法参数:" >
-                <el-input v-model="formZu.dcNote" style="width: 75%;" placeholder="" type="textarea" :row="2" resize="none"/>
+                <el-input v-model="formJi.argsStr" style="width: 75%;" placeholder="" type="textarea" :row="2" resize="none"/>
             </el-form-item>
             <el-row :gutter="48">
                 <el-col :span="8">
-                    <el-form-item label="路由策略:">
+                    <el-form-item label="路由策略:" prop="routeKey">
                         <el-select
-                        v-model="serzu"
+                        v-model="formJi.routeKey"
                         class="noBorSel"
                         placeholder=""
                         style="width: 100%;margin-left: 0%;"
                         >
-                            <el-option
-                            v-for="item in optionsShuLei"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value"
-                            />
+                          <el-option label="Hash" :value="1" />
+                          <el-option label="随机" :value="2" />
+                          <el-option label="LRU" :value="3" />
+                          <el-option label="轮询" :value="4" />
+                          <el-option label="匹配第一个" :value="5" />
+                          <el-option label="匹配最后一个" :value="6" />
                         </el-select>
                     </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                    <el-form-item label="阻塞策略:">
+                    <el-form-item label="阻塞策略:" prop="blockStrategy">
                         <el-select
-                        v-model="serzu"
+                        v-model="formJi.blockStrategy"
                         class="noBorSel"
                         placeholder=""
                         style="width: 100%;margin-left: 0%;"
                         >
-                            <el-option
-                            v-for="item in optionsShuLei"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value"
-                            />
+                          <el-option label="丢弃" :value="1" />
+                          <el-option label="覆盖" :value="2" />
+                          <el-option label="并行" :value="3" />
                         </el-select>
                     </el-form-item>
                 </el-col>
             </el-row>
             <el-row :gutter="48">
                 <el-col :span="8">
-                    <el-form-item label="触发类型:">
+                    <el-form-item label="触发类型:" prop="triggerType">
                         <el-select
-                        v-model="serzu"
+                        v-model="formJi.triggerType"
                         class="noBorSel"
                         placeholder=""
                         style="width: 100%;margin-left: 0%;"
                         >
-                            <el-option
-                            v-for="item in optionsShuLei"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value"
-                            />
+                          <el-option label="固定时间" :value="2" />
+                          <el-option label="CRON 表达式" :value="3" />
+                          <el-option label="工作流" :value="99" />
                         </el-select>
                     </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                    <el-form-item label="间隔时长:">
+                    <el-form-item label="间隔时长:" prop="triggerInterval">
                          <el-input-number
-                            v-model="num"
+                            v-model="formJi.triggerInterval"
                             style="width: 100%;"
                             class="mx-4"
                             :min="1"
                             :max="10"
                             controls-position="right"
-                            @change="handleChange"
+                            @CHANGE="handleChange"
                         />
                     </el-form-item>
                 </el-col>
             </el-row>
             <el-row :gutter="48">
                 <el-col :span="8">
-                    <el-form-item label="超时时间(秒):">
+                    <el-form-item label="超时时间(秒):" prop="executorTimeout">
                         <el-input-number
-                            v-model="num"
+                            v-model="formJi.executorTimeout"
                             style="width: 100%;"
                             class="mx-4"
                             :min="1"
@@ -381,9 +335,9 @@
                     </el-form-item>
                 </el-col>
                 <el-col :span="8">
-                    <el-form-item label="最大重试次数:">
+                    <el-form-item label="最大重试次数:" prop="maxRetryTimes">
                          <el-input-number
-                            v-model="num"
+                            v-model="formJi.maxRetryTimes"
                             style="width: 100%;"
                             class="mx-4"
                             :min="1"
@@ -396,9 +350,9 @@
             </el-row>
             <el-row :gutter="48">
                 <el-col :span="8">
-                    <el-form-item label="重试间隔:">
+                    <el-form-item label="重试间隔:" prop="retryInterval">
                         <el-input-number
-                            v-model="num"
+                            v-model="formJi.retryInterval"
                             style="width: 100%;"
                             class="mx-4"
                             :min="1"
@@ -408,29 +362,12 @@
                         />
                     </el-form-item>
                 </el-col>
-                <el-col :span="8">
-                    <el-form-item label="告警通知:">
-                         <el-select
-                        v-model="serzu"
-                        class="noBorSel"
-                        placeholder=""
-                        style="width: 100%;margin-left: 0%;"
-                        >
-                            <el-option
-                            v-for="item in optionsShuLei"
-                            :key="item.value"
-                            :label="item.label"
-                            :value="item.value"
-                            />
-                        </el-select>
-                    </el-form-item>
-                </el-col>
             </el-row>
             <el-form-item label="描述:" >
-                <el-input v-model="formZu.dcNote" style="width: 75%;" placeholder="" type="textarea" :row="2" resize="none"/>
+                <el-input v-model="formJi.description" style="width: 75%;" placeholder="" type="textarea" :row="2" resize="none"/>
             </el-form-item>
         </div>
-        <div v-if="formJi.executorInfo=='内置执行器'" style="margin-top: 4%;">
+        <!-- <div v-if="formJi.executorInfoTy=='内置执行器'" style="margin-top: 4%;">
             <el-form-item label="请求参数:" >
                 <el-input
                 style="width: 75%"
@@ -488,7 +425,7 @@
             </el-form-item>
             <el-form-item label="接口超时时间">
                 <el-input-number
-                    v-model="num"
+                    v-model="formJi.retryInterval"
                     style="width: 75%;"
                     class="mx-4"
                     :min="1"
@@ -554,7 +491,7 @@
                 <el-col :span="8">
                     <el-form-item label="间隔时长:">
                          <el-input-number
-                            v-model="num"
+                            v-model="formJi.retryInterval"
                             style="width: 100%;"
                             class="mx-4"
                             :min="1"
@@ -569,7 +506,7 @@
                 <el-col :span="8">
                     <el-form-item label="超时时间(秒):">
                         <el-input-number
-                            v-model="num"
+                            v-model="formJi.retryInterval"
                             style="width: 100%;"
                             class="mx-4"
                             :min="1"
@@ -582,7 +519,7 @@
                 <el-col :span="8">
                     <el-form-item label="最大重试次数:">
                          <el-input-number
-                            v-model="num"
+                            v-model="formJi.retryInterval"
                             style="width: 100%;"
                             class="mx-4"
                             :min="1"
@@ -597,7 +534,7 @@
                 <el-col :span="8">
                     <el-form-item label="重试间隔:">
                         <el-input-number
-                            v-model="num"
+                            v-model="formJi.retryInterval"
                             style="width: 100%;"
                             class="mx-4"
                             :min="1"
@@ -628,7 +565,7 @@
             <el-form-item label="描述:" >
                 <el-input v-model="formZu.dcNote" style="width: 75%;" placeholder="" type="textarea" :row="2" resize="none"/>
             </el-form-item>
-        </div>
+        </div> -->
         </el-form>
     <template #footer>
       <span class="dialog-footer">
@@ -642,30 +579,139 @@
       </span>
     </template>
   </el-dialog>
-  <el-dialog @close="clearFromTree" :title="titleTree" v-model="dialogVisibleTree" title="" width="30%" destroy-on-close :key="tableKey">
-    <el-form style="margin-left: 5%;margin-top: 2%;"  :model="formTree" class="demo-form-inline" ref="formRefTree" :rules="rulesTree">
-      <el-form-item label="名称:" prop="itemName" style="margin-left: -2%;">
-        <el-input v-model="formTree.itemName" style="width: 75%;" placeholder=""/>
-      </el-form-item>
-      <el-form-item label="父节点id:" prop="catePid" style="margin-left: -2%;">
-        <el-input v-model="formTree.catePid" style="width: 75%;" placeholder=""  resize="none"/>
-      </el-form-item>
-      <el-form-item label="排序:" prop="itemNo" style="margin-left: -2%;">
-        <el-input v-model="formTree.itemNo" style="width: 75%;" placeholder=""  resize="none"/>
-      </el-form-item>
-      <el-form-item label="备注:" prop="itemNotes" style=" ">
-        <el-input v-model="formTree.itemNotes" style="width: 75%;" placeholder=""  resize="none"/>
-      </el-form-item>
-    </el-form>
+  <el-dialog @close="clearFromTree"  v-model="dialogVisibleTree" title="" width="55%" destroy-on-close :key="tableKey">
+    <el-descriptions
+    class="margin-top"
+    :title="titleDe"
+    style="padding-top: 2%;"
+    :column="3"
+    :size="size"
+    border
+  >
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          任务名称
+        </div>
+      </template>
+      {{formJi.jobName}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          组名称
+        </div>
+      </template>
+      {{formJi.groupName}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          负责人
+        </div>
+      </template>
+      {{formJi.ownerName}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          状态
+        </div>
+      </template>
+      <el-tag size="small">{{formJi.jobStatus}}</el-tag>
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          任务类型
+        </div>
+      </template>
+      {{formJi.taskType}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          执行器名称
+        </div>
+      </template>
+      {{formJi.executorInfo}} 
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          方法参数
+        </div>
+      </template>
+      {{formJi.argsStr}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          路由策略
+        </div>
+      </template>
+      {{formJi.routeKey}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          阻塞策略
+        </div>
+      </template>
+      {{formJi.blockStrategy}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          触发类型
+        </div>
+      </template>
+      {{formJi.triggerType}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          间隔时长
+        </div>
+      </template>
+      {{formJi.triggerInterval}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          超时时间(秒)
+        </div>
+      </template>
+      {{formJi.executorTimeout}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          最大重试次数
+        </div>
+      </template>
+      {{formJi.maxRetryTimes}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          重试间隔
+        </div>
+      </template>
+      {{formJi.retryInterval}}
+    </el-descriptions-item>
+    <el-descriptions-item>
+      <template #label>
+        <div class="cell-item">
+          描述:
+        </div>
+      </template>
+      {{formJi.description}}
+    </el-descriptions-item>
+  </el-descriptions>
     <template #footer>
       <span class="dialog-footer">
-        <el-button size="mini" @click="dialogVisible = false">取消</el-button>
-        <el-button v-if="isAdd" type="primary" @click="addTree" size="mini">
-          提交
-        </el-button>
-        <el-button v-if="!isAdd" type="primary" @click="saveEditTree" size="mini">
-          提交
-        </el-button>
+        <el-button size="mini" type="primary" @click="dialogVisibleTree = false">确定</el-button>
       </span>
     </template>
   </el-dialog>
@@ -674,8 +720,12 @@
 import { Search,RefreshRight,Plus,Download,Upload,Delete,Setting,Minus} from '@element-plus/icons-vue'
 import { reactive } from 'vue'
 import Codemirror from 'codemirror-editor-vue3';
-import { addDataCate,getCateTree,getCateDe,editCate,delCate,addDataItem,getItem,getItemDe,editItem,delItem} from "@/api/service/cate";
+import { snailList,addSnail,snailDe,snailEdit,delSnamil,snailSta,snailTri } from "@/api/service/timing";
 import { ref, onMounted, onUnmounted, nextTick } from 'vue';
+const groupName= ref('')
+const jobName= ref('')
+const jobStatus= ref('')
+const executorInfo= ref('')
 const { proxy } = getCurrentInstance();
 const data =  ref([])
 const title =  ref([])
@@ -691,6 +741,7 @@ const dialogVisibleTree = ref(false)
 const isAdd = ref(false)
 const isAddTa = ref(false)
 const treeId = ref('');
+const titleDe = ref('')
 const parTag = ref([])
 const optionsTaskType = ref([
   {
@@ -741,11 +792,12 @@ const showTablepane = ref({
     gx:true,
 })
 const formJi = ref({
-  name:'',
-  version:'',
-  enname:'',
-  devlang:'',
-  intro:'',
+  jobName:'',
+  groupName:'',
+  jobStatus:'',
+  taskType:'',
+  executorInfo:'',
+  executorInfoTy:'',
   type:'',
   mdContact:'',
   mdUnit:'',
@@ -767,10 +819,21 @@ const formJi = ref({
   mdInNote:'',
   mdOutNote:''
 });
+const selectedRows = ref([])
 const activeTabKey = ref(0)
 const rulesJi = reactive({
-  name: [{ required: true, message: '必填', trigger: 'blur' }],
-  enname: [{ required: true, message: '必填', trigger: 'blur' }],
+  jobName: [{ required: true, message: '必填', trigger: 'blur' }],
+  groupName: [{ required: true, message: '必填', trigger: 'blur' }],
+  taskType: [{ required: true, message: '必填', trigger: 'blur' }],
+  jobStatus: [{ required: true, message: '必填', trigger: 'blur' }],
+  executorInfo: [{ required: true, message: '必填', trigger: 'blur' }],
+  routeKey: [{ required: true, message: '可选', trigger: 'blur' }],
+  blockStrategy: [{ required: true, message: '必填', trigger: 'blur' }],
+  triggerInterval: [{ required: true, message: '必填', trigger: 'blur' }],
+  executorTimeout: [{ required: true, message: '必填', trigger: 'blur' }],
+  maxRetryTimes: [{ required: true, message: '必填', trigger: 'blur' }],
+  retryInterval: [{ required: true, message: '必填', trigger: 'blur' }],
+  triggerType: [{ required: true, message: '必填', trigger: 'blur' }],
 });
 const formRefJi = ref();
 const formZu = ref({
@@ -807,10 +870,100 @@ const formRefTree = ref();
 
 const dropdownVisible = ref(false);
 
+const handleSelectionChange = (selection) => {
+  selectedRows.value = selection;
+};
+function snaliTrigger(row){
+  var par = {
+    jobId:row.id,
+    taskType:row.taskType
+  }
+  snailTri(par).then(res=>{
+    if(res.code===200){
+      proxy.$modal.msgSuccess(res.msg);
+    }
+  })
+}
 function showCode(){
-    nextTick(() => {
-        cmRef.value?.refresh(); // 关键调用
-    });
+  Object.keys(rulesJi).forEach(key => {
+      delete rulesJi[key];
+  });
+    if(formJi.value.executorInfoTy==='自定义执行器'){
+      Object.assign(rulesJi, {
+        jobName: [{ required: true, message: '必填', trigger: 'blur' }],
+        groupName: [{ required: true, message: '必填', trigger: 'blur' }],
+        taskType: [{ required: true, message: '必填', trigger: 'blur' }],
+        jobStatus: [{ required: true, message: '必填', trigger: 'blur' }],
+        executorInfo: [{ required: true, message: '必填', trigger: 'blur' }],
+        routeKey: [{ required: true, message: '可选', trigger: 'blur' }],
+        blockStrategy: [{ required: true, message: '必填', trigger: 'blur' }],
+        triggerInterval: [{ required: true, message: '必填', trigger: 'blur' }],
+        executorTimeout: [{ required: true, message: '必填', trigger: 'blur' }],
+        maxRetryTimes: [{ required: true, message: '必填', trigger: 'blur' }],
+        retryInterval: [{ required: true, message: '必填', trigger: 'blur' }],
+        triggerType: [{ required: true, message: '必填', trigger: 'blur' }],
+      });
+    }
+    if(formJi.value.executorInfoTy==='内置执行器'){
+      Object.assign(rulesJi, {
+        jobName: [{ required: true, message: '必填', trigger: 'blur' }],
+        groupName: [{ required: true, message: '必填', trigger: 'blur' }],
+        taskType: [{ required: true, message: '必填', trigger: 'blur' }],
+        jobStatus: [{ required: true, message: '必填', trigger: 'blur' }],
+        executorInfo: [{ required: true, message: '必填', trigger: 'blur' }],
+        routeKey: [{ required: true, message: '可选', trigger: 'blur' }],
+        blockStrategy: [{ required: true, message: '必填', trigger: 'blur' }],
+        triggerInterval: [{ required: true, message: '必填', trigger: 'blur' }],
+        executorTimeout: [{ required: true, message: '必填', trigger: 'blur' }],
+        maxRetryTimes: [{ required: true, message: '必填', trigger: 'blur' }],
+        retryInterval: [{ required: true, message: '必填', trigger: 'blur' }],
+        triggerType: [{ required: true, message: '必填', trigger: 'blur' }],
+      });
+    }
+}
+function delAll(){
+  var parDel = ''
+  selectedRows.value.forEach(item=>{
+    parDel = parDel + item.id + ','
+  })
+  parDel = parDel.slice(0, -1)
+  proxy.$modal.confirm('是否确认删除?').then(function () {
+    var par = {
+      jobIds:parDel
+    }
+    return delSnamil(par);
+  }).then(() => {
+    getTable();
+    proxy.$modal.msgSuccess("删除成功");
+  }).catch(() => {});
+}
+function showDe(row){
+  dialogVisibleTree.value = true
+  var par = {
+    jobId:row.id
+  }
+  snailDe(par).then(res=>{
+    formJi.value = res.data
+    if(formJi.value.jobStatus===0){
+      formJi.value.jobStatus = '启用'
+    }
+    if(formJi.value.jobStatus===1){
+      formJi.value.jobStatus = '关闭'
+    }
+  })
+}
+async function changejobStatus(row){
+  var par = {
+    jobId:row.id,
+    status:row.jobStatus===true?1:0
+  }
+  await snailSta(par).then(res=>{
+    formJi.value = res
+    if(res.code===200){
+      proxy.$modal.msgSuccess("修改成功");
+    }
+  })
+
 }
 const handleCheckboxClick = () => {
   // 1. 执行 checkbox 的切换逻辑(v-model 自动处理)
@@ -824,25 +977,35 @@ function delTag(index){
     parTag.value.splice(index,1)
 }
 function clearForm(){
-  formZu.value = {
-    itemName:'',
-    itemTp:'',
-    itemEn:'',
-    itemTp:'',
-    itemDataTp:'',
-    itemDefaultVal:'',
-    itemUnit:'',
-    itemNotes:'',
+  formJi.value = {
+    
   }
 }
+function formatTimestamp(ms) {
+  const date = new Date(ms);
+  const year = date.getFullYear();
+  const month = String(date.getMonth() + 1).padStart(2, '0'); // 补零
+  const day = String(date.getDate()).padStart(2, '0'); // 补零
+  return `${year}年${month}月${day}日`;
+}
 function getTable(){
   var par = {
-    pageNum:currentPage.value,
-    pageSize:15,
-    cateId:''
+    groupName:groupName.value,
+    executorInfo:executorInfo.value,
+    jobName:jobName.value,
+    jobStatus:jobStatus.value
   }
-  getItem(par).then(res=>{
+  snailList(par).then(res=>{
     tableData.value = res.rows
+    tableData.value.forEach(item=>{
+      if(item.jobStatus===0){
+        item.jobStatus = false
+      }
+      if(item.jobStatus===1){
+        item.jobStatus = true
+      }
+      item.nextTriggerAt = formatTimestamp(item.nextTriggerAt)
+    })
     total.value = res.total
   })
 }
@@ -855,15 +1018,13 @@ function showEdit(row){
   isAddTa.value = false
   title.value = '编辑'
   dialogVisible.value = true
-  getItemDe(row.dataId).then(res=>{
-    formZu.value = res.data
+  var par = {
+    jobId:row.id
+  }
+  snailDe(par).then(res=>{
+    formJi.value = res.data
   })
 }
-function showAddTree(){
-  isAdd.value = true
-  titleTree.value = '新增节点'
-  dialogVisibleTree.value = true
-}
 function clearFromTree(){
   formTree.value = {
     itemName:'',
@@ -872,24 +1033,27 @@ function clearFromTree(){
     itemNotes:''
   }
 }
-function getTree(){
-  getCateTree().then(res=>{
-    data.value = res.data
-  })
-}
 function addTa(){
-  formRefZu.value.validate(async (valid) => {
-    await addDataItem(formZu.value).then(res=>{
-      if(res.code===200){
-        proxy.$modal.msgSuccess("新增成功");
-        getTable()
-        dialogVisible.value = false
+  formRefJi.value.validate(async (valid) => {
+    if(valid){
+      if(formJi.value.argsStr){
+        formJi.value.argsStr = JSON.parse(formJi.value.argsStr)
       }
-    })
+      await addSnail(formJi.value).then(res=>{
+        if(res.code===200){
+          proxy.$modal.msgSuccess("新增成功");
+          getTable()
+          dialogVisible.value = false
+        }
+      })
+    }
   });
 }
 function saveEditTa(){
-  editItem(formZu.value).then(res=>{
+  if(formJi.value.argsStr){
+    formJi.value.argsStr = JSON.parse(formJi.value.argsStr)
+  }
+  snailEdit(formJi.value).then(res=>{
     if(res.code===200){
       proxy.$modal.msgSuccess("修改成功");
       dialogVisible.value = false
@@ -899,56 +1063,16 @@ function saveEditTa(){
 }
 function delRow(row) {
   proxy.$modal.confirm('是否确认删除?').then(function () {
-    return delItem(row.dataId);
-  }).then(() => {
-    getTable();
-    proxy.$modal.msgSuccess("删除成功");
-  }).catch(() => {});
-};
-async function addTree(){
-  formRefTree.value.validate(async (valid) => {
-    await addDataCate(formTree.value).then(res=>{
-      if(res.code===200){
-        proxy.$modal.msgSuccess("新增成功");
-        getTree()
-        dialogVisibleTree.value = false
-      }
-    })
-  });
-}
-function saveEditTree(){
-  editCate(formTree.value).then(res=>{
-    if(res.code===200){
-      proxy.$modal.msgSuccess("修改成功");
-      dialogVisibleTree.value = false
-      getTree()
+    var par = {
+      jobIds:row.id
     }
-  })
-}
-function handleNodeClick(node, data){
-  treeId.value = data.id
-  getTable()
-}
-function delTree(node, data) {
-  proxy.$modal.confirm('是否确认删除?').then(function () {
-    return delCate(data.id);
+    return delSnamil(par);
   }).then(() => {
-    getTree();
+    getTable();
     proxy.$modal.msgSuccess("删除成功");
   }).catch(() => {});
 };
-function editTree(node, data){
-  console.log(data)
-  titleTree.value = '编辑'
-  isAdd.value = false
-  dialogVisibleTree.value = true
-  getCateDe(data.id).then(res=>{
-    formTree.value = res.data
-  })
-  console.log(node, data)
-}
 onMounted(() => {
-  getTree()
   getTable()
 });