From 78e153a3bec824964a52c3a0c2744ef0191f44ac Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期二, 24 三月 2026 11:46:17 +0800
Subject: [PATCH] feat: 新增缺失前端页面并接入路由

---
 Code/WCS/WIDESEAWCS_Client/src/extension/system/Sys_Tenant.js |   69 ++++
 Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/taskHty.js  |   69 ++++
 Code/WCS/WIDESEAWCS_Client/src/views/system/Sys_Tenant.vue    |  238 +++++++++++++++++
 Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/taskHty.vue     |  242 +++++++++++++++++
 Code/WCS/WIDESEAWCS_Client/src/router/viewGird.js             |   46 ++
 Code/WCS/WIDESEAWCS_Client/src/views/quartzJob/scheduler.vue  |  136 +++++++++
 6 files changed, 788 insertions(+), 12 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Client/src/extension/system/Sys_Tenant.js b/Code/WCS/WIDESEAWCS_Client/src/extension/system/Sys_Tenant.js
new file mode 100644
index 0000000..4e21a4a
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Client/src/extension/system/Sys_Tenant.js
@@ -0,0 +1,69 @@
+// 璇ユ墿灞曟枃浠剁敤浜庣鎴烽〉闈㈢殑鍓嶇鎵╁睍銆�
+// 鏂规硶鐩殑锛氬湪涓嶄慨鏀归�氱敤 view-grid 缁勪欢鐨勫墠鎻愪笅锛岄鐣欐煡璇㈠墠鍚庛�佷繚瀛樺墠鍚庣殑涓氬姟鎵╁睍鍏ュ彛銆�
+// 鍙傛暟璇存槑锛氬悇鏂规硶鍙傛暟鐢辨鏋跺洖璋冧紶鍏ワ紙濡傛悳绱㈠弬鏁般�佽〃鍗曟暟鎹�佽鏁版嵁锛夈��
+// 杩斿洖鍊艰鏄庯細杩斿洖 true 琛ㄧず缁х画鎵ц妗嗘灦榛樿娴佺▼锛岃繑鍥� false 琛ㄧず涓柇榛樿娴佺▼銆�
+// 寮傚父澶勭悊璇存槑锛氬綋鍓嶆墿灞曚笉鎶涘嚭寮傚父锛岃嫢鍚庣画澧炲姞缃戠粶璋冪敤锛岃鍦ㄥ搴旀柟娉曞唴浣跨敤 try-catch 骞惰褰曞叧閿笂涓嬫枃銆�
+
+let extension = {
+  components: {
+    gridHeader: "",
+    gridBody: "",
+    gridFooter: "",
+    modelHeader: "",
+    modelBody: "",
+    modelFooter: "",
+  },
+  tableAction: "",
+  buttons: { view: [], box: [], detail: [] },
+  methods: {
+    // 鏂规硶鐩殑锛氶〉闈㈠垵濮嬪寲鍓嶆墽琛岋紝鍙敤浜庤皟鏁存寜閽�佸垪閰嶇疆銆�
+    // 鍙傛暟鍚箟锛氭棤銆�
+    // 杩斿洖鍊硷細鏃犮��
+    onInit() {},
+
+    // 鏂规硶鐩殑锛氶〉闈㈠垵濮嬪寲瀹屾垚鍚庢墽琛岋紝鍙敤浜庡姞杞介檮鍔犳暟鎹��
+    // 鍙傛暟鍚箟锛氭棤銆�
+    // 杩斿洖鍊硷細鏃犮��
+    onInited() {},
+
+    // 鏂规硶鐩殑锛氭煡璇㈠墠鍙傛暟棰勫鐞嗐��
+    // 鍙傛暟鍚箟锛歱aram 涓哄綋鍓嶆煡璇㈡潯浠跺璞°��
+    // 杩斿洖鍊硷細true 缁х画鏌ヨ锛宖alse 缁堟鏌ヨ銆�
+    searchBefore(param) {
+      return true;
+    },
+
+    // 鏂规硶鐩殑锛氭煡璇㈢粨鏋滃悗澶勭悊銆�
+    // 鍙傛暟鍚箟锛歳esult 涓哄悗绔繑鍥炵粨鏋溿��
+    // 杩斿洖鍊硷細true 缁х画娓叉煋锛宖alse 鍙敤浜庨樆鏂悗缁鐞嗐��
+    searchAfter(result) {
+      return true;
+    },
+
+    // 鏂规硶鐩殑锛氭柊澧炰繚瀛樺墠鏍¢獙鎴栬ˉ鍏呭瓧娈点��
+    // 鍙傛暟鍚箟锛歠ormData 涓哄緟鎻愪氦琛ㄥ崟瀵硅薄銆�
+    // 杩斿洖鍊硷細true 缁х画淇濆瓨锛宖alse 缁堟淇濆瓨銆�
+    addBefore(formData) {
+      return true;
+    },
+
+    // 鏂规硶鐩殑锛氱紪杈戜繚瀛樺墠鏍¢獙鎴栬ˉ鍏呭瓧娈点��
+    // 鍙傛暟鍚箟锛歠ormData 涓哄緟鎻愪氦琛ㄥ崟瀵硅薄銆�
+    // 杩斿洖鍊硷細true 缁х画淇濆瓨锛宖alse 缁堟淇濆瓨銆�
+    updateBefore(formData) {
+      return true;
+    },
+
+    // 鏂规硶鐩殑锛氳〃鏍艰鐐瑰嚮浜嬩欢鎵╁睍銆�
+    // 鍙傛暟鍚箟锛歳ow 涓鸿鏁版嵁锛宑olumn 涓哄垪閰嶇疆锛宔vent 涓哄師濮嬩簨浠跺璞°��
+    // 杩斿洖鍊硷細鏃犮��
+    rowClick({ row, column, event }) {},
+
+    // 鏂规硶鐩殑锛氭柊澧�/缂栬緫寮圭獥鎵撳紑鍚庢墿灞曞鐞嗐��
+    // 鍙傛暟鍚箟锛歳ow 涓哄綋鍓嶈鏁版嵁锛涙柊澧炴椂鍙兘涓虹┖瀵硅薄銆�
+    // 杩斿洖鍊硷細鏃犮��
+    modelOpenAfter(row) {},
+  },
+};
+
+export default extension;
diff --git a/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/taskHty.js b/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/taskHty.js
new file mode 100644
index 0000000..642855b
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Client/src/extension/taskinfo/taskHty.js
@@ -0,0 +1,69 @@
+// 璇ユ墿灞曟枃浠剁敤浜庝换鍔″巻鍙查〉闈㈢殑涓氬姟鎵╁睍銆�
+// 鏂规硶鐩殑锛氱粺涓�棰勭暀鍒楄〃鏌ヨ銆佷繚瀛樺墠鍚庡拰寮圭獥鎵撳紑鏃剁殑鎵╁睍鍏ュ彛锛屼繚鎸佷笌椤圭洰鍐� task 椤甸潰涓�鑷寸殑鎵╁睍鐐广��
+// 鍙傛暟鍚箟锛氱敱妗嗘灦鎸夌敓鍛藉懆鏈熶紶鍏ワ紝鍖呭惈鏌ヨ鍙傛暟銆佽〃鍗曟暟鎹�佽鏁版嵁绛変笂涓嬫枃銆�
+// 杩斿洖鍊艰鏄庯細杩斿洖 true 浠h〃缁х画榛樿琛屼负锛岃繑鍥� false 浠h〃涓柇榛樿琛屼负銆�
+// 寮傚父澶勭悊璇存槑锛氬綋鍓嶆湭寮曞叆澶栭儴璋冪敤锛涜嫢鍚庣画鏂板鎺ュ彛璋冪敤锛岄渶鍦ㄦ柟娉曞唴琛ュ厖 try-catch 骞惰褰曞叧閿笟鍔″弬鏁般��
+
+let extension = {
+  components: {
+    gridHeader: "",
+    gridBody: "",
+    gridFooter: "",
+    modelHeader: "",
+    modelBody: "",
+    modelFooter: "",
+  },
+  tableAction: "",
+  buttons: { view: [], box: [], detail: [] },
+  methods: {
+    // 鏂规硶鐩殑锛氶〉闈㈠垵濮嬪寲鏃舵墽琛岃嚜瀹氫箟閫昏緫銆�
+    // 鍙傛暟锛氭棤銆�
+    // 杩斿洖鍊硷細鏃犮��
+    onInit() {},
+
+    // 鏂规硶鐩殑锛氶〉闈㈠垵濮嬪寲瀹屾垚鍚庢墽琛岃嚜瀹氫箟閫昏緫銆�
+    // 鍙傛暟锛氭棤銆�
+    // 杩斿洖鍊硷細鏃犮��
+    onInited() {},
+
+    // 鏂规硶鐩殑锛氭煡璇㈠墠澶勭悊鏌ヨ鏉′欢銆�
+    // 鍙傛暟锛歱aram 鏌ヨ鍙傛暟瀵硅薄銆�
+    // 杩斿洖鍊硷細true 缁х画鏌ヨ锛宖alse 缁堟鏌ヨ銆�
+    searchBefore(param) {
+      return true;
+    },
+
+    // 鏂规硶鐩殑锛氭煡璇㈠悗澶勭悊杩斿洖缁撴灉銆�
+    // 鍙傛暟锛歳esult 鍚庣杩斿洖鏁版嵁銆�
+    // 杩斿洖鍊硷細true 缁х画娓叉煋锛宖alse 缁堟鍚庣画澶勭悊銆�
+    searchAfter(result) {
+      return true;
+    },
+
+    // 鏂规硶鐩殑锛氭柊澧炲墠鏍¢獙鎴栬ˉ鍏呮彁浜ゅ瓧娈点��
+    // 鍙傛暟锛歠ormData 琛ㄥ崟鎻愪氦瀵硅薄銆�
+    // 杩斿洖鍊硷細true 缁х画鎻愪氦锛宖alse 缁堟鎻愪氦銆�
+    addBefore(formData) {
+      return true;
+    },
+
+    // 鏂规硶鐩殑锛氱紪杈戝墠鏍¢獙鎴栬ˉ鍏呮彁浜ゅ瓧娈点��
+    // 鍙傛暟锛歠ormData 琛ㄥ崟鎻愪氦瀵硅薄銆�
+    // 杩斿洖鍊硷細true 缁х画鎻愪氦锛宖alse 缁堟鎻愪氦銆�
+    updateBefore(formData) {
+      return true;
+    },
+
+    // 鏂规硶鐩殑锛氱偣鍑昏鏃舵墿灞曞鐞嗐��
+    // 鍙傛暟锛歳ow 琛屾暟鎹紝column 鍒楅厤缃紝event 鍘熷浜嬩欢銆�
+    // 杩斿洖鍊硷細鏃犮��
+    rowClick({ row, column, event }) {},
+
+    // 鏂规硶鐩殑锛氱紪杈戝脊绐楁墦寮�鍚庢墽琛屾墿灞曢�昏緫銆�
+    // 鍙傛暟锛歳ow 褰撳墠琛屾暟鎹��
+    // 杩斿洖鍊硷細鏃犮��
+    modelOpenAfter(row) {},
+  },
+};
+
+export default extension;
diff --git a/Code/WCS/WIDESEAWCS_Client/src/router/viewGird.js b/Code/WCS/WIDESEAWCS_Client/src/router/viewGird.js
index cde4249..9ad5891 100644
--- a/Code/WCS/WIDESEAWCS_Client/src/router/viewGird.js
+++ b/Code/WCS/WIDESEAWCS_Client/src/router/viewGird.js
@@ -1,4 +1,3 @@
-
 let viewgird = [
   {
     path: '/Sys_Log',
@@ -15,7 +14,6 @@
     name: 'permission',
     component: () => import('@/views/system/Permission.vue')
   },
-
   {
     path: '/Sys_Dictionary',
     name: 'Sys_Dictionary',
@@ -25,38 +23,62 @@
     path: '/Sys_Role',
     name: 'Sys_Role',
     component: () => import('@/views/system/Sys_Role.vue')
-  }, {
+  },
+  {
     path: '/Sys_Role1',
     name: 'Sys_Role1',
     component: () => import('@/views/system/Sys_Role1.vue')
-  }, {
+  },
+  {
     path: '/Sys_DictionaryList',
     name: 'Sys_DictionaryList',
     component: () => import('@/views/system/Sys_DictionaryList.vue')
-  }, {
+  },
+  {
+    path: '/Sys_Tenant',
+    name: 'Sys_Tenant',
+    component: () => import('@/views/system/Sys_Tenant.vue')
+  },
+  {
     path: '/deviceInfo',
     name: 'deviceInfo',
     component: () => import('@/views/quartzJob/deviceInfo.vue')
-  }, {
+  },
+  {
     path: '/deviceProtocol',
     name: 'deviceProtocol',
     component: () => import('@/views/quartzJob/deviceProtocol.vue')
-  }, {
+  },
+  {
     path: '/deviceProtocolDetail',
     name: 'deviceProtocolDetail',
     component: () => import('@/views/quartzJob/deviceProtocolDetail.vue')
-  }, {
+  },
+  {
     path: '/dispatchInfo',
     name: 'dispatchInfo',
     component: () => import('@/views/quartzJob/dispatchInfo.vue')
-  }, {
+  },
+  {
+    path: '/scheduler',
+    name: 'scheduler',
+    component: () => import('@/views/quartzJob/scheduler.vue')
+  },
+  {
     path: '/task',
     name: 'task',
     component: () => import('@/views/taskinfo/task.vue')
-  }, {
+  },
+  {
+    path: '/taskHty',
+    name: 'taskHty',
+    component: () => import('@/views/taskinfo/taskHty.vue')
+  },
+  {
     path: '/router',
     name: 'router',
     component: () => import('@/views/basicinfo/router.vue')
-  }]
+  }
+];
 
