From 6339f41cfff5b9fdf33eb2f788658247430b5091 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期三, 19 十月 2022 17:19:52 +0800
Subject: [PATCH] 添加更新提醒

---
 src/views/project/index.vue |  367 ++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 257 insertions(+), 110 deletions(-)

diff --git a/src/views/project/index.vue b/src/views/project/index.vue
index 8df14be..c6b7321 100644
--- a/src/views/project/index.vue
+++ b/src/views/project/index.vue
@@ -2,20 +2,49 @@
   <div class="table-container">
     <vab-query-form>
       <vab-query-form-left-panel>
-        <el-form ref="form" :model="queryForm" :inline="true" @submit.native.prevent>
+        <el-form
+          ref="form"
+          :model="queryForm"
+          :inline="true"
+          @submit.native.prevent
+        >
           <el-form-item>
-            <el-input v-model="queryForm.title" placeholder="鍚嶇О" />
+            <el-input
+              v-model="queryForm.name"
+              placeholder="鍚嶇О"
+              clearable=""
+            />
           </el-form-item>
           <el-form-item>
             <el-select
-              v-model="queryForm.address"
+              v-model="queryForm.type"
               placeholder="绫诲瀷"
               class="handle-select mr10"
               size="mini"
+              clearable=""
             >
-              <el-option key="1" label="绯荤粺" value="绯荤粺"></el-option>
-              <el-option key="2" label="搴旂敤" value="搴旂敤"></el-option>
-              <el-option key="3" label="绠楁硶" value="绠楁硶"></el-option>
+              <el-option
+                v-for="(v, k) in typeOptions"
+                :key="k"
+                :label="v"
+                :value="k"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item>
+            <el-select
+              v-model="queryForm.arch"
+              placeholder="鏋舵瀯"
+              class="handle-select mr10"
+              size="mini"
+              clearable=""
+            >
+              <el-option
+                v-for="(v, k) in archOptions"
+                :key="k"
+                :label="v"
+                :value="k"
+              ></el-option>
             </el-select>
           </el-form-item>
           <el-form-item>
@@ -24,14 +53,18 @@
               type="primary"
               native-type="submit"
               @click="handleQuery"
-            >鏌ヨ</el-button>
+              >鏌ヨ</el-button
+            >
           </el-form-item>
         </el-form>
       </vab-query-form-left-panel>
       <vab-query-form-right-panel>
         <el-button icon="el-icon-plus" type="primary" @click="handleAdd">
-          娣诲姞</el-button>
-        <el-button icon="el-icon-delete" type="danger" @click="handleDelete">鍒犻櫎</el-button>
+          娣诲姞</el-button
+        >
+        <el-button icon="el-icon-delete" type="danger" @click="handleDelete"
+          >鍒犻櫎</el-button
+        >
       </vab-query-form-right-panel>
     </vab-query-form>
 
@@ -41,13 +74,19 @@
       stripe
       :data="list"
       :element-loading-text="elementLoadingText"
-      :height="height"
       @selection-change="setSelectRows"
       @expand-change="expandChange"
     >
       <el-table-column type="expand">
         <template slot-scope="props">
-          <el-table :data="props.row.pkgList" :show-header="false" style="width: 100%">
+          <el-table
+            :data="props.row.pkgList"
+            :show-header="false"
+            style="width: 100%"
+            row-class-name="expand-row"
+            :highlight-current-row="false"
+          >
+            >
             <el-table-column prop="fileName"></el-table-column>
             <el-table-column prop="version" width="150"></el-table-column>
             <el-table-column prop="commit" width="150"></el-table-column>
@@ -55,46 +94,120 @@
 
             <el-table-column prop="state" width="150">
               <template #default="{ row }">
-                <el-tag>{{ packageState[row.state] }}</el-tag>
+                <el-tag :type="row.state == 0 ? 'success' : 'danger'">{{
+                  packageState[row.state]
+                }}</el-tag>
               </template>
             </el-table-column>
-            <el-table-column width="120">
+            <el-table-column width="300">
               <template #default="scope">
