Browse Source

修改配置并完善产品库功能及修改系统名称

yangg 6 months ago
parent
commit
dede8be3be

+ 6 - 3
ui/.env.development

@@ -1,11 +1,14 @@
 # 页面标题
-VUE_APP_TITLE = 瑞赢科技管理系统
+VUE_APP_TITLE = GQY管理系统
 
 # 开发环境配置
 ENV = 'development'
 
-# 瑞赢科技管理系统/开发环境
-VUE_APP_BASE_API = 'http://192.168.1.102:8885'
+# GQY管理系统/开发环境
+#线上:http://120.46.190.49:8885
+#线下:http://192.168.1.102:8885
+VUE_APP_BASE_API = 'http://192.168.66.163:8885'
+
 
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true

+ 2 - 2
ui/.env.production

@@ -1,8 +1,8 @@
 # 页面标题
-VUE_APP_TITLE = 瑞赢科技管理系统
+VUE_APP_TITLE = GQY管理系统
 
 # 生产环境配置
 ENV = 'production'
 
-# 瑞赢科技管理系统/生产环境
+# GQY管理系统/生产环境
 VUE_APP_BASE_API = '/prod-api'

+ 2 - 2
ui/.env.staging

@@ -1,10 +1,10 @@
 # 页面标题
-VUE_APP_TITLE = 瑞赢科技管理系统
+VUE_APP_TITLE = GQY管理系统
 
 NODE_ENV = production
 
 # 测试环境配置
 ENV = 'staging'
 
-# 瑞赢科技管理系统/测试环境
+# GQY管理系统/测试环境
 VUE_APP_BASE_API = '/stage-api'

+ 1 - 1
ui/package.json

@@ -1,7 +1,7 @@
 {
   "name": "ruoyi",
   "version": "3.8.8",
-  "description": "瑞赢科技管理系统",
+  "description": "GQY管理系统",
   "author": "瑞赢科技",
   "license": "MIT",
   "scripts": {

BIN
ui/public/favicon.ico


BIN
ui/public/favicon1.ico


+ 8 - 0
ui/src/api/ProductMent/specMent.js

@@ -26,4 +26,12 @@ export function specList(query) {
       method: 'post',
       data
     })
+  }
+
+  /* 删除规格 */
+  export function deleteSpec(data) {
+    return request({
+      url: `/spec/delete/${data}`,
+      method: 'get'
+    })
   }

+ 9 - 0
ui/src/api/sysCategory/sysCategory.js

@@ -28,4 +28,13 @@ export function update(data) {
     method: 'post',
     data: data
   })
+}
+
+/* 系统类别删除 */
+
+export function deleSys(query) {
+  return request({
+    url: `/dcsystem/dele/${query}`,
+    method: 'get'
+  })
 }

+ 19 - 2
ui/src/api/worksCategory/worksCategory.js

@@ -2,7 +2,7 @@
 import request from '@/utils/request'
 import { parseStrEmpty } from "@/utils/ruoyi";
 