-export default viewgird
+export default viewgird;
diff --git a/Code/WCS/WIDESEAWCS_Client/src/views/quartzJob/scheduler.vue b/Code/WCS/WIDESEAWCS_Client/src/views/quartzJob/scheduler.vue
new file mode 100644
index 0000000..479100f
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Client/src/views/quartzJob/scheduler.vue
@@ -0,0 +1,136 @@
+<template>
+  <div class="scheduler-page">
+    <el-card shadow="never" class="card-item">
+      <template #header>
+        <span>璋冨害鏈嶅姟鎺у埗</span>
+      </template>
+      <div class="button-row">
+        <el-button type="success" @click="handleSchedulerAction('StartSchedule')">鍚姩璋冨害鏈嶅姟</el-button>
+        <el-button type="warning" @click="handleSchedulerAction('StopSchedule')">鍋滄璋冨害鏈嶅姟</el-button>
+      </div>
+    </el-card>
+
+    <el-card shadow="never" class="card-item">
+      <template #header>
+        <span>浠诲姟璋冨害鎿嶄綔</span>
+      </template>
+      <el-form :model="jobForm" label-width="110px" class="form-wrap">
+        <el-row :gutter="16">
+          <el-col :span="8">
+            <el-form-item label="浠诲姟鍚嶇О">
+              <el-input v-model="jobForm.name" placeholder="璇疯緭鍏ヤ换鍔″悕绉�" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="浠诲姟鍒嗙粍">
+              <el-input v-model="jobForm.jobGroup" placeholder="璇疯緭鍏ヤ换鍔″垎缁�" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="鎵ц绫诲悕">
+              <el-input v-model="jobForm.className" placeholder="璇疯緭鍏ユ墽琛岀被鍚�" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div class="button-row">
+        <el-button type="primary" @click="handleSchedulerAction('PauseJob')">鏆傚仠浠诲姟</el-button>
+        <el-button type="primary" @click="handleSchedulerAction('ResumeJob')">鎭㈠浠诲姟</el-button>
+        <el-button type="primary" @click="handleSchedulerAction('ExecuteJob')">绔嬪嵆鎵ц</el-button>
+        <el-button type="danger" @click="handleSchedulerAction('DeleteScheduleJob')">鍒犻櫎浠诲姟</el-button>
+      </div>
+    </el-card>
+  </div>
+</template>
+
+<script>
+import { defineComponent, ref } from "vue";
+import { ElMessage } from "element-plus";
+import http from "@/api/http";
+
+export default defineComponent({
+  setup() {
+    const jobForm = ref({
+      name: "",
+      jobGroup: "",
+      className: "",
+      assemblyName: "",
+      intervalSecond: 0,
+      beginTime: "",
+      endTime: "",
+      remark: "",
+    });
+
+    /**
+     * 鏂规硶鐩殑锛氭牎楠屼换鍔$骇璋冨害鎿嶄綔鎵�闇�鍙傛暟锛岄伩鍏嶆彁浜ゆ棤鏁堣姹傘��
+     * 鍙傛暟鍚箟锛氭棤锛堢洿鎺ヨ鍙栧綋鍓� jobForm锛夈��
+     * 杩斿洖鍊硷細true 琛ㄧず鏍¢獙閫氳繃锛沠alse 琛ㄧず鏍¢獙澶辫触骞跺脊鍑烘彁绀恒��
+     * 寮傚父澶勭悊锛氭湰鍦版牎楠屼笉鎶涘紓甯革紝閫氳繃娑堟伅鎻愮ず寮曞鐢ㄦ埛琛ュ叏鍏抽敭瀛楁銆�
+     */
+    const validateJobPayload = () => {
+      if (!jobForm.value.name || !jobForm.value.jobGroup || !jobForm.value.className) {
+        ElMessage.error("璇峰厛濉啓浠诲姟鍚嶇О銆佷换鍔″垎缁勩�佹墽琛岀被鍚�");
+        return false;
+      }
+      return true;
+    };
+
+    /**
+     * 鏂规硶鐩殑锛氱粺涓�澶勭悊璋冨害鎺у埗璇锋眰锛屽吋瀹� GET 涓� POST 涓ょ被鎺ュ彛銆�
+     * 鍙傛暟鍚箟锛歛ction 涓鸿皟搴﹀姩浣滃悕绉帮紝瀵瑰簲鍚庣 api/Scheduler/{action}銆�
+     * 杩斿洖鍊硷細Promise<void>锛屾墽琛屽畬鎴愬悗閫氳繃娑堟伅鎻愮ず缁撴灉銆�
+     * 鍏抽敭閫昏緫锛�
+     * 1. 鍏ㄥ眬鍔ㄤ綔锛堝惎鍔�/鍋滄锛夎蛋 GET銆�
+     * 2. 浠诲姟鍔ㄤ綔锛堟殏鍋�/鎭㈠/鎵ц/鍒犻櫎锛夎蛋 POST锛屽苟鎻愪氦 jobForm銆�
+     * 3. 鎺ュ彛杩斿洖 status=false 鏃舵彁绀哄悗绔� message銆�
+     * 寮傚父澶勭悊锛氫娇鐢� try-catch 鎹曡幏璇锋眰寮傚父骞朵繚鐣欓敊璇笂涓嬫枃杈撳嚭銆�
+     */
+    const handleSchedulerAction = async (action) => {
+      try {
+        const isGlobalAction = action === "StartSchedule" || action === "StopSchedule";
+        if (!isGlobalAction && !validateJobPayload()) {
+          return;
+        }
+
+        let result;
+        if (isGlobalAction) {
+          result = await http.get(`/api/Scheduler/${action}`, {}, true);
+        } else {
+          result = await http.post(`/api/Scheduler/${action}`, jobForm.value, true);
+        }
+
+        if (result && result.status) {
+          ElMessage.success(result.message || "鎿嶄綔鎴愬姛");
+          return;
+        }
+
+        ElMessage.error((result && result.message) || "鎿嶄綔澶辫触");
+      } catch (error) {
+        console.error("璋冨害璇锋眰寮傚父", { action, jobForm: jobForm.value, error });
+        ElMessage.error("璋冨害璇锋眰澶辫触锛岃绋嶅悗閲嶈瘯");
+      }
+    };
+
+    return {
+      jobForm,
+      handleSchedulerAction,
+    };
+  },
+});
+</script>
+
+<style scoped>
+.scheduler-page {
+  padding: 12px;
+}
+
+.card-item {
+  margin-bottom: 12px;
+}
+
+.button-row {
+  display: flex;
+  gap: 10px;
+  flex-wrap: wrap;
+}
+</style>
diff --git a/Code/WCS/WIDESEAWCS_Client/src/views/system/Sys_Tenant.vue b/Code/WCS/WIDESEAWCS_Client/src/views/system/Sys_Tenant.vue
new file mode 100644
index 0000000..93d3e4f
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Client/src/views/system/Sys_Tenant.vue
@@ -0,0 +1,238 @@
+锘�<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+<script>
+import extend from "@/extension/system/Sys_Tenant.js";
+import { ref, defineComponent } from "vue";
+
+export default defineComponent({
+  setup() {
+    const tenantTypeOptions = [
+      { key: 0, value: "榛樿绉熸埛" },
+      { key: 1, value: "浼佷笟绉熸埛" },
+      { key: 2, value: "骞冲彴绉熸埛" },
+    ];
+
+    const dbTypeOptions = [
+      { key: 0, value: "SqlServer" },
+      { key: 1, value: "MySql" },
+      { key: 2, value: "PostgreSQL" },
+      { key: 3, value: "Oracle" },
+      { key: 4, value: "Sqlite" },
+    ];
+
+    const statusOptions = [
+      { key: 1, value: "鍚敤" },
+      { key: 0, value: "绂佺敤" },
+    ];
+
+    const table = ref({
+      key: "tenantId",
+      footer: "Foots",
+      cnName: "绉熸埛绠$悊",
+      name: "Sys_Tenant",
+      url: "/tenant/",
+      sortName: "tenantId",
+    });
+
+    const editFormFields = ref({
+      tenantName: "",
+      tenantType: 0,
+      dbType: 0,
+      connectionString: "",
+      status: 1,
+      remark: "",
+    });
+
+    const editFormOptions = ref([
+      [
+        { title: "绉熸埛鍚嶇О", required: true, field: "tenantName", type: "string" },
+        {
+          title: "绉熸埛绫诲瀷",
+          required: true,
+          field: "tenantType",
+          type: "select",
+          data: tenantTypeOptions,
+        },
+      ],
+      [
+        {
+          title: "鏁版嵁搴撶被鍨�",
+          required: true,
+          field: "dbType",
+          type: "select",
+          data: dbTypeOptions,
+        },
+        {
+          title: "鐘舵��",
+          required: true,
+          field: "status",
+          type: "select",
+          data: statusOptions,
+        },
+      ],
+      [
+        {
+          title: "杩炴帴瀛楃涓�",
+          required: true,
+          field: "connectionString",
+          colSize: 12,
+          type: "textarea",
+        },
+      ],
+      [{ title: "澶囨敞", field: "remark", colSize: 12, type: "textarea" }],
+    ]);
+
+    const searchFormFields = ref({
+      tenantName: "",
+      tenantType: "",
+      dbType: "",
+      status: "",
+    });
+
+    const searchFormOptions = ref([
+      [
+        { title: "绉熸埛鍚嶇О", field: "tenantName", type: "like" },
+        {
+          title: "绉熸埛绫诲瀷",
+          field: "tenantType",
+          type: "select",
+          data: tenantTypeOptions,
+        },
+      ],
+      [
+        {
+          title: "鏁版嵁搴撶被鍨�",
+          field: "dbType",
+          type: "select",
+          data: dbTypeOptions,
+        },
+        {
+          title: "鐘舵��",
+          field: "status",
+          type: "select",
+          data: statusOptions,
+        },
+      ],
+    ]);
+
+    const columns = ref([
+      {
+        field: "tenantId",
+        title: "绉熸埛ID",
+        type: "int",
+        width: 110,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "tenantName",
+        title: "绉熸埛鍚嶇О",
+        type: "string",
+        width: 180,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "tenantType",
+        title: "绉熸埛绫诲瀷",
+        type: "int",
+        width: 120,
+        align: "left",
+        bind: { key: "tenantTypeLocal", data: tenantTypeOptions },
+      },
+      {
+        field: "dbType",
+        title: "鏁版嵁搴撶被鍨�",
+        type: "int",
+        width: 140,
+        align: "left",
+        bind: { key: "dbTypeLocal", data: dbTypeOptions },
+      },
+      {
+        field: "status",
+        title: "鐘舵��",
+        type: "int",
+        width: 100,
+        align: "left",
+        bind: { key: "tenantStatusLocal", data: statusOptions },
+      },
+      {
+        field: "connectionString",
+        title: "杩炴帴瀛楃涓�",
+        type: "string",
+        width: 320,
+        align: "left",
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 180,
+        align: "left",
+      },
+    ]);
+
+    const detail = ref({
+      cnName: "",
+      table: "",
+      columns: [],
+      sortName: "",
+      key: "",
+    });
+
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>
diff --git a/Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/taskHty.vue b/Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/taskHty.vue
new file mode 100644
index 0000000..1211cf3
--- /dev/null
+++ b/Code/WCS/WIDESEAWCS_Client/src/views/taskinfo/taskHty.vue
@@ -0,0 +1,242 @@
+<template>
+  <view-grid
+    ref="grid"
+    :columns="columns"
+    :detail="detail"
+    :editFormFields="editFormFields"
+    :editFormOptions="editFormOptions"
+    :searchFormFields="searchFormFields"
+    :searchFormOptions="searchFormOptions"
+    :table="table"
+    :extend="extend"
+  >
+  </view-grid>
+</template>
+<script>
+import extend from "@/extension/taskinfo/taskHty.js";
+import { ref, defineComponent } from "vue";
+
+export default defineComponent({
+  setup() {
+    const table = ref({
+      key: "taskId",
+      footer: "Foots",
+      cnName: "浠诲姟鍘嗗彶",
+      name: "taskHty",
+      url: "/Task_Hty/",
+      sortName: "insertTime",
+    });
+
+    const editFormFields = ref({});
+    const editFormOptions = ref([]);
+
+    const searchFormFields = ref({
+      taskNum: "",
+      palletCode: "",
+      roadway: "",
+      sourceAddress: "",
+      targetAddress: "",
+      currentAddress: "",
+      nextAddress: "",
+      creater: "",
+      createDate: "",
+      operateType: "",
+      insertTime: "",
+    });
+
+    const searchFormOptions = ref([
+      [
+        { title: "浠诲姟鍙�", field: "taskNum", type: "int" },
+        { title: "鎵樼洏缂栫爜", field: "palletCode", type: "like" },
+        {
+          title: "浠诲姟绫诲瀷",
+          field: "taskType",
+          type: "selectList",
+          dataKey: "taskType",
+          data: [],
+        },
+        {
+          title: "浠诲姟鐘舵��",
+          field: "taskStatus",
+          type: "selectList",
+          dataKey: "taskState",
+          data: [],
+        },
+      ],
+      [
+        { title: "璧峰鍦板潃", field: "sourceAddress", type: "like" },
+        { title: "鐩爣鍦板潃", field: "targetAddress", type: "like" },
+        { title: "褰撳墠浣嶇疆", field: "currentAddress", type: "like" },
+        { title: "涓嬩竴浣嶇疆", field: "nextAddress", type: "like" },
+      ],
+      [
+        { title: "宸烽亾鍙�", field: "roadway", type: "like" },
+        { title: "鍒涘缓浜�", field: "creater", type: "like" },
+        { title: "鎿嶄綔绫诲瀷", field: "operateType", type: "like" },
+        { title: "绉诲叆鍘嗗彶鏃堕棿", field: "insertTime", type: "datetime" },
+      ],
+    ]);
+
+    const columns = ref([
+      {
+        field: "taskId",
+        title: "TaskId",
+        type: "int",
+        width: 90,
+        hidden: true,
+        readonly: true,
+        require: true,
+        align: "left",
+      },
+      {
+        field: "taskNum",
+        title: "浠诲姟鍙�",
+        type: "int",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "palletCode",
+        title: "鎵樼洏缂栫爜",
+        type: "string",
+        width: 150,
+        align: "left",
+      },
+      {
+        field: "roadway",
+        title: "宸烽亾鍙�",
+        type: "string",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "taskType",
+        title: "浠诲姟绫诲瀷",
+        type: "int",
+        width: 90,
+        align: "left",
+        bind: { key: "taskType", data: [] },
+      },
+      {
+        field: "taskStatus",
+        title: "浠诲姟鐘舵��",
+        type: "int",
+        width: 120,
+        align: "left",
+        bind: { key: "taskState", data: [] },
+      },
+      {
+        field: "sourceAddress",
+        title: "璧峰鍦板潃",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "targetAddress",
+        title: "鐩爣鍦板潃",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "currentAddress",
+        title: "褰撳墠浣嶇疆",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "nextAddress",
+        title: "涓嬩竴浣嶇疆",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "grade",
+        title: "浼樺厛绾�",
+        type: "int",
+        width: 90,
+        align: "left",
+      },
+      {
+        field: "sourceId",
+        title: "鍘熻〃涓婚敭",
+        type: "int",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "operateType",
+        title: "鎿嶄綔绫诲瀷",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+      {
+        field: "insertTime",
+        title: "绉诲叆鍘嗗彶鏃堕棿",
+        type: "datetime",
+        width: 170,
+        align: "left",
+        sort: true,
+      },
+      {
+        field: "creater",
+        title: "鍒涘缓浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "createDate",
+        title: "鍒涘缓鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "modifier",
+        title: "淇敼浜�",
+        type: "string",
+        width: 100,
+        align: "left",
+      },
+      {
+        field: "modifyDate",
+        title: "淇敼鏃堕棿",
+        type: "datetime",
+        width: 160,
+        align: "left",
+      },
+      {
+        field: "remark",
+        title: "澶囨敞",
+        type: "string",
+        width: 120,
+        align: "left",
+      },
+    ]);
+
+    const detail = ref({
+      cnName: "",
+      table: "",
+      columns: [],
+      sortName: "",
+      key: "",
+    });
+
+    return {
+      table,
+      extend,
+      editFormFields,
+      editFormOptions,
+      searchFormFields,
+      searchFormOptions,
+      columns,
+      detail,
+    };
+  },
+});
+</script>

--
Gitblit v1.9.3