-                <el-button size="small" @click="handlePublish(scope.row)">鍙戝竷</el-button>
+                <el-button
+                  v-show="props.row.type == 'os' || props.row.type == 'algo'"
+                  size="small"
+                  @click="handlePublish(scope.row)"
+                  >鍙戝竷</el-button
+                >
+                <el-button size="small" @click="handleDownload(scope.row)"
+                  >涓嬭浇</el-button
+                >
+                <el-button
+                  size="small"
+                  type="warning"
+                  :disabled="scope.row.state === 0"
+                  @click="handleRebuild(scope.row)"
+                  >閲嶇疆</el-button
+                >
+
+                <!-- 姝e湪鎵撳寘鐨勪换鍔′互鍙婅嚜鍔ㄦ墦鍖呯殑浠诲姟涓嶅厑璁稿垹闄� -->
+                <el-button
+                  size="small"
+                  type="danger"
+                  :disabled="
+                    scope.row.createType == 0 ||
+                    (scope.row.state > 0 && scope.row.state < 3)
+                  "
+                  @click="handleDeletePkg(scope.row)"
+                  >鍒犻櫎</el-button
+                >
               </template>
             </el-table-column>
           </el-table>
         </template>
       </el-table-column>
       <!-- <el-table-column show-overflow-tooltip type="selection" width="55"></el-table-column> -->
-      <el-table-column show-overflow-tooltip label="搴忓彿" width="95">
+      <el-table-column show-overflow-tooltip label="搴忓彿" width="50">
         <template #default="scope">{{ scope.$index + 1 }}</template>
       </el-table-column>
-      <el-table-column show-overflow-tooltip prop="name" label="椤圭洰鍚嶇О"></el-table-column>
-      <el-table-column show-overflow-tooltip prop="srcUrl" label="椤圭洰鍦板潃"></el-table-column>
+      <el-table-column
+        show-overflow-tooltip
+        prop="name"
+        label="鍚嶇О"
+        width="150"
+      >
+      </el-table-column>
+      <el-table-column
+        show-overflow-tooltip
+        prop="desc"
+        label="鎻忚堪"
+      ></el-table-column>
+      <el-table-column
+        show-overflow-tooltip
+        prop="srcUrl"
+        label="鍦板潃"
+        width="500"
+      ></el-table-column>
+      <el-table-column show-overflow-tooltip prop="branch" label="鍒嗘敮">
+      </el-table-column>
       <el-table-column show-overflow-tooltip prop="type" label="绫诲瀷">
         <template #default="{ row }">
-          <el-tag>{{ row.type | typeFilter }}</el-tag>
+          <el-tag>{{ typeOptions[row.type] }}</el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column show-overflow-tooltip prop="arch" label="鏋舵瀯">
+        <template #default="{ row }">
+          <el-tag>{{ archOptions[row.arch] }}</el-tag>
         </template>
       </el-table-column>
       <!-- <el-table-column show-overflow-tooltip label="褰撳墠鐗堟湰" prop="latestVersion"></el-table-column> -->
       <el-table-column label="鐘舵��">
         <template #default="{ row }">
-          <el-tag>{{ row.state | stateFilter }}</el-tag>
+          <el-badge
+            is-dot
+            :hidden="row.latestPkgShortSha1 == row.shortSha1"
+            style="margin-top: 6px"
+          >
+            <el-tag :type="row.state > 1 ? 'danger' : 'success'">{{
+              projectState[row.state]
+            }}</el-tag>
+          </el-badge>
         </template>
       </el-table-column>
-      <el-table-column label="鍒涘缓鏃堕棿" prop="createdAt" width="200"></el-table-column>
+      <el-table-column
+        label="鍒涘缓鏃堕棿"
+        prop="createdAt"
+        width="150"
+      ></el-table-column>
       <el-table-column label="鎿嶄綔" width="180px">
         <template #default="{ row }">
           <el-button type="text" @click="handleEdit(row)">缂栬緫</el-button>
-          <el-button type="text" style="color: red" @click="handleDeleteRow(row)">鍒犻櫎</el-button>
-          <el-button type="text" style="color: deepskyblue" @click="handlePack(row)">鎵撳寘</el-button>
+          <el-button
+            type="text"
+            style="color: red"
+            @click="handleDeleteRow(row)"
+            >鍒犻櫎</el-button
+          >
+          <el-button
+            type="text"
+            style="color: deepskyblue"
+            @click="handlePack(row)"
+            >鎵撳寘</el-button
+          >
         </template>
       </el-table-column>
     </el-table>
     <el-pagination
       :background="background"
-      :current-page="queryForm.pageNo"
+      :current-page="queryForm.pageIndex"
       :layout="layout"
       :page-size="queryForm.pageSize"
       :total="total"
@@ -106,166 +219,200 @@
 </template>
 
 <script>
