diff --git a/base-manager-ui/admin/src/components/YUpload.vue b/base-manager-ui/admin/src/components/YUpload.vue
index f3db99275c28b1fd5551a44c24676ca2262277c5..0ee6400ab145742bda26a045432d1a6cfcddae03 100644
--- a/base-manager-ui/admin/src/components/YUpload.vue
+++ b/base-manager-ui/admin/src/components/YUpload.vue
@@ -75,6 +75,7 @@ export default {
       type: [String, Array],
       default: "",
     },
+    // 鏂囦欢闄愬埗
     accept: {
       type: String,
       default: "",
@@ -87,9 +88,12 @@ export default {
       },
       default: 0, // 0涓轰笉闄愬埗
     },
-    // 涓婁紶鏂囦欢澶у皬闄愬埗mb
+    // 涓婁紶鏂囦欢澶у皬闄愬埗mb 0涓轰笉闄愬埗
     MB: {
       type: Number,
+      validator: (value) => {
+        return value >= 0;
+      },
       default: 10,
     },
     action: {
diff --git a/base-manager-ui/admin/src/pages/basicset/appmarket/components/AppDetailsPage.vue b/base-manager-ui/admin/src/pages/basicset/appmarket/components/AppDetailsPage.vue
index 6ea9c38b11ef183d7504fa176352d967a1976d01..86bd3d33d78144eb39e0397d0ed4cf0271ec0517 100644
--- a/base-manager-ui/admin/src/pages/basicset/appmarket/components/AppDetailsPage.vue
+++ b/base-manager-ui/admin/src/pages/basicset/appmarket/components/AppDetailsPage.vue
@@ -45,66 +45,57 @@
     <div class="version-manage flex1">
       <div class="title">鐗堟湰绠$悊</div>
       <div class="table-content">
-        <a-table
-          :loading="loading"
+        <y-table
           size="small"
           bordered
           :scroll="{ y: 350 }"
           :columns="columns"
-          :pagination="{
-            showTotal: (total) => `鍏� ${total} 鏉,
-            current: current,
-            total: total,
-            pageSize: size,
-            showSizeChanger: true,
-            showQuickJumper: true,
-            size: 'small',
-            pageSizeOptions: pageSizeOptions,
-            onChange: handleChange,
-            onShowSizeChange: showSizeChange,
-          }"
-          :data-source="tableData"
-          :rowKey="(record) => record.id"
+          :data="tableData"
+          :pageSize.sync="size"
+          :page.sync="page"
+          :total="total"
+          :loading="loading"
+          @changePagination="getVersions"
         >
-          <!-- 搴忓彿 -->
-          <span slot="num" slot-scope="text, record, index">{{
-            (current - 1) * size + index + 1
+          <span slot="index" slot-scope="{ index }">{{
+            (page - 1) * size + index + 1
           }}</span>
+
           <!-- 鐗堟湰鍙� -->
-          <template slot="version" slot-scope="text">
-            v{{ text.version }}
+          <template slot="version" slot-scope="{ record }">
+            v{{ record.version }}
           </template>
           <!-- 搴旂敤鍖� -->
-          <template slot="fileName" slot-scope="text">
-            <a v-if="text.fileName" class="primary">{{ text.fileName }}</a>
+          <template slot="fileName" slot-scope="{ record }">
+            <a v-if="record.fileName" class="primary">{{ record.fileName }}</a>
             <span v-else>--</span>
           </template>
           <!-- 褰撳墠鏄惁浣跨敤 -->
-          <template slot="used" slot-scope="text">
-            <a-tag v-if="text.used" color="blue"> 姝e湪浣跨敤 </a-tag>
+          <template slot="used" slot-scope="{ record }">
+            <a-tag v-if="record.used" color="blue"> 姝e湪浣跨敤 </a-tag>
             <span v-else>鍚�</span>
           </template>
           <!-- 鎿嶄綔 -->
-          <template slot="action" slot-scope="text">
+          <template slot="action" slot-scope="{ record }">
             <a-space size="middle">
               <span
                 class="primary pointer"
-                :disabled="text.used ? true : false"
-                @click="handleUse(text.id)"
+                :disabled="record.used ? true : false"
+                @click="handleUse(record.id)"
                 >浣跨敤</span
               >
-              <span class="primary pointer" @click="handlePreview(text.id)"
+              <span class="primary pointer" @click="handlePreview(record.id)"
                 >棰勮</span
               >
               <span
                 class="delete pointer"
                 v-permission="[1]"
-                @click="handleDel(text.id)"
+                @click="handleDel(record.id)"
                 >鍒犻櫎</span
               >
             </a-space>
           </template>
-        </a-table>
+        </y-table>
       </div>
     </div>
     <!-- 绔欑偣鏍戝脊绐� -->
@@ -127,8 +118,8 @@ import {
   deleteVersion,
 } from "@/services/market";
 import CheckSite from "../modal/CheckSite.vue";
-import { pageSizeOptions } from "@/config/pageConfig.js";
 import { mapGetters } from "vuex";
+import YTable from "@/components/YTable.vue";
 export default {
   props: {
     // 搴旂敤淇℃伅
@@ -142,15 +133,15 @@ export default {
   },
   components: {
     CheckSite,
+    YTable,
   },
   data() {
     const columns = [
       {
         title: "搴忓彿",
-        dataIndex: "num",
         width: "65px",
         scopedSlots: {
-          customRender: "num",
+          customRender: "index",
         },
       },
       {
@@ -181,11 +172,10 @@ export default {
       columns,
       appId: this.$route.query.id,
       appInfo: {}, // 搴旂敤淇℃伅
-      current: 1,
+      page: 1,
       size: 10,
       total: 0,
       loading: false,
-      pageSizeOptions,
       form: {},
       tableData: [],
       siteVisible: false,
@@ -224,7 +214,7 @@ export default {
     async getVersions() {
       this.loading = true;
       let res = await getVersionList({
-        page: this.current,
+        page: this.page,
         size: this.size,
         appId: this.appId,
       });
@@ -304,17 +294,6 @@ export default {
       });
     },
 
-    // 缈婚〉
-    handleChange(cur) {
-      this.current = cur;
-      this.getVersions();
-    },
-    // 鏀瑰彉姣忛〉鏄剧ず鏁伴噺
-    showSizeChange(cur, size) {
-      this.current = cur;
-      this.size = size;
-      this.getVersions();
-    },
     // 鏌ョ湅璇曠敤鑼冨洿璇︽儏
     checkSite(siteList) {
       this.$refs.CheckSite.getSiteList(siteList);
diff --git a/base-manager-ui/admin/src/pages/basicset/appmarket/components/AppTheme.vue b/base-manager-ui/admin/src/pages/basicset/appmarket/components/AppTheme.vue
index 5ad730ab018162825a6c0b9401ee7ce7a0852cd3..b28c970893255865bc9da4d6e6a72c2fa60245a9 100644
--- a/base-manager-ui/admin/src/pages/basicset/appmarket/components/AppTheme.vue
+++ b/base-manager-ui/admin/src/pages/basicset/appmarket/components/AppTheme.vue
@@ -16,57 +16,51 @@
     </div>
     <!-- 琛ㄦ牸 -->
     <div class="table-content">
-      <a-table
+      <y-table
+        :columns="columns"
+        :data="tableData"
+        :pageSize.sync="size"
+        :page.sync="page"
+        :total="total"
+        :loading="loading"
+        :scroll="{ y: 580 }"
         :row-selection="{
           selectedRowKeys: selectedRowKeys,
           onChange: onSelectChange,
         }"
-        :loading="loading"
-        bordered
-        :scroll="{ y: 580 }"
-        :columns="columns"
-        :pagination="{
-          showTotal: (total) => `鍏� ${total} 鏉,
-          current: current,
-          total: total,
-          pageSize: size,
-          showSizeChanger: true,
-          showQuickJumper: true,
-          pageSizeOptions: pageSizeOptions,
-          onChange: handleChange,
-          onShowSizeChange: showSizeChange,
-        }"
-        :data-source="tableData"
-        :rowKey="(record) => record.id"
+        @changePagination="getCategoryList"
       >
