yanghao 2 viikkoa sitten
vanhempi
commit
56da19bdac
3 muutettua tiedostoa jossa 196 lisäystä ja 116 poistoa
  1. BIN
      src/assets/images/logotext.png
  2. 77 76
      src/components/home/header.vue
  3. 119 40
      src/views/index.vue

BIN
src/assets/images/logotext.png


+ 77 - 76
src/components/home/header.vue

@@ -6,8 +6,9 @@
       class="max-w-[1200px] mx-auto flex items-center justify-between px-10 pr-0 h-20"
     >
       <div class="flex items-center gap-2 cursor-pointer" @click="goHome">
-        <img :src="logo" alt="logo" class="w-9 h-9 rounded-sm" />
-        <span class="text-[#02409b] text-[20px] font-bold">DeepOil</span>
+        <img :src="logo" alt="logo" class="w-9 h-9 rounded-md" />
+        <span class="text-[#02409b] text-[20px] font-bold">KERUI DEEPOIL</span>
+        <span class="text-[#828182] text-[14px]">智慧经营平台</span>
       </div>
 
       <nav class="hidden lg:flex flex-1 mx-4 ml-10 text-sm">
@@ -58,93 +59,93 @@
             <el-dropdown-menu class="notification-dropdown">
               <div class="notification-tabs pl-2">
                 <el-tabs v-model="activeTab" class="demo-tabs">
-                  <el-tab-pane label="CRM" name="messages">
+                  <el-tab-pane label="OA" name="tasks">
                     <template #label>
                       <span class="custom-tabs-label">
-                        <span>CRM</span>
+                        <span>OA</span>
                         <el-badge
-                          :value="unreadMessageCount"
+                          :value="oaUnreadCount"
                           class="item ml-1"
-                          v-if="hasUnreadMessages"
+                          v-if="oaHasUnreadCount"
                         ></el-badge>
                       </span>
                     </template>
                     <div class="tab-content">
-                      <!-- 消息中心内容 -->
                       <div>
                         <span
-                          v-if="hasUnreadMessages"
+                          v-if="oaHasUnreadCount"
                           class="cursor-pointer text-blue-500"
-                          @click="markAllAsRead"
+                          @click="oaMarkAllAsRead"
                           >全部标为已读</span
                         >
                       </div>
+                      <!-- OA消息 -->
                       <div
-                        class="message-item"
-                        v-for="(item, index) in messages"
+                        class="task-item"
+                        v-for="(task, index) in oaMessagesList"
                         :key="index"
                       >
-                        <div class="message-icon"></div>
-                        <div class="message-text">
-                          <!-- 未读就显示小红点 -->
-
-                          <p class="message-title flex items-center gap-5">
+                        <div class="task-info">
+                          <p class="task-title">
                             <span
-                              v-if="item.status === '0'"
-                              class="w-2 h-2 bg-[#f56c6c] rounded-full"
-                            ></span
-                            >{{ item.contentMajor }}
+                              v-if="task.status === '0'"
+                              class="inline-block h-2 w-2 bg-[#f56c6c] rounded-full"
+                            ></span>
+                            {{ task.title }}
                           </p>
                           <p class="message-desc">
-                            {{ timestampToDateTime(item.createTime) }}
+                            <span>{{ task.oaCreateTime }}</span>
                           </p>
                         </div>
                       </div>
-                      <div v-if="!messages.length" class="no-messages">
+                      <div v-if="!oaMessagesList.length" class="no-tasks">
                         暂无新消息
                       </div>
                     </div>
                   </el-tab-pane>
-                  <el-tab-pane label="OA" name="tasks">
+                  <el-tab-pane label="CRM" name="messages">
                     <template #label>
                       <span class="custom-tabs-label">
-                        <span>OA</span>
+                        <span>CRM</span>
                         <el-badge
-                          :value="oaUnreadCount"
+                          :value="unreadMessageCount"
                           class="item ml-1"
-                          v-if="oaHasUnreadCount"
+                          v-if="hasUnreadMessages"
                         ></el-badge>
                       </span>
                     </template>
                     <div class="tab-content">
+                      <!-- 消息中心内容 -->
                       <div>
                         <span
-                          v-if="oaHasUnreadCount"
+                          v-if="hasUnreadMessages"
                           class="cursor-pointer text-blue-500"
-                          @click="oaMarkAllAsRead"
+                          @click="markAllAsRead"
                           >全部标为已读</span
                         >
                       </div>
