From 08abfcfea8247c394b2034cad59734846b403dd9 Mon Sep 17 00:00:00 2001
From: Ben Lin <maobin001@msn.com>
Date: 星期一, 28 十月 2024 22:22:58 +0800
Subject: [PATCH] 计划任务优化

---
 src/views/tigerprojects/tsk/tsk_job/job.data.ts             |   41 +++++++++
 src/views/tigerprojects/system/lowcode/data.ts              |  113 ++++++++++++++--------------
 src/views/tigerprojects/tsk/tsk_job/log.data.ts             |    2 
 src/views/tigerprojects/tsk/tsk_log/logDrawer.vue           |    5 
 src/api/tigerapi/tsk/tsk_job.ts                             |   52 ++++++++----
 src/views/tigerprojects/system/lowcode/normal/mainTable.vue |    8 +-
 src/api/tigerapi/system.ts                                  |    1 
 src/api/tigerapi/model/tskModel.ts                          |    3 
 src/views/tigerprojects/tsk/tsk_job/jobDrawer.vue           |    2 
 src/assets/icons/startplan.svg                              |    1 
 10 files changed, 144 insertions(+), 84 deletions(-)

diff --git a/src/api/tigerapi/model/tskModel.ts b/src/api/tigerapi/model/tskModel.ts
index 2c391ad..0e4dc91 100644
--- a/src/api/tigerapi/model/tskModel.ts
+++ b/src/api/tigerapi/model/tskModel.ts
@@ -183,6 +183,7 @@
   JobType: string;
   AssemblyName: string;
   Remark: string;
+  LastRunTime: Dayjs;
 }
 
 export interface TrigArgs {
@@ -199,6 +200,7 @@
   Hours: number;
   Days: number;
   Weekday: number;
+  Interval: number;
 }
 
 export interface FluentJobParam {
@@ -206,4 +208,5 @@
   DataType: string;
   JobName: string;
   Args: TrigArgs;
+  Remark: string;
 }
diff --git a/src/api/tigerapi/system.ts b/src/api/tigerapi/system.ts
index 069cfb2..55d337e 100644
--- a/src/api/tigerapi/system.ts
+++ b/src/api/tigerapi/system.ts
@@ -66,6 +66,7 @@
   StopJob = '/Tsk/PauseJob',
   AddJob = '/Tsk/AddJob',
   AddTskJob = '/Tsk/AddTskJob',
+  ImmediateRun = '/Tsk/ImmediateRun',
   RemoveTskJob = '/Tsk/RemoveTskJob',
   UpdateJob = '/Tsk/UpdateJob',
   SaveTskJob = '/Tsk/SaveTskJob',