-        <!-- 搴忓彿 -->
-        <span slot="num" slot-scope="text, record, index">{{
-          (current - 1) * size + index + 1
+        <span slot="index" slot-scope="{ index }">{{
+          (page - 1) * size + index + 1
         }}</span>
 
         <!-- 涓婚灏侀潰 -->
-        <template slot="cover" slot-scope="text">
+        <template slot="cover" slot-scope="{ record }">
           <img
             class="cover"
-            v-if="text.cover"
-            :src="text.cover"
-            @click="handlePreview(text.cover)"
+            v-if="record.cover"
+            :src="record.cover"
+            @click="handlePreview(record.cover)"
           />
           <span v-else>--</span>
         </template>
         <!-- 鍒涘缓鏃堕棿 -->
-        <template slot="createTime" slot-scope="text">
-          {{ text.createTime | dateFormat }}
+        <template slot="createTime" slot-scope="{ record }">
+          {{ record.createTime | dateFormat }}
         </template>
 
         <!-- 鎿嶄綔 -->
-        <template slot="action" slot-scope="text">
+        <template slot="action" slot-scope="{ record }">
           <a-space size="middle">
-            <span class="primary pointer" @click="handleEdit(text)">缂栬緫</span>
-            <span class="delete pointer" @click="handleDel(text.id)">鍒犻櫎</span>
+            <span class="primary pointer" @click="handleEdit(record)"
+              >缂栬緫</span
+            >
+            <span class="delete pointer" @click="handleDel(record.id)"
+              >鍒犻櫎</span
+            >
           </a-space>
         </template>
-      </a-table>
+      </y-table>
     </div>
     <!-- 鏂板銆佺紪杈戝垎绫� -->
     <AddTheme
@@ -82,14 +76,13 @@
 import { getCategoryList, deleteCategory } from "@/services/market";
 import AddTheme from "../modal/AddTheme";
 import local from "@/utils/local";
-import { pageSizeOptions } from "@/config/pageConfig.js";
+import YTable from "@/components/YTable.vue";
 const columns = [
   {
     title: "搴忓彿",
-    dataIndex: "num",
     width: "65px",
     scopedSlots: {
-      customRender: "num",
+      customRender: "index",
     },
   },
   {
@@ -129,6 +122,7 @@ const columns = [
 export default {
   components: {
     AddTheme,
+    YTable,
   },
   data() {
     return {
@@ -137,10 +131,9 @@ export default {
       tableData: [], // 琛ㄦ牸鏁版嵁
       loading: false,
       searchVal: "", // 鎼滅储
-      current: 1,
+      page: 1,
       size: 10,
       total: 0,
-      pageSizeOptions,
       selectedRowKeys: [], // 琛ㄦ牸鍕鹃€夋暟鎹�
       AddVisible: false,
       title: "鏂板涓婚",
@@ -156,7 +149,7 @@ export default {
     async getCategoryList() {
       this.loading = true;
       let res = await getCategoryList({
-        page: this.current,
+        page: this.page,
         size: this.size,
         siteId: this.siteId,
         categoryName: `%${this.searchVal}%`,
@@ -164,8 +157,8 @@ export default {
       this.loading = false;
       let { data, total } = res.data.data;
       if (res.data.code === 1) {
-        if (!data.length && this.current > 1) {
-          this.current -= 1;
+        if (!data.length && this.page > 1) {
+          this.page -= 1;
           this.getCategoryList();
         }
         this.tableData = data;
@@ -181,21 +174,10 @@ export default {
     },
     // 鎼滅储
     onSearch() {
-      this.current = 1;
+      this.page = 1;
       this.selectedRowKeys = [];
       this.getCategoryList();
     },
-    // 缈婚〉
-    handleChange(cur) {
-      this.current = cur;
-      this.getCategoryList();
-    },
-    // 鏀瑰彉姣忛〉鏄剧ず鏁伴噺
-    showSizeChange(current, size) {
-      this.current = current;
-      this.size = size;
-      this.getCategoryList();
-    },
     // 鍕鹃€夎〃鏍�
     onSelectChange(keys) {
       this.selectedRowKeys = keys;
diff --git a/base-manager-ui/admin/src/pages/basicset/appmarket/components/BlackApp.vue b/base-manager-ui/admin/src/pages/basicset/appmarket/components/BlackApp.vue
index e346ed6c980517da01db6b1a51fb34a61b53a44d..40bbf00ebf41aeb3993db2d5ac0409c17cd90110 100644
--- a/base-manager-ui/admin/src/pages/basicset/appmarket/components/BlackApp.vue
+++ b/base-manager-ui/admin/src/pages/basicset/appmarket/components/BlackApp.vue
@@ -7,26 +7,10 @@
           <a-button type="danger" @click="handleDelAll"> 鎵归噺绉婚櫎 </a-button>
           <div class="business-control">
             <a-space>
-              <!-- <a-select
-                style="min-width: 120px"
-                v-model="leftHallSearch"
-                showSearch
-                optionFilterProp="label"
-              >
-                <a-select-option value="" label="鍏ㄩ儴搴旂敤"> </a-select-option>
-                <a-select-option
-                  v-for="v in appList"
-                  :key="v.id"
-                  :value="v.id"
-                  :label="v.name"
-                >
-                  {{ v.name }}
-                </a-select-option>
-              </a-select> -->
               <a-input-search
                 placeholder="璇疯緭鍏ュ簲鐢ㄥ悕绉版悳绱�"
                 enter-button="鎼滅储"
-                v-model="leftSearch.name"
+                v-model="blackAppTable.searchForm.name"
                 @search="onSearchLeft"
                 allowClear
               />
@@ -35,45 +19,30 @@
         </div>
       </div>
       <div class="table-content">
-        <!-- 琛ㄦ牸 -->
-        <a-table
-          bordered
-          :loading="leftLoading"
+        <y-table
           size="middle"
+          :columns="blackAppTable.columns"
+          :data="blackAppTable.data"
+          :pageSize.sync="blackAppTable.size"
+          :page.sync="blackAppTable.page"
+          :total="blackAppTable.total"
+          :loading="blackAppTable.loading"
           :scroll="{ y: 550 }"
-          :pagination="{
-            showTotal: (total) => `鍏� ${total} 鏉,
-            current: leftCurrent,
-            total: leftTotal,
-            pageSize: leftSize,
-            showSizeChanger: true,
-            showQuickJumper: true,
-            pageSizeOptions: pageSizeOptions,
-            onChange: changeLeft,
-            onShowSizeChange: showSizeChange,
-          }"
-          :columns="leftColumns"
-          :data-source="blackApp"
           :row-selection="{
             selectedRowKeys: selectedLeftRowKeys,
             onChange: onSelectChange,
           }"
-          :rowKey="(record) => record.id"
+          @changePagination="getBlackAppList"
         >
-          <template slot="num" slot-scope="text, record, index">
-            <span>
-              {{ (leftCurrent - 1) * leftSize + index + 1 }}
-            </span>
-          </template>
-          <template slot="action" slot-scope="text">
-            <span
-              href="javascript:;"
-              class="delete pointer"
-              @click="handleDel(text.id)"
+          <span slot="index" slot-scope="{ index }">{{
+            (blackAppTable.page - 1) * blackAppTable.size + index + 1
+          }}</span>
+          <template slot="action" slot-scope="{ record }">
+            <span class="delete pointer" @click="handleDel(record.id)"
               >绉婚櫎</span
             >
           </template>
-        </a-table>
+        </y-table>
       </div>
     </div>
     <!-- 鍙� -->
@@ -88,7 +57,7 @@
             <a-space>
               <a-select
                 style="min-width: 120px"
-                v-model="rightSearch.type"
+                v-model="siteDevTable.searchForm.type"
                 showSearch
                 optionFilterProp="label"
               >
@@ -107,7 +76,7 @@
               <a-input-search
                 placeholder="璇疯緭鍏ヨ澶囩紪鐮佹悳绱�"
                 enter-button="鎼滅储"
-                v-model="rightSearch.deviceCode"
+                v-model="siteDevTable.searchForm.deviceCode"
                 @search="onSearch"
                 allowClear
               />
@@ -117,47 +86,39 @@
       </div>
       <div class="table-content">
         <!-- 琛ㄦ牸 -->
-        <a-table
-          bordered
-          :scroll="{ y: 550 }"
-          :loading="rightLoading"
-          :pagination="{
-            showTotal: (total) => `鍏� ${total} 鏉,
-            current: rightCurrent,
-            total: rightTotal,
-            pageSize: rightSize,
-            showSizeChanger: true,
-            showQuickJumper: true,
-            pageSizeOptions: pageSizeOptions,
-            onChange: changeRight,
-            onShowSizeChange: showSizeChangeRight,
-          }"
+
+        <y-table
           size="middle"
-          :columns="rightColumns"
-          :data-source="deviceList"
-          :rowKey="(record) => record.id"
+          :columns="siteDevTable.columns"
+          :data="siteDevTable.data"
+          :pageSize.sync="siteDevTable.size"
+          :page.sync="siteDevTable.page"
+          :total="siteDevTable.total"
+          :loading="siteDevTable.loading"
+          :scroll="{ y: 550 }"
+          @changePagination="getDeviceList"
         >
-          <template slot="num" slot-scope="text, record, index">
-            <span>
-              {{ (rightCurrent - 1) * rightSize + index + 1 }}
-            </span>
-          </template>
-          <template slot="deviceStatus" slot-scope="text">
-            <a-tag color="blue" v-if="text.deviceStatus == 0"> 鏈縺娲� </a-tag>
-            <a-tag color="red" v-else-if="text.deviceStatus == 1"> 绂荤嚎 </a-tag>
-            <a-tag color="green" v-else-if="text.deviceStatus == 2">
+          <span slot="index" slot-scope="{ index }">{{
+            (siteDevTable.page - 1) * siteDevTable.size + index + 1
+          }}</span>
+          <template slot="deviceStatus" slot-scope="{ record }">
+            <a-tag color="blue" v-if="record.deviceStatus == 0"> 鏈縺娲� </a-tag>
+            <a-tag color="red" v-else-if="record.deviceStatus == 1">
+              绂荤嚎
+            </a-tag>
+            <a-tag color="green" v-else-if="record.deviceStatus == 2">
               鍦ㄧ嚎
             </a-tag>
           </template>
 
-          <template slot="action" slot-scope="text">
+          <template slot="action" slot-scope="{ record }">
             <a-space size="middle">
-              <span class="primary pointer" @click="handleIn(text)"
+              <span class="primary pointer" @click="handleIn(record)"
                 >鍔犲叆榛戝悕鍗�</span
               >
             </a-space>
           </template>
-        </a-table>
+        </y-table>
       </div>
     </div>
     <!-- 娣诲姞榛戝悕鍗� -->
@@ -177,7 +138,7 @@ import {
 } from "@/services/market";
 import local from "@/utils/local";
 import DevToBlack from "../modal/DevToBlack.vue";
-import { pageSizeOptions } from "@/config/pageConfig.js";
+import YTable from "@/components/YTable.vue";
 const devType = [
   "鎺掗槦鏈�",
   "绐楀彛灞�",
@@ -197,98 +158,95 @@ const devType = [
 ];
 
 export default {
-  components: { DevToBlack },
+  components: { DevToBlack, YTable },
   data() {
-    const leftColumns = [
-      {
-        title: "搴忓彿",
-        width: "50px",
-        scopedSlots: { customRender: "num" },
-      },
-      {
-        title: "搴旂敤鍚嶇О",
-        dataIndex: "appName",
-      },
-      {
-        title: "璁惧鍚嶇О",
-        customRender: (text) => {
-          return text.deviceName || "--";
-        },
-      },
-      {
-        title: "璁惧缂栫爜",
-        dataIndex: "deviceCode",
-      },
-      {
-        title: "鎿嶄綔",
-        width: "110px",
-        scopedSlots: {
-          customRender: "action",
+    return {
+      devType,
+      blackAppTable: {
+        page: 1,
+        size: 10,
+        total: 0,
+        loading: false,
+        data: [],
+        searchForm: {
+          name: "",
         },
+        columns: [
+          {
+            title: "搴忓彿",
+            width: "50px",
+            scopedSlots: { customRender: "index" },
+          },
+          {
+            title: "搴旂敤鍚嶇О",
+            dataIndex: "appName",
+          },
+          {
+            title: "璁惧鍚嶇О",
+            dataIndex: "deviceName",
+          },
+          {
+            title: "璁惧缂栫爜",
+            dataIndex: "deviceCode",
+          },
+          {
+            title: "鎿嶄綔",
+            width: "110px",
+            scopedSlots: {
+              customRender: "action",
+            },
+          },
+        ],
       },
-    ];
-    const rightColumns = [
-      {
-        title: "搴忓彿",
-        key: "id",
-        width: "50px",
-        scopedSlots: { customRender: "num" },
-      },
-      {
-        title: "璁惧鍚嶇О",
-        customRender: (text) => {
-          return text.deviceName || "--";
+      siteDevTable: {
+        page: 1,
+        size: 10,
+        total: 0,
+        loading: false,
+        data: [],
+        searchForm: {
+          deviceCode: "",
+          type: "",
         },
-      },
-      {
-        title: "璁惧缂栫爜",
-        dataIndex: "deviceCode",
-      },
-      {
-        title: "璁惧绫诲瀷",
-        dataIndex: "productName",
-      },
-      {
-        title: "璁惧鐘舵€�",
-        width: "10%",
-        scopedSlots: { customRender: "deviceStatus" },
-      },
+        columns: [
+          {
+            title: "搴忓彿",
+            key: "id",
+            width: "50px",
+            scopedSlots: { customRender: "index" },
+          },
+          {
+            title: "璁惧鍚嶇О",
+            dataIndex: "deviceName",
+          },
+          {
+            title: "璁惧缂栫爜",
+            dataIndex: "deviceCode",
+          },
+          {
+            title: "璁惧绫诲瀷",
+            dataIndex: "productName",
+          },
+          {
+            title: "璁惧鐘舵€�",
+            width: "10%",
+            scopedSlots: { customRender: "deviceStatus" },
+          },
 
-      {
-        title: "鎿嶄綔",
-        width: "110px",
-        scopedSlots: {
-          customRender: "action",
-        },
-      },
-    ];
-    return {
-      devType,
-      leftColumns,
-      rightColumns,
-      leftLoading: false,
-      rightLoading: false,
-      leftSearch: {
-        name: "",
-      },
-      rightSearch: {
-        deviceCode: "",
-        type: "",
+          {
+            title: "鎿嶄綔",
+            width: "110px",
+            scopedSlots: {
+              customRender: "action",
+            },
+          },
+        ],
       },
       selectedLeftRowKeys: [],
       selectedRowKeys: [],
       selectedRows: [],
       visible: false,
-      leftCurrent: 1,
-      rightCurrent: 1,
-      leftTotal: 0,
-      rightTotal: 0,
-      leftSize: 10,
-      rightSize: 10,
-      pageSizeOptions,
       siteId: local.getLocal("siteId"), // 绔欑偣id
-      deviceList: [], // 绔欑偣璁惧鍒楄〃
-      blackApp: [], // 搴旂敤榛戝悕鍗曞垪琛�
     };
   },
   created() {
@@ -298,44 +256,44 @@ export default {
   methods: {
     // 鑾峰彇璁惧榛戝悕鍗�
     async getBlackAppList() {
-      this.leftLoading = true;
+      this.blackAppTable.loading = true;
       let res = await getBlackAppList({
-        page: this.leftCurrent,
-        size: this.leftSize,
-        appName: `%${this.leftSearch.name}%`,
+        page: this.blackAppTable.page,
+        size: this.blackAppTable.size,
+        appName: `%${this.blackAppTable.searchForm.name}%`,
         siteId: this.siteId,
       });
       if (res.data.code == 1) {
         let { data, total } = res.data.data;
-        if (!data.length && this.leftCurrent > 1) {
-          this.leftCurrent -= 1;
+        if (!data.length && this.blackAppTable.page > 1) {
+          this.blackAppTable.page -= 1;
           this.getBlackAppList();
         }
-        this.blackApp = data;
-        this.leftTotal = total;
+        this.blackAppTable.data = data;
+        this.blackAppTable.total = total;
       }
-      this.leftLoading = false;
+      this.blackAppTable.loading = false;
     },
     // 鑾峰彇绔欑偣璁惧鍒楄〃
     async getDeviceList() {
-      this.rightLoading = true;
+      this.siteDevTable.loading = true;
       let res = await getDeviceList({
-        page: this.rightCurrent,
-        size: this.rightSize,
+        page: this.siteDevTable.page,
+        size: this.siteDevTable.size,
         siteId: this.siteId,
-        deviceCode: `%${this.rightSearch.deviceCode}%`,
-        productName: `%${this.rightSearch.type}%`,
+        deviceCode: `%${this.siteDevTable.searchForm.deviceCode}%`,
+        productName: `%${this.siteDevTable.searchForm.type}%`,
       });
       if (res.data.code == 1) {
         let { data, total } = res.data.data;
-        this.deviceList = data;
-        this.rightTotal = total;
+        this.siteDevTable.data = data;
+        this.siteDevTable.total = total;
       }
-      this.rightLoading = false;
+      this.siteDevTable.loading = false;
     },
     // 宸﹁竟鎼滅储
     onSearchLeft() {
-      this.leftCurrent = 1;
+      this.blackAppTable.page = 1;
       this.selectedLeftRowKeys = [];
       this.getBlackAppList();
     },
@@ -400,31 +358,9 @@ export default {
     //   this.handleIn(this.selectedRows);
     // },
 
-    // 宸︾炕椤�
-    changeLeft(cur) {
-      this.leftCurrent = cur;
-      this.getBlackAppList();
-    },
-    // 宸﹁竟鏀瑰彉姣忛〉鏄剧ず鏁伴噺
-    showSizeChange(current, size) {
-      this.leftCurrent = current;
-      this.leftSize = size;
-      this.getBlackAppList();
-    },
-    // 鍙崇炕椤�
-    changeRight(cur) {
-      this.rightCurrent = cur;
-      this.getDeviceList();
-    },
-    // 鍙宠竟鏀瑰彉鏄剧ず鏁伴噺
-    showSizeChangeRight(current, size) {
-      this.rightCurrent = current;
-      this.rightSize = size;
-      this.getDeviceList();
-    },
     // 鎼滅储
     async onSearch() {
-      this.rightCurrent = 1;
+      this.siteDevTable.page = 1;
       this.getDeviceList();
     },
     // 鍔犲叆
diff --git a/base-manager-ui/admin/src/pages/basicset/appmarket/components/DataUpdate.vue b/base-manager-ui/admin/src/pages/basicset/appmarket/components/DataUpdate.vue
index e18ec140742328475a82d4f785044b938430759a..cef5a0442792ebb2f128dbeb139032820a3e865f 100644
--- a/base-manager-ui/admin/src/pages/basicset/appmarket/components/DataUpdate.vue
+++ b/base-manager-ui/admin/src/pages/basicset/appmarket/components/DataUpdate.vue
@@ -39,40 +39,30 @@
     </div>
     <!-- 琛ㄦ牸 -->
     <div class="table-content">
-      <a-table
-        :loading="loading"
-        bordered
+      <y-table
         :columns="columns"
+        :data="tableData"
+        :pageSize.sync="size"
+        :page.sync="page"
+        :total="total"
+        :loading="loading"
         :scroll="{ y: 550 }"
-        :pagination="{
-          showTotal: (total) => `鍏� ${total} 鏉,
-          current: current,
-          total: total,
-          pageSize: size,
-          showSizeChanger: true,
-          showQuickJumper: true,
-          pageSizeOptions: pageSizeOptions,
-          onChange: handleChange,
-          onShowSizeChange: showSizeChange,
-        }"
-        :data-source="tableData"
         :row-selection="{
           selectedRowKeys: selectedRowKeys,
           onChange: onSelectChange,
         }"
-        :rowKey="(record) => record.id"
+        @changePagination="getDatasetList"
       >
-        <!-- 搴忓彿 -->
-        <span slot="num" slot-scope="text, record, index">{{
-          (current - 1) * size + index + 1
+        <span slot="index" slot-scope="{ index }">{{
+          (page - 1) * size + index + 1
         }}</span>
 
         <!-- 鍥剧墖 -->
-        <template slot="img" slot-scope="text">
-          <a-space v-if="text.img">
+        <template slot="img" slot-scope="{ record }">
+          <a-space v-if="record.img">
             <img
               class="pre-item"
-              v-for="(v, i) in filterRes(text.img)"
+              v-for="(v, i) in filterRes(record.img)"
               :key="i"
               :src="v"
               @click="handlePreview('img', v)"
@@ -81,10 +71,10 @@
           <span v-else>--</span>
         </template>
         <!-- 瑙嗛 -->
-        <template slot="video" slot-scope="text">
-          <a-space v-if="text.video">
+        <template slot="video" slot-scope="{ record }">
+          <a-space v-if="record.video">
             <video
-              v-for="(v, i) in filterRes(text.video)"
+              v-for="(v, i) in filterRes(record.video)"
               :key="i"
               width="50"
               :src="v"
@@ -94,18 +84,22 @@
           <span v-else>--</span>
         </template>
         <!-- 鎿嶄綔 -->
-        <template slot="action" slot-scope="text">
+        <template slot="action" slot-scope="{ record }">
           <a-space size="middle">
-            <span class="primary pointer" @click="handleEdit(text)">缂栬緫</span>
-            <span class="delete pointer" @click="handleDel(text.id)">鍒犻櫎</span>
+            <span class="primary pointer" @click="handleEdit(record)"
+              >缂栬緫</span
+            >
+            <span class="delete pointer" @click="handleDel(record.id)"
+              >鍒犻櫎</span
+            >
           </a-space>
         </template>
-      </a-table>
+      </y-table>
     </div>
     <!-- 鏂板鏁版嵁 -->
     <AddData
       ref="AddData"
-      @addSuccess="getDatasetList"
+      @success="getDatasetList"
       :AddVisible.sync="AddVisible"
       :title="title"
     ></AddData>
@@ -119,13 +113,13 @@
 
 <script>
 import AddData from "../modal/AddData.vue";
-import { pageSizeOptions } from "@/config/pageConfig.js";
 import {
   getDatasetList,
   deleteDataset,
   getTempleteList,
 } from "@/services/market";
 import PrevieModal from "@/components/PrevieModal.vue";
+import YTable from "@/components/YTable.vue";
 export default {
   // props: {
   //   // 搴旂敤淇℃伅
@@ -140,6 +134,7 @@ export default {
   components: {
     AddData,
     PrevieModal,
+    YTable,
   },
   data() {
     return {
@@ -147,10 +142,9 @@ export default {
       api2: process.env.VUE_APP_API_IMG_URL,
       appId: this.$route.query.id,
       loading: false,
-      current: 1,
+      page: 1,
       size: 10,
       total: 0,
-      pageSizeOptions,
       searchVal: "",
       tableData: [],
       AddVisible: false,
@@ -172,7 +166,7 @@ export default {
         title: "搴忓彿",
         width: "65px",
         scopedSlots: {
-          customRender: "num",
+          customRender: "index",
         },
       };
       let action = {
@@ -203,7 +197,7 @@ export default {
                 let row = record.appInfoFieldList.find(
                   (item) => item.fieldCode == v.fieldCode
                 );
-                if (row && row.fieldTypeValue && !row.serviceApiParams) {
+                if (row && row.fieldTypeValue && !row.serviceApi) {
                   let fieldTypeValue = JSON.parse(row.fieldTypeValue);
                   return fieldTypeValue[text];
                 } else {
@@ -258,7 +252,7 @@ export default {
       let obj = {};
       let orConditionList = [];
       let form = {
-        page: this.current,
+        page: this.page,
         size: this.size,
         appId: this.appId,
       };
@@ -275,8 +269,8 @@ export default {
       this.loading = false;
       if (res.data.code === 1) {
         let { data, total } = res.data.data;
-        if (!data.length && this.current > 1) {
-          this.current -= 1;
+        if (!data.length && this.page > 1) {
+          this.page -= 1;
           this.getDatasetList();
         }
         data.forEach((v) => {
@@ -301,21 +295,10 @@ export default {
     },
     // 鎼滅储
     onSearch() {
-      this.current = 1;
+      this.page = 1;
       this.selectedRowKeys = [];
       this.getDatasetList();
     },
-    // 缈婚〉
-    handleChange(cur) {
-      this.current = cur;
-      this.getDatasetList();
-    },
-    // 鏀瑰彉姣忛〉鏄剧ず鏁伴噺
-    showSizeChange(current, size) {
-      this.current = current;
-      this.size = size;
-      this.getDatasetList();
-    },
     // 缂栬緫
     handleEdit(row) {
       this.title = "缂栬緫";
diff --git a/base-manager-ui/admin/src/pages/basicset/appmarket/components/FieldConfig.vue b/base-manager-ui/admin/src/pages/basicset/appmarket/components/FieldConfig.vue
index 244b3b945a2733f138e30c93bdde3906c8e84ac3..6309e150c40d2dfa36e7de603bf42d1329098e8d 100644
--- a/base-manager-ui/admin/src/pages/basicset/appmarket/components/FieldConfig.vue
+++ b/base-manager-ui/admin/src/pages/basicset/appmarket/components/FieldConfig.vue
@@ -17,44 +17,41 @@
     </div>
     <!-- 琛ㄦ牸 -->
     <div class="table-content">
-      <a-table
+      <y-table
+        :columns="columns"
+        :data="tableData"
+        :pageSize.sync="size"
+        :page.sync="page"
+        :total="total"
         :loading="loading"
-        bordered
         :scroll="{ y: 550 }"
-        :columns="columns"
-        :pagination="{
-          showTotal: (total) => `鍏� ${total} 鏉,
-          current: current,
-          total: total,
-          pageSize: size,
-          showSizeChanger: true,
-          showQuickJumper: true,
-          pageSizeOptions: pageSizeOptions,
-          onChange: handleChange,
-          onShowSizeChange: showSizeChange,
-        }"
-        :data-source="tableData"
         :row-selection="{
           selectedRowKeys: selectedRowKeys,
           onChange: onSelectChange,
         }"
-        :rowKey="(record) => record.id"
+        @changePagination="getAppList"
       >
-        <!-- 搴忓彿 -->
-        <span slot="num" slot-scope="text, record, index">{{ index + 1 }}</span>
+        <span slot="index" slot-scope="{ index }">{{
+          (page - 1) * size + index + 1
+        }}</span>
+
         <!-- 鍏佽涓虹┖ -->
-        <template slot="fieldNull" slot-scope="text">
-          <a-tag v-if="text.fieldNull === 1" color="green"> 鏄� </a-tag>
+        <template slot="fieldNull" slot-scope="{ record }">
+          <a-tag v-if="record.fieldNull === 1" color="green"> 鏄� </a-tag>
           <a-tag v-else color="red"> 鍚� </a-tag>
         </template>
         <!-- 鎿嶄綔 -->
-        <template slot="action" slot-scope="text">
+        <template slot="action" slot-scope="{ record }">
           <a-space size="middle">
-            <span class="primary pointer" @click="handleEdit(text)">缂栬緫</span>
-            <span class="delete pointer" @click="handleDel(text.id)">鍒犻櫎</span>
+            <span class="primary pointer" @click="handleEdit(record)"
+              >缂栬緫</span
+            >
+            <span class="delete pointer" @click="handleDel(record.id)"
+              >鍒犻櫎</span
+            >
           </a-space>
         </template>
-      </a-table>
+      </y-table>
     </div>
     <!-- 鏂板鏁版嵁 -->
     <AddField
@@ -69,7 +66,7 @@
 <script>
 import AddField from "../modal/AddField.vue";
 import { getTempleteList, deleteTemplete } from "@/services/market";
-import { pageSizeOptions } from "@/config/pageConfig.js";
+import YTable from "@/components/YTable.vue";
 export default {
   // props: {
   //   // 搴旂敤淇℃伅
@@ -83,6 +80,7 @@ export default {
   // },
   components: {
     AddField,
+    YTable,
   },
   data() {
     const columns = [
@@ -90,7 +88,7 @@ export default {
         title: "搴忓彿",
         width: "65px",
         scopedSlots: {
-          customRender: "num",
+          customRender: "index",
         },
       },
       {
@@ -108,9 +106,7 @@ export default {
       },
       {
         title: "鏁版嵁绫诲瀷",
-        customRender: (text) => {
-          return <span>{text.dataType ? text.dataType : "--"}</span>;
-        },
+        dataIndex: "dataType",
       },
       {
         title: "鏁版嵁闀垮害",
@@ -142,10 +138,9 @@ export default {
       appId: this.$route.query.id,
       columns,
       loading: false,
-      current: 1,
+      page: 1,
       size: 10,
       total: 0,
-      pageSizeOptions,
       searchVal: "",
       tableData: [],
       fieldVisible: false,
@@ -161,7 +156,7 @@ export default {
     async getTempleteList() {
       this.loading = true;
       let res = await getTempleteList({
-        page: this.current,
+        page: this.page,
         size: this.size,
         appId: this.appId,
         fieldName: this.searchVal,
@@ -169,8 +164,8 @@ export default {
       this.loading = false;
       if (res.data.code === 1) {
         let { data, total } = res.data.data;
-        if (!data.length && this.current > 1) {
-          this.current -= 1;
+        if (!data.length && this.page > 1) {
+          this.page -= 1;
           this.getTempleteList();
         }
         this.tableData = data.sort((a, b) => {
@@ -187,21 +182,11 @@ export default {
     },
     // 鎼滅储
     onSearch() {
-      this.current = 1;
+      this.page = 1;
       this.selectedRowKeys = [];
       this.getTempleteList();
     },
-    // 缈婚〉
-    handleChange(cur) {
-      this.current = cur;
-      this.getTempleteList();
-    },
-    // 鏀瑰彉姣忛〉鏄剧ず鏁伴噺
-    showSizeChange(current, size) {
-      this.current = current;
-      this.size = size;
-      this.getTempleteList();
-    },
+
     // 缂栬緫
     handleEdit(row) {
       this.title = "缂栬緫";
diff --git a/base-manager-ui/admin/src/pages/basicset/appmarket/components/MoveApp.vue b/base-manager-ui/admin/src/pages/basicset/appmarket/components/MoveApp.vue
index 7f02834da6ee0bbfd49d6427b14f3c916d4f37dc..ca7edb651c833f793fc906c8c1f92351508e8d03 100644
--- a/base-manager-ui/admin/src/pages/basicset/appmarket/components/MoveApp.vue
+++ b/base-manager-ui/admin/src/pages/basicset/appmarket/components/MoveApp.vue
@@ -22,91 +22,86 @@
     </div>
     <!-- 琛ㄦ牸 -->
     <div class="table-content">
-      <a-table
+      <y-table
+        :columns="columns"
+        :data="tableData"
+        :pageSize.sync="size"
+        :page.sync="page"
+        :total="total"
+        :loading="loading"
+        :scroll="{ y: 560 }"
         :row-selection="{
           selectedRowKeys: selectedRowKeys,
           onChange: onSelectChange,
         }"
-        :loading="loading"
-        bordered
-        :scroll="{ y: 560 }"
-        :columns="columns"
-        :pagination="{
-          showTotal: (total) => `鍏� ${total} 鏉,
-          current: current,
-          total: total,
-          pageSize: size,
-          showSizeChanger: true,
-          showQuickJumper: true,
-          pageSizeOptions: pageSizeOptions,
-          onChange: handleChange,
-          onShowSizeChange: showSizeChange,
-        }"
-        :data-source="tableData"
-        :rowKey="(record) => record.id"
+        @changePagination="getAppList"
       >
-        <!-- 搴忓彿 -->
-        <span slot="num" slot-scope="text, record, index">{{
-          (current - 1) * size + index + 1
+        <span slot="index" slot-scope="{ index }">{{
+          (page - 1) * size + index + 1
         }}</span>
+
         <!-- 鍥炬爣 -->
-        <template slot="appIconPath" slot-scope="text">
+        <template slot="appIconPath" slot-scope="{ record }">
           <img
-            v-if="text.appIconPath"
+            v-if="record.appIconPath"
             class="pointer"
             height="20"
             width="20"
-            :src="text.appIconPath"
-            @click="handlePreview(text.appIconPath)"
+            :src="record.appIconPath"
+            @click="handlePreview(record.appIconPath)"
           />
           <span v-else>--</span>
         </template>
         <!-- 涓婚绫诲瀷 -->
-        <template slot="appThemeName" slot-scope="text">
-          {{ filterItems(text.appThemeName) }}
+        <template slot="appThemeName" slot-scope="{ record }">
+          {{ filterItems(record.appThemeName) }}
         </template>
         <!-- 绠€浠� -->
-        <template slot="summary" slot-scope="text">
-          <span :title="text.summary">{{
-            text.summary ? text.summary : "--"
+        <template slot="summary" slot-scope="{ record }">
+          <span :title="record.summary">{{
+            record.summary ? record.summary : "--"
           }}</span>
         </template>
         <!-- 鐗堟湰 -->
-        <template slot="version" slot-scope="text">
-          {{ text.version || text.version == 0 ? "v" + text.version : "--" }}
+        <template slot="version" slot-scope="{ record }">
+          {{
+            record.version || record.version == 0 ? "v" + record.version : "--"
+          }}
         </template>
         <!-- 绫诲瀷 -->
-        <template slot="appType" slot-scope="text">
-          {{ text.appType === 1 ? "搴旂敤绋嬪簭" : "URL" }}
+        <template slot="appType" slot-scope="{ record }">
+          {{ record.appType === 1 ? "搴旂敤绋嬪簭" : "URL" }}
         </template>
         <!-- 涓婁笅鏋� -->
-        <template slot="shelves" slot-scope="text">
+        <template slot="shelves" slot-scope="{ record }">
           <YSwitch
             checkedChildren="涓婃灦"
             unCheckedChildren="涓嬫灦"
-            v-model="text.shelves"
-            @change="changeShelves(text)"
+            v-model="record.shelves"
+            @change="changeShelves(record)"
           ></YSwitch>
         </template>
         <!-- 鎿嶄綔 -->
-        <template slot="action" slot-scope="text">
+        <template slot="action" slot-scope="{ record }">
           <a-space size="middle">
-            <span class="primary pointer" @click="handleCloneAppData(text)"
+            <span class="primary pointer" @click="handleCloneAppData(record)"
               >鍏嬮殕鏁版嵁</span
             >
-            <span class="primary pointer" @click="handleEdit(text)">缂栬緫</span>
-            <span class="primary pointer" @click="handleCheck(text.id)"
+            <span class="primary pointer" @click="handleEdit(record)"
+              >缂栬緫</span
+            >
+            <span class="primary pointer" @click="handleCheck(record.id)"
               >鏌ョ湅</span
             >
             <span
               class="delete pointer"
-              :class="{ unDelete: userInfo.id != 1 && text.distribute }"
-              @click="handleDel(text.distribute, text.id)"
+              :class="{ unDelete: userInfo.id != 1 && record.distribute }"
+              @click="handleDel(record.distribute, record.id)"
               >鍒犻櫎</span
             >
           </a-space>
         </template>
-      </a-table>
+      </y-table>
     </div>
     <!-- 鏂板搴旂敤 -->
     <AddApp
@@ -141,6 +136,7 @@ import AddApp from "../modal/AddApp.vue";
 import CheckSite from "../modal/CheckSite.vue";
 import ChangeThem from "../modal/ChangeThem.vue";
 import CloneData from "../modal/CloneData.vue";
+import YTable from "@/components/YTable.vue";
 import {
   getAppList,
   deleteApp,
@@ -149,14 +145,12 @@ import {
 } from "@/services/market";
 import local from "@/utils/local";
 import { mapMutations, mapGetters } from "vuex";
-import { pageSizeOptions } from "@/config/pageConfig.js";
 const columns = [
   {
     title: "搴忓彿",
-    dataIndex: "num",
     width: "65px",
     scopedSlots: {
-      customRender: "num",
+      customRender: "index",
     },
   },
   {
@@ -206,6 +200,7 @@ export default {
     CheckSite,
     ChangeThem,
     CloneData,
+    YTable,
   },
   data() {
     return {
@@ -215,10 +210,9 @@ export default {
       tableData: [], // 琛ㄦ牸鏁版嵁
       loading: false,
       searchVal: "", // 鎼滅储
-      current: 1,
+      page: 1,
       size: 10,
       total: 0,
-      pageSizeOptions,
       selectedRowKeys: [], // 琛ㄦ牸鍕鹃€塱d鍒楄〃
       selectedAppList: [], // 琛ㄦ牸鍕鹃€変俊鎭垪琛�
       AddVisible: false,
@@ -258,7 +252,7 @@ export default {
     async getAppList() {
       this.loading = true;
       let res = await getAppList({
-        page: this.current,
+        page: this.page,
         size: this.size,
         siteId: this.siteId,
         appName: `%${this.searchVal}%`,
@@ -269,8 +263,8 @@ export default {
       this.dict = dict;
       this.SET_appDict(dict);
       if (res.data.code === 1) {
-        if (!data.length && this.current > 1) {
-          this.current -= 1;
+        if (!data.length && this.page > 1) {
+          this.page -= 1;
           this.getAppList();
         }
         this.tableData = data;
@@ -293,20 +287,12 @@ export default {
     },
     // 鎼滅储
     onSearch() {
-      this.current = 1;
-      this.getAppList();
-    },
-    // 缈婚〉
-    handleChange(cur) {
-      this.current = cur;
-      this.getAppList();
-    },
-    // 鏀瑰彉姣忛〉鏄剧ず鏁伴噺
-    showSizeChange(current, size) {
-      this.current = current;
-      this.size = size;
+      this.page = 1;
+      this.selectedRowKeys = [];
+      this.selectedAppList = [];
       this.getAppList();
     },
+
     // 鍕鹃€夎〃鏍�
     onSelectChange(keys, rows) {
       this.selectedRowKeys = keys;
@@ -381,6 +367,8 @@ export default {
           let { code, msg } = res.data;
           if (code === 1) {
             _this.$message.success(msg);
+            _this.selectedRowKeys = [];
+            _this.selectedAppList = [];
             _this.getAppList();
           }
         },
diff --git a/base-manager-ui/admin/src/pages/basicset/appmarket/components/TerminalApp.vue b/base-manager-ui/admin/src/pages/basicset/appmarket/components/TerminalApp.vue
index 4fc529d11f1e2d272ebeea4990c443b3b775db47..286b3b9d591ebafe360f7899fd407f8f71402500 100644
--- a/base-manager-ui/admin/src/pages/basicset/appmarket/components/TerminalApp.vue
+++ b/base-manager-ui/admin/src/pages/basicset/appmarket/components/TerminalApp.vue
@@ -22,91 +22,86 @@
     </div>
     <!-- 琛ㄦ牸 -->
     <div class="table-content">
-      <a-table
+      <y-table
+        :columns="columns"
+        :data="tableData"
+        :pageSize.sync="size"
+        :page.sync="page"
+        :total="total"
+        :loading="loading"
+        :scroll="{ y: 560 }"
         :row-selection="{
           selectedRowKeys: selectedRowKeys,
           onChange: onSelectChange,
         }"
-        :loading="loading"
-        bordered
-        :scroll="{ y: 560 }"
-        :columns="columns"
-        :pagination="{
-          showTotal: (total) => `鍏� ${total} 鏉,
-          current: current,
-          total: total,
-          pageSize: size,
-          showSizeChanger: true,
-          showQuickJumper: true,
-          pageSizeOptions: pageSizeOptions,
-          onChange: handleChange,
-          onShowSizeChange: showSizeChange,
-        }"
-        :data-source="tableData"
-        :rowKey="(record) => record.id"
+        @changePagination="getAppList"
       >
-        <!-- 搴忓彿 -->
-        <span slot="num" slot-scope="text, record, index">{{
-          (current - 1) * size + index + 1
+        <span slot="index" slot-scope="{ index }">{{
+          (page - 1) * size + index + 1
         }}</span>
+
         <!-- 鍥炬爣 -->
-        <template slot="appIconPath" slot-scope="text">
+        <template slot="appIconPath" slot-scope="{ record }">
           <img
-            v-if="text.appIconPath"
+            v-if="record.appIconPath"
             class="pointer"
             height="20"
             width="20"
-            :src="text.appIconPath"
-            @click="handlePreview(text.appIconPath)"
+            :src="record.appIconPath"
+            @click="handlePreview(record.appIconPath)"
           />
           <span v-else>--</span>
         </template>
         <!-- 涓婚绫诲瀷 -->
-        <template slot="appThemeName" slot-scope="text">
-          {{ filterItems(text.appThemeName) }}
+        <template slot="appThemeName" slot-scope="{ record }">
+          {{ filterItems(record.appThemeName) }}
         </template>
         <!-- 绠€浠� -->
-        <template slot="summary" slot-scope="text">
-          <span :title="text.summary">{{
-            text.summary ? text.summary : "--"
+        <template slot="summary" slot-scope="{ record }">
+          <span :title="record.summary">{{
+            record.summary ? record.summary : "--"
           }}</span>
         </template>
         <!-- 鐗堟湰 -->
-        <template slot="version" slot-scope="text">
-          {{ text.version || text.version == 0 ? "v" + text.version : "--" }}
+        <template slot="version" slot-scope="{ record }">
+          {{
+            record.version || record.version == 0 ? "v" + record.version : "--"
+          }}
         </template>
         <!-- 绫诲瀷 -->
-        <template slot="appType" slot-scope="text">
-          {{ text.appType === 1 ? "搴旂敤绋嬪簭" : "URL" }}
+        <template slot="appType" slot-scope="{ record }">
+          {{ record.appType === 1 ? "搴旂敤绋嬪簭" : "URL" }}
         </template>
         <!-- 涓婁笅鏋� -->
-        <template slot="shelves" slot-scope="text">
+        <template slot="shelves" slot-scope="{ record }">
           <YSwitch
             checkedChildren="涓婃灦"
             unCheckedChildren="涓嬫灦"
-            v-model="text.shelves"
-            @change="changeShelves(text)"
+            v-model="record.shelves"
+            @change="changeShelves(record)"
           ></YSwitch>
         </template>
         <!-- 鎿嶄綔 -->
-        <template slot="action" slot-scope="text">
+        <template slot="action" slot-scope="{ record }">
           <a-space size="middle">
-            <span class="primary pointer" @click="handleCloneAppData(text)"
+            <span class="primary pointer" @click="handleCloneAppData(record)"
               >鍏嬮殕鏁版嵁</span
             >
-            <span class="primary pointer" @click="handleEdit(text)">缂栬緫</span>
-            <span class="primary pointer" @click="handleCheck(text.id)"
+            <span class="primary pointer" @click="handleEdit(record)"
+              >缂栬緫</span
+            >
+            <span class="primary pointer" @click="handleCheck(record.id)"
               >鏌ョ湅</span
             >
             <span
               class="delete pointer"
-              :class="{ unDelete: userInfo.id != 1 && text.distribute }"
-              @click="handleDel(text.distribute, text.id)"
+              :class="{ unDelete: userInfo.id != 1 && record.distribute }"
+              @click="handleDel(record.distribute, record.id)"
               >鍒犻櫎</span
             >
           </a-space>
         </template>
-      </a-table>
+      </y-table>
     </div>
     <!-- 鏂板搴旂敤 -->
     <AddApp
@@ -149,14 +144,13 @@ import {
 } from "@/services/market";
 import local from "@/utils/local";
 import { mapMutations, mapGetters } from "vuex";
-import { pageSizeOptions } from "@/config/pageConfig.js";
+import YTable from "@/components/YTable.vue";
 const columns = [
   {
     title: "搴忓彿",
-    dataIndex: "num",
     width: "65px",
     scopedSlots: {
-      customRender: "num",
+      customRender: "index",
     },
   },
   {
@@ -206,6 +200,7 @@ export default {
     CheckSite,
     ChangeThem,
     CloneData,
+    YTable,
   },
   data() {
     return {
@@ -215,10 +210,9 @@ export default {
       tableData: [], // 琛ㄦ牸鏁版嵁
       loading: false,
       searchVal: "", // 鎼滅储
-      current: 1,
+      page: 1,
       size: 10,
       total: 0,
-      pageSizeOptions,
       selectedRowKeys: [], // 琛ㄦ牸鍕鹃€塱d鍒楄〃
       selectedAppList: [], // 琛ㄦ牸鍕鹃€変俊鎭垪琛�
       AddVisible: false,
@@ -258,7 +252,7 @@ export default {
     async getAppList() {
       this.loading = true;
       let res = await getAppList({
-        page: this.current,
+        page: this.page,
         size: this.size,
         siteId: this.siteId,
         appName: `%${this.searchVal}%`,
@@ -269,8 +263,8 @@ export default {
       this.dict = dict;
       this.SET_appDict(dict);
       if (res.data.code === 1) {
-        if (!data.length && this.current > 1) {
-          this.current -= 1;
+        if (!data.length && this.page > 1) {
+          this.page -= 1;
           this.getAppList();
         }
         this.tableData = data;
@@ -293,20 +287,12 @@ export default {
     },
     // 鎼滅储
     onSearch() {
-      this.current = 1;
-      this.getAppList();
-    },
-    // 缈婚〉
-    handleChange(cur) {
-      this.current = cur;
-      this.getAppList();
-    },
-    // 鏀瑰彉姣忛〉鏄剧ず鏁伴噺
-    showSizeChange(current, size) {
-      this.current = current;
-      this.size = size;
+      this.page = 1;
+      this.selectedRowKeys = [];
+      this.selectedAppList = [];
       this.getAppList();
     },
+
     // 鍕鹃€夎〃鏍�
     onSelectChange(keys, rows) {
       this.selectedRowKeys = keys;
@@ -382,6 +368,8 @@ export default {
           let { code, msg } = res.data;
           if (code === 1) {
             _this.$message.success(msg);
+            _this.selectedRowKeys = [];
+            _this.selectedAppList = [];
             _this.getAppList();
           }
         },
diff --git a/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddApp.vue b/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddApp.vue
index a42ed5e71176b705e7100e91c990d1350168f4d6..08542da60fcfab403aebdf6c80a5459b2b4fd966 100644
--- a/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddApp.vue
+++ b/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddApp.vue
@@ -33,21 +33,12 @@
             </a-select>
           </a-form-model-item>
           <a-form-model-item label="搴旂敤鍥炬爣" prop="appIconPath">
-            <a-upload
-              name="file"
-              list-type="picture-card"
-              :action="api + 'base/file/commonupload'"
-              :file-list="iconFileList"
-              @change="handleChangeIcon"
-              :accept="accept"
-              :before-upload="iconBeforeUpload"
-              @preview="handlePreview"
-            >
-              <div v-if="iconFileList.length < 1">
-                <a-icon type="plus" />
-                <div class="ant-upload-text">閫夋嫨鍥炬爣</div>
-              </div>
-            </a-upload>
+            <YUpload
+              accept=".png,.jpg,.jpeg,.svg"
+              :limit="1"
+              v-model="form.appIconPath"
+              listType="picture-card"
+            ></YUpload>
           </a-form-model-item>
           <a-form-model-item label="搴旂敤绠€浠�" prop="summary">
             <a-textarea
@@ -91,18 +82,16 @@
             prop="filePath"
             v-if="form.appType === 1"
           >
-            <a-upload
-              name="file"
-              :action="api + 'base/file/commonupload'"
-              :multiple="false"
-              :file-list="fileList"
-              @change="handleChangeFile"
-              accept="application/x-zip-compressed"
+            <YUpload
+              accept=".zip"
+              :limit="1"
+              v-model="form.filePath"
+              @onSuccess="appUpload"
             >
               <a-button type="primary">
                 <a-icon type="upload" /> .zip鏂囦欢
               </a-button>
-            </a-upload>
+            </YUpload>
           </a-form-model-item>
           <a-form-model-item v-else label="搴旂敤URL" prop="url">
             <a-input v-model="form.url" placeholder="璇疯緭鍏ュ簲鐢║RL" />
@@ -158,10 +147,12 @@ import YSwitch from "../../../../components/yswitch/YSwitch.vue";
 import { saveApp } from "@/services/market";
 import { mapGetters } from "vuex";
 import { checkCodeNumber } from "@/utils/validate";
+import YUpload from "@/components/YUpload.vue";
 // import local from "@/utils/local";
 export default {
   components: {
     YSwitch,
+    YUpload,
   },
   props: {
     title: {
@@ -182,9 +173,7 @@ export default {
   },
   data() {
     return {
-      accept: "image/jpeg,image/png,image/svg+xml",
       api: process.env.VUE_APP_API_BASE_URL + "/",
-      iconFileList: [],
       labelCol: {
         span: 3,
       },
@@ -249,7 +238,6 @@ export default {
           { required: true, message: "璇烽€夋嫨鏄惁鏈夋洿鏂�", trigger: "change" },
         ],
       },
-      fileList: [],
       beFrom: "", // 鏉ヨ嚜缁堢杩樻槸绉诲姩绔�
     };
   },
@@ -269,14 +257,10 @@ export default {
     // 鍏抽棴
     onClose() {
       this.$refs.form.resetFields();
-      this.fileList = [];
-      this.iconFileList = [];
       this.loading = false;
       this.Visible = false;
     },
     resetForm() {
-      this.fileList = [];
-      this.iconFileList = [];
       this.$refs.form.resetFields();
     },
     // 鎻愪氦
@@ -295,81 +279,7 @@ export default {
         }
       });
     },
-    // 鍥炬爣涓婁紶涔嬪墠
-    iconBeforeUpload(file) {
-      const isJpgOrPng =
-        file.type === "image/jpeg" ||
-        file.type === "image/png" ||
-        file.type === "image/svg+xml";
-      if (!isJpgOrPng) {
-        this.$message.error("璇蜂笂浼爅peg銆乸ng鎴栬€卻vg鏍煎紡鍥剧墖!");
-      }
-      const isLt5M = file.size / 1024 / 1024 < 5;
-      if (!isLt5M) {
-        this.$message.error("鍥剧墖澶у皬涓嶈兘瓒呰繃 5MB!");
-      }
-      return isJpgOrPng && isLt5M;
-    },
-    // 涓婁紶鍥炬爣
-    handleChangeIcon({ file, fileList }) {
-      if (
-        file.status &&
-        file.status != "removed" &&
-        file.response &&
-        file.response.code == -1
-      ) {
-        this.$message.error(file.response.msg);
-        fileList = fileList.filter((file) => file.response.code != -1);
-      }
-      this.iconFileList = [...fileList].slice(-1);
-      this.iconFileList = this.iconFileList.map((v) => {
-        if (v.response) {
-          v.url = v.response.url;
-        }
-        return v;
-      });
-      if (this.iconFileList[0]) {
-        this.form.appIconPath = this.iconFileList[0].url;
-      } else {
-        this.form.appIconPath = "";
-      }
-    },
-    // 棰勮
-    handlePreview(info) {
-      this.$viewerApi({
-        images: [info.url],
-      });
-    },
-    // 涓婁紶搴旂敤
-    handleChangeFile(info) {
-      if (
-        info.file.status &&
-        info.file.status != "removed" &&
-        info.file.response &&
-        info.file.response.code == -1
-      ) {
-        this.$message.error(info.file.response.msg);
-        info.fileList = info.fileList.filter(
-          (file) => file.response.code != -1
-        );
-      }
-      let fileList = [...info.fileList];
-      fileList = fileList.slice(-1);
-      fileList = fileList.map((file) => {
-        if (file.response) {
-          file.url = file.response.url;
-        }
-        return file;
-      });
-      this.fileList = fileList;
-      if (this.fileList.length) {
-        this.form.fileName = this.fileList[0].name;
-        this.form.filePath = this.fileList[0].url;
-      } else {
-        this.form.filePath = "";
-        this.form.fileName = "";
-      }
-    },
+
     // 鏂板
     onAdd(type) {
       Object.assign(this.form, this.$options.data().form);
@@ -380,22 +290,6 @@ export default {
     onEdit(data) {
       this.$nextTick(() => {
         this.form = { ...data };
-        this.fileList = [
-          {
-            uid: "-1",
-            name: this.form.fileName,
-            status: "done",
-            url: this.form.filePath,
-          },
-        ];
-        this.iconFileList = [
-          {
-            uid: "-2",
-            name: this.form.appIconPath,
-            status: "done",
-            url: this.form.appIconPath,
-          },
-        ];
       });
     },
 
@@ -411,9 +305,12 @@ export default {
       } else {
         this.form.filePath = "";
         this.form.fileName = "";
-        this.fileList = [];
       }
     },
+    appUpload({ fileList }) {
+      let fileName = fileList[0] ? fileList[0].name : "";
+      this.form.fileName = fileName;
+    },
   },
 };
 </script>
diff --git a/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddData.vue b/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddData.vue
index 7e7c58083f333cc637f1b7fc59bcb70791013d80..fbff1fbcc21ecd31a520ace56cc40e61d580dd7f 100644
--- a/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddData.vue
+++ b/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddData.vue
@@ -136,22 +136,13 @@
                 ></YQuillEditor>
               </div>
               <!-- 鏂囦欢涓婁紶 -->
-              <a-upload
+              <YUpload
                 v-else-if="v.fieldType == 'upload'"
-                :action="api + '/base/file/commonupload'"
                 :multiple="true"
-                :file-list="v.fileList"
-                :beforeUpload="handleBeforeUpload"
-                @change="
-                  (info) => {
-                    handleChange(info, v);
-                  }
-                "
-              >
-                <a-button type="primary">
-                  <a-icon type="upload" /> 鐐瑰嚮涓婁紶
-                </a-button>
-              </a-upload>
+                v-model="v.fieldValue"
+                :limit="0"
+                :MB="0"
+              ></YUpload>
               <!-- 琛ㄦ牸 -->
               <div v-else-if="v.fieldType == 'table'">
                 <div class="search-box">
@@ -176,22 +167,14 @@
                     />
                   </a-space>
                 </div>
-                <a-table
-                  bordered
-                  size="small"
-                  :scroll="{ y: 550 }"
-                  :loading="tableLoading"
-                  :pagination="{
-                    showTotal: (total) => `鍏� ${total} 鏉,
-                    current: current,
-                    total: total,
-                    pageSize: size,
-                    showSizeChanger: true,
-                    showQuickJumper: true,
-                    pageSizeOptions: pageSizeOptions,
-                  }"
+                <y-table
                   :columns="columns"
-                  :data-source="tableList"
+                  :data="tableList"
+                  :pageSize.sync="size"
+                  :page.sync="page"
+                  :total="total"
+                  :loading="loading"
+                  :scroll="{ y: 550 }"
                   :row-selection="{
                     selectedRowKeys: selectedRowKeys,
                     onChange: (keys, rows) => {
@@ -203,15 +186,12 @@
                       );
                     },
                   }"
-                  @change="changeTable"
-                  :rowKey="(record) => record.id"
+                  @changePagination="getData"
                 >
-                  <template slot="num" slot-scope="text, record, index">
-                    <span>
-                      {{ (current - 1) * size + index + 1 }}
-                    </span>
-                  </template>
-                </a-table>
+                  <span slot="index" slot-scope="{ index }">{{
+                    (page - 1) * size + index + 1
+                  }}</span>
+                </y-table>
               </div>
             </a-form-model-item>
           </template>
@@ -246,10 +226,14 @@ import AppSelect from "../components/AppSelect.vue";
 import { batchSaveDataset } from "@/services/market";
 import { request } from "@/utils/request";
 import local from "@/utils/local";
+import YUpload from "@/components/YUpload.vue";
+import YTable from "@/components/YTable.vue";
 export default {
   components: {
     YQuillEditor,
     AppSelect,
+    YUpload,
+    YTable,
   },
   props: {
     title: {
@@ -269,7 +253,6 @@ export default {
       tableLoading: false,
       siteId: local.getLocal("siteId"),
       api: process.env.VUE_APP_API_BASE_URL,
-      pageSizeOptions: ["10", "30", "50", "100", "200"],
       labelCol: {
         span: 3,
       },
@@ -284,7 +267,7 @@ export default {
       year: null,
       selectedRowKeys: [],
       selectedRow: [],
-      current: 1,
+      page: 1,
       size: 10,
       total: 0,
       tableList: [],
@@ -347,7 +330,7 @@ export default {
           this.loading = false;
           if (code === 1) {
             this.$message.success(msg);
-            this.$emit("addSuccess");
+            this.$emit("success");
             this.onClose();
           }
         } else {
@@ -364,9 +347,6 @@ export default {
           delete v.id;
         }
         // v.fieldValue = v.fieldValue ?? undefined;
-        if (v.fieldType == "upload") {
-          v.fileList = [];
-        }
         if (v.fieldType == "checkbox") {
           v.checkbox = [];
         }
@@ -375,7 +355,7 @@ export default {
             title: "搴忓彿",
             width: "65px",
             scopedSlots: {
-              customRender: "num",
+              customRender: "index",
             },
           };
           this.fieldTypeValue = JSON.parse(v.fieldTypeValue);
@@ -398,21 +378,7 @@ export default {
     onEdit(data) {
       setTimeout(() => {
         data.appInfoFieldList.forEach((v) => {
-          if (v.fieldType == "upload") {
-            if (v.fieldValue) {
-              let arr = v.fieldValue.split(",");
-              v.fileList = arr.map((v, i) => {
-                return {
-                  uid: i,
-                  name: v,
-                  status: "done",
-                  url: v,
-                };
-              });
-            } else {
-              v.fileList = [];
-            }
-          } else if (v.fieldType == "checkbox") {
+          if (v.fieldType == "checkbox") {
             if (v.fieldValue) {
               v.checkbox = v.fieldValue.split(",");
             } else {
@@ -425,55 +391,55 @@ export default {
     },
 
     // 鏇存敼鏂囦欢鍚嶇О
-    renameFile(originalFile, newName) {
-      return new File([originalFile], newName, {
-        type: originalFile.type,
-        lastModified: originalFile.lastModified,
-      });
-    },
+    // renameFile(originalFile, newName) {
+    //   return new File([originalFile], newName, {
+    //     type: originalFile.type,
+    //     lastModified: originalFile.lastModified,
+    //   });
+    // },
 
-    handleBeforeUpload(file) {
-      let index = file.name.lastIndexOf(".");
-      let fileName = file.name.slice(0, index);
-      let suffix = file.name.slice(index);
-      let uid = file.uid;
-      if (fileName.length >= 40) {
-        let newName = fileName.slice(0, 40) + "..." + suffix;
-        let newFile = this.renameFile(file, newName);
-        newFile.uid = uid;
-        return new Promise((resolve) => {
-          resolve(newFile);
-        });
-      }
-    },
+    // handleBeforeUpload(file) {
+    //   let index = file.name.lastIndexOf(".");
+    //   let fileName = file.name.slice(0, index);
+    //   let suffix = file.name.slice(index);
+    //   let uid = file.uid;
+    //   if (fileName.length >= 40) {
+    //     let newName = fileName.slice(0, 40) + "..." + suffix;
+    //     let newFile = this.renameFile(file, newName);
+    //     newFile.uid = uid;
+    //     return new Promise((resolve) => {
+    //       resolve(newFile);
+    //     });
+    //   }
+    // },
 
-    // 鏂囦欢涓婁紶鐘舵€佸彉鍖�
-    handleChange(info, row) {
-      if (
-        info.file.status &&
-        info.file.status != "removed" &&
-        info.file.response &&
-        info.file.response.code == -1
-      ) {
-        this.$message.error(info.file.response.msg);
-        info.fileList = info.fileList.filter(
-          (file) => file.response.code != -1
-        );
-      }
-      let fileList = [...info.fileList];
-      // fileList = fileList.slice(-1);
-      fileList = fileList.map((file) => {
-        if (!file.url && file.response) {
-          file.url = file.response.url;
-        } else if (!file.url && !file.response) {
-          file.url = "";
-        }
-        return file;
-      });
-      row.fileList = fileList;
-      row.fieldValue = fileList.map((v) => v.url).join(",");
-      this.$forceUpdate();
-    },
+    // // 鏂囦欢涓婁紶鐘舵€佸彉鍖�
+    // handleChange(info, row) {
+    //   if (
+    //     info.file.status &&
+    //     info.file.status != "removed" &&
+    //     info.file.response &&
+    //     info.file.response.code == -1
+    //   ) {
+    //     this.$message.error(info.file.response.msg);
+    //     info.fileList = info.fileList.filter(
+    //       (file) => file.response.code != -1
+    //     );
+    //   }
+    //   let fileList = [...info.fileList];
+    //   // fileList = fileList.slice(-1);
+    //   fileList = fileList.map((file) => {
+    //     if (!file.url && file.response) {
+    //       file.url = file.response.url;
+    //     } else if (!file.url && !file.response) {
+    //       file.url = "";
+    //     }
+    //     return file;
+    //   });
+    //   row.fileList = fileList;
+    //   row.fieldValue = fileList.map((v) => v.url).join(",");
+    //   this.$forceUpdate();
+    // },
     // 鏀瑰彉澶氶€夋鐘舵€�
     changeCheckBox(vals, row) {
       row.fieldValue = vals.join(",");
@@ -507,23 +473,6 @@ export default {
             item.fieldValue = this.selectedRow.length
               ? this.selectedRow[0][this.serviceApiParams[key]]
               : "";
-            if (item.fieldType == "upload") {
-              if (this.selectedRow.length) {
-                item.fileList = [
-                  ...item.fileList,
-                  {
-                    uid: -1,
-                    name: this.selectedRow[0][this.serviceApiParams[key]],
-                    status: "done",
-                    url: this.selectedRow[0][this.serviceApiParams[key]],
-                  },
-                ].filter((v) => {
-                  return !res.has(v.uuid) && res.set(v.uuid, 1);
-                });
-              } else {
-                item.fileList = item.fileList.filter((v) => v.uid != -1);
-              }
-            }
           }
         });
       }
@@ -539,7 +488,7 @@ export default {
       this.tableLoading = true;
       let res = await request(this.api + this.serviceApi, "post", {
         size: this.size,
-        page: this.current,
+        page: this.page,
         siteId: this.siteId,
         ...obj,
         ...data,
@@ -551,15 +500,12 @@ export default {
         this.total = total;
       }
     },
-    changeTable(info) {
-      let { current, pageSize } = info;
-      this.current = current;
-      this.size = pageSize;
-      this.getData();
-    },
+
     // 鎼滅储琛ㄦ牸
     onSearch() {
-      this.current = 1;
+      this.page = 1;
+      this.selectedRowKeys = [];
+      this.selectedRow = [];
       this.getData();
     },
     changeShow(row) {
diff --git a/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddTheme.vue b/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddTheme.vue
index 5ba841058aaae550250a63bd0af913b41c749719..d46042b76e55abe43cec2aaf51cbc83550473deb 100644
--- a/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddTheme.vue
+++ b/base-manager-ui/admin/src/pages/basicset/appmarket/modal/AddTheme.vue
@@ -21,21 +21,12 @@
           <a-input v-model="form.categoryCode" placeholder="璇疯緭鍏ヤ富棰樼紪鐮�" />
         </a-form-model-item>
         <a-form-model-item label="涓婚灏侀潰" prop="cover">
-          <a-upload
-            name="file"
-            list-type="picture-card"
-            :action="api + 'base/file/commonupload'"
-            :file-list="fileList"
-            @change="handleChangeCover"
-            :accept="accept"
-            :before-upload="beforeUpload"
-            @preview="handlePreview"
-          >
-            <div v-if="fileList.length < 1">
-              <a-icon type="plus" />
-              <div class="ant-upload-text">閫夋嫨灏侀潰</div>
-            </div>
-          </a-upload>
+          <YUpload
+            accept=".png,.jpg,.jpeg,.svg"
+            :limit="1"
+            v-model="form.cover"
+            listType="picture-card"
+          ></YUpload>
         </a-form-model-item>
         <a-form-model-item label="鎺掑簭" prop="sort">
           <a-input-number v-model="form.sort" :min="1" />
@@ -52,6 +43,7 @@
 <script>
 import { saveCategory } from "@/services/market";
 import local from "@/utils/local";
+import YUpload from "@/components/YUpload.vue";
 export default {
   props: {
     addVisile: {
@@ -64,12 +56,11 @@ export default {
       default: "鏂板鍒嗙被",
     },
   },
-  components: {},
+  components: {
+    YUpload,
+  },
   data() {
     return {
-      accept: "image/jpeg,image/png",
-      api: process.env.VUE_APP_API_BASE_URL + "/",
-      fileList: [],
       form: {
         siteId: local.getLocal("siteId"), // 绔欑偣id
         siteName: local.getLocal("siteName"), // 绔欑偣鍚嶇О
@@ -110,21 +101,10 @@ export default {
     onEdit(data) {
       this.$nextTick(() => {
         this.form = { ...data };
-        if (this.form.cover) {
-          this.fileList = [
-            {
-              uid: "-2",
-              name: this.form.cover,
-              status: "done",
-              url: this.form.cover,
-            },
-          ];
-        }
       });
     },
     // 鍏抽棴寮圭獥
     handleClose() {
-      this.fileList = [];
       this.$refs.form.resetFields();
       this.Visible = false;
     },
@@ -142,52 +122,9 @@ export default {
         }
       });
     },
-    // 涓婁紶涔嬪墠
-    beforeUpload(file) {
-      const isJpgOrPng =
-        file.type === "image/jpeg" || file.type === "image/png";
-      if (!isJpgOrPng) {
-        this.$message.error("璇蜂笂浼爅peg銆乸ng鏍煎紡鍥剧墖!");
-      }
-      const isLt10M = file.size / 1024 / 1024 < 10;
-      if (!isLt10M) {
-        this.$message.error("鍥剧墖澶у皬涓嶈兘瓒呰繃 10MB!");
-      }
-      return isJpgOrPng && isLt10M;
-    },
-    // 涓婁紶灏侀潰
-    handleChangeCover({ file, fileList }) {
-      if (
-        file.status &&
-        file.status != "removed" &&
-        file.response &&
-        file.response.code == -1
-      ) {
-        this.$message.error(file.response.msg);
-        fileList = fileList.filter((file) => file.response.code != -1);
-      }
-      this.fileList = [...fileList].slice(-1);
-      this.fileList = this.fileList.map((v) => {
-        if (v.response) {
-          v.url = v.response.url;
-        }
-        return v;
-      });
-      if (this.fileList[0]) {
-        this.form.cover = this.fileList[0].url;
-      } else {
-        this.form.cover = "";
-      }
-    },
-    // 棰勮
-    handlePreview(info) {
-      this.$viewerApi({
-        images: [info.url],
-      });
-    },
+
     // 閲嶇疆
     handleReset() {
-      this.fileList = [];
       this.$refs.form.resetFields();
     },
   },