-
+/* 工程管理新增 */
 export function addWork(data) {
     return request({
       url: '/work/add',
@@ -12,7 +12,7 @@ export function addWork(data) {
   }
 
 
-
+/* 工程管理列表 */
 export function listWork(query) {
   return request({
     url: '/work/list',
@@ -20,3 +20,20 @@ export function listWork(query) {
     params: query
   })
 }
+/* 工程管理编辑 */
+export function updateWork(data) {
+  return request({
+    url: '/work/update',
+    method: 'post',
+    data: data
+  })
+}
+
+/* 工程管理 删除 /dele/{wkId} */
+
+export function deleteWork(query) {
+  return request({
+    url: `/work/dele/${query}`,
+    method: 'get'
+  })
+}

BIN
ui/src/assets/images/login_background.jpg


BIN
ui/src/assets/logo/GQY_logo.png


BIN
ui/src/assets/logo/GQY_logo1.png


+ 5 - 4
ui/src/layout/components/Sidebar/Logo.vue

@@ -3,18 +3,18 @@
     <transition name="sidebarLogoFade">
       <router-link v-if="collapse" key="collapse" class="sidebar-logo-link" to="/">
         <img v-if="logo" :src="logo" class="sidebar-logo" />
-        <h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
+       <!--  <h1 v-else class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1> -->
       </router-link>
       <router-link v-else key="expand" class="sidebar-logo-link" to="/">
-        <img v-if="logo" :src="logo" class="sidebar-logo" />
-        <h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1>
+        <img v-if="logo" :src="logo" class="sidebar-logo" style="width: 80px;height: 40px;" />
+       <!--  <h1 class="sidebar-title" :style="{ color: sideTheme === 'theme-dark' ? variables.logoTitleColor : variables.logoLightTitleColor }">{{ title }} </h1> -->
       </router-link>
     </transition>
   </div>
 </template>
 
 <script>
-import logoImg from '@/assets/logo/logo.png'
+import logoImg from '@/assets/logo/GQY_logo1.png'
 import variables from '@/assets/styles/variables.scss'
 
 export default {
@@ -53,6 +53,7 @@ export default {
 }
 
 .sidebar-logo-container {
+  margin-top: 5px;
   position: relative;
   width: 100%;
   height: 50px;

+ 113 - 62
ui/src/views/ProductMent/specMent/index.vue

@@ -5,24 +5,18 @@
       <el-form :inline="true" :model="searchForm" class="search-form">
         <el-form-item label="规格编号">
           <el-input
-            v-model="searchForm.pa_no"
+            v-model="searchForm.ps_no"
             placeholder="规格编号"
-            style="width: 150px"
           ></el-input>
         </el-form-item>
         <el-form-item label="规格名称">
           <el-input
             v-model="searchForm.ps_name"
             placeholder="规格名称"
-            style="width: 150px"
           ></el-input>
         </el-form-item>
-        <!-- <el-form-item label="规格类型">
-          <el-select
-            v-model="searchForm.specType"
-            placeholder="规格类型"
-            style="width: 150px"
-          >
+        <el-form-item label="规格类型">
+          <el-select v-model="searchForm.psp_name" placeholder="规格类型">
             <el-option label="全部" value=""></el-option>
             <el-option label="输入" value="输入"></el-option>
             <el-option label="单选" value="单选"></el-option>
@@ -30,48 +24,51 @@
           </el-select>
         </el-form-item>
         <el-form-item label="所属分类">
-          <el-select
-            v-model="searchForm.category"
-            placeholder="所属分类"
-            style="width: 150px"
-          >
+          <el-select v-model="searchForm.ps_category" placeholder="所属���类">
             <el-option label="全部" value=""></el-option>
-            <el-option label="LCD,LED" value="LCD,LED"></el-option>
+            <el-option label="LED" value="LED"></el-option>
+            <el-option label="LCD" value="LCD"></el-option>
             <el-option label="DLP" value="DLP"></el-option>
           </el-select>
-        </el-form-item> -->
+        </el-form-item>
         <el-form-item>
-          <el-button type="primary" @click="handleSearch">搜索</el-button>
-          <el-button @click="resetSearch">重置</el-button>
+          <el-button type="primary" icon="el-icon-search" @click="handleSearch"
+            >搜索</el-button
+          >
+          <el-button icon="el-icon-refresh" @click="resetSearch"
+            >重置</el-button
+          >
         </el-form-item>
       </el-form>
     </div>
     <el-button type="primary" @click="handleAdd">新建规格</el-button>
     <!-- 表格区域 -->
     <el-table :data="tableData" style="width: 100%; margin-top: 20px">
-      <el-table-column prop="pa_no" label="规格编号"></el-table-column>
+      <el-table-column prop="ps_no" label="规格编号"></el-table-column>
       <el-table-column prop="ps_name" label="规格名称"></el-table-column>
-      <!-- <el-table-column prop="specType" label="规格值类型" width="120">
+      <el-table-column prop="psp_name" label="规格值类型" width="120">
         <template slot-scope="scope">
           <el-tag
+            v-if="scope.row.psp_name"
             :type="
-              scope.row.specType === '输入'
+              scope.row.psp_name === '输入'
                 ? 'primary'
-                : scope.row.specType === '单选'
+                : scope.row.psp_name === '单选'
                 ? 'success'
                 : 'warning'
             "
           >
-            {{ scope.row.specType }}
+            {{ scope.row.psp_name }}
           </el-tag>
+          <span v-else ></span>
         </template>
       </el-table-column>
       <el-table-column
-        prop="specValue"
+        prop="psp_value"
         label="规格值"
         width="180"
       ></el-table-column>
-      <el-table-column prop="category" label="所属分类"></el-table-column> -->
+      <el-table-column prop="ps_category" label="所属分类"></el-table-column>
       <el-table-column label="操作" width="250">
         <template slot-scope="scope">
           <el-button size="mini" @click="handleView(scope.row)">查看</el-button>
@@ -101,33 +98,33 @@
     <!-- 新增/编辑对话框 -->
     <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
       <el-form :model="form" :rules="rules" ref="form" label-width="100px">
-        <el-form-item label="规格编号" prop="pa_no">
-          <el-input v-model="form.pa_no"></el-input>
+        <el-form-item label="规格编号" prop="ps_no">
+          <el-input v-model="form.ps_no"></el-input>
         </el-form-item>
         <el-form-item label="规格名称" prop="ps_name">
           <el-input v-model="form.ps_name"></el-input>
         </el-form-item>
-        <!--  <el-form-item label="规格值类型" prop="specType">
-          <el-select v-model="form.specType" style="width: 100%">
+        <el-form-item label="规格值类型" prop="psp_name">
+          <el-select v-model="form.psp_name" style="width: 100%">
             <el-option label="输入" value="输入"></el-option>
             <el-option label="单选" value="单选"></el-option>
             <el-option label="复选" value="复选"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="规格值" prop="specValue">
+        <el-form-item label="规格值" prop="psp_value">
           <el-input
-            v-model="form.specValue"
+            v-model="form.psp_value"
             type="textarea"
             placeholder="多个值请用逗号分隔"
           ></el-input>
         </el-form-item>
-        <el-form-item label="所属分类" prop="category">
-          <el-select v-model="form.category" style="width: 100%">
+        <el-form-item label="所属分类" prop="ps_category">
+          <el-select v-model="form.ps_category" style="width: 100%">
             <el-option label="全部" value="全部"></el-option>
             <el-option label="LCD,LED" value="LCD,LED"></el-option>
             <el-option label="DLP" value="DLP"></el-option>
           </el-select>
-        </el-form-item> -->
+        </el-form-item>
       </el-form>
       <div slot="footer">
         <el-button @click="dialogVisible = false">取 消</el-button>
@@ -143,7 +140,7 @@
     >
       <el-descriptions :column="1" border>
         <el-descriptions-item label="规格编号">{{
-          viewForm.pa_no
+          viewForm.ps_no
         }}</el-descriptions-item>
         <el-descriptions-item label="规格名称">{{
           viewForm.ps_name
@@ -162,6 +159,7 @@ import {
   addSpec,
   updateSpec,
   getSpecDetail,
+  deleteSpec,
 } from "@/api/ProductMent/specMent";
 
 export default {
@@ -169,10 +167,10 @@ export default {
   data() {
     return {
       searchForm: {
-        pa_no: "",
+        ps_no: "",
         ps_name: "",
-        /*  specType: "",
-        category: "", */
+        psp_name: "",
+        ps_category: "",
         pageNum: 1,
         pageSize: 10,
       },
@@ -185,24 +183,24 @@ export default {
       dialogVisible: false,
       dialogTitle: "",
       form: {
-        pa_no: "",
+        ps_no: "",
         ps_name: "",
-        /*  specType: "",
-        specValue: "",
-        category: "", */
+        psp_name: "",
+        psp_value: "",
+        ps_category: "",
       },
       rules: {
-        pa_no: [{ required: true, message: "请输入规格编号", trigger: "blur" }],
+        ps_no: [{ required: true, message: "请输入规格编号", trigger: "blur" }],
         ps_name: [
           { required: true, message: "请输入规格名称", trigger: "blur" },
         ],
-        specType: [
+        psp_name: [
           { required: true, message: "请选择规格值类型", trigger: "change" },
         ],
       },
       viewDialogVisible: false,
       viewForm: {
-        pa_no: "",
+        ps_no: "",
         ps_name: "",
       },
     };
@@ -215,10 +213,10 @@ export default {
 
     resetSearch() {
       this.searchForm = {
-        pa_no: "",
+        ps_no: "",
         ps_name: "",
-        /* specType: "",
-        category: "", */
+        psp_name: "",
+        ps_category: "",
         pageNum: 1,
         pageSize: this.pagination.pageSize,
       };
@@ -229,48 +227,101 @@ export default {
     handleAdd() {
       this.dialogTitle = "新增规格";
       this.form = {
-        pa_no: "",
+        ps_no: "",
         ps_name: "",
-        /* specType: "",
-        specValue: "",
-        category: "", */
+        psp_name: "",
+        psp_value: "",
+        ps_category: "",
       };
       this.dialogVisible = true;
     },
     handleEdit(row) {
       this.dialogTitle = "编辑规格";
       this.form = {
-        ps_id:row.ps_id,
-        pa_no: row.pa_no,
+        ps_id: row.ps_id,
+        ps_no: row.ps_no,
         ps_name: row.ps_name,
       };
       this.dialogVisible = true;
     },
     handleDelete(row) {
-      this.$confirm("确认删除该规格?", "提示", {
+      // 删除确认对话框
+      this.$confirm("此操作将永久删除该规格,是否继续?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
         type: "warning",
       })
-        .then(() => {
-          deleteSpec(row.pa_no).then((res) => {
+        .then(async () => {
+          // 使用 async/await 处理异步操作
+          try {
+            // 显示加载中
+            const loading = this.$loading({
+              lock: true,
+              text: "删除中...",
+              spinner: "el-icon-loading",
+              background: "rgba(0, 0, 0, 0.7)",
+            });
+
+            // 确保 row.ps_id 存在
+            if (!row.ps_id) {
+              throw new Error("规格ID不存在");
+            }
+
+            const res = await deleteSpec(row.ps_id);
+            loading.close();
+
             if (res.code === 200) {
-              this.$message.success("删除成功");
+              this.$message({
+                type: "success",
+                message: "删除成功!",
+              });
+
+              // 处理删除后的页面更新逻辑
               if (
                 this.tableData.length === 1 &&
                 this.pagination.currentPage > 1
               ) {
-                this.pagination.currentPage -= 1;
+                this.pagination.currentPage--;
+                this.searchForm.pageNum = this.pagination.currentPage;
+              }
+
+              if (
+                this.tableData.length === 1 &&
+                this.pagination.total <=
+                  this.pagination.pageSize * this.pagination.currentPage
+              ) {
+                this.pagination.currentPage = Math.max(
+                  1,
+                  this.pagination.currentPage - 1
+                );
+                this.searchForm.pageNum = this.pagination.currentPage;
               }
+
+              // 重新加载数据
               this.loadData();
             } else {
               this.$message.error(res.message || "删除失败");
             }
-          });
+          } catch (error) {
+            console.error("删除失败:", error);
+            this.$message.error("删除失败,请稍后重试");
+            // 确保加载动画被关闭
+            this.$loading().close();
+          }
         })
-        .catch(() => {});
+        .catch((err) => {
+          // 只有用户点击取消按钮时才显示取消删除的提示
+          if (err === "cancel" || err.toString().includes("cancel")) {
+            this.$message({
+              type: "info",
+              message: "已取消删除",
+            });
+          }
+        });
     },
     handleView(row) {
       this.viewForm = {
-        pa_no: row.pa_no,
+        ps_no: row.ps_no,
         ps_name: row.ps_name,
       };
       this.viewDialogVisible = true;

+ 144 - 82
ui/src/views/ProductMent/sysCategory/index.vue

@@ -2,19 +2,36 @@
   <div class="system-category-container">
     <!-- 顶部操作区 -->
     <div class="operation-area">
-      <el-button type="primary" @click="handleAdd">新建系统类别</el-button>
-      <el-input
-        v-model="formQuery.sysNo"
-        placeholder="请输入系统类别编号或名称"
-        style="width: 200px; margin-left: 16px"
-        @keyup.enter.native="handleSearch"
-      >
-        <el-button
-          slot="append"
-          icon="el-icon-search"
-          @click="handleSearch"
-        ></el-button>
-      </el-input>
+      <div class="search-area">
+        <div class="search-item">
+          <span class="label">类别编号</span>
+          <el-input
+            v-model="formQuery.sysNo"
+            placeholder="请输入工程类别编号"
+            clearable
+          ></el-input>
+        </div>
+        <div class="search-item">
+          <span class="label">类别名称</span>
+          <el-input
+            v-model="formQuery.sysName"
+            placeholder="请输入工程类别名称"
+            clearable
+          ></el-input>
+        </div>
+        <div class="search-buttons">
+          <el-button type="primary" icon="el-icon-search" @click="handleSearch"
+            >搜索</el-button
+          >
+          <el-button icon="el-icon-refresh" @click="handleReset"
+            >重置</el-button
+          >
+        </div>
+      </div>
+
+      <div class="action-area">
+        <el-button type="primary" @click="handleAdd">新建工程类别</el-button>
+      </div>
     </div>
 
     <!-- 表格区域 -->
@@ -97,7 +114,7 @@
         </el-form-item>
       </el-form>
       <div slot="footer">
-        <el-button @click="cancelForm"> 消</el-button>
+        <el-button @click="cancelForm"> 消</el-button>
         <el-button type="primary" @click="submitForm" :loading="submitLoading"
           >确 定</el-button
         >
@@ -129,7 +146,7 @@
 </template>
 
 <script>
-import { add, list, update } from "@/api/sysCategory/sysCategory";
+import { add, list, update,deleSys } from "@/api/sysCategory/sysCategory";
 import { listWork } from "@/api/worksCategory/worksCategory";
 
 export default {
@@ -139,14 +156,7 @@ export default {
       searchQuery: "",
       loading: false,
       submitLoading: false,
-      tableData: [
-        {
-          systemCode: "pjxs",
-          systemName: "拼接显示",
-          sysRemark: "",
-          productCount: 500,
-        },
-      ],
+      tableData: [],
       pagination: {
         currentPage: 1,
         pageSize: 10,
@@ -162,13 +172,14 @@ export default {
       },
       formQuery: {
         sysNo: "",
+        sysName: ""
       },
 
       viewForm: {
         sysNo: "",
         sysName: "",
         sysRemark: "",
-        productCount: 0,
+        sysProducts: 0,
       },
       rules: {
         sysNo: [
@@ -199,14 +210,17 @@ export default {
         const params = {
           ...this.formQuery,
           pageNum: this.pagination.currentPage,
-          pageSize: this.pagination.pageSize,
+          pageSize: this.pagination.pageSize
         };
-        list(params).then((response) => {
-          this.tableData = response.rows;
-          this.pagination.total = response.total;
-          this.loading = false;
-        });
+        const res = await list(params);
+        if (res.code === 200) {
+          this.tableData = res.rows;
+          this.pagination.total = res.total;
+        } else {
+          this.$message.error(res.msg || "获取数据失败");
+        }
       } catch (error) {
+        console.error('加载数据失败:', error);
         this.$message.error("加载数据失败");
       } finally {
         this.loading = false;
@@ -216,21 +230,29 @@ export default {
       this.pagination.currentPage = 1;
       this.loadData();
     },
-    handleAdd() {
+    handleReset() {
+      this.formQuery = {
+        sysNo: ""
+      };
+      this.pagination.currentPage = 1;
+      this.pagination.pageSize = 10;
+      this.loadData();
+    },
+    async handleAdd() {
       this.dialogTitle = "新建系统类别";
       this.form = {
-        systemCode: "",
-        systemName: "",
-        sysRemark: "",
+        sysNo: "",
+        sysName: "",
+        sysRemark: ""
       };
       this.dialogVisible = true;
       this.$nextTick(() => {
         this.$refs.form.clearValidate();
       });
     },
-    handleEdit(row) {
+    async handleEdit(row) {
       this.dialogTitle = "编辑系统类别";
-      this.form = { ...row };
+      this.form = {...row};
       this.dialogVisible = true;
       this.$nextTick(() => {
         this.$refs.form.clearValidate();
@@ -240,22 +262,27 @@ export default {
       this.viewForm = { ...row };
       this.viewDialogVisible = true;
     },
-    handleDelete(row) {
-      this.$confirm("确认删除该系统类别?删除后不可恢复", "提示", {
-        type: "warning",
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-      })
-        .then(async () => {
-          try {
-            // await deleteSystemCategory(row.systemCode)
-            this.$message.success("删除成功");
-            this.loadData();
-          } catch (error) {
-            this.$message.error("删除失败");
-          }
-        })
-        .catch(() => {});
+    async handleDelete(row) {
+      try {
+        await this.$confirm("确认删除该系统类别?删除后不可恢复", "提示", {
+          type: "warning"
+        });
+        
+        const res = await deleSys(row.sysId);
+        if (res.code === 200) {
+          this.$message.success("删除成功");
+          this.loadData();
+        } else {
+          this.$message.error(res.msg || "删除失败");
+        }
+      } catch (error) {
+        if (error === 'cancel') {
+          // 用户点击取消按钮,不做处理
+          return;
+        }
+        console.error('删除失败:', error);
+        this.$message.error("删除失败");
+      }
     },
     handleSizeChange(val) {
       this.pagination.pageSize = val;
@@ -270,46 +297,27 @@ export default {
       this.$refs.form.clearValidate();
     },
     async submitForm() {
-      this.$refs.form.validate(async (valid) => {
+      this.$refs.form.validate(async valid => {
         if (valid) {
           this.submitLoading = true;
           try {
             const api = this.dialogTitle === "新建系统类别" ? add : update;
-            const message =
-              this.dialogTitle === "新建系统类别" ? "添加成功" : "更新成功";
-
-            api(this.form)
-              .then((res) => {
-                if (res.code === 200) {
-                  this.$message.success(message);
-                  this.dialogVisible = false;
-                  this.loadData();
-                } else {
-                  this.$message.error(res.message || "操作失败");
-                }
-              })
-              .catch(() => {
-                this.$message.error("操作失败");
-              });
-
-            /* add(this.form).then(response => {
-              this.open = false;
-              this.getList();
-              this.$modal.msgSuccess("新增成功");
-
-            });
-
-            this.$message.success('保存成功')
-            this.dialogVisible = false
-            this.loadData() */
+            const res = await api(this.form);
+            if (res.code === 200) {
+              this.$message.success(this.dialogTitle === "新建系统类别" ? "添加成功" : "更新成功");
+              this.dialogVisible = false;
+              this.loadData();
+            } else {
+              this.$message.error(res.msg || "操作失败");
+            }
           } catch (error) {
-            this.$message.error("保存失败");
+            this.$message.error("操作失败");
           } finally {
             this.submitLoading = false;
           }
         }
       });
-    },
+    }
   },
   created() {
     this.loadData();
@@ -322,7 +330,61 @@ export default {
   padding: 20px;
 }
 .operation-area {
+  background-color: #fff;
+  margin-bottom: 16px;
+}
+
+.search-area {
   display: flex;
   align-items: center;
+  flex-wrap: wrap;
+  gap: 16px;
+  margin-bottom: 16px;
+}
+
+.search-item {
+  display: flex;
+  align-items: center;
+}
+
+.search-item .label {
+  width: 70px;
+  text-align: right;
+  margin-right: 8px;
+  color: #606266;
+}
+
+.search-item .el-input {
+  width: 200px;
+}
+
+.search-buttons {
+  margin-left: 8px;
+}
+
+.action-area {
+  margin-top: 16px;
+
+}
+
+/* 响应式布局 */
+@media screen and (max-width: 768px) {
+  .search-area {
+    flex-direction: column;
+    align-items: flex-start;
+  }
+  
+  .search-item {
+    width: 100%;
+  }
+  
+  .search-item .el-input {
+    width: 100%;
+  }
+  
+  .search-buttons {
+    margin-left: 0;
+    margin-top: 16px;
+  }
 }
 </style>

+ 324 - 197
ui/src/views/ProductMent/worksCategory/index.vue

@@ -1,216 +1,343 @@
 <template>
-    <div class="project-category-container">
-      <!-- 顶部操作区 -->
-      <div class="operation-area">
-        <el-button type="primary" @click="handleAdd">新建工程类别</el-button>
+  <div class="project-category-container">
+    <!-- 顶部操作区 -->
+    <div class="operation-area">
+      <el-form
+        :model="queryParams"
+        ref="queryForm"
+        size="small"
+        :inline="true"
+        label-width="100px"
+      >
+        <el-form-item label="类别编号" prop="wkNo">
+          <el-input
+            v-model="queryParams.wkNo"
+            placeholder="请输入工程类别编号"
+            clearable
+            style="width: 200px"
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+        <el-form-item label="类别名称" prop="wkName">
+          <el-input
+            v-model="queryParams.wkName"
+            placeholder="请输入工程类别名称"
+            clearable
+            style="width: 200px"
+            @keyup.enter.native="handleQuery"
+          />
+        </el-form-item>
+        <el-form-item>
+          <el-button type="primary" icon="el-icon-search" @click="handleQuery"
+            >搜索</el-button
+          >
+          <el-button icon="el-icon-refresh" @click="resetQuery">重置</el-button>
+        </el-form-item>
+      </el-form>
+    </div>
+    <div class="right-button">
+      <el-button type="primary" @click="handleAdd">新建工程类别</el-button>
+    </div>
 
-        <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
-          <el-form-item label="用户名称" prop="userName">
-            <el-input
-                v-model="queryParams.wkNo"
-                placeholder="请输入工程类别编号或名称"
-                style="width: 200px; margin-left: 16px"
-                @keyup.enter.native="handleSearch"
-            >
-            </el-input>
-          </el-form-item>
-          <el-form-item>
-            <el-button slot="append" icon="el-icon-search" @click="handleSearch"></el-button>
-          </el-form-item>
-        </el-form>
+    <!-- 表格区域 -->
+    <el-table
+      :data="tableData"
+      style="width: 100%; margin-top: 20px"
+      id="worksCategoryList"
+    >
+      <el-table-column
+        prop="wkNo"
+        label="工程类别编号"
+        width="180"
+      ></el-table-column>
+      <el-table-column
+        prop="wkName"
+        label="工程类别名称"
+        width="180"
+      ></el-table-column>
+      <el-table-column prop="wkRemark" label="备注"></el-table-column>
+      <el-table-column
+        prop="productCount"
+        label="产品数"
+        width="120"
+      ></el-table-column>
+      <el-table-column label="操作" width="250">
+        <template slot-scope="scope">
+          <el-button size="mini" @click="handleView(scope.row)">查看</el-button>
+          <el-button size="mini" type="primary" @click="handleEdit(scope.row)"
+            >编辑</el-button
+          >
+          <el-button size="mini" type="danger" @click="handleDelete(scope.row)"
+            >删除</el-button
+          >
+        </template>
+      </el-table-column>
+    </el-table>
 
+    <pagination
+      v-show="total > 0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="loadData"
+    />
 
+    <!--      &lt;!&ndash; 分页 &ndash;&gt;-->
+    <!--      <el-pagination-->
+    <!--        @size-change="handleSizeChange"-->
+    <!--        @current-change="handleCurrentChange"-->
+    <!--        :current-page="pagination.currentPage"-->
+    <!--        :page-sizes="[10, 20, 50, 100]"-->
+    <!--        :page-size="pagination.pageSize"-->
+    <!--        layout="total, sizes, prev, pager, next, jumper"-->
+    <!--        :total="pagination.total"-->
+    <!--        style="margin-top: 20px; text-align: right"-->
+    <!--      >-->
+    <!--      </el-pagination>-->
 
+    <!-- 新增/编辑对话框 -->
+    <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
+      <el-form :model="form" :rules="rules" ref="form" label-width="120px">
+        <el-form-item label="工程类别编号" prop="wkNo">
+          <el-input v-model="form.wkNo"></el-input>
+        </el-form-item>
+        <el-form-item label="工程类别名称" prop="wkName">
+          <el-input v-model="form.wkName"></el-input>
+        </el-form-item>
+        <el-form-item label="备注" prop="wkRemark">
+          <el-input type="textarea" v-model="form.wkRemark"></el-input>
+        </el-form-item>
+      </el-form>
+      <div slot="footer">
+        <el-button @click="dialogVisible = false">取 消</el-button>
+        <el-button type="primary" @click="submitForm">确 定</el-button>
       </div>
-
-      <!-- 表格区域 -->
-      <el-table :data="tableData"  style="width: 100%; margin-top: 20px" id="worksCategoryList">
-        <el-table-column prop="wkNo" label="工程类别编号" width="180"></el-table-column>
-        <el-table-column prop="wkName" label="工程类别名称" width="180"></el-table-column>
-        <el-table-column prop="wkRemark" label="备注"></el-table-column>
-        <el-table-column prop="productCount" label="产品数" width="120"></el-table-column>
-        <el-table-column label="操作" width="250">
-          <template slot-scope="scope">
-            <el-button size="mini" @click="handleView(scope.row)">查看</el-button>
-            <el-button size="mini" type="primary" @click="handleEdit(scope.row)">编辑</el-button>
-            <el-button size="mini" type="danger" @click="handleDelete(scope.row)">删除</el-button>
-          </template>
-        </el-table-column>
-      </el-table>
-
-      <pagination
-        v-show="total>0"
-        :total="total"
-        :page.sync="queryParams.pageNum"
-        :limit.sync="queryParams.pageSize"
-        @pagination="loadData"
-      />
-
-
-<!--      &lt;!&ndash; 分页 &ndash;&gt;-->
-<!--      <el-pagination-->
-<!--        @size-change="handleSizeChange"-->
-<!--        @current-change="handleCurrentChange"-->
-<!--        :current-page="pagination.currentPage"-->
-<!--        :page-sizes="[10, 20, 50, 100]"-->
-<!--        :page-size="pagination.pageSize"-->
-<!--        layout="total, sizes, prev, pager, next, jumper"-->
-<!--        :total="pagination.total"-->
-<!--        style="margin-top: 20px; text-align: right"-->
-<!--      >-->
-<!--      </el-pagination>-->
-
-      <!-- 新增/编辑对话框 -->
-      <el-dialog :title="dialogTitle" :visible.sync="dialogVisible" width="500px">
-        <el-form :model="form" :rules="rules" ref="form" label-width="120px">
-          <el-form-item label="工程类别编号" prop="wkNo">
-            <el-input v-model="form.wkNo"></el-input>
-          </el-form-item>
-          <el-form-item label="工程类别名称" prop="wkName">
-            <el-input v-model="form.wkName"></el-input>
-          </el-form-item>
-          <el-form-item label="备注" prop="wkRemark">
-            <el-input type="textarea" v-model="form.wkRemark"></el-input>
-          </el-form-item>
-        </el-form>
-        <div slot="footer">
-          <el-button @click="dialogVisible = false">取 消</el-button>
-          <el-button type="primary" @click="submitForm">确 定</el-button>
-        </div>
-      </el-dialog>
-    </div>
-  </template>
+    </el-dialog>
+    <!-- 查看详情对话框 -->
+    <el-dialog
+      title="查看工程类别详情"
+      :visible.sync="viewDialogVisible"
+      width="500px"
+    >
+      <el-descriptions :column="1" border>
+        <el-descriptions-item label="工程类别编号">{{
+          viewForm.wkNo
+        }}</el-descriptions-item>
+        <el-descriptions-item label="工程类别名称">{{
+          viewForm.wkName
+        }}</el-descriptions-item>
+        <el-descriptions-item label="备注">{{
+          viewForm.wkRemark
+        }}</el-descriptions-item>
+        <el-descriptions-item label="产品数">{{
+          viewForm.productCount
+        }}</el-descriptions-item>
+      </el-descriptions>
+      <div slot="footer">
+        <el-button @click="viewDialogVisible = false">关 闭</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
 
   <script>
+import {
+  addWork,
+  addWorkCategory,
+  listWork,
+  updateWork,
+  deleteWork,
+} from "@/api/worksCategory/worksCategory";
+import { listNotice } from "@/api/system/notice";
 
-  import { addWork, addWorkCategory, listWork } from '@/api/worksCategory/worksCategory'
-  import { listNotice } from '@/api/system/notice'
-
-
-  export default {
-    name: 'ProjectCategoryManagement',
-    data() {
-      return {
-        searchQuery: '',
-        userList: null,
-        tableData: [], // 表格数据
-        pagination: {
-          currentPage: 1,
-          pageSize: 10,
-          total: 1
-        },
-        // 查询参数
-        queryParams: {
-          pageNum: 1,
-          pageSize: 10,
-          userName: undefined,
-          phonenumber: undefined,
-          status: undefined,
-          deptId: undefined
-        },
-
-
-        dialogVisible: false,
-        dialogTitle: '',
-        form: {
-          wkNo: '',
-          wkName: '',
-          wkRemark: ''
-        },
-        rules: {
-          wkNo: [
-            { required: true, message: '请输入工程类别编号', trigger: 'blur' }
-          ],
-          wkName: [
-            { required: true, message: '请输入工程类别名称', trigger: 'blur' }
-          ]
-        }
-      }
-    },
-    methods: {
-      handleSearch() {
-        // 实现搜索逻辑
-        console.log('搜索关键词:', this.searchQuery)
-        this.loadData()
-      },
-      handleAdd() {
-        this.dialogTitle = '新增工程类别'
-        this.form = {
-          wkNo: '',
-          wkName: '',
-          wkRemark: ''
-        }
-        this.dialogVisible = true
+export default {
+  name: "ProjectCategoryManagement",
+  data() {
+    return {
+      searchQuery: "",
+      userList: null,
+      tableData: [], // 表格数据
+      pagination: {
+        currentPage: 1,
+        pageSize: 10,
       },
-      handleEdit(row) {
-        this.dialogTitle = '编辑工程类别'
-        this.form = { ...row }
-        this.dialogVisible = true
+      total: 1,
+      showSearch: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        wkNo: undefined,
+        wkName: undefined,
       },
-      handleDelete(row) {
-        this.$confirm('确认删除该工程类别?', '提示', {
-          type: 'warning'
-        }).then(() => {
-          // 实现删除逻辑
-          console.log('删除:', row)
-          this.$message.success('删除成功')
-          this.loadData()
-        }).catch(() => {})
-      },
-      handleView(row) {
-        // 实现查看逻辑
-        console.log('查看:', row)
+
+      dialogVisible: false,
+      dialogTitle: "",
+      form: {
+        wkNo: "",
+        wkName: "",
+        wkRemark: "",
       },
-      handleSizeChange(val) {
-        this.pagination.pageSize = val
-        this.loadData()
+      rules: {
+        wkNo: [
+          { required: true, message: "请输入工程类别编号", trigger: "blur" },
+        ],
+        wkName: [
+          { required: true, message: "请输入工程类别名称", trigger: "blur" },
+        ],
       },
-      handleCurrentChange(val) {
-        this.pagination.currentPage = val
-        this.loadData()
+      viewDialogVisible: false, // 查看详情对话框显示状态
+      viewForm: {
+        // 查看详情的数据对象
+        wkNo: "",
+        wkName: "",
+        wkRemark: "",
+        productCount: 0,
       },
-      submitForm() {
-        this.$refs.form.validate((valid) => {
-          debugger;
-          if (valid) {
-            // 实现表单提交逻辑
-            console.log('表单数据:', this.form)
-            if (this.form.userId != undefined) {
-            }else{
-              addWork(this.form).then(response => {
-                this.dialogVisible = false
-                this.$message.success('保存成功')
-                this.loadData()
-              });
-            }
-            this.loadData()
-          }
+    };
+  },
+  methods: {
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.loadData();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.queryParams.wkNo = undefined;
+      this.queryParams.wkName = undefined;
+      this.handleQuery();
+    },
+    // 表单重置
+    resetForm(refName) {
+      if (this.$refs[refName]) {
+        this.$refs[refName].resetFields();
+      }
+    },
+    /* 新建 */
+    handleAdd() {
+      this.dialogTitle = "新增工程类别";
+      this.form = {
+        wkNo: "",
+        wkName: "",
+        wkRemark: "",
+      };
+      this.dialogVisible = true;
+    },
+    /* 修改 */
+    handleEdit(row) {
+      this.dialogTitle = "编辑工程类别";
+      this.form = JSON.parse(JSON.stringify(row)); // 深拷贝防止直接修改原数据
+      this.dialogVisible = true;
+    },
+    /* 删除 */
+    handleDelete(row) {
+      this.$confirm("确认删除该工程类别?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      })
+        .then(() => {
+          deleteWork(row.wkId)
+            .then((response) => {
+              if (response.code === 200) {
+                // 假设 200 是成功状态码
+                this.$message({
+                  type: "success",
+                  message: "删除成功!",
+                });
+                this.loadData(); // 重新加载数据
+              } else {
+                this.$message.error(response.msg || "删除失败");
+              }
+            })
+            .catch((error) => {
+              this.$message.error("删除失败:" + error);
+            });
         })
-      },
-      loadData() {
-        // 实现数据加载逻辑
-        this.loading = true;
-        listWork(this.queryParams).then(response => {
-          debugger;
-          this.tableData = response.rows;
-          this.total = response.total;
-          this.loading = false;
+        .catch(() => {
+          this.$message({
+            type: "info",
+            message: "已取消删除",
+          });
         });
-
-      }
     },
-    created() {
-      this.loadData()
-    }
-  }
-  </script>
+    /* 查看 */
+    handleView(row) {
+      this.viewForm = JSON.parse(JSON.stringify(row)); // 深拷贝防止修改原数据
+      this.viewDialogVisible = true;
+    },
+    handleSizeChange(val) {
+      this.pagination.pageSize = val;
+      this.loadData();
+    },
+    handleCurrentChange(val) {
+      this.pagination.currentPage = val;
+      this.loadData();
+    },
+    /* 修改/新增提交 */
+    submitForm() {
+      this.$refs.form.validate((valid) => {
+        if (valid) {
+          if (this.dialogTitle === "编辑工程类别") {
+            // 编辑操作
+            updateWork(this.form)
+              .then((response) => {
+                this.dialogVisible = false;
+                this.$message.success("修改成功");
+                this.loadData();
+              })
+              .catch((error) => {
+                this.$message.error("修改失败:" + error);
+              });
+          } else {
+            // 新增操作
+            addWork(this.form)
+              .then((response) => {
+                this.dialogVisible = false;
+                this.$message.success("新增成功");
+                this.loadData();
+              })
+              .catch((error) => {
+                this.$message.error("新增失败:" + error);
+              });
+          }
+        }
+      });
+    },
+    loadData() {
+      // 实现数据加载逻辑
+      this.loading = true;
+      listWork(this.queryParams).then((response) => {
+        debugger;
+        this.tableData = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+  },
+  created() {
+    this.loadData();
+  },
+};
+</script>
 
   <style scoped>
-  .project-category-container {
-    padding: 20px;
-  }
-  .operation-area {
-    display: flex;
-    align-items: center;
-  }
-  </style>
+.project-category-container {
+  padding: 20px;
+}
+.operation-area {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  margin-bottom: 20px;
+}
+.right-button {
+  margin-left: auto;
+}
+/* 搜索表单项间距 */
+.el-form-item {
+  margin-right: 10px;
+}
+</style>

+ 178 - 40
ui/src/views/login.vue

@@ -1,7 +1,13 @@
 <template>
   <div class="login">
-    <el-form ref="loginForm" :model="loginForm" :rules="loginRules" class="login-form">
-      <h3 class="title">瑞赢科技后台管理系统</h3>
+    <el-form
+      ref="loginForm"
+      :model="loginForm"
+      :rules="loginRules"
+      class="login-form"
+    >
+      <img src="../assets/logo/GQY_logo1.png" class="title_img" alt="">
+      <!-- <h3 class="title">GQY</h3> -->
       <el-form-item prop="username">
         <el-input
           v-model="loginForm.username"
@@ -9,7 +15,11 @@
           auto-complete="off"
           placeholder="账号"
         >
-          <svg-icon slot="prefix" icon-class="user" class="el-input__icon input-icon" />
+       <!--    <svg-icon
+            slot="prefix"
+            icon-class="user"
+            class="el-input__icon input-icon"
+          /> -->
         </el-input>
       </el-form-item>
       <el-form-item prop="password">
@@ -18,9 +28,14 @@
           type="password"
           auto-complete="off"
           placeholder="密码"
+          style="border-radius: 50px;"
           @keyup.enter.native="handleLogin"
         >
-          <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" />
+          <!-- <svg-icon
+            slot="prefix"
+            icon-class="password"
+            class="el-input__icon input-icon"
+          /> -->
         </el-input>
       </el-form-item>
       <el-form-item prop="code" v-if="captchaEnabled">
@@ -31,26 +46,37 @@
           style="width: 63%"
           @keyup.enter.native="handleLogin"
         >
-          <svg-icon slot="prefix" icon-class="validCode" class="el-input__icon input-icon" />
+         <!--  <svg-icon
+            slot="prefix"
+            icon-class="validCode"
+            class="el-input__icon input-icon"
+          /> -->
         </el-input>
         <div class="login-code">
-          <img :src="codeUrl" @click="getCode" class="login-code-img"/>
+          <img :src="codeUrl" @click="getCode" class="login-code-img" />
         </div>
       </el-form-item>
-      <el-checkbox v-model="loginForm.rememberMe" style="margin:0px 0px 25px 0px;">记住密码</el-checkbox>
-      <el-form-item style="width:100%;">
+      <el-checkbox
+        v-model="loginForm.rememberMe"
+        style="margin: 0px 0px 25px 0px"
+        >记住密码</el-checkbox
+      >
+      <el-form-item style="width: 100%">
         <el-button
           :loading="loading"
           size="medium"
           type="primary"
-          style="width:100%;"
+          style="width: 100%"
+          class="login-button"
           @click.native.prevent="handleLogin"
         >
           <span v-if="!loading">登 录</span>
           <span v-else>登 录 中...</span>
         </el-button>
-        <div style="float: right;" v-if="register">
-          <router-link class="link-type" :to="'/register'">立即注册</router-link>
+        <div style="float: right" v-if="register">
+          <router-link class="link-type" :to="'/register'"
+            >立即注册</router-link
+          >
         </div>
       </el-form-item>
     </el-form>
@@ -64,7 +90,7 @@
 <script>
 import { getCodeImg } from "@/api/login";
 import Cookies from "js-cookie";
-import { encrypt, decrypt } from '@/utils/jsencrypt'
+import { encrypt, decrypt } from "@/utils/jsencrypt";
 
 export default {
   name: "Login",
@@ -76,32 +102,32 @@ export default {
         password: "admin123",
         rememberMe: false,
         code: "",
-        uuid: ""
+        uuid: "",
       },
       loginRules: {
         username: [
-          { required: true, trigger: "blur", message: "请输入您的账号" }
+          { required: true, trigger: "blur", message: "请输入您的账号" },
         ],
         password: [
-          { required: true, trigger: "blur", message: "请输入您的密码" }
+          { required: true, trigger: "blur", message: "请输入您的密码" },
         ],
-        code: [{ required: true, trigger: "change", message: "请输入验证码" }]
+        code: [{ required: true, trigger: "change", message: "请输入验证码" }],
       },
       loading: false,
       // 验证码开关
       captchaEnabled: true,
       // 注册开关
       register: false,
-      redirect: undefined
+      redirect: undefined,
     };
   },
   watch: {
     $route: {
-      handler: function(route) {
+      handler: function (route) {
         this.redirect = route.query && route.query.redirect;
       },
-      immediate: true
-    }
+      immediate: true,
+    },
   },
   created() {
     this.getCode();
@@ -109,8 +135,9 @@ export default {
   },
   methods: {
     getCode() {
-      getCodeImg().then(res => {
-        this.captchaEnabled = res.captchaEnabled === undefined ? true : res.captchaEnabled;
+      getCodeImg().then((res) => {
+        this.captchaEnabled =
+          res.captchaEnabled === undefined ? true : res.captchaEnabled;
         if (this.captchaEnabled) {
           this.codeUrl = "data:image/gif;base64," + res.img;
           this.loginForm.uuid = res.uuid;
@@ -120,38 +147,46 @@ export default {
     getCookie() {
       const username = Cookies.get("username");
       const password = Cookies.get("password");
-      const rememberMe = Cookies.get('rememberMe')
+      const rememberMe = Cookies.get("rememberMe");
       this.loginForm = {
         username: username === undefined ? this.loginForm.username : username,
-        password: password === undefined ? this.loginForm.password : decrypt(password),
-        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe)
+        password:
+          password === undefined ? this.loginForm.password : decrypt(password),
+        rememberMe: rememberMe === undefined ? false : Boolean(rememberMe),
       };
     },
     handleLogin() {
-      this.$refs.loginForm.validate(valid => {
+      this.$refs.loginForm.validate((valid) => {
         if (valid) {
           this.loading = true;
           if (this.loginForm.rememberMe) {
             Cookies.set("username", this.loginForm.username, { expires: 30 });
-            Cookies.set("password", encrypt(this.loginForm.password), { expires: 30 });
-            Cookies.set('rememberMe', this.loginForm.rememberMe, { expires: 30 });
+            Cookies.set("password", encrypt(this.loginForm.password), {
+              expires: 30,
+            });
+            Cookies.set("rememberMe", this.loginForm.rememberMe, {
+              expires: 30,
+            });
           } else {
             Cookies.remove("username");
             Cookies.remove("password");
-            Cookies.remove('rememberMe');
+            Cookies.remove("rememberMe");
           }
-          this.$store.dispatch("Login", this.loginForm).then(() => {
-            this.$router.push({ path: this.redirect || "/" }).catch(()=>{});
-          }).catch(() => {
-            this.loading = false;
-            if (this.captchaEnabled) {
-              this.getCode();
-            }
-          });
+          this.$store
+            .dispatch("Login", this.loginForm)
+            .then(() => {
+              this.$router.push({ path: this.redirect || "/" }).catch(() => {});
+            })
+            .catch(() => {
+              this.loading = false;
+              if (this.captchaEnabled) {
+                this.getCode();
+              }
+            });
         }
       });
-    }
-  }
+    },
+  },
 };
 </script>
 
@@ -161,14 +196,110 @@ export default {
   justify-content: center;
   align-items: center;
   height: 100%;
-  background-image: url("../assets/images/login-background.jpg");
+  background-image: url("../assets/images/login_background.jpg");
   background-size: cover;
+
+  .login-form {
+    width: 400px;
+    padding: 30px;
+    background: #ffffff;
+    border-radius: 12px;
+    box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
+
+    .el-form-item {
+      margin-bottom: 20px;
+    }
+  }
+
+  // 自定义输入框样式
+  .el-input {
+    .el-input__inner {
+      height: 45px;
+      background: #f0f2f5;  // 浅灰色背景
+      border: none;
+      border-radius: 25px;  // 大圆角
+      padding: 0 20px;
+      font-size: 14px;
+      color: #333;
+
+      &::placeholder {
+        color: #999;
+      }
+
+      &:focus {
+        background: #e8eaed;  // 聚焦时稍微深一点的背景色
+        box-shadow: none;
+      }
+    }
+  }
+
+  // 验证码输入框特殊处理
+  .captcha-container {
+    display: flex;
+    gap: 10px;
+    align-items: center;
+
+    .el-input {
+      flex: 1;
+    }
+
+    .captcha-img {
+      height: 45px;  // 与输入框等高
+      border-radius: 25px;  // 同样的圆角
+      overflow: hidden;
+    }
+  }
+
+  // 验证码输入框
+  .captcha-input {
+    .el-input__inner {
+      border-radius: 25px;
+    }
+  }
+
+  // 登录按钮样式
+  .login-button {
+    width: 100%;
+    height: 45px;
+    background: #ff0000;
+    border: none;
+    border-radius: 25px;  // 与输入框相同的圆角
+    font-size: 16px;
+    margin-top: 20px;
+
+    &:hover {
+      background: #ff1a1a;
+    }
+  }
 }
+
+// 移除输入框的默认边框和阴影
+.el-input__inner:focus {
+  border-color: transparent !important;
+  box-shadow: none !important;
+}
+
+// 如果需要在输入框右侧显示验证码文字
+.captcha-text {
+  position: absolute;
+  right: 20px;
+  top: 50%;
+  transform: translateY(-50%);
+  color: #666;
+  font-size: 14px;
+}
+
 .title {
   margin: 0px auto 30px auto;
   text-align: center;
   color: #707070;
 }
+.title_img{
+  width: 100px;
+  height: 50px;
+  margin-left: 10px;
+  margin-bottom: 20px;
+}
 
 .login-form {
   border-radius: 6px;
@@ -187,6 +318,13 @@ export default {
     margin-left: 2px;
   }
 }
+.title {
+  font-size: 28px;
+  color: #ff0000;
+  text-align: center;
+  margin-bottom: 30px;
+  font-weight: bold;
+}
 .login-tip {
   font-size: 13px;
   text-align: center;

+ 1 - 1
ui/vue.config.js

@@ -7,7 +7,7 @@ function resolve(dir) {
 
 const CompressionPlugin = require('compression-webpack-plugin')
 
-const name = process.env.VUE_APP_TITLE || '瑞赢科技管理系统' // 网页标题
+const name = process.env.VUE_APP_TITLE || 'GQY管理系统' // 网页标题
 
 const port = process.env.port || process.env.npm_config_port || 80 // 端口