-import { getList, deletePrj, getPkgList, buildPkg } from '@/api/project'
-import { publish } from '@/api/package'
+import { getList, deletePrj, getPkgList, buildPkg } from "@/api/project";
+import { publish, download, rebuild, deletePkg } from "@/api/package";
 
-import TableEdit from './components/ProjectEdit.vue'
+import TableEdit from "./components/ProjectEdit.vue";
+
 export default {
-  name: 'ComprehensiveTable',
+  name: "ComprehensiveTable",
   components: {
     TableEdit,
   },
-  filters: {
-    stateFilter(state) {
-      const stateMap = ['涓嬭浇涓�', '鍚屾瀹屾垚', '鍚屾澶辫触']
-
-      return stateMap[state]
-    },
-    typeFilter(type) {
-      const typeMap = {
-        sys: '绯荤粺鍖�',
-        app: '搴旂敤鍖�',
-        algo: '绠楁硶鍖�',
-      }
-      return typeMap[type]
-    },
-  },
   data() {
     return {
-      imgShow: true,
       list: [],
       listLoading: true,
-      layout: 'total, sizes, prev, pager, next, jumper',
+      layout: "total, sizes, prev, pager, next, jumper",
+      archOptions: {
+        amd64: "x86_64",
+        arm64: "arm_64",
+      },
+      typeOptions: {
+        os: "AIOS",
+        sys: "绯荤粺鍖�",
+        app: "搴旂敤鍖�",
+        algo: "绠楁硶鍖�",
+      },
+      projectState: [
+        "涓嬭浇涓�",
+        "鍚屾瀹屾垚",
+        "涓嬭浇澶辫触",
+        "浠g爜搴撻敊璇�",
+        "鍚屾澶辫触",
+      ],
       packageState: [
-        '瀹屾垚',
-        '宸叉彁浜�',
-        '鎺掗槦涓�',
-        '鎵撳寘涓�',
-        '缂栬瘧澶辫触',
-        '鎵撳寘澶辫触',
+        "鎵撳寘瀹屾垚",
+        "宸� 鎻� 浜�",
+        "鎺� 闃� 涓�",
+        "鎵� 鍖� 涓�",
+        "缂栬瘧澶辫触",
+        "鎵撳寘澶辫触",
       ],
       total: 0,
       background: true,
-      selectRows: '',
-      elementLoadingText: '姝e湪鍔犺浇...',
+      selectRows: "",
+      expandRow: "",
+      elementLoadingText: "姝e湪鍔犺浇...",
       queryForm: {
-        pageNo: 1,
+        pageIndex: 1,
         pageSize: 20,
-        title: '',
       },
-    }
+    };
   },
   computed: {
     height() {
-      return this.$baseTableHeight()
+      return this.$baseTableHeight();
     },
   },
   created() {
-    this.fetchData()
+    this.fetchData();
   },
-  beforeDestroy() { },
-  mounted() { },
+  beforeDestroy() {},
+  mounted() {},
   methods: {
     setSelectRows(val) {
-      this.selectRows = val
+      this.selectRows = val;
     },
     handleAdd() {
-      this.$refs['edit'].showEdit()
+      this.$refs["edit"].showEdit();
     },
     handleEdit(row) {
-      this.$refs['edit'].showEdit(row)
+      this.$refs["edit"].showEdit(row);
     },
     handleDelete(row) {
       if (this.selectRows.length > 0) {
-        const ids = this.selectRows.map((item) => item.id).join()
-        this.$baseConfirm('浣犵‘瀹氳鍒犻櫎閫変腑椤瑰悧', null, async () => {
-          const { msg } = await doDelete({ ids: ids })
-          this.$baseMessage(msg, 'success')
-          this.fetchData()
-        })
+        const ids = this.selectRows.map((item) => item.id).join();
+        this.$baseConfirm("浣犵‘瀹氳鍒犻櫎閫変腑椤瑰悧", null, async () => {
+          const { msg } = await doDelete({ ids: ids });
+          this.$baseMessage(msg, "success");
+          this.fetchData();
+        });
       } else {
-        this.$baseMessage('鏈�変腑浠讳綍琛�', 'error')
-        return false
+        this.$baseMessage("鏈�変腑浠讳綍琛�", "error");
+        return false;
       }
     },
     handleDeleteRow(row) {
       if (row.id) {
-        this.$baseConfirm('浣犵‘瀹氳鍒犻櫎褰撳墠椤瑰悧', null, async () => {
-          const { msg } = await deletePrj(row.id)
-          this.$baseMessage(msg, 'success')
-          this.fetchData()
-        })
+        this.$baseConfirm("浣犵‘瀹氳鍒犻櫎褰撳墠椤瑰悧", null, async () => {
+          const { msg } = await deletePrj(row.id);
+          this.$baseMessage(msg, "success");
+          this.fetchData();
+        });
       }
     },
     handleSizeChange(val) {
-      this.queryForm.pageSize = val
-      this.fetchData()
+      this.queryForm.pageSize = val;
+      this.fetchData();
     },
     handleCurrentChange(val) {
-      this.queryForm.pageNo = val
-      this.fetchData()
+      this.queryForm.pageIndex = val;
+      this.fetchData();
     },
     handleQuery() {
-      this.queryForm.pageNo = 1
-      this.fetchData()
+      this.queryForm.pageIndex = 1;
+      this.fetchData();
     },
     async fetchData() {
-      this.listLoading = true
-      const { data, total } = await getList(this.queryForm)
+      this.listLoading = true;
+      const { data, total } = await getList(this.queryForm);
 
       if (data) {
         data.forEach((item) => {
-          item.pkgList = []
-        })
+          item.pkgList = [];
+        });
 
-        this.list = data
+        this.list = data;
       }
 
