Browse Source

1.登录工位类型。2.用户信息展示。3预齐套创建.

jiaxiaoqiang 1 year ago
parent
commit
903ca377e4

+ 1 - 0
src/api/user/types.ts

@@ -3,6 +3,7 @@
  */
 export interface UserInfo {
   userId?: number;
+  station?: string; //工位
   username?: string;
   nickname?: string;
   avatar?: string;

+ 35 - 22
src/layout/components/header.vue

@@ -1,7 +1,12 @@
 <template>
   <div class="commonHeader">
     <div style="width: 155px">
-      <svg-icon v-if="routeMeta.back" icon-class="back" size="48" @click="commonBack" />
+      <svg-icon
+        v-if="routeMeta.back"
+        icon-class="back"
+        size="48"
+        @click="commonBack"
+      />
       <svg-icon v-else icon-class="LOGO" style="height: 48px; width: 155px" />
     </div>
     <div v-if="routeMeta.back && routeMeta.title" class="middle-title">
@@ -14,22 +19,36 @@
     <div>
       <el-space>
         <div class="task">
-          <el-progress :percentage="processCount" :show-text="false" :stroke-width="10" />
+          <el-progress
+            :percentage="processCount"
+            :show-text="false"
+            :stroke-width="10"
+          />
           <div class="process">任务进度: {{ processCount }}%</div>
         </div>
         <div>
-          <div class="name">name</div>
-          <div class="work">gongwei</div>
+          <div class="name">{{ userStore.user.username }}</div>
+          <div class="work">{{ userStore.user.station }}</div>
         </div>
-
-        <el-dropdown ref="dropdown1" trigger="contextmenu" @command="handleCommand">
-          <img v-if="headUrl" :src="headUrl" alt="" @click="showClick" />
+        <el-dropdown
+          ref="dropdown1"
+          trigger="contextmenu"
+          @command="handleCommand"
+        >
+          <img
+            v-if="userStore.user.avatar"
+            :alt="userStore.user.avatar"
+            :src="userStore.user.avatar"
+            object-fit="cover"
+            style="width: 48px; height: 48px; border-radius: 24px"
+            @click="showClick"
+          />
           <svg-icon v-else icon-class="head" size="48" @click="showClick" />
           <template #dropdown>
             <el-dropdown-menu style="width: 150px">
-              <el-dropdown-item command="a">Action 1</el-dropdown-item>
-              <el-dropdown-item command="b" divided>退出登录</el-dropdown-item>
-              <el-dropdown-item command="c" divided>Action 3</el-dropdown-item>
+              <!--              <el-dropdown-item command="a">Action 1</el-dropdown-item>-->
+              <el-dropdown-item command="b">退出登录</el-dropdown-item>
+              <!--              <el-dropdown-item command="c" divided>Action 3</el-dropdown-item>-->
             </el-dropdown-menu>
           </template>
         </el-dropdown>
@@ -42,6 +61,9 @@
 import dayjs from "dayjs";
 import type { DropdownInstance } from "element-plus";
 import { logoutApi } from "@/api/auth";
+import { useUserStore } from "@/store";
+
+const userStore = useUserStore();
 
 const router = useRouter();
 const route = useRoute();
@@ -94,12 +116,12 @@ const handleCommand = (command: string | number | object) => {
 <style lang="scss" scoped>
 :deep(.el-dropdown-menu__item) {
   height: 60px;
-}
-
-:deep(.el-dropdown-menu__item) {
   display: flex;
   align-items: center;
   justify-content: center;
+  font-weight: 500;
+  font-size: 24px;
+  color: rgba(0, 0, 0, 0.9);
 }
 
 .commonHeader {
@@ -172,13 +194,4 @@ const handleCommand = (command: string | number | object) => {
     margin-top: 8px;
   }
 }
-
-//:deep(.el-dropdown-menu__item) {
-//  width: 200px;
-//  height: 80px;
-//  font-weight: 500;
-//  font-size: 24px;
-//  color: rgba(0, 0, 0, 0.9);
-//  text-align: center;
-//}
 </style>

+ 18 - 0
src/router/modules/prepare.ts

@@ -0,0 +1,18 @@
+const Layout = () => import("@/layout/index.vue");
+export default {
+  path: "/prepare",
+  name: "prepare",
+  component: Layout,
+  redirect: "/prepare/main",
+  children: [
+    {
+      path: "main",
+      component: () => import("@/views/prepare-complete-suit/index.vue"),
+      name: "PrepareMain",
+      meta: {
+        title: "预齐套",
+        icon: "homepage",
+      },
+    },
+  ],
+};

+ 87 - 80
src/store/modules/user.ts

@@ -6,95 +6,102 @@ import { store } from "@/store";
 import { LoginData } from "@/api/auth/types";
 import { UserInfo } from "@/api/user/types";
 
-export const useUserStore = defineStore("user", () => {
-  const user = ref<UserInfo>({
-    roles: [],
-    perms: [],
-  });
+export const useUserStore = defineStore(
+  "user",
+  () => {
+    const user = ref<UserInfo>({
+      roles: [],
+      perms: [],
+    });
 
-  const isGetAuth = ref(false); //是否已经请求过auth接口活的role和menus了
+    const isGetAuth = ref(false); //是否已经请求过auth接口活的role和menus了
 
-  /**
-   * 登录
-   *
-   * @param {LoginData}
-   * @returns
-   */
-  function login(loginData: LoginData) {
-    return new Promise<void>((resolve, reject) => {
-      loginApi(loginData)
-        .then((response) => {
-          // const { tokenType, accessToken } = response.data;
-          // localStorage.setItem("token", tokenType + " " + accessToken); // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx
-          localStorage.setItem("token", response.data + "");
-          resolve();
-        })
-        .catch((error) => {
-          reject(error);
-        });
-    });
-  }
+    /**
+     * 登录
+     *
+     * @param {LoginData}
+     * @returns
+     */
+    function login(loginData: LoginData) {
+      return new Promise<void>((resolve, reject) => {
+        loginApi(loginData)
+          .then((response) => {
+            getUserInfo();
+            // const { tokenType, accessToken } = response.data;
+            // localStorage.setItem("token", tokenType + " " + accessToken); // Bearer eyJhbGciOiJIUzI1NiJ9.xxx.xxx
+            localStorage.setItem("token", response.data + "");
+            resolve();
+          })
+          .catch((error) => {
+            reject(error);
+          });
+      });
+    }
 
-  // 获取信息(用户昵称、头像、角色集合、权限集合)
-  function getUserInfo() {
-    return new Promise<any>((resolve, reject) => {
-      getUserInfoApi()
-        .then(({ data }) => {
-          if (!data) {
-            reject("Verification failed, please Login again.");
-            return;
-          }
-          user.value.userId = data.id;
-          user.value.username = data.userName;
-          user.value.roles = data.roles;
-          user.value.deptId = data.deptId;
+    // 获取信息(用户昵称、头像、角色集合、权限集合)
+    function getUserInfo() {
+      return new Promise<any>((resolve, reject) => {
+        getUserInfoApi()
+          .then(({ data }) => {
+            if (!data) {
+              reject("Verification failed, please Login again.");
+              return;
+            }
+            user.value.avatar =
+              import.meta.env.VITE_APP_UPLOAD_URL + "/" + data.avatar;
+            user.value.userId = data.id;
+            user.value.username = data.userName;
+            user.value.roles = data.roles;
+            user.value.deptId = data.deptId;
 
-          isGetAuth.value = true;
+            isGetAuth.value = true;
 
-          user.value.perms = data.permissions ?? [];
+            user.value.perms = data.permissions ?? [];
 
-          resolve(data);
-        })
-        .catch((error) => {
-          reject(error);
-        });
-    });
-  }
+            resolve(data);
+          })
+          .catch((error) => {
+            reject(error);
+          });
+      });
+    }
 
-  // user logout
-  function logout() {
-    return new Promise<void>((resolve, reject) => {
-      logoutApi()
-        .then(() => {
-          localStorage.setItem("token", "");
-          location.reload(); // 清空路由
-          resolve();
-        })
-        .catch((error) => {
-          reject(error);
-        });
-    });
-  }
+    // user logout
+    function logout() {
+      return new Promise<void>((resolve, reject) => {
+        logoutApi()
+          .then(() => {
+            localStorage.setItem("token", "");
+            location.reload(); // 清空路由
+            resolve();
+          })
+          .catch((error) => {
+            reject(error);
+          });
+      });
+    }
 
-  // remove token
-  function resetToken() {
-    console.log("resetToken");
-    return new Promise<void>((resolve) => {
-      localStorage.setItem("token", "");
-      resetRouter();
-      resolve();
-    });
-  }
+    // remove token
+    function resetToken() {
+      console.log("resetToken");
+      return new Promise<void>((resolve) => {
+        localStorage.setItem("token", "");
+        resetRouter();
+        resolve();
+      });
+    }
 
-  return {
-    user,
-    login,
-    getUserInfo,
-    logout,
-    resetToken,
-    isGetAuth,
-  };
-});
+    return {
+      user,
+      login,
+      getUserInfo,
+      logout,
+      resetToken,
+      isGetAuth,
+    };
+  },
+  { persist: true }
+);
 
 // 非setup
 export function useUserStoreHook() {

+ 30 - 16
src/views/login/index.vue

@@ -115,6 +115,7 @@
               class="no-border"
               placeholder="请选择工位"
               size="large"
+              @change="onStationChange"
             >
               <el-option
                 v-for="item in stationList"
@@ -154,11 +155,11 @@ import {
   stationListByCode,
 } from "@/api/auth";
 import { LoginData } from "@/api/auth/types";
-import { LocationQuery, LocationQueryValue, useRoute } from "vue-router";
-import router from "@/router";
+import { useRoute } from "vue-router";
 import defaultSettings from "@/settings";
 import { ThemeEnum } from "@/enums/ThemeEnum";
 import { watch } from "vue";
+import router from "@/router";
 // Stores
 const userStore = useUserStore();
 const settingsStore = useSettingsStore();
@@ -236,6 +237,16 @@ const loginRules = computed?.(() => {
   };
 });
 
+let stationType = ""; //工位类型
+let stationName = ""; //工位名称
+const onStationChange = (val: any) => {
+  const stationArray = stationList.value.filter((item: any) => {
+    return item.id === val;
+  });
+  stationType = stationArray[0].stationDictValue;
+  stationName = stationArray[0].name;
+};
+
 /**
  * 获取验证码
  */
@@ -266,22 +277,23 @@ function handleLogin() {
       loading.value = true;
       userStore
         .login(loginData.value)
-        .then(async () => {
-          const query: LocationQuery = route.query;
-          const redirect = (query.redirect as LocationQueryValue) ?? "/";
-          const otherQueryParams = Object.keys(query).reduce(
-            (acc: any, cur: string) => {
-              if (cur !== "redirect") {
-                acc[cur] = query[cur];
-              }
-              return acc;
-            },
-            {}
-          );
-          router.push({ path: redirect, query: otherQueryParams });
+        .then(() => {
+          userStore.user.station = stationName;
+          console.log("stationType", stationType);
+          // 捡选 装配 测试 维修站 预齐套
+          if (stationType == "1") {
+            router.replace({ name: "StorageMain" });
+          } else if (stationType == "2" || stationType == "3") {
+            router.replace({ name: "ProcessMain" });
+          } else if (stationType == "4") {
+            router.replace({ name: "RepairMain" });
+          } else if (stationType == "5") {
+            router.replace({ name: "PrepareMain" });
+          }
         })
         .catch(() => {
           // getCaptcha();
+
           console.log("catch");
         })
         .finally(() => {
@@ -317,8 +329,10 @@ watch(
     if (newValue) {
       stationListByCode(newValue).then((data: any) => {
         stationList.value = data.data;
-        if (stationList.value) {
+        if (stationList.value && stationList.value.length > 0) {
           loginData.value.stationId = stationList.value[0].id;
+          stationType = stationList.value[0].stationDictValue;
+          stationName = stationList.value[0].name;
         }
       });
     }

+ 7 - 0
src/views/prepare-complete-suit/index.vue

@@ -0,0 +1,7 @@
+<template>
+  <div>src/views/perpair-complete-suit /index预齐套</div>
+</template>
+
+<script lang="ts" setup></script>
+
+<style lang="scss" scoped></style>

+ 3 - 3
src/views/pro-operation/report-work/index.vue

@@ -15,7 +15,7 @@
         <div id="drawContent">
           <el-form
             ref="formRef"
-            disabled
+            :disabled="formDisabled"
             label-position="left"
             label-width="auto"
             size="large"
@@ -60,7 +60,7 @@
                 </el-form-item>
               </el-col>
               <el-col :span="4">
-                <div v-if="formDisabled" class="right-btns">
+                <div v-if="!formDisabled" class="right-btns">
                   <CirclePlus
                     class="icon-btn"
                     @click="
@@ -125,7 +125,7 @@ const openReportWorkDrawer = () => {
     processStore.scanInfo.currentState = res.data.currentState;
     if (res.data.currentState !== "start") {
       ElMessage.warning("当前工单状态不允许报工");
-      // formDisabled.value = true;
+      formDisabled.value = true;
       // reportWorkList(processStore.scanInfo.id).then((res) => {
       //   persons.value = res.data || [];
       // });