From d71422ecb4e6a0c855e94e0416e4fc52387dec18 Mon Sep 17 00:00:00 2001
From: zhangwei <1504152376@qq.com>
Date: 星期五, 08 八月 2025 14:52:46 +0800
Subject: [PATCH] '关注项目'

---
 src/views/system/aboutItem/utils/rule.ts  |  222 ++++++++
 src/views/system/aboutItem/form.vue       |  410 +++++++++++++++
 src/views/system/dept/utils/hook.tsx      |   10 
 src/views/system/dept/index.vue           |    2 
 src/router/modules/item.ts                |   63 +
 src/views/system/aboutItem/index.vue      |  334 ++++++++++++
 src/views/system/aboutItem/utils/types.ts |   39 +
 src/views/system/aboutItem/utils/hook.tsx |  489 ++++++++++++++++++
 8 files changed, 1,543 insertions(+), 26 deletions(-)

diff --git a/src/router/modules/item.ts b/src/router/modules/item.ts
index 02ecf02..be7fba5 100644
--- a/src/router/modules/item.ts
+++ b/src/router/modules/item.ts
@@ -1,21 +1,44 @@
-export default {
-  path: "/item",
-  meta: {
-    title: "椤圭洰绠$悊",
-    icon: "mdi:chart-timeline"
-  },
-  children: [
-    {
-      // path闅忎究鍐欙紝浣嗗墠闈㈠繀椤绘湁涓� `/`
-      path: "/item",
-      // component瀵瑰簲鐨勫�煎墠涓嶉渶瑕佸姞 / 鍊煎搴旂殑鏄疄闄呬笟鍔� `.vue` 鎴� `.tsx` 浠g爜璺緞
-      component: () => import("@/views/system/dept/index.vue"),
-      name: "item",
-      meta: {
-        title: "椤圭洰绠$悊",
-        roles: ["DLJG", "CGR"]
-        // showLink:false
+export default [
+  {
+    path: "/item",
+    meta: {
+      title: "椤圭洰绠$悊",
+      icon: "mdi:chart-timeline"
+    },
+    children: [
+      {
+        // path闅忎究鍐欙紝浣嗗墠闈㈠繀椤绘湁涓� `/`
+        path: "/item",
+        // component瀵瑰簲鐨勫�煎墠涓嶉渶瑕佸姞 / 鍊煎搴旂殑鏄疄闄呬笟鍔� `.vue` 鎴� `.tsx` 浠g爜璺緞
+        component: () => import("@/views/system/dept/index.vue"),
+        name: "item",
+        meta: {
+          title: "椤圭洰绠$悊",
+          roles: ["DLJG", "CGR"]
+          // showLink:false
+        }
       }
-    }
-  ]
-} satisfies RouteConfigsTable;
+    ]
+  },
+  {
+    path: "/aboutItem",
+    meta: {
+      title: "鍏虫敞椤圭洰",
+      icon: "pajamas:work-item-new"
+    },
+    children: [
+      {
+        // path闅忎究鍐欙紝浣嗗墠闈㈠繀椤绘湁涓� `/`
+        path: "/aboutItem",
+        // component瀵瑰簲鐨勫�煎墠涓嶉渶瑕佸姞 / 鍊煎搴旂殑鏄疄闄呬笟鍔� `.vue` 鎴� `.tsx` 浠g爜璺緞
+        component: () => import("@/views/system/aboutItem/index.vue"),
+        name: "aboutItem",
+        meta: {
+          title: "鍏虫敞椤圭洰",
+          roles: ["DLJG", "GYS"]
+          // showLink:false
+        }
+      }
+    ]
+  }
+] satisfies Array<RouteConfigsTable>;
diff --git a/src/views/system/aboutItem/form.vue b/src/views/system/aboutItem/form.vue
new file mode 100644
index 0000000..d189790
--- /dev/null
+++ b/src/views/system/aboutItem/form.vue
@@ -0,0 +1,410 @@
+<script setup lang="ts">
+import { onMounted, ref, reactive } from "vue";
+import ReCol from "@/components/ReCol";
+import { formRules } from "./utils/rule";
+import { FormProps } from "./utils/types";
+import { usePublicHooks } from "../hooks";
+import { useDept } from "./utils/hook";
+import { Operation } from "@element-plus/icons-vue";
+import { getCaigoufangshiList } from "@/api/item/index";
+
+const { state } = useDept();
+const props = withDefaults(defineProps<FormProps>(), {
+  formInline: () => ({
+    id: "",
+    projectCode: "", // 椤圭洰缂栧彿锛堝繀濉級
+    projectName: "", // 椤圭洰鍚嶇О锛堝繀濉級
+    hangyepinmu: null, // 琛屼笟鍝佺洰锛堝彲閫夛級
+    caigoufangshi: null, // 閲囪喘鏂瑰紡锛堝彲閫夛級
+    caigouyusuan: null, // 閲囪喘棰勭畻锛堝彲閫夛級
+    dingbiaoguize: null, // 瀹氭爣瑙勫垯锛堝彲閫夛級
+    baomingfei: null, // 鎶ュ悕璐癸紙鍙�夛級
+    toubiaobaozhengjin: null, // 鎶曟爣淇濊瘉閲戯紙鍙�夛級
+    lianhetitoubiao: null, // 鑱斿悎浣撴姇鏍囷紙鍙�夛級
+    kaibiaofangshi: null, // 寮�鏍囨柟寮忥紙鍙�夛級
+    shifoufenbao: "false", // 鏄惁鍒嗗寘锛堝彲閫夛級
+    shifoutuisongxuanchuan: "true", // 鏄惁鎺ㄩ�佸浼狅紙鍙�夛級
+    caigourenmingcheng: null, // 閲囪喘浜哄悕绉帮紙鍙�夛級
+    xingzhengquyu: [], // 琛屾斂鍖哄煙锛堝彲閫夛級
+    xingzhengquyuName: null, // 琛屾斂鍖哄煙鍚嶇О锛堝彲閫夛級
+    jigoudaima: null, // 鏈烘瀯浠g爜锛堝彲閫夛級
+    daimaleixing: null, // 浠g爜绫诲瀷锛堝彲閫夛級
+    lianxiren: null, // 鑱旂郴浜猴紙鍙�夛級
+    lianxidianhua: null, // 鑱旂郴鐢佃瘽锛堝彲閫夛級
+    tongxindizhi: null, // 閫氫俊鍦板潃锛堝彲閫夛級
+    dianziyoujian: null, // 鐢靛瓙閭欢锛堝彲閫夛級
+    xiangmujingbanren: null, // 椤圭洰缁忓姙浜猴紙鍙�夛級
+    zhiwu: null, // 鑱屽姟锛堝彲閫夛級
+    jingbanrendianhua: null, // 缁忓姙浜虹數璇濓紙鍙�夛級
+    dailijigoumingcheng: null, // 浠g悊鏈烘瀯鍚嶇О锛堝彲閫夛級
+    dailiLianxiren: null, // 浠g悊鏈烘瀯鑱旂郴浜猴紙鍙�夛級
+    dailiLianxidianhua: null, // 浠g悊鏈烘瀯鑱旂郴鐢佃瘽锛堝彲閫夛級
+    dailiDianziyoujian: null, // 浠g悊鏈烘瀯鐢靛瓙閭欢锛堝彲閫夛級
+    dailiTongxindizhi: null, // 浠g悊鏈烘瀯閫氫俊鍦板潃锛堝彲閫夛級
+    dailiXiangmujingli: null, // 浠g悊鏈烘瀯椤圭洰缁忕悊锛堝彲閫�
+    dailijingliLianxidianhua: null // 浠g悊鏈烘瀯椤圭洰缁忕悊鑱旂郴鐢佃瘽锛堝彲閫夛級
+  })
+});
+
+const ruleFormRef = ref();
+const { switchStyle } = usePublicHooks();
+const newFormInline = ref(props.formInline);
+
+function getRef() {
+  return ruleFormRef.value;
+}
+const handleChange = value => {
+  console.log(value);
+};
+defineExpose({ getRef });
+onMounted(async () => {});
+</script>
+
+<template>
+  <el-form
+    ref="ruleFormRef"
+    :model="newFormInline"
+    :rules="formRules"
+    label-width="110px"
+  >
+    <el-row :gutter="30">
+      <re-col>
+        <p class="flex items-center">
+          <el-icon color="#409EFF" class="m-2" size="large">
+            <Operation />
+          </el-icon>
+          <el-text class="mx-1" size="large" type="primary" tag="b">
+            椤圭洰淇℃伅
+          </el-text>
+        </p>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="椤圭洰鍚嶇О" prop="projectName">
+          <el-input
+            v-model="newFormInline.projectName"
+            clearable
+            placeholder="璇疯緭鍏ラ」鐩悕绉�"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="椤圭洰缂栧彿" prop="projectCode">
+          <el-input
+            v-model="newFormInline.projectCode"
+            clearable
+            placeholder="璇疯緭鍏ラ」鐩紪鍙�"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="琛屼笟鍝佺洰" prop="hangyepinmu">
+          <el-select
+            v-model="newFormInline.hangyepinmu"
+            placeholder="璇烽�夋嫨琛屼笟鍝佺洰"
+            clearable
+            class="w-[100%]!"
+          >
+            <el-option
+              v-for="item in state.hangyepingmuList"
+              :key="item.id"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="閲囪喘鏂瑰紡" prop="caigoufangshi">
+          <el-select
+            v-model="newFormInline.caigoufangshi"
+            placeholder="璇烽�夋嫨閲囪喘鏂瑰紡"
+            style="width: 240px"
+          >
+            <el-option
+              v-for="item in state.caigoufangshiList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+      </re-col>
+
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="閲囪喘棰勭畻" prop="caigouyusuan">
+          <el-input
+            v-model="newFormInline.caigouyusuan"
+            clearable
+            placeholder="璇疯緭鍏ラ噰璐绠�"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="瀹氬埗瑙勫垝" prop="dingbiaoguize">
+          <!-- <el-checkbox-group
+            v-model="newFormInline.dingbiaoguize"
+            placeholder="璇烽�夋嫨鐘舵��"
+            clearable
+            class="w-[100%]!"
+          >
+            <el-checkbox label="鏈�浣庝环" value="鏈�浣庝环" />
+            <el-checkbox label="缁煎悎璇勫垎" value="缁煎悎璇勫垎" />
+          </el-checkbox-group> -->
+          <el-radio-group v-model="newFormInline.dingbiaoguize">
+            <el-radio value="鏈�浣庝环">鏈�浣庝环</el-radio>
+            <el-radio value="缁煎悎璇勫垎">缁煎悎璇勫垎</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鎶ュ悕璐�" prop="baomingfei">
+          <el-input
+            v-model="newFormInline.baomingfei"
+            clearable
+            placeholder="璇疯緭鍏ユ姤鍚嶈垂"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鎶曟爣淇濊瘉閲�" prop="toubiaobaozhengjin">
+          <el-input
+            v-model="newFormInline.toubiaobaozhengjin"
+            clearable
+            placeholder="璇疯緭鍏ユ姇鏍囦繚璇侀噾"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鑱斿悎浣撴姇鏍�" prop="lianhetitoubiao">
+          <el-radio-group v-model="newFormInline.lianhetitoubiao">
+            <el-radio value="鏀寔">鏀寔</el-radio>
+            <el-radio value="涓嶆敮鎸�">涓嶆敮鎸�</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="寮�鏍囨柟寮�" prop="kaibiaofangshi">
+          <el-radio-group v-model="newFormInline.kaibiaofangshi">
+            <el-radio value="绾歌川鏍�">绾歌川鏍�</el-radio>
+            <el-radio value="鐢靛瓙鏍�">鐢靛瓙鏍�</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鏄惁鍒嗗寘" prop="shifoufenbao">
+          <el-radio-group v-model="newFormInline.shifoufenbao">
+            <el-radio value="true">鏄�</el-radio>
+            <el-radio value="false">鍚�</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鏄惁鎺ㄩ�佸浼�" prop="shifoutuisongxuanchuan">
+          <el-radio-group v-model="newFormInline.shifoutuisongxuanchuan">
+            <el-radio value="true">鏄�</el-radio>
+            <el-radio value="false">鍚�</el-radio>
+          </el-radio-group>
+        </el-form-item>
+      </re-col>
+
+      <re-col>
+        <p class="flex items-center">
+          <el-icon color="#409EFF" class="m-2" size="large">
+            <Operation />
+          </el-icon>
+          <el-text class="mx-1" size="large" type="primary" tag="b">
+            閲囪喘浜轰俊鎭�
+          </el-text>
+        </p>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="閲囪喘浜哄悕绉�" prop="caigourenmingcheng">
+          <el-input
+            v-model="newFormInline.caigourenmingcheng"
+            clearable
+            placeholder="璇疯緭鍏ラ噰璐汉鍚嶇О"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="琛屾斂鍖哄煙" prop="xingzhengquyu">
+          <el-cascader
+            v-model="newFormInline.xingzhengquyu"
+            class="w-full"
+            :options="state.regionList"
+            :props="{
+              value: 'code',
+              label: 'name',
+              children: 'regions'
+            }"
+            clearable
+            filterable
+            placeholder="璇烽�夋嫨鍖哄煙"
+            @change="handleChange"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鏈烘瀯浠g爜" prop="jigoudaima">
+          <el-input
+            v-model="newFormInline.jigoudaima"
+            clearable
+            placeholder="璇疯緭鍏ユ満鏋勪唬鐮�"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="浠g爜绫诲瀷" prop="daimaleixing">
+          <el-select
+            v-model="newFormInline.daimaleixing"
+            placeholder="璇烽�夋嫨浠g爜绫诲瀷"
+            style="width: 240px"
+          >
+            <el-option
+              v-for="item in state.daimaleixingList"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            />
+          </el-select>
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鑱旂郴浜�" prop="lianxiren">
+          <el-input
+            v-model="newFormInline.lianxiren"
+            clearable
+            placeholder="璇疯緭鍏ヨ仈绯讳汉"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鑱旂郴浜虹數璇�" prop="lianxidianhua">
+          <el-input
+            v-model="newFormInline.lianxidianhua"
+            clearable
+            placeholder="璇疯緭鍏ヨ仈绯讳汉鐢佃瘽"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="12" :xs="24" :sm="24">
+        <el-form-item label="閫氫俊鍦板潃" prop="tongxindizhi">
+          <el-input
+            v-model="newFormInline.tongxindizhi"
+            clearable
+            placeholder="璇疯緭鍏ラ�氫俊鍦板潃"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鐢靛瓙閭" prop="dianziyoujian">
+          <el-input
+            v-model="newFormInline.dianziyoujian"
+            clearable
+            placeholder="璇疯緭鍏ョ數瀛愰偖绠�"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="椤圭洰缁忓姙浜�" prop="xiangmujingbanren">
+          <el-input
+            v-model="newFormInline.xiangmujingbanren"
+            clearable
+            placeholder="璇疯緭鍏ラ」鐩粡鍔炰汉"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鑱屽姟" prop="zhiwu">
+          <el-input
+            v-model="newFormInline.zhiwu"
+            clearable
+            placeholder="璇疯緭鍏ヨ亴鍔�"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="缁忓姙浜虹數璇�" prop="jingbanrendianhua">
+          <el-input
+            v-model="newFormInline.jingbanrendianhua"
+            clearable
+            placeholder="璇疯緭鍏ョ粡鍔炰汉鐢佃瘽"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col>
+        <p class="flex items-center">
+          <el-icon color="#409EFF" class="m-2" size="large">
+            <Operation />
+          </el-icon>
+          <el-text class="mx-1" size="large" type="primary" tag="b">
+            浠g悊鏈烘瀯淇℃伅
+          </el-text>
+        </p>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="浠g悊鏈烘瀯鍚嶇О" prop="dailijigoumingcheng">
+          <el-input
+            v-model="newFormInline.dailijigoumingcheng"
+            clearable
+            placeholder="璇疯緭鍏ヤ唬鐞嗘満鏋勫悕绉�"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鑱旂郴浜�" prop="dailiLianxiren">
+          <el-input
+            v-model="newFormInline.dailiLianxiren"
+            clearable
+            placeholder="璇疯緭鍏ヨ仈绯讳汉"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鑱旂郴鐢佃瘽" prop="dailiLianxidianhua">
+          <el-input
+            v-model="newFormInline.dailiLianxidianhua"
+            clearable
+            placeholder="璇疯緭鍏ヨ仈绯荤數璇�"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鐢靛瓙閭" prop="dailiDianziyoujian">
+          <el-input
+            v-model="newFormInline.dailiDianziyoujian"
+            clearable
+            placeholder="璇疯緭鍏ョ數瀛愰偖绠�"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="12" :xs="24" :sm="24">
+        <el-form-item label="閫氫俊鍦板潃" prop="dailiTongxindizhi">
+          <el-input
+            v-model="newFormInline.dailiTongxindizhi"
+            clearable
+            placeholder="璇疯緭鍏ラ�氫俊鍦板潃"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="椤圭洰缁忕悊" prop="dailiXiangmujingli">
+          <el-input
+            v-model="newFormInline.dailiXiangmujingli"
+            clearable
+            placeholder="璇疯緭鍏ラ」鐩粡鐞�"
+          />
+        </el-form-item>
+      </re-col>
+      <re-col :value="6" :xs="24" :sm="24">
+        <el-form-item label="鑱旂郴鐢佃瘽" prop="dailijingliLianxidianhua">
+          <el-input
+            v-model="newFormInline.dailijingliLianxidianhua"
+            clearable
+            placeholder="璇疯緭鍏ヨ仈绯荤數璇�"
+          />
+        </el-form-item>
+      </re-col>
+    </el-row>
+  </el-form>
+</template>
diff --git a/src/views/system/aboutItem/index.vue b/src/views/system/aboutItem/index.vue
new file mode 100644
index 0000000..a945ecc
--- /dev/null
+++ b/src/views/system/aboutItem/index.vue
@@ -0,0 +1,334 @@
+<script setup lang="ts">
+import { ref, reactive, onMounted, computed } from "vue";
+import { useDept } from "./utils/hook";
+import { PureTableBar } from "@/components/RePureTableBar";
+import { useRenderIcon } from "@/components/ReIcon/src/hooks";
+
+import Delete from "~icons/ep/delete";
+import EditPen from "~icons/ep/edit-pen";
+import Refresh from "~icons/ep/refresh";
+import AddFill from "~icons/ri/add-circle-line";
+import { useUserStoreHook } from "@/store/modules/user";
+
+defineOptions({
+  name: "SystemDept"
+});
+
+const formRef = ref();
+const tableRef = ref();
+
+const {
+  form,
+  state,
+  loading,
+  columns,
+  CGRcolumns,
+  selectedNum,
+  dataList,
+  onSearch,
+  resetForm,
+  openDialog,
+  handleDelete,
+  handleSelectionChange,
+  handleSizeChange,
+  handleCurrentChange,
+  pagination,
+  checkboxAsRadio,
+  onSelectionCancel,
+  onbatchDel
+} = useDept(tableRef);
+
+function onFullscreen() {
+  // 閲嶇疆琛ㄦ牸楂樺害
+  tableRef.value.setAdaptive();
+}
+const nowRole = computed(() => {
+  return useUserStoreHook().nowRole;
+});
+
+onMounted(() => {});
+</script>
+
+<template>
+  <div class="main">
+    <!-- class="search-form bg-bg_color w-full pl-8 pt-[12px] overflow-auto" -->
+    <el-card shadow="hover" :body-style="{ paddingBottom: '0' }">
+      <el-form ref="formRef" :model="form" labelWidth="100">
+        <el-row>
+          <!-- <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+            <el-form-item label="鏃堕棿锛�">
+              <el-date-picker
+                v-model="form.createDateRange"
+                type="daterange"
+                start-placeholder="寮�濮嬫棩鏈�"
+                end-placeholder="缁撴潫鏃ユ湡"
+                value-format="YYYY-MM-DD HH:mm:ss"
+                :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
+                class="w-[100%]!"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="12" :lg="6" :xl="6">
+            <el-form-item label="鍖哄煙锛�">
+              <el-cascader
+                v-model="form.xingzhengquyu"
+                class="w-full"
+                :options="state.regionList"
+                :props="{
+                  value: 'code',
+                  label: 'name',
+                  children: 'regions'
+                }"
+                clearable
+                filterable
+                placeholder="璇烽�夋嫨鍖哄煙"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4">
+            <el-form-item label="琛屼笟鍝佺洰锛�">
+              <el-select
+                v-model="form.hangyepinmu"
+                placeholder="璇烽�夋嫨琛屼笟鍝佺洰"
+                clearable
+                class="w-[100%]!"
+              >
+                <el-option
+                  v-for="item in state.hangyepingmuList"
+                  :key="item.id"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4">
+            <el-form-item label="椤圭洰杩涘害锛�">
+              <el-select
+                v-model="form.orderStatus"
+                placeholder="璇烽�夋嫨椤圭洰杩涘害"
+                clearable
+                class="w-[100%]!"
+              >
+                <el-option
+                  v-for="item in state.orderStatusList"
+                  :key="item.id"
+                  :label="item.label"
+                  :value="item.value"
+                />
+              </el-select>
+            </el-form-item> </el-col
+          ><el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4">
+            <el-form-item label="璐ㄧ枒锛�">
+              <el-checkbox-group
+                v-model="form.zhiyi"
+                clearable
+                class="w-[100%]!"
+                @change="checkboxAsRadio(form.zhiyi)"
+              >
+                <el-checkbox label="鏈�" value="true" />
+                <el-checkbox label="鏃�" value="false" />
+              </el-checkbox-group>
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4">
+            <el-form-item label="鎶曡瘔锛�">
+              <el-checkbox-group
+                v-model="form.tousu"
+                clearable
+                class="w-[100%]!"
+                @change="checkboxAsRadio(form.tousu)"
+              >
+                <el-checkbox label="鏈�" value="true" />
+                <el-checkbox label="鏃�" value="false" />
+              </el-checkbox-group>
+            </el-form-item>
+          </el-col> -->
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4">
+            <el-form-item label="椤圭洰鍚嶇О锛�">
+              <el-input
+                v-model="form.projectName"
+                placeholder="璇疯緭鍏ラ」鐩悕绉�"
+                clearable
+                class="w-[100%]!"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4">
+            <el-form-item label="浠g悊鏈烘瀯锛�">
+              <el-input
+                v-model="form.dailijigoumingcheng"
+                placeholder="璇疯緭鍏ヤ唬鐞嗘満鏋�"
+                clearable
+                class="w-[100%]!"
+              />
+            </el-form-item>
+          </el-col>
+          <!-- <el-col
+            v-if="nowRole.code == 'DLJG'"
+            :xs="24"
+            :sm="12"
+            :md="8"
+            :lg="6"
+            :xl="4"
+          >
+            <el-form-item label="閲囪喘浜猴細">
+              <el-input
+                v-model="form.caigourenmingcheng"
+                placeholder="璇疯緭鍏ラ噰璐汉"
+                clearable
+                class="w-[100%]!"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4">
+            <el-form-item label="涓爣渚涘簲鍟嗭細">
+              <el-input
+                v-model="form.zhongbiaoName"
+                placeholder="璇疯緭鍏ヤ腑鏍囦緵搴斿晢"
+                clearable
+                class="w-[100%]!"
+              />
+            </el-form-item>
+          </el-col>
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4">
+            <el-form-item label="璇勫涓撳锛�">
+              <el-input
+                v-model="form.zhuanjiaName"
+                placeholder="璇疯緭鍏ヨ瘎瀹′笓瀹�"
+                clearable
+                class="w-[100%]!"
+              />
+            </el-form-item>
+          </el-col> -->
+          <el-col :xs="24" :sm="12" :md="8" :lg="6" :xl="4">
+            <el-form-item label-width="40">
+              <el-button type="primary" :loading="loading" @click="onSearch">
+                鎼滅储
+              </el-button>
+              <!-- <el-button
+                :icon="useRenderIcon(Refresh)"
+                @click="resetForm(formRef)"
+              >
+                閲嶇疆
+              </el-button> -->
+              <!-- <el-button type="primary" @click="openDialog()"> 鏂板 </el-button> -->
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+    </el-card>
+    <PureTableBar
+      title=""
+      :columns="nowRole.code == 'CGR' ? CGRcolumns : columns"
+      :tableRef="tableRef?.getTableRef()"
+      @refresh="onSearch"
+      @fullscreen="onFullscreen"
+    >
+      <!-- <template #buttons>
+        <el-button
+          type="primary"
+          :icon="useRenderIcon(AddFill)"
+          @click="openDialog()"
+        >
+          鏂板椤圭洰
+        </el-button>
+      </template> -->
+      <template v-slot="{ size, dynamicColumns }">
+        <div
+          v-if="selectedNum > 0"
+          v-motion-fade
+          class="bg-[var(--el-fill-color-light)] w-full h-[46px] mb-2 pl-4 flex items-center"
+        >
+          <div class="flex-auto">
+            <span
+              style="font-size: var(--el-font-size-base)"
+              class="text-[rgba(42,46,54,0.5)] dark:text-[rgba(220,220,242,0.5)]"
+            >
+              宸查�� {{ selectedNum }} 椤�
+            </span>
+            <el-button type="primary" text @click="onSelectionCancel">
+              鍙栨秷閫夋嫨
+            </el-button>
+          </div>
+          <el-popconfirm title="鏄惁纭鍒犻櫎?" @confirm="onbatchDel">
+            <template #reference>
+              <el-button type="danger" text class="mr-1!"> 鎵归噺鍒犻櫎 </el-button>
+            </template>
+          </el-popconfirm>
+        </div>
+        <pure-table
+          ref="tableRef"
+          adaptive
+          :adaptiveConfig="{ offsetBottom: 45 }"
+          align-whole="center"
+          row-key="id"
+          showOverflowTooltip
+          table-layout="auto"
+          :loading="loading"
+          :data="dataList"
+          :columns="dynamicColumns"
+          :pagination="{ ...pagination, size }"
+          :header-cell-style="{
+            background: 'var(--el-fill-color-light)',
+            color: 'var(--el-text-color-primary)'
+          }"
+          @selection-change="handleSelectionChange"
+          @page-size-change="handleSizeChange"
+          @page-current-change="handleCurrentChange"
+        >
+          <template #operation="{ row }">
+            <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              :icon="useRenderIcon(EditPen)"
+              @click="openDialog('淇敼', row)"
+            />
+            <!-- <el-button
+              class="reset-margin"
+              link
+              type="primary"
+              :size="size"
+              :icon="useRenderIcon(AddFill)"
+              @click="openDialog('鏂板', { parentId: row.id } as any)"
+            >
+              鏂板
+            </el-button> -->
+            <el-popconfirm
+              :title="`鏄惁纭鍒犻櫎椤圭洰鍚嶇О涓�${row.projectName}鐨勮繖鏉℃暟鎹甡"
+              @confirm="handleDelete(row)"
+            >
+              <template #reference>
+                <el-button
+                  class="reset-margin"
+                  link
+                  type="primary"
+                  :size="size"
+                  :icon="useRenderIcon(Delete)"
+                />
+              </template>
+            </el-popconfirm>
+          </template>
+        </pure-table>
+      </template>
+    </PureTableBar>
+  </div>
+</template>
+
+<style lang="scss" scoped>
+:deep(.el-table__inner-wrapper::before) {
+  height: 0;
+}
+
+.main-content {
+  margin: 24px 24px 0 !important;
+}
+
+.search-form {
+  :deep(.el-form-item) {
+    margin-bottom: 12px;
+  }
+}
+</style>
diff --git a/src/views/system/aboutItem/utils/hook.tsx b/src/views/system/aboutItem/utils/hook.tsx
new file mode 100644
index 0000000..0608031
--- /dev/null
+++ b/src/views/system/aboutItem/utils/hook.tsx
@@ -0,0 +1,489 @@
+import dayjs from "dayjs";
+import editForm from "../form.vue";
+import { handleTree } from "@/utils/tree";
+import { message } from "@/utils/message";
+import { zhaobiaoPageOrder } from "@/api/item/index";
+
+import {
+  getCaigoufangshiList,
+  getHangyepingmuList,
+  getOrderStatusList,
+  getRegionList,
+  getDaimaleixingList,
+  caigourenAdd,
+  caigourenUpdate,
+  caigourenDelete,
+  caigourenBatchDelete
+} from "@/api/item/index";
+import { usePublicHooks } from "../../hooks";
+import { addDialog } from "@/components/ReDialog";
+import { type Ref, reactive, ref, onMounted, h, computed } from "vue";
+import type { FormItemProps } from "./types";
+import {
+  cloneDeep,
+  isAllEmpty,
+  deviceDetection,
+  getKeyList
+} from "@pureadmin/utils";
+import { useUserStoreHook } from "@/store/modules/user";
+import type { PaginationProps } from "@pureadmin/table";
+
+const nowRole = computed(() => {
+  return useUserStoreHook().nowRole;
+});
+const selectedNum = ref(0);
+
+export function useDept(tableRef: Ref) {
+  const form = reactive({
+    // 鏂板鏃ユ湡鑼冨洿锛屽彲涓� null锛岀被鍨嬩负鏁扮粍
+    createDateRange: null,
+    // 琛屾斂鍖哄煙锛屽彲涓� null锛岀被鍨嬩负瀛楃涓�
+    xingzhengquyu: [],
+    // 琛屼笟鍝佺洰锛屽彲涓� null锛岀被鍨嬩负瀛楃涓�
+    hangyepinmu: "",
+    // 璁㈠崟鐘舵�侊紝鍙负 null锛岀被鍨嬩负 32 浣嶆暣鏁�
+    orderStatus: "",
+    // 璐ㄧ枒鏈夋棤锛屽彲涓� null锛岀被鍨嬩负甯冨皵鍊�
+    zhiyi: [],
+    // 鎶曡瘔鏈夋棤锛屽彲涓� null锛岀被鍨嬩负甯冨皵鍊�
+    tousu: [],
+    // 椤圭洰鍚嶇О锛屽彲涓� null锛岀被鍨嬩负瀛楃涓�
+    projectName: null,
+    // 浠g悊鏈烘瀯鍚嶇О锛屽彲涓� null锛岀被鍨嬩负瀛楃涓�
+    dailijigoumingcheng: null,
+    caigourenmingcheng: null,
+    // 涓爣渚涘簲鍟嗗鍚嶏紝鍙负 null锛岀被鍨嬩负瀛楃涓�
+    zhongbiaoName: null,
+    // 涓撳濮撳悕锛屽彲涓� null锛岀被鍨嬩负瀛楃涓�
+    zhuanjiaName: null
+  });
+  const state = reactive({
+    caigoufangshiList: [],
+    hangyepingmuList: [],
+    orderStatusList: [],
+    regionList: [],
+    daimaleixingList: []
+  });
+  const pagination = reactive<PaginationProps>({
+    total: 0,
+    pageSize: 10,
+    currentPage: 1,
+    background: true
+  });
+  //鑾峰彇閲囪喘鏂瑰紡
+  const getCaigoufangshiListFun = async () => {
+    const res = await getCaigoufangshiList();
+    state.caigoufangshiList = res.result;
+  };
+
+  //鑾峰彇琛屼笟鍝佺洰
+  const getHangyepingmuListFun = async () => {
+    const res = await getHangyepingmuList();
+    state.hangyepingmuList = res.result;
+  };
+
+  //鑾峰彇椤圭洰杩涘害
+  const getOrderStatusListFun = async () => {
+    const res = await getOrderStatusList();
+    state.orderStatusList = res.result;
+  };
+
+  // 鑾峰彇鍖哄煙
+  const getRegionListFun = async () => {
+    const res = await getRegionList();
+    state.regionList = res.result;
+  };
+
+  // 鑾峰彇浠g爜绫诲瀷
+  const getDaimaleixingListFun = async () => {
+    const res = await getDaimaleixingList();
+    state.daimaleixingList = res.result;
+  };
+  const formRef = ref();
+  const dataList = ref([]);
+  const loading = ref(true);
+  const { tagStyle } = usePublicHooks();
+  const getOrderStatus = row => {
+    const res = state.orderStatusList.find(item => {
+      return row.orderStatus == item.status;
+    });
+    return res?.label;
+  };
+  const columns: TableColumnList = [
+    {
+      label: "鍕鹃�夊垪", // 濡傛灉闇�瑕佽〃鏍煎閫夛紝姝ゅlabel蹇呴』璁剧疆
+      type: "selection",
+      fixed: "left",
+      reserveSelection: true // 鏁版嵁鍒锋柊鍚庝繚鐣欓�夐」
+    },
+    {
+      label: "閲囪喘浜�",
+      prop: "caigourenmingcheng",
+      minWidth: 70
+    },
+    {
+      label: "椤圭洰鍚嶇О",
+      prop: "projectName",
+      width: 180,
+      align: "left"
+    },
+    {
+      label: "椤圭洰杩涘害",
+      prop: "orderStatus",
+      minWidth: 70,
+      cellRenderer: ({ row, props }) => getOrderStatus(row)
+    },
+    {
+      label: "鎶ュ悕璐�",
+      prop: "baomingfei",
+      minWidth: 70
+    },
+    {
+      label: "鎶曟爣淇濊瘉閲�",
+      prop: "toubiaobaozhengjin",
+      minWidth: 70
+    },
+    {
+      label: "涓爣渚涘簲鍟�",
+      prop: "zhongbiaoName",
+      minWidth: 180
+    },
+    {
+      label: "璇勫涓撳",
+      prop: "zhuanjiaName",
+      minWidth: 70
+    },
+    {
+      label: "璐ㄧ枒",
+      prop: "zhiyi",
+      minWidth: 100,
+      cellRenderer: ({ row, props }) => (
+        <span>{row.status === 1 ? "鏈�" : "鏃�"}</span>
+      )
+    },
+    {
+      label: "鎶曡瘔",
+      prop: "tousu",
+      minWidth: 100,
+      cellRenderer: ({ row, props }) => (
+        // <el-tag size={props.size} style={tagStyle.value(row.status)}>
+        <span>{row.status === 1 ? "鏈�" : "鏃�"}</span>
+        // </el-tag>
+      )
+    },
+    {
+      label: "鎿嶄綔",
+      fixed: "right",
+      width: 80,
+      slot: "operation"
+    }
+  ];
+  const CGRcolumns: TableColumnList = [
+    {
+      label: "鍕鹃�夊垪", // 濡傛灉闇�瑕佽〃鏍煎閫夛紝姝ゅlabel蹇呴』璁剧疆
+      type: "selection",
+      fixed: "left",
+      reserveSelection: true // 鏁版嵁鍒锋柊鍚庝繚鐣欓�夐」
+    },
+    {
+      label: "浠g悊鏈烘瀯",
+      prop: "dailijigoumingcheng",
+      minWidth: 70
+    },
+    {
+      label: "椤圭洰鍚嶇О",
+      prop: "projectName",
+      width: 180,
+      align: "left"
+    },
+    {
+      label: "椤圭洰杩涘害",
+      prop: "orderStatus",
+      minWidth: 70,
+      cellRenderer: ({ row, props }) => getOrderStatus(row)
+    },
+    {
+      label: "鎶ュ悕璐�",
+      prop: "baomingfei",
+      minWidth: 70
+    },
+    {
+      label: "鎶曟爣淇濊瘉閲�",
+      prop: "toubiaobaozhengjin",
+      minWidth: 70
+    },
+    {
+      label: "涓爣渚涘簲鍟�",
+      prop: "zhongbiaoName",
+      minWidth: 180
+    },
+    {
+      label: "璇勫涓撳",
+      prop: "zhuanjiaName",
+      minWidth: 70
+    },
+    {
+      label: "璐ㄧ枒",
+      prop: "zhiyi",
+      minWidth: 100,
+      cellRenderer: ({ row, props }) => (
+        <span>{row.status === 1 ? "鏈�" : "鏃�"}</span>
+      )
+    },
+    {
+      label: "鎶曡瘔",
+      prop: "tousu",
+      minWidth: 100,
+      cellRenderer: ({ row, props }) => (
+        // <el-tag size={props.size} style={tagStyle.value(row.status)}>
+        <span>{row.status === 1 ? "鏈�" : "鏃�"}</span>
+        // </el-tag>
+      )
+    },
+    {
+      label: "鎿嶄綔",
+      fixed: "right",
+      width: 80,
+      slot: "operation"
+    }
+  ];
+
+  /** 褰揅heckBox閫夋嫨椤瑰彂鐢熷彉鍖栨椂浼氳Е鍙戣浜嬩欢 */
+  function handleSelectionChange(val) {
+    selectedNum.value = val.length;
+    // 閲嶇疆琛ㄦ牸楂樺害
+    tableRef.value.setAdaptive();
+  }
+  /** 鍙栨秷閫夋嫨 */
+  function onSelectionCancel() {
+    selectedNum.value = 0;
+    // 鐢ㄤ簬澶氶�夎〃鏍硷紝娓呯┖鐢ㄦ埛鐨勯�夋嫨
+    tableRef.value.getTableRef().clearSelection();
+  }
+  /** 鎵归噺鍒犻櫎 */
+  async function onbatchDel() {
+    // 杩斿洖褰撳墠閫変腑鐨勮
+    const curSelected = tableRef.value.getTableRef().getSelectionRows();
+    const data = [];
+    curSelected.forEach(item => {
+      data.push({ id: item.id });
+    });
+    const res = await caigourenBatchDelete(data);
+    if (res.code == "200") {
+      // 鎺ヤ笅鏉ユ牴鎹疄闄呬笟鍔★紝閫氳繃閫変腑琛岀殑鏌愰」鏁版嵁锛屾瘮濡備笅闈㈢殑id锛岃皟鐢ㄦ帴鍙h繘琛屾壒閲忓垹闄�
+      message(
+        `宸插垹闄ら」鐩悕绉颁负 ${getKeyList(curSelected, "projectName")} 鐨勬暟鎹甡,
+        {
+          type: "success"
+        }
+      );
+      onSearch();
+    } else {
+      message(res.message, {
+        type: "error"
+      });
+    }
+    tableRef.value.getTableRef().clearSelection();
+    onSearch();
+  }
+  function handleSizeChange(val: number) {
+    console.log(`${val} items per page`);
+  }
+
+  function handleCurrentChange(val: number) {
+    console.log(`current page: ${val}`);
+  }
+
+  function resetForm(formEl) {
+    if (!formEl) return;
+    formEl.resetFields();
+    onSearch();
+  }
+  const checkboxAsRadio = data => {
+    if (data.length > 1) {
+      data.shift();
+    }
+  };
+  async function onSearch() {
+    const obj = cloneDeep(form);
+    obj.tousu = obj.tousu.join("");
+    obj.zhiyi = obj.zhiyi.join("");
+    obj.xingzhengquyu = obj.xingzhengquyu ? obj.xingzhengquyu.join("") : "";
+    loading.value = true;
+    const { result } = await zhaobiaoPageOrder(obj); // 杩欓噷鏄繑鍥炰竴缁存暟缁勭粨鏋勶紝鍓嶇鑷澶勭悊鎴愭爲缁撴瀯锛岃繑鍥炴牸寮忚姹傦細鍞竴id鍔犵埗鑺傜偣parentId锛宲arentId鍙栫埗鑺傜偣id
+    const newData = result.items;
+    loading.value = false;
+    pagination.total = result.total;
+    pagination.pageSize = result.pageSize;
+    pagination.currentPage = result.page;
+    // if (!isAllEmpty(form.name)) {
+    //   // 鍓嶇鎼滅储椤圭洰鍚嶇О
+    //   newData = newData.filter(item => item.name.includes(form.name));
+    // }
+    // if (!isAllEmpty(form.status)) {
+    //   // 鍓嶇鎼滅储鐘舵��
+    //   newData = newData.filter(item => item.status === form.status);
+    // }
+    dataList.value = handleTree(newData); // 澶勭悊鎴愭爲缁撴瀯
+  }
+
+  function formatHigherDeptOptions(treeList) {
+    // 鏍规嵁杩斿洖鏁版嵁鐨剆tatus瀛楁鍊煎垽鏂拷鍔犳槸鍚︾鐢╠isabled瀛楁锛岃繑鍥炲鐞嗗悗鐨勬爲缁撴瀯锛岀敤浜庝笂绾ч」鐩骇鑱旈�夋嫨鍣ㄧ殑灞曠ず锛堝疄闄呭紑鍙戜腑涔熸槸濡傛锛屼笉鍙兘鍓嶇闇�瑕佺殑姣忎釜瀛楁鍚庣閮戒細杩斿洖锛岃繖鏃堕渶瑕佸墠绔嚜琛屾牴鎹悗绔繑鍥炵殑鏌愪簺瀛楁鍋氶�昏緫澶勭悊锛�
+    if (!treeList || !treeList.length) return;
+    const newTreeList = [];
+    for (let i = 0; i < treeList.length; i++) {
+      treeList[i].disabled = treeList[i].status === 0 ? true : false;
+      formatHigherDeptOptions(treeList[i].children);
+      newTreeList.push(treeList[i]);
+    }
+    return newTreeList;
+  }
+
+  function openDialog(title = "鏂板", row?: FormItemProps) {
+    console.log(row, "-");
+
+    addDialog({
+      title: `${title}椤圭洰`,
+      props: {
+        formInline: {
+          higherDeptOptions: formatHigherDeptOptions(cloneDeep(dataList.value)),
+          id: row?.id ?? "",
+          projectCode: row?.projectCode ?? "", // 椤圭洰缂栧彿锛堝繀濉級
+          projectName: row?.projectName ?? "", // 椤圭洰鍚嶇О锛堝繀濉級
+          hangyepinmu: row?.hangyepinmu ?? null, // 琛屼笟鍝佺洰锛堝彲閫夛級
+          caigoufangshi: row?.caigoufangshi ?? null, // 閲囪喘鏂瑰紡锛堝彲閫夛級
+          caigouyusuan: row?.caigouyusuan ?? null, // 閲囪喘棰勭畻锛堝彲閫夛級
+          dingbiaoguize: row?.dingbiaoguize ?? null, // 瀹氭爣瑙勫垯锛堝彲閫夛級
+          baomingfei: row?.baomingfei ?? null, // 鎶ュ悕璐癸紙鍙�夛級
+          toubiaobaozhengjin: row?.toubiaobaozhengjin ?? null, // 鎶曟爣淇濊瘉閲戯紙鍙�夛級
+          lianhetitoubiao: row?.lianhetitoubiao ?? null, // 鑱斿悎浣撴姇鏍囷紙鍙�夛級
+          kaibiaofangshi: row?.kaibiaofangshi ?? null, // 寮�鏍囨柟寮忥紙鍙�夛級
+          shifoufenbao: row?.shifoufenbao ?? "false", // 鏄惁鍒嗗寘锛堝彲閫夛級
+          shifoutuisongxuanchuan: row?.shifoutuisongxuanchuan ?? "true", // 鏄惁鎺ㄩ�佸浼狅紙鍙�夛級
+          caigourenmingcheng: row?.caigourenmingcheng ?? null, // 閲囪喘浜哄悕绉帮紙鍙�夛級
+          xingzhengquyu: row?.xingzhengquyu.split(",") ?? [], // 琛屾斂鍖哄煙锛堝彲閫夛級
+          xingzhengquyuName: row?.xingzhengquyuName ?? null, // 琛屾斂鍖哄煙鍚嶇О锛堝彲閫夛級
+          jigoudaima: row?.jigoudaima ?? null, // 鏈烘瀯浠g爜锛堝彲閫夛級
+          daimaleixing: row?.daimaleixing ?? null, // 浠g爜绫诲瀷锛堝彲閫夛級
+          lianxiren: row?.lianxiren ?? null, // 鑱旂郴浜猴紙鍙�夛級
+          lianxidianhua: row?.lianxidianhua ?? null, // 鑱旂郴鐢佃瘽锛堝彲閫夛級
+          tongxindizhi: row?.tongxindizhi ?? null, // 閫氫俊鍦板潃锛堝彲閫夛級
+          dianziyoujian: row?.dianziyoujian ?? null, // 鐢靛瓙閭欢锛堝彲閫夛級
+          xiangmujingbanren: row?.xiangmujingbanren ?? null, // 椤圭洰缁忓姙浜猴紙鍙�夛級
+          zhiwu: row?.zhiwu ?? null, // 鑱屽姟锛堝彲閫夛級
+          jingbanrendianhua: row?.jingbanrendianhua ?? null, // 缁忓姙浜虹數璇濓紙鍙�夛級
+          dailijigoumingcheng: row?.dailijigoumingcheng ?? null, // 浠g悊鏈烘瀯鍚嶇О锛堝彲閫夛級
+          dailiLianxiren: row?.dailiLianxiren ?? null, // 浠g悊鏈烘瀯鑱旂郴浜猴紙鍙�夛級
+          dailiLianxidianhua: row?.dailiLianxidianhua ?? null, // 浠g悊鏈烘瀯鑱旂郴鐢佃瘽锛堝彲閫夛級
+          dailiDianziyoujian: row?.dailiDianziyoujian ?? null, // 浠g悊鏈烘瀯鐢靛瓙閭欢锛堝彲閫夛級
+          dailiTongxindizhi: row?.dailiTongxindizhi ?? null, // 浠g悊鏈烘瀯閫氫俊鍦板潃锛堝彲閫夛級
+          dailiXiangmujingli: row?.dailiXiangmujingli ?? null, // 浠g悊鏈烘瀯椤圭洰缁忕悊锛堝彲閫�
+          dailijingliLianxidianhua: row?.dailijingliLianxidianhua ?? null // 浠g悊鏈烘瀯椤圭洰缁忕悊鑱旂郴鐢佃瘽锛堝彲閫夛級
+        }
+      },
+      width: "80%",
+      draggable: true,
+      fullscreen: deviceDetection(),
+      fullscreenIcon: true,
+      sureBtnLoading: true,
+      closeOnClickModal: false,
+      contentRenderer: () => h(editForm, { ref: formRef, formInline: null }),
+      beforeSure: (done, { options, closeLoading }) => {
+        const FormRef = formRef.value.getRef();
+        const curData = cloneDeep(options.props.formInline as FormItemProps);
+        async function chores() {
+          message(`鎮�${title}浜嗛」鐩悕绉颁负${curData.projectName}鐨勮繖鏉℃暟鎹甡, {
+            type: "success"
+          });
+          // curData.dingbiaoguize = curData.dingbiaoguize.join("");
+          curData.xingzhengquyu = curData.xingzhengquyu.join(",");
+          let res;
+          if (title == "鏂板") {
+            res = await caigourenAdd(curData);
+          } else {
+            res = await caigourenUpdate(curData);
+          }
+          if (res.code == "200") {
+            done(); // 鍏抽棴寮规
+            onSearch(); // 鍒锋柊琛ㄦ牸鏁版嵁
+          } else {
+            closeLoading();
+            message(res.message, {
+              type: "error"
+            });
+          }
+        }
+        FormRef.validate((valid, obj) => {
+          if (valid) {
+            // 琛ㄥ崟瑙勫垯鏍¢獙閫氳繃
+            if (title === "鏂板") {
+              // 瀹為檯寮�鍙戝厛璋冪敤鏂板鎺ュ彛锛屽啀杩涜涓嬮潰鎿嶄綔
+              chores();
+            } else {
+              // 瀹為檯寮�鍙戝厛璋冪敤淇敼鎺ュ彛锛屽啀杩涜涓嬮潰鎿嶄綔
+              chores();
+            }
+          } else {
+            closeLoading();
+            const fail = [];
+            for (const key in obj) {
+              fail.push(obj[key][0].message);
+            }
+            message(fail[0], {
+              type: "warning"
+            });
+            return false;
+          }
+        });
+      }
+    });
+  }
+
+  async function handleDelete(row) {
+    const res = await caigourenDelete({ id: row.id });
+    if (res.code == "200") {
+      message(`鎮ㄥ垹闄や簡椤圭洰鍚嶇О涓�${row.projectName}鐨勮繖鏉℃暟鎹甡, {
+        type: "success"
+      });
+      onSearch();
+    } else {
+      message(res.message, {
+        type: "error"
+      });
+    }
+  }
+
+  onMounted(() => {
+    onSearch();
+    getCaigoufangshiListFun();
+    getHangyepingmuListFun();
+    getOrderStatusListFun();
+    getRegionListFun();
+    getDaimaleixingListFun();
+  });
+
+  return {
+    form,
+    state,
+    loading,
+    columns,
+    CGRcolumns,
+    dataList,
+    selectedNum,
+    /** 鎼滅储 */
+    onSearch,
+    /** 閲嶇疆 */
+    resetForm,
+    /** 鏂板銆佷慨鏀归」鐩� */
+    openDialog,
+    /** 鍒犻櫎椤圭洰 */
+    handleDelete,
+    handleSelectionChange,
+    handleSizeChange,
+    handleCurrentChange,
+    pagination,
+    checkboxAsRadio,
+    onSelectionCancel,
+    onbatchDel
+  };
+}
diff --git a/src/views/system/aboutItem/utils/rule.ts b/src/views/system/aboutItem/utils/rule.ts
new file mode 100644
index 0000000..4b05d23
--- /dev/null
+++ b/src/views/system/aboutItem/utils/rule.ts
@@ -0,0 +1,222 @@
+import { reactive } from "vue";
+import type { FormRules } from "element-plus";
+import { isPhone, isEmail } from "@pureadmin/utils";
+
+/** 鑷畾涔夎〃鍗曡鍒欐牎楠� */
+export const formRules = reactive(<FormRules>{
+  // 椤圭洰缂栧彿锛堝繀濉級
+  projectCode: [
+    { required: true, message: "璇疯緭鍏ラ」鐩紪鍙�", trigger: "blur" },
+    { max: 50, message: "椤圭洰缂栧彿闀垮害涓嶈兘瓒呰繃50涓瓧绗�", trigger: "blur" }
+  ],
+  // 椤圭洰鍚嶇О锛堝繀濉級
+  projectName: [
+    { required: true, message: "璇疯緭鍏ラ」鐩悕绉�", trigger: "blur" },
+    { max: 200, message: "椤圭洰鍚嶇О闀垮害涓嶈兘瓒呰繃200涓瓧绗�", trigger: "blur" }
+  ],
+  // 琛屼笟鍝佺洰锛堝彲閫夛紝浣嗛�夋嫨鏃堕渶鏍¢獙锛�
+  hangyepinmu: [
+    { required: true, message: "璇烽�夋嫨琛屼笟鍝佺洰", trigger: "blur" },
+    { type: "string", message: "琛屼笟鍝佺洰鏍煎紡涓嶆纭�", trigger: "change" }
+  ],
+  // 閲囪喘鏂瑰紡锛堝彲閫夛紝浣嗛�夋嫨鏃堕渶鏍¢獙锛�
+  caigoufangshi: [
+    { required: true, message: "璇烽�夋嫨閲囪喘鏂瑰紡", trigger: "blur" },
+    { type: "string", message: "閲囪喘鏂瑰紡鏍煎紡涓嶆纭�", trigger: "change" }
+  ],
+  // 閲囪喘棰勭畻锛堝彲閫夛紝闇�涓烘暟瀛楋級
+  caigouyusuan: [
+    { required: true, message: "璇疯緭鍏ラ噰璐绠�", trigger: "blur" }
+    // { type: "number", message: "閲囪喘棰勭畻蹇呴』涓烘暟瀛�", trigger: "blur" },
+    // { min: 0, message: "閲囪喘棰勭畻涓嶈兘涓鸿礋鏁�", trigger: "blur" }
+  ],
+  // 瀹氭爣瑙勫垯锛堝彲閫夛級
+  dingbiaoguize: [
+    { required: true, message: "璇烽�夋嫨瀹氭爣瑙勫垯", trigger: "blur" },
+    { type: "string", message: "瀹氭爣瑙勫垯鏍煎紡涓嶆纭�", trigger: "change" }
+  ],
+  // 鎶ュ悕璐癸紙鍙�夛紝闇�涓烘暟瀛楋級
+  baomingfei: [
+    { required: true, message: "璇疯緭鍏ユ姤鍚嶈垂", trigger: "blur" }
+    // { type: "number", message: "鎶ュ悕璐瑰繀椤讳负鏁板瓧", trigger: "blur" },
+    // { min: 0, message: "鎶ュ悕璐逛笉鑳戒负璐熸暟", trigger: "blur" }
+  ],
+  // 鎶曟爣淇濊瘉閲戯紙鍙�夛紝闇�涓烘暟瀛楋級
+  toubiaobaozhengjin: [
+    { required: true, message: "璇疯緭鍏ユ姇鏍囦繚璇侀噾璐�", trigger: "blur" }
+    // { type: "number", message: "鎶曟爣淇濊瘉閲戝繀椤讳负鏁板瓧", trigger: "blur" },
+    // { min: 0, message: "鎶曟爣淇濊瘉閲戜笉鑳戒负璐熸暟", trigger: "blur" }
+  ],
+  // 鑱斿悎浣撴姇鏍囷紙鍙�夛紝闇�涓哄竷灏斿�硷級
+  lianhetitoubiao: [
+    { required: true, message: "璇烽�夋嫨鑱斿悎浣撴姇鏍�", trigger: "blur" }
+    // { type: "boolean", message: "鑱斿悎浣撴姇鏍囧繀椤讳负甯冨皵鍊�", trigger: "change" }
+  ],
+  // 寮�鏍囨柟寮忥紙鍙�夛級
+  kaibiaofangshi: [
+    { required: true, message: "璇烽�夋嫨寮�鏍囨柟寮�", trigger: "blur" }
+    // { type: "string", message: "寮�鏍囨柟寮忔牸寮忎笉姝g‘", trigger: "change" }
+  ],
+  // 鏄惁鍒嗗寘锛堝彲閫夛紝闇�涓哄竷灏斿�硷級
+  shifoufenbao: [
+    { required: true }
+    // { type: "boolean", message: "鏄惁鍒嗗寘蹇呴』涓哄竷灏斿��", trigger: "change" }
+  ],
+  // 鏄惁鎺ㄩ�佸浼狅紙鍙�夛紝闇�涓哄竷灏斿�硷級
+  shifoutuisongxuanchuan: [
+    { required: true }
+    // { type: "boolean", message: "鏄惁鎺ㄩ�佸浼犲繀椤讳负甯冨皵鍊�", trigger: "change" }
+  ],
+  // 閲囪喘浜哄悕绉帮紙鍙�夛級
+  caigourenmingcheng: [
+    { required: true, message: "璇疯緭鍏ラ噰璐汉鍚嶇О", trigger: "blur" },
+    { max: 100, message: "閲囪喘浜哄悕绉伴暱搴︿笉鑳借秴杩�100涓瓧绗�", trigger: "blur" }
+  ],
+  // 琛屾斂鍖哄煙锛堝彲閫夛紝闇�涓烘暟缁勶級
+  xingzhengquyu: [
+    { required: true, message: "璇烽�夋嫨琛屾斂鍖哄煙", trigger: "blur" },
+    { type: "array", message: "琛屾斂鍖哄煙蹇呴』涓烘暟缁勬牸寮�", trigger: "change" }
+  ],
+  // 琛屾斂鍖哄煙鍚嶇О锛堝彲閫夛級
+  // xingzhengquyuName: [
+  //   { required: false },
+  //   { max: 100, message: "琛屾斂鍖哄煙鍚嶇О闀垮害涓嶈兘瓒呰繃100涓瓧绗�", trigger: "blur" }
+  // ],
+  // 鏈烘瀯浠g爜锛堝彲閫夛紝楠岃瘉鏍煎紡锛�
+  jigoudaima: [
+    { required: true, message: "璇疯緭鍏ユ満鏋勪唬鐮�", trigger: "blur" }
+    // {
+    //   pattern: /^[A-Z0-9]{8}-[A-Z0-9]{1}$/,
+    //   message: "鏈烘瀯浠g爜鏍煎紡涓嶆纭�",
+    //   trigger: "blur"
+    // }
+  ],
+  // 浠g爜绫诲瀷锛堝彲閫夛級
+  daimaleixing: [
+    { required: true, message: "璇烽�夋嫨浠g爜绫诲瀷", trigger: "blur" },
+    { type: "string", message: "浠g爜绫诲瀷鏍煎紡涓嶆纭�", trigger: "change" }
+  ],
+  // 鑱旂郴浜猴紙鍙�夛級
+  lianxiren: [
+    { required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur" },
+    { max: 50, message: "鑱旂郴浜哄鍚嶉暱搴︿笉鑳借秴杩�50涓瓧绗�", trigger: "blur" }
+  ],
+  // 鑱旂郴鐢佃瘽锛堝彲閫夛紝楠岃瘉鎵嬫満鍙锋牸寮忥級
+  lianxidianhua: [
+    { required: true, message: "璇疯緭鍏ヨ仈绯讳汉鐢佃瘽", trigger: "blur" },
+    {
+      pattern: /^1[3-9]\d{9}$/,
+      message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
+      trigger: "blur"
+    }
+  ],
+  // 閫氫俊鍦板潃锛堝彲閫夛級
+  tongxindizhi: [
+    { required: true, message: "璇疯緭鍏ラ�氫俊鍦板潃", trigger: "blur" },
+    { max: 200, message: "閫氫俊鍦板潃闀垮害涓嶈兘瓒呰繃200涓瓧绗�", trigger: "blur" }
+  ],
+  // 鐢靛瓙閭欢锛堝彲閫夛紝楠岃瘉閭鏍煎紡锛�
+  dianziyoujian: [
+    { required: true, message: "璇疯緭鍏ョ數瀛愰偖浠�", trigger: "blur" },
+    { type: "email", message: "璇疯緭鍏ユ纭殑閭鍦板潃", trigger: "blur" }
+  ],
+  // 椤圭洰缁忓姙浜猴紙鍙�夛級
+  xiangmujingbanren: [
+    { required: true, message: "璇疯緭鍏ラ」鐩粡鍔炰汉", trigger: "blur" },
+    { max: 50, message: "椤圭洰缁忓姙浜哄鍚嶉暱搴︿笉鑳借秴杩�50涓瓧绗�", trigger: "blur" }
+  ],
+  // 鑱屽姟锛堝彲閫夛級
+  zhiwu: [
+    { required: true, message: "璇疯緭鍏ヨ亴鍔�", trigger: "blur" },
+    { max: 50, message: "鑱屽姟鍚嶇О闀垮害涓嶈兘瓒呰繃50涓瓧绗�", trigger: "blur" }
+  ],
+  // 缁忓姙浜虹數璇濓紙鍙�夛紝楠岃瘉鎵嬫満鍙锋牸寮忥級
+  jingbanrendianhua: [
+    { required: true, message: "璇疯緭鍏ョ粡鍔炰汉鐢佃瘽", trigger: "blur" },
+    {
+      pattern: /^1[3-9]\d{9}$/,
+      message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
+      trigger: "blur"
+    }
+  ],
+  // 浠g悊鏈烘瀯鍚嶇О锛堝彲閫夛級
+  dailijigoumingcheng: [
+    { required: true, message: "璇疯緭鍏ヤ唬鐞嗘満鏋勫悕绉�", trigger: "blur" },
+    { max: 100, message: "浠g悊鏈烘瀯鍚嶇О闀垮害涓嶈兘瓒呰繃100涓瓧绗�", trigger: "blur" }
+  ],
+  // 浠g悊鏈烘瀯鑱旂郴浜猴紙鍙�夛級
+  dailiLianxiren: [
+    { required: true, message: "璇疯緭鍏ヨ仈绯讳汉", trigger: "blur" },
+    {
+      max: 50,
+      message: "鑱旂郴浜哄鍚嶉暱搴︿笉鑳借秴杩�50涓瓧绗�",
+      trigger: "blur"
+    }
+  ],
+  // 浠g悊鏈烘瀯鑱旂郴鐢佃瘽锛堝彲閫夛紝楠岃瘉鎵嬫満鍙锋牸寮忥級
+  dailiLianxidianhua: [
+    { required: true, message: "璇疯緭鍏ヨ仈绯荤數璇�", trigger: "blur" },
+    {
+      pattern: /^1[3-9]\d{9}$/,
+      message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
+      trigger: "blur"
+    }
+  ],
+  // 浠g悊鏈烘瀯鐢靛瓙閭欢锛堝彲閫夛紝楠岃瘉閭鏍煎紡锛�
+  dailiDianziyoujian: [
+    { required: true, message: "璇疯緭鍏ョ數瀛愰偖浠�", trigger: "blur" },
+    { type: "email", message: "璇疯緭鍏ユ纭殑閭鍦板潃", trigger: "blur" },
+    {
+      validator: (rule, value, callback) => {
+        if (value === "") {
+          callback();
+        } else if (!isEmail(value)) {
+          callback(new Error("璇疯緭鍏ユ纭殑閭鏍煎紡"));
+        } else {
+          callback();
+        }
+      },
+      trigger: "blur"
+    }
+  ],
+  // 浠g悊鏈烘瀯閫氫俊鍦板潃锛堝彲閫夛級
+  dailiTongxindizhi: [
+    { required: true, message: "璇疯緭鍏ラ�氫俊鍦板潃", trigger: "blur" },
+    {
+      max: 200,
+      message: "閫氫俊鍦板潃闀垮害涓嶈兘瓒呰繃200涓瓧绗�",
+      trigger: "blur"
+    }
+  ],
+  // 浠g悊鏈烘瀯椤圭洰缁忕悊锛堝彲閫夛級
+  dailiXiangmujingli: [
+    { required: true, message: "璇疯緭鍏ラ」鐩粡鐞�", trigger: "blur" },
+    {
+      max: 50,
+      message: "椤圭洰缁忕悊濮撳悕闀垮害涓嶈兘瓒呰繃50涓瓧绗�",
+      trigger: "blur"
+    }
+  ],
+  // 浠g悊鏈烘瀯椤圭洰缁忕悊鑱旂郴鐢佃瘽锛堝彲閫夛紝楠岃瘉鎵嬫満鍙锋牸寮忥級
+  dailijingliLianxidianhua: [
+    { required: true, message: "璇疯緭鍏ヨ仈绯荤數璇�", trigger: "blur" },
+    {
+      pattern: /^1[3-9]\d{9}$/,
+      message: "璇疯緭鍏ユ纭殑鎵嬫満鍙风爜",
+      trigger: "blur"
+    },
+    {
+      validator: (rule, value, callback) => {
+        if (value === "") {
+          callback();
+        } else if (!isPhone(value)) {
+          callback(new Error("璇疯緭鍏ユ纭殑鎵嬫満鍙风爜鏍煎紡"));
+        } else {
+          callback();
+        }
+      },
+      trigger: "blur"
+      // trigger: "click" // 濡傛灉鎯冲湪鐐瑰嚮纭畾鎸夐挳鏃惰Е鍙戣繖涓牎楠岋紝trigger 璁剧疆鎴� click 鍗冲彲
+    }
+  ]
+});
diff --git a/src/views/system/aboutItem/utils/types.ts b/src/views/system/aboutItem/utils/types.ts
new file mode 100644
index 0000000..3e0eca8
--- /dev/null
+++ b/src/views/system/aboutItem/utils/types.ts
@@ -0,0 +1,39 @@
+interface FormItemProps {
+  id: string;
+  projectCode: string; // 椤圭洰缂栧彿锛堝繀濉級
+  projectName: string; // 椤圭洰鍚嶇О锛堝繀濉級
+  hangyepinmu: any | null; // 琛屼笟鍝佺洰锛堝彲閫夛級
+  caigoufangshi: any | null; // 閲囪喘鏂瑰紡锛堝彲閫夛級
+  caigouyusuan: any | null; // 閲囪喘棰勭畻锛堝彲閫夛級
+  dingbiaoguize: any | null; // 瀹氭爣瑙勫垯锛堝彲閫夛級
+  baomingfei: any | null; // 鎶ュ悕璐癸紙鍙�夛級
+  toubiaobaozhengjin: any | null; // 鎶曟爣淇濊瘉閲戯紙鍙�夛級
+  lianhetitoubiao: any | null; // 鑱斿悎浣撴姇鏍囷紙鍙�夛級
+  kaibiaofangshi: any | null; // 寮�鏍囨柟寮忥紙鍙�夛級
+  shifoufenbao: any | null; // 鏄惁鍒嗗寘锛堝彲閫夛級
+  shifoutuisongxuanchuan: any | null; // 鏄惁鎺ㄩ�佸浼狅紙鍙�夛級
+  caigourenmingcheng: string | null; // 閲囪喘浜哄悕绉帮紙鍙�夛級
+  xingzhengquyu: any | null; // 琛屾斂鍖哄煙锛堝彲閫夛級
+  xingzhengquyuName: string | null; // 琛屾斂鍖哄煙鍚嶇О锛堝彲閫夛級
+  jigoudaima: string | null; // 鏈烘瀯浠g爜锛堝彲閫夛級
+  daimaleixing: any | null; // 浠g爜绫诲瀷锛堝彲閫夛級
+  lianxiren: string | null; // 鑱旂郴浜猴紙鍙�夛級
+  lianxidianhua: string | null; // 鑱旂郴鐢佃瘽锛堝彲閫夛級
+  tongxindizhi: string | null; // 閫氫俊鍦板潃锛堝彲閫夛級
+  dianziyoujian: string | null; // 鐢靛瓙閭欢锛堝彲閫夛級
+  xiangmujingbanren: string | null; // 椤圭洰缁忓姙浜猴紙鍙�夛級
+  zhiwu: string | null; // 鑱屽姟锛堝彲閫夛級
+  jingbanrendianhua: string | null; // 缁忓姙浜虹數璇濓紙鍙�夛級
+  dailijigoumingcheng: string | null; // 浠g悊鏈烘瀯鍚嶇О锛堝彲閫夛級
+  dailiLianxiren: string | null; // 浠g悊鏈烘瀯鑱旂郴浜猴紙鍙�夛級
+  dailiLianxidianhua: string | null; // 浠g悊鏈烘瀯鑱旂郴鐢佃瘽锛堝彲閫夛級
+  dailiDianziyoujian: string | null; // 浠g悊鏈烘瀯鐢靛瓙閭欢锛堝彲閫夛級
+  dailiTongxindizhi: string | null; // 浠g悊鏈烘瀯閫氫俊鍦板潃锛堝彲閫夛級
+  dailiXiangmujingli: string | null; // 浠g悊鏈烘瀯椤圭洰缁忕悊锛堝彲閫夛級
+  dailijingliLianxidianhua: string | null; // 浠g悊鏈烘瀯椤圭洰缁忕悊鑱旂郴鐢佃瘽锛堝彲閫夛級
+}
+interface FormProps {
+  formInline: FormItemProps;
+}
+
+export type { FormItemProps, FormProps };
diff --git a/src/views/system/dept/index.vue b/src/views/system/dept/index.vue
index 684bc00..3d5caf9 100644
--- a/src/views/system/dept/index.vue
+++ b/src/views/system/dept/index.vue
@@ -306,7 +306,7 @@
               鏂板
             </el-button> -->
             <el-popconfirm
-              :title="`鏄惁纭鍒犻櫎閮ㄩ棬鍚嶇О涓�${row.projectName}鐨勮繖鏉℃暟鎹甡"
+              :title="`鏄惁纭鍒犻櫎椤圭洰鍚嶇О涓�${row.projectName}鐨勮繖鏉℃暟鎹甡"
               @confirm="handleDelete(row)"
             >
               <template #reference>
diff --git a/src/views/system/dept/utils/hook.tsx b/src/views/system/dept/utils/hook.tsx
index a0c9b7b..0608031 100644
--- a/src/views/system/dept/utils/hook.tsx
+++ b/src/views/system/dept/utils/hook.tsx
@@ -18,7 +18,7 @@
 import { usePublicHooks } from "../../hooks";
 import { addDialog } from "@/components/ReDialog";
 import { type Ref, reactive, ref, onMounted, h, computed } from "vue";
-import type { FormItemProps } from "../utils/types";
+import type { FormItemProps } from "./types";
 import {
   cloneDeep,
   isAllEmpty,
@@ -317,7 +317,7 @@
     pagination.pageSize = result.pageSize;
     pagination.currentPage = result.page;
     // if (!isAllEmpty(form.name)) {
-    //   // 鍓嶇鎼滅储閮ㄩ棬鍚嶇О
+    //   // 鍓嶇鎼滅储椤圭洰鍚嶇О
     //   newData = newData.filter(item => item.name.includes(form.name));
     // }
     // if (!isAllEmpty(form.status)) {
@@ -328,7 +328,7 @@
   }
 
   function formatHigherDeptOptions(treeList) {
-    // 鏍规嵁杩斿洖鏁版嵁鐨剆tatus瀛楁鍊煎垽鏂拷鍔犳槸鍚︾鐢╠isabled瀛楁锛岃繑鍥炲鐞嗗悗鐨勬爲缁撴瀯锛岀敤浜庝笂绾ч儴闂ㄧ骇鑱旈�夋嫨鍣ㄧ殑灞曠ず锛堝疄闄呭紑鍙戜腑涔熸槸濡傛锛屼笉鍙兘鍓嶇闇�瑕佺殑姣忎釜瀛楁鍚庣閮戒細杩斿洖锛岃繖鏃堕渶瑕佸墠绔嚜琛屾牴鎹悗绔繑鍥炵殑鏌愪簺瀛楁鍋氶�昏緫澶勭悊锛�
+    // 鏍规嵁杩斿洖鏁版嵁鐨剆tatus瀛楁鍊煎垽鏂拷鍔犳槸鍚︾鐢╠isabled瀛楁锛岃繑鍥炲鐞嗗悗鐨勬爲缁撴瀯锛岀敤浜庝笂绾ч」鐩骇鑱旈�夋嫨鍣ㄧ殑灞曠ず锛堝疄闄呭紑鍙戜腑涔熸槸濡傛锛屼笉鍙兘鍓嶇闇�瑕佺殑姣忎釜瀛楁鍚庣閮戒細杩斿洖锛岃繖鏃堕渶瑕佸墠绔嚜琛屾牴鎹悗绔繑鍥炵殑鏌愪簺瀛楁鍋氶�昏緫澶勭悊锛�
     if (!treeList || !treeList.length) return;
     const newTreeList = [];
     for (let i = 0; i < treeList.length; i++) {
@@ -474,9 +474,9 @@
     onSearch,
     /** 閲嶇疆 */
     resetForm,
-    /** 鏂板銆佷慨鏀归儴闂� */
+    /** 鏂板銆佷慨鏀归」鐩� */
     openDialog,
-    /** 鍒犻櫎閮ㄩ棬 */
+    /** 鍒犻櫎椤圭洰 */
     handleDelete,
     handleSelectionChange,
     handleSizeChange,

--
Gitblit v1.9.1