-      this.total = total
+      this.total = total;
       setTimeout(() => {
-        this.listLoading = false
-      }, 500)
+        this.listLoading = false;
+      }, 500);
     },
 
     async expandChange(row, expandRows) {
-      console.log(row)
       if (expandRows.length == 0) {
-        console.log('fold')
-        return
+        return;
       }
 
-      const { data, total } = await getPkgList(row.id)
+      this.getPackageList(row.id);
+    },
+    async getPackageList(id) {
+      const { data, total } = await getPkgList(id);
       this.list.forEach((item, idx) => {
-        if (item.id === row.id) {
-          this.list[idx].pkgList = data
+        if (item.id === id) {
+          this.list[idx].pkgList = data.reverse();
         }
-      })
+      });
     },
     handlePack(row) {
-      this.$prompt('璇疯緭鍏ョ増鏈彿', '鎻愮ず', {
-        confirmButtonText: '纭畾',
-        cancelButtonText: '鍙栨秷',
+      this.$prompt("璇疯緭鍏ョ増鏈彿", "鎻愮ず", {
+        confirmButtonText: "纭畾",
+        cancelButtonText: "鍙栨秷",
         inputPattern: /[\d+][\.\d+]*/,
-        inputErrorMessage: '鐗堟湰鍙锋牸寮忎笉姝g‘,渚� 1.0.0, 10.1.100',
+        inputErrorMessage: "鐗堟湰鍙锋牸寮忎笉姝g‘,渚� 1.0.0, 10.1.100",
       })
         .then(({ value }) => {
           buildPkg(row, value).then((rsp) => {
-            console.log(rsp)
-            this.expandChange(row, 1)
-          })
+            this.expandChange(row, 1);
+          });
         })
         .catch(() => {
           this.$message({
-            type: 'info',
-            message: '鍙栨秷杈撳叆',
-          })
-        })
+            type: "info",
+            message: "鍙栨秷杈撳叆",
+          });
+        });
     },
     handlePublish(row) {
       publish(row).then((rsp) => {
-        console.log(rsp)
-      })
+        if (rsp && rsp.success) {
+          this.$baseMessage(rsp.msg, "success");
+        }
+      });
+    },
+    handleDownload(row) {
+      download({ path: row.filePath }).then((rsp) => {
+        if (rsp && rsp.success) {
+          window.location = rsp.data;
+        }
+      });
+    },
+    handleRebuild(row) {
+      rebuild(row).then((rsp) => {
+        if (rsp && rsp.success) {
+          this.$baseMessage(rsp.msg, "success");
+        } else {
+          this.$baseMessage("淇濆瓨澶辫触", "error");
+        }
+      });
+    },
+    handleDeletePkg(row) {
+      if (row.id) {
+        this.$baseConfirm("浣犵‘瀹氳鍒犻櫎褰撳墠椤瑰悧", null, async () => {
+          const { msg } = await deletePkg(row);
+          this.$baseMessage(msg, "success");
+          this.getPackageList(row.projectId);
+        });
+      }
     },
   },
-}
+};
 </script>
+<style>
+.el-table .expand-row {
+  background-color: oldlace;
+}
+</style>

--
Gitblit v1.8.0