-                      <!-- OA消息 -->
                       <div
-                        class="task-item"
-                        v-for="(task, index) in oaMessagesList"
+                        class="message-item"
+                        v-for="(item, index) in messages"
                         :key="index"
                       >
-                        <div class="task-info">
-                          <p class="task-title">
+                        <div class="message-icon"></div>
+                        <div class="message-text">
+                          <!-- 未读就显示小红点 -->
+
+                          <p class="message-title flex items-center gap-5">
                             <span
-                              v-if="task.status === '0'"
-                              class="inline-block h-2 w-2 bg-[#f56c6c] rounded-full"
-                            ></span>
-                            {{ task.title }}
+                              v-if="item.status === '0'"
+                              class="w-2 h-2 bg-[#f56c6c] rounded-full"
+                            ></span
+                            >{{ item.contentMajor }}
                           </p>
                           <p class="message-desc">
-                            <span>{{ task.oaCreateTime }}</span>
+                            {{ timestampToDateTime(item.createTime) }}
                           </p>
                         </div>
                       </div>
-                      <div v-if="!oaMessagesList.length" class="no-tasks">
+                      <div v-if="!messages.length" class="no-messages">
                         暂无新消息
                       </div>
                     </div>
@@ -309,93 +310,93 @@
             <el-dropdown-menu class="notification-dropdown">
               <div class="notification-tabs pl-2">
                 <el-tabs v-model="activeTab" class="demo-tabs">
-                  <el-tab-pane label="CRM" name="messages">
+                  <el-tab-pane label="OA" name="tasks">
                     <template #label>
                       <span class="custom-tabs-label">
-                        <span>CRM</span>
+                        <span>OA</span>
                         <el-badge
-                          :value="unreadMessageCount"
+                          :value="oaUnreadCount"
                           class="item ml-1"
-                          v-if="hasUnreadMessages"
+                          v-if="oaHasUnreadCount"
                         ></el-badge>
                       </span>
                     </template>
                     <div class="tab-content">
-                      <!-- 消息中心内容 -->
                       <div>
                         <span
-                          v-if="hasUnreadMessages"
+                          v-if="oaHasUnreadCount"
                           class="cursor-pointer text-blue-500"
-                          @click="markAllAsRead"
+                          @click="oaMarkAllAsRead"
                           >全部标为已读</span
                         >
                       </div>
+                      <!-- OA消息 -->
                       <div
-                        class="message-item"
-                        v-for="(item, index) in messages"
+                        class="task-item"
+                        v-for="(task, index) in oaMessagesList"
                         :key="index"
                       >
-                        <div class="message-icon"></div>
-                        <div class="message-text">
-                          <!-- 未读就显示小红点 -->
-
-                          <p class="message-title flex items-center gap-5">
+                        <div class="task-info">
+                          <p class="task-title">
                             <span
-                              v-if="item.status === '0'"
-                              class="w-2 h-2 bg-[#f56c6c] rounded-full"
-                            ></span
-                            >{{ item.contentMajor }}
+                              v-if="task.status === '0'"
+                              class="inline-block h-2 w-2 bg-[#f56c6c] rounded-full"
+                            ></span>
+                            {{ task.title }}
                           </p>
                           <p class="message-desc">
-                            {{ timestampToDateTime(item.createTime) }}
+                            <span>{{ task.oaCreateTime }}</span>
                           </p>
                         </div>
                       </div>
-                      <div v-if="!messages.length" class="no-messages">
+                      <div v-if="!oaMessagesList.length" class="no-tasks">
                         暂无新消息
                       </div>
                     </div>
                   </el-tab-pane>
-                  <el-tab-pane label="OA" name="tasks">
+                  <el-tab-pane label="CRM" name="messages">
                     <template #label>
                       <span class="custom-tabs-label">
-                        <span>OA</span>
+                        <span>CRM</span>
                         <el-badge
-                          :value="oaUnreadCount"
+                          :value="unreadMessageCount"
                           class="item ml-1"
-                          v-if="oaHasUnreadCount"
+                          v-if="hasUnreadMessages"
                         ></el-badge>
                       </span>
                     </template>
                     <div class="tab-content">
+                      <!-- 消息中心内容 -->
                       <div>
                         <span
-                          v-if="oaHasUnreadCount"
+                          v-if="hasUnreadMessages"
                           class="cursor-pointer text-blue-500"