diff --git a/src/api/tigerapi/tsk/tsk_job.ts b/src/api/tigerapi/tsk/tsk_job.ts
index 189c9bf..30a7cdd 100644
--- a/src/api/tigerapi/tsk/tsk_job.ts
+++ b/src/api/tigerapi/tsk/tsk_job.ts
@@ -111,28 +111,46 @@
 };
 
 /**
+ * @desc 绔嬪嵆杩愯浠诲姟
+ */
+export const ImmediateRun = async (params: FluentJobParam) => {
+  const usParams = generateAction(params.DataType, params.AssemblyName, params.JobName);
+  return await defHttp.post(
+    { url: Api.ImmediateRun, params: usParams },
+    {
+      errorMessageMode: 'none',
+      isTransformResponse: false,
+      apiUrl: globSetting.taskApiUrl,
+    },
+  );
+};
+
+/**
  * @desc 鍒犻櫎
  * @param {Recordable} params - 璁板綍
  */
 export const DeleteTsk_Job = async (params: Recordable) => {
   const usParams = genAction('TSK_JOB', [params]);
-  const usParamstrig = genAction('TSK_TRIG', [params.Triggers]);
-  defHttp.post(
-    { url: Api.DeleteList, params: usParamstrig },
-    {
-      errorMessageMode: 'none',
-      isTransformResponse: false,
-      apiUrl: globSetting.taskApiUrl,
-    },
-  );
-  return await defHttp.post(
-    { url: Api.DeleteList, params: usParams },
-    {
-      errorMessageMode: 'none',
-      isTransformResponse: false,
-      apiUrl: globSetting.taskApiUrl,
-    },
-  );
+  const usParamstrig = genAction('TSK_TRIG', params.Triggers);
+  return await defHttp
+    .post(
+      { url: Api.DeleteList, params: usParams },
+      {
+        errorMessageMode: 'none',
+        isTransformResponse: false,
+        apiUrl: globSetting.taskApiUrl,
+      },
+    )
+    .then(() => {
+      defHttp.post(
+        { url: Api.DeleteList, params: usParamstrig },
+        {
+          errorMessageMode: 'none',
+          isTransformResponse: false,
+          apiUrl: globSetting.taskApiUrl,
+        },
+      );
+    });
 };
 /**
  * @desc 寮�濮嬩换鍔�
diff --git a/src/assets/icons/startplan.svg b/src/assets/icons/startplan.svg
new file mode 100644
index 0000000..8190f81
--- /dev/null
+++ b/src/assets/icons/startplan.svg
@@ -0,0 +1 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1730119382740" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9034" width="128" height="128" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M884.67968 0H139.3152C62.6944 0 0 62.69952 0 139.32032v745.35936C0 961.3056 62.6944 1024 139.3152 1024h745.36448C961.31072 1024 1024 961.3056 1024 884.67968V139.32032C1024 62.69952 961.31072 0 884.67968 0z" fill="#745AB1" p-id="9035"></path><path d="M686.88384 479.88736h-131.1488V348.73344a43.7248 43.7248 0 1 0-87.42912 0v174.88896a43.71456 43.71456 0 0 0 43.70944 43.71968h174.89408a43.71456 43.71456 0 0 0 43.71968-43.71968c-0.01024-24.14592-19.59936-43.73504-43.74528-43.73504z" fill="#FFFFFF" p-id="9036"></path><path d="M512 140.35456c-204.94336 0-371.64032 166.7072-371.64032 371.64544S307.05664 883.65056 512 883.65056c204.93312 0 371.64032-166.71232 371.64032-371.65056 0-204.94336-166.72768-371.64544-371.64032-371.64544z m0 655.84128c-156.71296 0-284.20096-127.50336-284.20096-284.19584 0-156.70784 127.49312-284.20608 284.20096-284.20608S796.20096 355.29216 796.20096 512c0 156.68736-127.49824 284.19584-284.20096 284.19584z" fill="#FFFFFF" p-id="9037"></path></svg>
\ No newline at end of file
diff --git a/src/views/tigerprojects/system/lowcode/data.ts b/src/views/tigerprojects/system/lowcode/data.ts
index 8136cb0..eedfcdb 100644
--- a/src/views/tigerprojects/system/lowcode/data.ts
+++ b/src/views/tigerprojects/system/lowcode/data.ts
@@ -41,7 +41,7 @@
  * @return {*}
  */
 export function GetActionsData(params: {}, ...args) {
-  let data = [] as ActionItem[];
+  const data = [] as ActionItem[];
   return data;
 }
 