-                          @click="oaMarkAllAsRead"
+                          @click="markAllAsRead"
                           >全部标为已读</span
                         >
                       </div>
-                      <!-- OA消息 -->
                       <div
-                        class="task-item"
-                        v-for="(task, index) in oaMessagesList"
+                        class="message-item"
+                        v-for="(item, index) in messages"
                         :key="index"
                       >
-                        <div class="task-info">
-                          <p class="task-title">
+                        <div class="message-icon"></div>
+                        <div class="message-text">
+                          <!-- 未读就显示小红点 -->
+
+                          <p class="message-title flex items-center gap-5">
                             <span
-                              v-if="task.status === '0'"
-                              class="inline-block h-2 w-2 bg-[#f56c6c] rounded-full"
-                            ></span>
-                            {{ task.title }}
+                              v-if="item.status === '0'"
+                              class="w-2 h-2 bg-[#f56c6c] rounded-full"
+                            ></span
+                            >{{ item.contentMajor }}
                           </p>
                           <p class="message-desc">
-                            <span>{{ task.oaCreateTime }}</span>
+                            {{ timestampToDateTime(item.createTime) }}
                           </p>
                         </div>
                       </div>
-                      <div v-if="!oaMessagesList.length" class="no-tasks">
+                      <div v-if="!messages.length" class="no-messages">
                         暂无新消息
                       </div>
                     </div>

+ 119 - 40
src/views/index.vue

@@ -137,28 +137,51 @@
           >
             <div class="side-card__header w-[91%] ml-[15px]">
               <div class="notice-badge px-2">{{ todoPanelTitle }}</div>
-              <button type="button" class="side-card__more">全部任务</button>
+              <button
+                type="button"
+                class="side-card__more"
+                @click="router.push('/todo-list')"
+              >
+                全部任务
+              </button>
             </div>
             <div class="space-y-2 p-4 pt-2">
+              <div
+                v-if="!userStore.getUser.username"
+                class="flex h-full items-center justify-center"
+              >
+                <div class="text-[#8a9ab0] pt-10">登录后查看</div>
+              </div>
+
+              <div
+                v-if="!oaTasks.length && userStore.getUser.username"
+                class="flex h-full items-center justify-center"
+              >
+                <div class="text-[#8a9ab0]">暂无数据</div>
+              </div>
+
               <article
-                v-for="task in todoTasks"
-                :key="task.title"
-                class="todo-item rounded-md"
+                v-if="userStore.getUser.username"
+                v-for="task in oaTasks"
+                :key="task.requestId"
+                @click="handleTask(task)"
+                class="todo-item rounded-md cursor-pointer"
               >
                 <div class="flex min-w-0 items-start justify-between gap-3">
                   <div class="min-w-0">
                     <div
                       class="truncate text-[14px] font-semibold text-[#0d4a9d]"
                     >
-                      {{ task.title }}
+                      {{ task.requestName }}
                     </div>
                     <div class="mt-1 text-[12px] text-[#8a9ab0]">
-                      {{ task.meta }}
+                      创建人:{{ task.creatorName }} · {{ task.createTime }}
                     </div>
                   </div>
-                  <span :class="['todo-item__tag', task.tagClass]">{{
-                    task.tag
-                  }}</span>
+                  <span
+                    :class="['todo-item__tag', getTagClass(task.requesLevel)]"
+                    >{{ getTagName(task.requesLevel) }}</span
+                  >
                 </div>
               </article>
             </div>
@@ -232,7 +255,13 @@ import Footer from "@components/home/Footer.vue";
 import { useRouter } from "vue-router";
 import axios from "axios";
 import { Icon } from "@iconify/vue";
-import { getMCSsoToken, ssoLogin, zentaoSsoLogin } from "@/api/user";
+import { ElLoading } from "element-plus";
+import {
+  getMCSsoToken,
+  ssoLogin,
+  zentaoSsoLogin,
+  getOATasks,
+} from "@/api/user";
 import { useUserStore } from "@/stores/useUserStore";
 import { getAccessToken } from "@/utils/auth";
 import banner1 from "@/assets/images/banner1.png";
@@ -414,12 +443,6 @@ const nextSlide = () => {
   currentIndex.value = (currentIndex.value + 1) % slides.value.length;
 };
 