@@ -160,7 +160,7 @@
 export async function initRoute(lf, rotId, routeData, currlf, rotType) {
   currlf.value = unref(lf);
   //閫氳繃宸ヨ壓璺嚎ID鑾峰彇鍥惧舰鏁版嵁锛屽苟娓叉煋
-  var _data = rotType == 'Wo' ? await getWoRouteData(rotId) : await getRouteData(rotId);
+  const _data = rotType == 'Wo' ? await getWoRouteData(rotId) : await getRouteData(rotId);
   console.log('缁勪欢宸叉寕杞�', _data);
   if (_data.Data != null) {
     _data.Data.nodes.forEach((n) => {
@@ -215,7 +215,7 @@
     d.CREATE_USER = useUserStore().getUserInfo.userId as string;
     d.UPDATE_TIME = formatToDateTime(new Date());
     d.UPDATE_USER = useUserStore().getUserInfo.userId as string;
-    var _data2: any[] = [];
+    let _data2: any[] = [];
     if (!isNullOrEmpty(data.value[item])) {
       _data2 = data.value[item].map((item) => {
         return item;
@@ -236,7 +236,7 @@
   const name = params['name'];
   const useTables = args[1];
   if (!isNullOrEmpty(params['data'])) {
-    var _data = params['data'].value[name].filter((item) => item['ID'] != params['record']['ID']);
+    const _data = params['data'].value[name].filter((item) => item['ID'] != params['record']['ID']);
     params['data'].value[name] = _data;
     useTables[name][1].setProps({
       dataSource: [],
@@ -262,7 +262,7 @@
  * @return {*}
  */
 export function GenerateActionButton(params: any, buttons: Ref<[]>, openDrawer: Fn, reload: Fn) {
-  let actionItem = [] as ActionItem[];
+  const actionItem = [] as ActionItem[];
   buttons.value.map((x) => {
     if (x['BUTTON_TYPE'] == 1) {
       let url = '';
@@ -338,16 +338,16 @@
       entityName: 'SYS_LOW_CODE',
       order: '',
     }).then((data) => {
-      var searchForms = JSON.parse(data.Data.Items[0].SEARCH_FORM_JSON);
-      let colSlots = [] as string[];
+      const searchForms = JSON.parse(data.Data.Items[0].SEARCH_FORM_JSON);
+      const colSlots = [] as string[];
       for (const i in searchForms) {
         if (!isNullOrUnDef(searchForms[i]['colSlot'])) {
           colSlots.push('form-' + searchForms[i]['colSlot']);
         }
       }
 
-      var _cruds = JSON.parse(data.Data.Items[0].FORM_JSON);
-      let crudColSlots = [] as string[];
+      const _cruds = JSON.parse(data.Data.Items[0].FORM_JSON);
+      const crudColSlots = [] as string[];
       for (const i in _cruds) {
         if (!isNullOrUnDef(_cruds[i]['colSlot'])) {
           crudColSlots.push(_cruds[i]['colSlot']);
@@ -358,7 +358,7 @@
         colSlots: colSlots,
         crudColSlots: crudColSlots,
         sName: `${path.split('/')[1]}_update`,
-      }; 
+      };
       // 灏嗗璞¤浆鎹负JSON瀛楃涓插苟淇濆瓨鍒皊essionStorage
       sessionStorage.removeItem(`${id.sName}_params`);
       sessionStorage.setItem(`${id.sName}_params`, encodeURI(JSON.stringify({ params: params })));
@@ -372,62 +372,61 @@
     // 灏嗗璞¤浆鎹负JSON瀛楃涓插苟淇濆瓨鍒皊essionStorage
     sessionStorage.removeItem(`${id.sName}_params`);
     sessionStorage.setItem(`${id.sName}_params`, encodeURI(JSON.stringify(id)));
-    go(`/${path.split('/')[1]}/${path.split('/')[2]}/${encodeURI(JSON.stringify({ sName: id.sName, Name: id.Name }))}`);
+    go(
+      `/${path.split('/')[1]}/${path.split('/')[2]}/${encodeURI(JSON.stringify({ sName: id.sName, Name: id.Name }))}`,
+    );
   } else {
-    const id = { sName: `${path.split('/')[1]}_update`,params: params };
+    const id = { sName: `${path.split('/')[1]}_update`, params: params };
     // 灏嗗璞¤浆鎹负JSON瀛楃涓插苟淇濆瓨鍒皊essionStorage
     sessionStorage.removeItem(`${id.sName}_params`);
     sessionStorage.setItem(`${id.sName}_params`, encodeURI(JSON.stringify(id)));
-    go(`${path}/${encodeURI(JSON.stringify({ sName: id.sName}))}`);
+    go(`${path}/${encodeURI(JSON.stringify({ sName: id.sName }))}`);
   }
 }
 
-
-
-  /**
-   * @description: 璋冪敤api鍓嶏紝鍙傛暟鏁寸悊
-   * @param {*} t
-   * @return {*}
-   */
-  export function SearchInfoFn(param: any, name: RouteRecordName | null | undefined, ByOrg: boolean) {
-    const useQuery = useQueryStore();
-    if (
-      !isNullOrUnDef(useQuery.getCurSearchInfo) &&
-      useQuery.getCurSearchInfo.some((q) => q.name == name)
-    ) {
-      const curSearchInfo = useQuery.getCurSearchInfo.filter((q) => q.name == name);
-      const Keys = Object.getOwnPropertyNames(curSearchInfo[0].searchInfo);
-      for (const k in Keys) {
-        if (Keys[k] != 'page' && Keys[k] != 'pageSize') {
-          param[Keys[k]] = curSearchInfo[0].searchInfo[Keys[k]];
-        }
+/**
+ * @description: 璋冪敤api鍓嶏紝鍙傛暟鏁寸悊
+ * @param {*} t
+ * @return {*}
+ */
+export function SearchInfoFn(param: any, name: RouteRecordName | null | undefined, ByOrg: boolean) {
+  const useQuery = useQueryStore();
+  if (
+    !isNullOrUnDef(useQuery.getCurSearchInfo) &&
+    useQuery.getCurSearchInfo.some((q) => q.name == name)
+  ) {
+    const curSearchInfo = useQuery.getCurSearchInfo.filter((q) => q.name == name);
+    const Keys = Object.getOwnPropertyNames(curSearchInfo[0].searchInfo);
+    for (const k in Keys) {
+      if (Keys[k] != 'page' && Keys[k] != 'pageSize') {
+        param[Keys[k]] = curSearchInfo[0].searchInfo[Keys[k]];
       }
-      useQuery.setCurSearchInfo({ name: name, searchInfo: param });
     }
-    if (isNullOrEmpty(param.option) && ByOrg) {
-      param.option = {
-        //鏍规嵁鎹偣鏌ヨ锛屽繀闇�甯﹁繖涓弬鏁�
-        UserId: useUserStore().getUserInfo.userId,
-        ByOrg: true,
-        CurOrg: useUserStore().getUserInfo.orgCode,
-      };
-    }
-    return param;
+    useQuery.setCurSearchInfo({ name: name, searchInfo: param });
   }
-  
+  if (isNullOrEmpty(param.option) && ByOrg) {
+    param.option = {
+      //鏍规嵁鎹偣鏌ヨ锛屽繀闇�甯﹁繖涓弬鏁�
+      UserId: useUserStore().getUserInfo.userId,
+      ByOrg: true,
+      CurOrg: useUserStore().getUserInfo.orgCode,
+    };
+  }
+  return param;
+}
 
-  /**
-   * @description: 璇锋眰涔嬪悗瀵硅繑鍥炲�艰繘琛屽鐞�
-   * @param {*} t
-   * @return {*}
-   */
-  export function afterFetchFn(t: any, name: RouteRecordName | null | undefined, f) {
-    const useQuery = useQueryStore();
-    if (
-      !isNullOrUnDef(useQuery.getCurSearchInfo) &&
-      useQuery.getCurSearchInfo.some((q) => q.name == name)
-    ) {
-      const curSearchInfo = useQuery.getCurSearchInfo.filter((q) => q.name == name);
-      f.setFieldsValue(curSearchInfo[0].searchInfo);
-    }
+/**
+ * @description: 璇锋眰涔嬪悗瀵硅繑鍥炲�艰繘琛屽鐞�
+ * @param {*} t
+ * @return {*}
+ */
+export function afterFetchFn(t: any, name: RouteRecordName | null | undefined, f) {
+  const useQuery = useQueryStore();
+  if (
+    !isNullOrUnDef(useQuery.getCurSearchInfo) &&
+    useQuery.getCurSearchInfo.some((q) => q.name == name)
+  ) {
+    const curSearchInfo = useQuery.getCurSearchInfo.filter((q) => q.name == name);
+    f.setFieldsValue(curSearchInfo[0].searchInfo);
   }
+}
diff --git a/src/views/tigerprojects/system/lowcode/normal/mainTable.vue b/src/views/tigerprojects/system/lowcode/normal/mainTable.vue
index ac407e2..ad98fbf 100644
--- a/src/views/tigerprojects/system/lowcode/normal/mainTable.vue
+++ b/src/views/tigerprojects/system/lowcode/normal/mainTable.vue
@@ -38,7 +38,7 @@
         @cancel="custCancel"
         :type="cType"
         :entityName="entityName"
-        @modalInner="getdtlSlots"
+        @modal-inner="getdtlSlots"
       >
         <!-- 鐢ㄦ彃妲借嚜瀹氫箟澶氳〃鍗� -->
         <template #[item.name] v-for="item in dtlSlots" :key="item.name">
@@ -139,7 +139,7 @@
   try {
     custImport.value = await import(`../entityts/${objParams.value['ID']}.ts`);
   } catch (e) {
-    console.log(e)
+    console.log(e);
   }
   const [
     {
@@ -265,14 +265,14 @@
       reload();
     });
   }
-  
+
   /**
    * @description: 璇锋眰涔嬪悗瀵硅繑鍥炲�艰繘琛屽鐞�
    * @param {*} t
    * @return {*}
    */
   function afterFetch(t) {
-    afterFetchFn(t,route.name, getForm())
+    afterFetchFn(t, route.name, getForm());
   }
 
   const currlf = ref(null) as Ref<LogicFlow | null>;
diff --git a/src/views/tigerprojects/tsk/tsk_job/job.data.ts b/src/views/tigerprojects/tsk/tsk_job/job.data.ts
index 4194058..7740d9b 100644
--- a/src/views/tigerprojects/tsk/tsk_job/job.data.ts
+++ b/src/views/tigerprojects/tsk/tsk_job/job.data.ts
@@ -52,6 +52,11 @@
     width: 180,
   },
   {
+    title: '涓嬫杩愯鏃堕棿',
+    dataIndex: 'NextRunTime',
+    width: 180,
+  },
+  {
     title: '鎻忚堪',
     dataIndex: 'Remark',
     width: 180,
@@ -105,7 +110,7 @@
     label: '浠诲姟鍚嶇О',
     required: true,
     component: 'Input',
-    ifShow: false,
+    // ifShow: false,
   },
   {
     field: 'JobType',
@@ -134,7 +139,7 @@
     component: 'RadioButtonGroup',
     defaultValue: 'N',
     colProps: {
-      span: 24,
+      span: 10,
     },
     componentProps: {
       options: [
@@ -144,6 +149,38 @@
     },
   },
   {
+    field: 'Interval',
+    label: '鍙栨暟鏃堕暱锛堝皬鏃讹級',
+    required: true,
+    component: 'Input',
+    colProps: { span: 14 },
+    rules: [
+      {
+        required: true,
+        // @ts-ignore
+        validator: async (rule, value) => {
+          if (isNaN(Number(value))) {
+            return Promise.reject(t('涓嶆槸鏁板瓧'));
+          }
+          return Promise.resolve();
+        },
+        trigger: 'change',
+      },
+    ],
+  },
+  {
+    field: 'LastRunTime',
+    label: '鏈�鍚庤繍琛屾椂闂�',
+    required: true,
+    component: 'DatePicker',
+    colProps: { span: 24 },
+    componentProps: ({ formModel }) => {
+      return {
+        format: 'YYYY-MM-DD HH:mm:ss',
+      };
+    },
+  },
+  {
     field: 'runType',
     label: '杩愯绫诲瀷',
     component: 'RadioButtonGroup',
diff --git a/src/views/tigerprojects/tsk/tsk_job/jobDrawer.vue b/src/views/tigerprojects/tsk/tsk_job/jobDrawer.vue
index a2592c8..16a29dd 100644
--- a/src/views/tigerprojects/tsk/tsk_job/jobDrawer.vue
+++ b/src/views/tigerprojects/tsk/tsk_job/jobDrawer.vue
@@ -52,8 +52,10 @@
       tskParam.NowAddMinutes = args.NowAddMinutes;
       tskParam.ToRunEvery = args.ToRunEvery;
       tskParam.ToRunOnceAtDt = dateUtil(args.ToRunOnceAtDt);
+      tskParam.LastRunTime = dateUtil(data.record.Triggers[0].LastRunTime);
       tskParam.ToRunOnceIn = args.ToRunOnceIn;
       tskParam.runType = args.runType;
+      tskParam.Interval = args.Interval;
       tskParam.type = args.Type;
 
       setFieldsValue({
diff --git a/src/views/tigerprojects/tsk/tsk_job/log.data.ts b/src/views/tigerprojects/tsk/tsk_job/log.data.ts
index 81af6c4..0d4b778 100644
--- a/src/views/tigerprojects/tsk/tsk_job/log.data.ts
+++ b/src/views/tigerprojects/tsk/tsk_job/log.data.ts
@@ -56,7 +56,7 @@
   //   width: 180,
   // },
   {
-    title: '鏈鎵ц鑰楁椂(s)',
+    title: '鏈鎵ц鑰楁椂(ms)',
     dataIndex: 'ElapsedTime',
     width: 90,
   },
diff --git a/src/views/tigerprojects/tsk/tsk_log/logDrawer.vue b/src/views/tigerprojects/tsk/tsk_log/logDrawer.vue
index b709311..938022c 100644
--- a/src/views/tigerprojects/tsk/tsk_log/logDrawer.vue
+++ b/src/views/tigerprojects/tsk/tsk_log/logDrawer.vue
@@ -15,8 +15,7 @@
   import { BasicForm, useForm } from '/@/components/Form/index';
   import { formSchema } from './log.data';
   import { BasicDrawer, useDrawerInner } from '/@/components/Drawer';
-  //api
-  import { SaveTsk_Job } from '/@/api/tigerapi/tsk/tsk_job';
+import { SaveTskJob } from '/@/api/tigerapi/tsk/tsk_job';
 
   export default defineComponent({
     name: 'WHDrawer',
@@ -51,7 +50,7 @@
           setDrawerProps({ confirmLoading: true });
           // TODO custom api
           //淇濆瓨浠诲姟
-          const apiAction = SaveTsk_Job(values, unref(isUpdate));
+          const apiAction = SaveTskJob(values);
           apiAction.then((action) => {
             if (action.IsSuccessed) {
               closeDrawer();

--
Gitblit v1.9.3