-// 上一页
-const prevSlide = () => {
-  currentIndex.value =
-    (currentIndex.value - 1 + slides.value.length) % slides.value.length;
-};
-
 const notices: NoticeItem[] = [
   {
     title: "集团总部关于办公楼设备维保的说明",
@@ -431,27 +454,6 @@ const notices: NoticeItem[] = [
   },
 ];
 
-const todoTasks: TodoTask[] = [
-  {
-    title: "项目立项审批 - QHSE 升级",
-    meta: "发起人:李智慧 · 2小时前",
-    tag: "紧急",
-    tagClass: "bg-[#ffe1e3] text-[#ff5d66]",
-  },
-  {
-    title: "合同会签 - 油服工程中心",
-    meta: "发起人:王志刚 · 4小时前",
-    tag: "普通",
-    tagClass: "bg-[#dbe8ff] text-[#3f74ff]",
-  },
-  {
-    title: "报销单待审批",
-    meta: "来自:财务管理系统 · 昨天",
-    tag: "待办",
-    tagClass: "bg-[#dfe8f3] text-[#6f7f94]",
-  },
-];
-
 const newsList: NewsItem[] = [
   {
     title: "科瑞石油成功交付首套自动化钻机",
@@ -470,8 +472,6 @@ const newsList: NewsItem[] = [
   },
 ];
 
-const sidePanels: SidePanel[] = [];
-
 const protectedOpen = (url: string) => {
   if (userStore.getUser.username && getAccessToken()) {
     window.open(url, "_blank");
@@ -616,11 +616,90 @@ function dingTalkAutoLogin() {
   }
 }
 
-onMounted(() => {
+const getTagClass = (tag: string) => {
+  return tag === "0"
+    ? "bg-[#dbe8ff] text-[#3f74ff]"
+    : tag === "1"
+      ? "bg-[#ffe1e3] text-[#ff5d66]"
+      : tag === "2"
+        ? "bg-[#dfe8f3] text-[#6f7f94]"
+        : "bg-[#dbe8ff] text-[#3f74ff]";
+};
+
+const getTagName = (tag: string) => {
+  return tag === "0"
+    ? "正常"
+    : tag === "1"
+      ? "重要"
+      : tag === "2"
+        ? "紧急"
+        : "正常";
+};
+
+let oaTasks = ref([]);
+onMounted(async () => {
   dingTalkAutoLogin();
   slideTimer = setInterval(nextSlide, 5000);
+
+  if (userStore.getUser.username) {
+    try {
+      const res = await getOATasks({
+        id: userStore.getUser.username,
+        pageNum: 1,
+        pageSize: 10,
+      });
+      oaTasks.value = res.todoList.slice(0, 3);
+    } finally {
+    }
+  }
 });
 
+const handleTask = async (row) => {
+  const res = await ssoLogin({
+    username: userStore.getUser.username,
+  });
+
+  if (res) {
+    const ua = window.navigator.userAgent.toLowerCase();
+    if (ua.includes("dingtalk") || ua.includes("dingtalkwork")) {
+      dd.biz.util.openLink({
+        url:
+          "https://yfoa.keruioil.com/wui/index.html" +
+          "?ssoToken=" +
+          res +
+          "#/main", // 先跳你的 SSO 链接
+        onSuccess: () => {
+          // 延迟跳目标业务地址(和你原来 setTimeout 逻辑一致)
+          setTimeout(() => {
+            dd.biz.util.openLink({
+              url: `https://yfoa.keruioil.com/spa/workflow/static4form/index.html?_rdm=1776063595284#/main/workflow/req?requestid=${row.requestId}`,
+            });
+          }, 100);
+        },
+      });
+    } else {
+      const loading = ElLoading.service({
+        lock: true,
+        text: "正在跳转,请稍候...",
+        background: "rgba(0, 0, 0, 0.7)",
+      });
+      const newTab = window.open("", "_blank");
+      newTab.location.href =
+        "https://yfoa.keruioil.com/wui/index.html" +
+        "?ssoToken=" +
+        res +
+        "#/main";
+
+      setTimeout(function () {
+        newTab.location.href = `https://yfoa.keruioil.com/spa/workflow/static4form/index.html?_rdm=1776063595284#/main/workflow/req?requestid=${row.requestId}`;
+        setTimeout(() => {
+          loading.close();
+        }, 500);
+      }, 100);
+    }
+  }
+};
+
 onUnmounted(() => {
   if (slideTimer) {
     clearInterval(slideTimer);