sunxuewei 2 yıl önce
ebeveyn
işleme
3477cf3156

+ 6 - 0
.env.development

@@ -1,7 +1,13 @@
1 1
 # 若依管理系统/开发环境
2 2
 # VUE_APP_BASE_URL = 'http://192.168.50.205:9999'
3 3
 # VUE_APP_BASE_URL = 'http://172.16.6.217:9999'
4
+# 测试环境外网
4 5
 VUE_APP_BASE_URL = 'http://121.36.17.6:9098'
6
+# 正式环境外网
7
+# VUE_APP_BASE_URL = 'http://121.36.17.6:9099'
8
+
9
+# 图片地址
10
+VUE_APP_BASE_IMG_URL = ""
5 11
 
6 12
 # 页面标题
7 13
 VUE_APP_TITLE = "应急物资系统"

+ 24 - 37
src/api/index.ts

@@ -111,63 +111,50 @@ request.interceptors.response.use(
111 111
   (res: any) => {
112 112
     NProgress.done();
113 113
     // 未设置状态码则默认成功状态
114
-    const code = res.code || 200;
114
+    const code = Number(res.status) || 200;
115 115
     // 获取错误信息
116
-    const msg = errorCode[code] || res.msg || errorCode["default"];
116
+    const msg = res.data.msg || errorCode[code] || errorCode["default"];
117 117
     // 二进制数据则直接返回
118
-    if (res.request.responseType === "blob" || res.request.responseType === "arraybuffer") {
119
-      return res.data;
120
-    }
121
-    if (code === 500) {
118
+    // if (res.request.responseType === "blob" || res.request.responseType === "arraybuffer") {
119
+    //   return res.data;
120
+    // }
121
+    if (code !== 200 || res.data.code === 1) {
122 122
       ElMessage({
123 123
         message: msg,
124 124
         type: "error"
125 125
       });
126
-      return Promise.reject(new Error(msg));
127
-    } else if (code === 601) {
128
-      ElMessage({
129
-        message: msg,
130
-        type: "warning"
131
-      });
132
-      return Promise.reject(new Error(msg));
133
-    } else if (code !== 200) {
134
-      ElNotification.error({
135
-        title: msg
136
-      });
137 126
       return Promise.reject("error");
138 127
     } else {
139 128
       return Promise.resolve(res.data);
140 129
     }
141 130
   },
142 131
   (error) => {
143
-    console.log("err" + error);
144 132
     NProgress.done();
145
-    let { message } = error;
146
-    if (message === "Network Error") {
147
-      message = "后端接口连接异常";
148
-    } else if (message.includes("timeout")) {
149
-      message = "系统接口请求超时";
150
-    } else if (message.includes("Request failed with status code")) {
151
-      // 后台定义 424 针对令牌过去的特殊响应码
152
-      if (message.substr(message.length - 3) === "424") {
153
-        ElMessageBox.confirm("令牌状态已过期,请点击重新登录", "系统提示", {
154
-          confirmButtonText: "重新登录",
155
-          cancelButtonText: "取消",
156
-          type: "warning"
157
-        }).then(() => {
158
-          store.dispatch("LogOut").then(() => {
159
-            // 刷新登录页面,避免多次弹框
160
-            window.location.reload();
161
-          });
133
+    if (error.response.status === 424) {
134
+      ElMessageBox.confirm("令牌状态已过期,请点击重新登录", "系统提示", {
135
+        confirmButtonText: "重新登录",
136
+        cancelButtonText: "取消",
137
+        type: "warning"
138
+      }).then(() => {
139
+        store.dispatch("LogOut").then(() => {
140
+          // 刷新登录页面,避免多次弹框
141
+          window.location.reload();
162 142
         });
163
-        return;
164
-      }
143
+      });
144
+      return Promise.reject(error);
165 145
     }
146
+    // let { message } = error;
147
+    // if (message === "Network Error") {
148
+    //   message = "后端接口连接异常";
149
+    // } else if (message.includes("timeout")) {
150
+    //   message = "系统接口请求超时";
151
+    // } else if (message.includes("Request failed with status code")) {
166 152
     // ElMessage({
167 153
     //   message: message,
168 154
     //   type: "error",
169 155
     //   duration: 5 * 1000
170 156
     // });
157
+    // }
171 158
     return Promise.reject(error);
172 159
   }
173 160
 );

BIN
src/assets/img/bj2.jpg


BIN
src/assets/img/login_bj.png


BIN
src/assets/img/login_form_bj.png


BIN
src/assets/img/logo.png


BIN
src/assets/img/title.png


BIN
src/assets/img/top_title.png


+ 1 - 4
src/layout/components/topbar/index.vue

@@ -1,8 +1,7 @@
1 1
 <template>
2 2
   <div class="topbar">
3
-    <logo />
4 3
     <div class="topbar_title">
5
-      <img src="~@/assets/img/top_title.png" />
4
+      <img src="~@/assets/img/logo.png" />
6 5
     </div>
7 6
     <!-- <div class="topbar_help">
8 7
       <el-icon color="#767DEA"><QuestionFilled /></el-icon>
@@ -30,8 +29,6 @@
30 29
 </template>
31 30
 
32 31
 <script setup lang="ts">
33
-import logo from "./logo.vue";
34
-
35 32
 import { ref } from "vue";
36 33
 import { useStore } from "vuex";
37 34
 import { useRouter } from "vue-router";

+ 10 - 3
src/utils/errorCode.ts

@@ -1,6 +1,13 @@
1 1
 export default {
2
-  "401": "认证失败,无法访问系统资源",
2
+  "000": "操作太频繁,请勿重复请求",
3
+  "401": "当前操作没有权限",
3 4
   "403": "当前操作没有权限",
4
-  "404": "访问资源不存在",
5
-  default: "系统未知错误,请反馈给管理员"
5
+  "404": "资源不存在",
6
+  "417": "未绑定登录账号,请使用密码登录后绑定",
7
+  "423": "演示环境不能操作,如需了解联系我们",
8
+  "426": "用户名不存在或密码错误",
9
+  "428": "验证码错误,请重新输入",
10
+  "429": "请求过频繁",
11
+  "479": "演示环境,没有权限操作",
12
+  default: "系统未知错误,请反馈给管理员"
6 13
 } as Record<string, string>;

+ 9 - 8
src/views/admin/dept/index.vue

@@ -17,12 +17,7 @@
17 17
     <div>
18 18
       <el-table v-loading="tableLoading" border :data="tableData" row-key="id" :expand-row-keys="['9']">
19 19
         <el-table-column prop="name" label="部门名称" :show-overflow-tooltip="true" />
20
-        <el-table-column prop="weight" label="排序" align="center" />
21
-        <el-table-column prop="delFlag" label="状态" align="center">
22
-          <template #default="{ row }">
23
-            {{ getValueLabel(del_type, row.delFlag) }}
24
-          </template>
25
-        </el-table-column>
20
+        <el-table-column prop="abbreviationName" label="部门简称" align="center" />
26 21
         <el-table-column prop="deptType" label="部门类型" align="center">
27 22
           <template #default="{ row }">
28 23
             {{ getValueLabel(dept_type, row.deptType) }}
@@ -33,6 +28,12 @@
33 28
             {{ getValueListLabel(warehouse_type, row.warehouseType) }}
34 29
           </template>
35 30
         </el-table-column>
31
+        <el-table-column prop="delFlag" label="状态" align="center">
32
+          <template #default="{ row }">
33
+            {{ getValueLabel(del_type, row.delFlag) }}
34
+          </template>
35
+        </el-table-column>
36
+        <el-table-column prop="weight" label="排序" align="center" />
36 37
         <el-table-column prop="createTime" label="创建时间" align="center">
37 38
           <template #default="{ row }">
38 39
             {{ timestampToTime(+row.createTime) }}
@@ -289,7 +290,7 @@ const addDept = () => {
289 290
       const data = {
290 291
         ...form.value
291 292
       };
292
-      data.warehouseType = JSON.stringify(data.warehouseType);
293
+      data.warehouseType = data.warehouseType ? JSON.stringify(data.warehouseType) : "[]";
293 294
       addDeptObj(data).then((res: any) => {
294 295
         if (res.code === 0) {
295 296
           ElMessage.success("创建成功");
@@ -311,7 +312,7 @@ const saveDept = () => {
311 312
       const data = {
312 313
         ...form.value
313 314
       };
314
-      data.warehouseType = JSON.stringify(data.warehouseType);
315
+      data.warehouseType = data.warehouseType ? JSON.stringify(data.warehouseType) : "[]";
315 316
       putDeptObj(data).then((res: any) => {
316 317
         if (res.code === 0) {
317 318
           ElMessage.success("编辑成功");

+ 15 - 9
src/views/admin/menu/index.vue

@@ -224,9 +224,11 @@ const handleDelete = (row: any) => {
224 224
     cancelButtonText: "取消",
225 225
     type: "warning"
226 226
   }).then(() => {
227
-    delMenuObj(row.id).then(() => {
228
-      ElMessage.success(`删除 “${row.name}” 成功`);
229
-      getList();
227
+    delMenuObj(row.id).then((res: any) => {
228
+      if (res.code === 0) {
229
+        ElMessage.success(`删除 “${row.name}” 成功`);
230
+        getList();
231
+      }
230 232
     });
231 233
   });
232 234
 };
@@ -248,14 +250,18 @@ const submitMenu = () => {
248 250
   formRef.value.validate((valid: boolean) => {
249 251
     if (valid) {
250 252
       if (title.value === "修改") {
251
-        putMenuObj(menuInfo.value).then((data) => {
252
-          ElMessage.success("修改成功");
253
-          clearDialogData();
253
+        putMenuObj(menuInfo.value).then((res: any) => {
254
+          if (res.code === 0) {
255
+            ElMessage.success("修改成功");
256
+            clearDialogData();
257
+          }
254 258
         });
255 259
       } else {
256
-        addMenuObj(menuInfo.value).then((data) => {
257
-          ElMessage.success("添加成功");
258
-          clearDialogData();
260
+        addMenuObj(menuInfo.value).then((res: any) => {
261
+          if (res.code === 0) {
262
+            ElMessage.success("添加成功");
263
+            clearDialogData();
264
+          }
259 265
         });
260 266
       }
261 267
     } else {

+ 45 - 49
src/views/admin/user/index.vue

@@ -13,7 +13,7 @@
13 13
             :expand-on-click-node="false"
14 14
             @node-click="handleNodeClick"
15 15
           >
16
-            <template #default="{ node, data }">
16
+            <template #default="{ data }">
17 17
               <el-tooltip v-if="!data.isLock" class="item" effect="dark" content="无数据权限" placement="right-start">
18 18
                 <span>
19 19
                   {{ data.name }}
@@ -69,7 +69,7 @@
69 69
           <el-table-column prop="username" label="用户名称" align="center" />
70 70
           <el-table-column prop="deptId" label="部门" align="center">
71 71
             <template #default="{ row }">
72
-              {{ getLabelFromMutDict(deptData, row.deptId, "id", "name") }}
72
+              {{ getLabelFromMutDict(deptData, row.deptId, "id", "abbreviationName") }}
73 73
             </template>
74 74
           </el-table-column>
75 75
           <el-table-column prop="phone" label="手机号码" align="center" />
@@ -150,6 +150,7 @@
150 150
                 v-model="dialogForm.deptId"
151 151
                 :data="deptOptions"
152 152
                 check-strictly
153
+                disabled
153 154
                 clearable
154 155
                 :render-after-expand="false"
155 156
               />
@@ -205,9 +206,11 @@ import { deepClone, getValueLabel, getLabelFromMutDict } from "@/utils/util";
205 206
 import { getDeptList, getUserList, getDetails, getRoleList, addUserObj, putUserObj, delUserObj } from "@/api/admin";
206 207
 
207 208
 const validateUsername = (rule: any, value: any, callback: any) => {
208
-  const flag = new RegExp(/^([a-z\u4e00-\u9fa5\d]+?)$/).test(value);
209
-  if (!flag) {
209
+  const flag = /^([a-z\u4e00-\u9fa5\d]+?)$/;
210
+  if (value && !flag.test(value)) {
210 211
     callback(new Error("用户名支持小写英文、数字、中文"));
212
+  } else {
213
+    callback();
211 214
   }
212 215
 };
213 216
 
@@ -262,11 +265,10 @@ const dialogForm = ref<any>({
262 265
 });
263 266
 const dialogFormRef = ref<FormInstance>();
264 267
 const dialogFormRules = ref<FormRules>({
265
-  username: [{ min: 2, max: 64, required: true, message: "请输入用户昵称", trigger: "blur" }],
266 268
   name: [{ min: 2, max: 64, required: true, message: "请输入姓名", trigger: "blur" }],
267 269
   password: [
268
-    { min: 6, max: 20, required: true, message: "长度在 6 到 20 个字符", trigger: "blur" },
269
-    { required: true, validator: validatePass1, trigger: "blur" }
270
+    { min: 6, max: 20, required: true, message: "长度在 6 到 20 个字符", trigger: "blur" }
271
+    // { required: true, validator: validatePass1, trigger: "blur" }
270 272
   ],
271 273
   deptId: [{ required: true, message: "请选择岗位", trigger: "change" }],
272 274
   lockFlag: [{ required: true, message: "请选择状态", trigger: "change" }],
@@ -323,6 +325,8 @@ const clearSearch = () => {
323 325
     username: "",
324 326
     deptId: ""
325 327
   };
328
+  dialogForm.value.deptId = "";
329
+  getList();
326 330
 };
327 331
 
328 332
 const filterList = (arr: any) => {
@@ -347,34 +351,22 @@ const addOrUpdateHandle = (row?: any) => {
347 351
   if (row) {
348 352
     title.value = "修改";
349 353
     dialogFormRules.value.username = [
350
-      {
351
-        required: true,
352
-        message: "请输入用户名"
353
-      },
354
-      {
355
-        min: 3,
356
-        max: 20,
357
-        message: "长度在 3 到 20 个字符",
358
-        trigger: "blur"
359
-      },
354
+      { required: true, message: "请输入用户名", trigger: "blur" },
355
+      { min: 3, max: 20, message: "长度在 3 到 20 个字符", trigger: "blur" },
360 356
       { validator: validateUsername, trigger: "blur" }
361 357
     ];
362 358
     dialogForm.value = deepClone(row);
363 359
     dialogForm.value.role = row.roleList.map((item: any) => item.roleId);
364 360
     dialogForm.value.password = "********";
365 361
   } else {
362
+    if (dialogForm.value.deptId === "") {
363
+      ElMessage.warning("请先选择左侧部门再进行添加");
364
+      return;
365
+    }
366 366
     title.value = "新增";
367 367
     dialogFormRules.value.username = [
368
-      {
369
-        required: true,
370
-        message: "请输入用户名"
371
-      },
372
-      {
373
-        min: 3,
374
-        max: 20,
375
-        message: "长度在 3 到 20 个字符",
376
-        trigger: "blur"
377
-      },
368
+      { required: true, message: "请输入用户名", trigger: "blur" },
369
+      { min: 3, max: 20, message: "长度在 3 到 20 个字符", trigger: "blur" },
378 370
       { validator: validateUsername, trigger: "blur" },
379 371
       { validator: validateUsernameRepetition, trigger: "blur" }
380 372
     ];
@@ -384,24 +376,26 @@ const addOrUpdateHandle = (row?: any) => {
384 376
 
385 377
 // 提交新增/修改数据
386 378
 const addOrUpdateUser = () => {
387
-  if (title.value === "新增") {
388
-    addUserObj(dialogForm.value).then(() => {
389
-      ElMessage.success("创建成功");
390
-      clearDialogForm();
391
-    });
392
-  } else {
393
-    if (dialogForm.value.password && dialogForm.value.password.indexOf("******") >= 0) {
394
-      dialogForm.value.password = undefined;
395
-    }
396
-    putUserObj(dialogForm.value).then(() => {
397
-      ElMessage.success("修改成功");
398
-      clearDialogForm();
399
-    });
400
-  }
401 379
   dialogFormRef.value?.validate((valid: boolean) => {
402
-    console.log(1);
403 380
     if (valid) {
404
-      console.log(2);
381
+      if (title.value === "新增") {
382
+        addUserObj(dialogForm.value).then((res: any) => {
383
+          if (res.code === 0) {
384
+            ElMessage.success("创建成功");
385
+            clearDialogForm();
386
+          }
387
+        });
388
+      } else {
389
+        if (dialogForm.value.password && dialogForm.value.password.indexOf("******") >= 0) {
390
+          dialogForm.value.password = undefined;
391
+        }
392
+        putUserObj(dialogForm.value).then((res: any) => {
393
+          if (res.code === 0) {
394
+            ElMessage.success("修改成功");
395
+            clearDialogForm();
396
+          }
397
+        });
398
+      }
405 399
     } else {
406 400
       return false;
407 401
     }
@@ -414,12 +408,14 @@ const handleDelete = (row: any) => {
414 408
     cancelButtonText: "取消",
415 409
     type: "warning"
416 410
   }).then(() => {
417
-    delUserObj(row.userId).then(() => {
418
-      ElMessage({
419
-        type: "success",
420
-        message: `删除 “${row.username}” 成功`
421
-      });
422
-      getList();
411
+    delUserObj(row.userId).then((res: any) => {
412
+      if (res.code === 0) {
413
+        ElMessage({
414
+          type: "success",
415
+          message: `删除 “${row.username}” 成功`
416
+        });
417
+        getList();
418
+      }
423 419
     });
424 420
   });
425 421
 };

+ 15 - 4
src/views/dataStatistics/droughtResistant/index.vue

@@ -19,7 +19,13 @@
19 19
               :disabled="searchList.provinceDeptIdList.length === 0"
20 20
               :placeholder="searchList.provinceDeptIdList.length === 0 ? '请先选择省份' : '请选择储备仓库'"
21 21
             >
22
-              <el-option v-for="item in warehouseList" :key="item.deptId" :label="item.name" :value="item.deptId" />
22
+              <el-option
23
+                v-for="item in warehouseList"
24
+                :key="item.deptId"
25
+                :label="item.abbreviationName"
26
+                :value="item.deptId"
27
+                ·
28
+              />
23 29
             </el-select>
24 30
           </el-form-item>
25 31
         </el-col>
@@ -147,7 +153,9 @@ const clearSearch = () => {
147 153
 
148 154
 // getSpanArr方法
149 155
 const getSpanArr = (data: any) => {
150
-  headerProps.value.forEach((key: any) => {
156
+  const mergeCol = ["upidName", "username"];
157
+  // headerProps.value.forEach((key: any) => {
158
+  mergeCol.forEach((key: any) => {
151 159
     let count = 0; // 用来记录需要合并行的起始位置
152 160
     mergeObj.value[key] = []; // 记录每一列的合并信息
153 161
     data.forEach((item: any, index: number) => {
@@ -167,6 +175,7 @@ const getSpanArr = (data: any) => {
167 175
       }
168 176
     });
169 177
   });
178
+  console.log(mergeObj.value);
170 179
 };
171 180
 
172 181
 // 获取表格数据
@@ -201,10 +210,12 @@ const getList = () => {
201 210
   });
202 211
 };
203 212
 
204
-const arraySpanMethod = ({ row, column, rowIndex, columnIndex }: any) => {
213
+const arraySpanMethod = ({ column, rowIndex }: any) => {
214
+  const mergeCol = ["upidName", "username"];
205 215
   // 判断列的属性
206
-  if (headerProps.value.indexOf(column.property) !== -1) {
216
+  if (mergeCol.indexOf(column.property) !== -1) {
207 217
     // 判断其值是不是为0
218
+    console.log(column.property, rowIndex);
208 219
     if (mergeObj.value[column.property][rowIndex]) {
209 220
       return [mergeObj.value[column.property][rowIndex], 1];
210 221
     } else {

+ 11 - 4
src/views/dataStatistics/reliefMaterial/index.vue

@@ -19,7 +19,12 @@
19 19
               :disabled="searchList.provinceDeptIdList.length === 0"
20 20
               :placeholder="searchList.provinceDeptIdList.length === 0 ? '请先选择省份' : '请选择储备仓库'"
21 21
             >
22
-              <el-option v-for="item in warehouseList" :key="item.deptId" :label="item.name" :value="item.deptId" />
22
+              <el-option
23
+                v-for="item in warehouseList"
24
+                :key="item.deptId"
25
+                :label="item.abbreviationName"
26
+                :value="item.deptId"
27
+              />
23 28
             </el-select>
24 29
           </el-form-item>
25 30
         </el-col>
@@ -132,7 +137,8 @@ getDroughtResistantHeader({ matype1: ["300"] }).then((res: any) => {
132 137
 
133 138
 // getSpanArr方法
134 139
 const getSpanArr = (data: any) => {
135
-  headerProps.value.forEach((key: any) => {
140
+  const mergeCol = ["upidName", "username"];
141
+  mergeCol.forEach((key: any) => {
136 142
     let count = 0; // 用来记录需要合并行的起始位置
137 143
     mergeObj.value[key] = []; // 记录每一列的合并信息
138 144
     data.forEach((item: any, index: number) => {
@@ -197,9 +203,10 @@ const clearSearch = () => {
197 203
   getList();
198 204
 };
199 205
 
200
-const arraySpanMethod = ({ row, column, rowIndex, columnIndex }: any) => {
206
+const arraySpanMethod = ({ column, rowIndex }: any) => {
207
+  const mergeCol = ["upidName", "username"];
201 208
   // 判断列的属性
202
-  if (headerProps.value.indexOf(column.property) !== -1) {
209
+  if (mergeCol.indexOf(column.property) !== -1) {
203 210
     // 判断其值是不是为0
204 211
     if (mergeObj.value[column.property][rowIndex]) {
205 212
       return [mergeObj.value[column.property][rowIndex], 1];

+ 104 - 109
src/views/login/index.vue

@@ -1,72 +1,60 @@
1 1
 <template>
2
-  <div>
3
-    <!-- <div class="topbar">
4
-      <div class="logo">
5
-        <img src="~@/assets/img/logo.png" />
6
-      </div>
7
-      <div class="title">
8
-        <img src="~@/assets/img/top_title.png" />
9
-      </div>
10
-    </div> -->
11
-    <div class="contnet">
12
-      <div class="login_form">
13
-        <img src="~@/assets/img/top_title.png" alt="" />
14
-        <el-form :model="loginForm" :rules="loginRules" ref="form">
15
-          <el-row>
16
-            <el-col :span="24">
17
-              <div class="login_title">欢迎登陆系统</div>
2
+  <div class="contnet">
3
+    <img src="~@/assets/img/logo.png" alt="" />
4
+    <div class="login_form">
5
+      <img src="~@/assets/img/login_form_bj.png" alt="" />
6
+      <el-form :model="loginForm" :rules="loginRules" ref="form">
7
+        <el-row>
8
+          <el-col :span="24">
9
+            <div class="login_title">
10
+              <span>欢迎登录系统</span>
11
+            </div>
12
+          </el-col>
13
+        </el-row>
14
+        <el-row>
15
+          <el-col :span="24">
16
+            <el-form-item prop="username">
17
+              <el-input :prefix-icon="UserFilled" v-model="loginForm.username" placeholder="请输入您的账号" clearable />
18
+            </el-form-item>
19
+          </el-col>
20
+        </el-row>
21
+        <el-row>
22
+          <el-col :span="24">
23
+            <el-form-item prop="password">
24
+              <el-input
25
+                :prefix-icon="Lock"
26
+                type="password"
27
+                show-password
28
+                v-model="loginForm.password"
29
+                placeholder="请输入密码"
30
+                clearable
31
+              />
32
+            </el-form-item>
33
+          </el-col>
34
+        </el-row>
35
+        <!-- <el-row>
36
+          <el-form-item prop="code">
37
+            <el-col :span="16">
38
+              <el-input v-model="loginForm.code" placeholder="请输入验证码">
39
+                <template #prefix>
40
+                  <el-icon><Picture /></el-icon>
41
+                </template>
42
+              </el-input>
18 43
             </el-col>
19
-          </el-row>
20
-          <el-row>
21
-            <el-col :span="24">
22
-              <el-form-item prop="username">
23
-                <el-input
24
-                  :prefix-icon="UserFilled"
25
-                  v-model="loginForm.username"
26
-                  placeholder="请输入您的账号"
27
-                  clearable
28
-                />
29
-              </el-form-item>
44
+            <el-col :span="8">
45
+              <div class="login-code">
46
+                <span v-if="verificationCode.type == 'text'" class="login-code-img" @click="refreshCode">
47
+                  {{ verificationCode.value }}
48
+                </span>
49
+                <img v-else :src="verificationCode.src" class="login-code-img" @click="refreshCode" />
50
+              </div>
30 51
             </el-col>
31
-          </el-row>
32
-          <el-row>
33
-            <el-col :span="24">
34
-              <el-form-item prop="password">
35
-                <el-input
36
-                  :prefix-icon="Lock"
37
-                  type="password"
38
-                  show-password
39
-                  v-model="loginForm.password"
40
-                  placeholder="请输入密码"
41
-                  clearable
42
-                />
43
-              </el-form-item>
44
-            </el-col>
45
-          </el-row>
46
-          <!-- <el-form-item prop="code">
47
-            <el-row>
48
-              <el-col :span="16">
49
-                <el-input v-model="loginForm.code" placeholder="请输入验证码">
50
-                  <template #prefix>
51
-                    <el-icon><Picture /></el-icon>
52
-                  </template>
53
-                </el-input>
54
-              </el-col>
55
-              <el-col :span="8">
56
-                <div class="login-code">
57
-                  <span v-if="verificationCode.type == 'text'" class="login-code-img" @click="refreshCode">
58
-                    {{ verificationCode.value }}
59
-                  </span>
60
-                  <img v-else :src="verificationCode.src" class="login-code-img" @click="refreshCode" />
61
-                </div>
62
-              </el-col>
63
-            </el-row>
64
-          </el-form-item> -->
65
-          <el-row class="login_btn">
66
-            <el-button type="primary" @click="loginSubmit(form)">登录</el-button>
67
-          </el-row>
68
-        </el-form>
69
-      </div>
52
+          </el-form-item>
53
+        </el-row> -->
54
+        <el-row class="login_btn">
55
+          <el-button type="primary" @click="loginSubmit(form)">登录</el-button>
56
+        </el-row>
57
+      </el-form>
70 58
     </div>
71 59
   </div>
72 60
 </template>
@@ -127,68 +115,75 @@ const loginSubmit = async (formRef?: FormInstance) => {
127 115
 refreshCode();
128 116
 </script>
129 117
 <style lang="scss" scoped>
130
-.topbar {
131
-  height: 90px;
132
-  background: #020066;
133
-  display: flex;
134
-  align-items: center;
135
-  .logo {
136
-    width: 80px;
137
-    height: 80px;
138
-    display: flex;
139
-    align-items: center;
140
-    justify-content: center;
141
-    margin-left: 50px;
142
-  }
143
-  .title {
144
-    img {
145
-      height: 40px;
146
-    }
147
-  }
148
-}
149 118
 .contnet {
150 119
   width: 100%;
151
-  // height: calc(100vh - 90px);
152 120
   height: 100vh;
153 121
   overflow: hidden;
154
-  background-image: url(../../assets/img/bj2.jpg);
122
+  background-image: url(~@/assets/img/login_bj.png);
155 123
   background-size: 100% 100%;
124
+  position: relative;
125
+  & > img {
126
+    position: absolute;
127
+    top: 10%;
128
+    left: 50%;
129
+    transform: translateX(-50%);
130
+    width: 50%;
131
+  }
156 132
   .login_form {
157
-    position: fixed;
133
+    position: absolute;
158 134
     top: 50%;
159
-    left: 35%;
135
+    left: 50%;
160 136
     transform: translate(-50%, -50%);
161
-    width: 30%;
162 137
     box-sizing: border-box;
163
-    img {
164
-      width: 100%;
138
+    width: 60%;
139
+    height: 60%;
140
+    display: flex;
141
+    border-radius: 20px;
142
+    overflow: hidden;
143
+    box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.12);
144
+    & > img {
145
+      width: 65%;
165 146
     }
166 147
     .el-form {
167
-      width: 100%;
168
-      height: 330px;
148
+      height: 100%;
149
+      width: 35%;
169 150
       background-color: #fff;
170
-      border: 1px solid #c0c4cc;
171
-      border-top: 3px blue solid;
172 151
     }
173 152
     .login_title {
174
-      font-size: 20px;
175
-      color: #999;
176
-      height: 60px;
177
-      line-height: 60px;
178
-      text-align: center;
179
-      border-bottom: 1px solid #c0c4cc;
180
-      margin-bottom: 20px;
153
+      font-size: 30px;
154
+      color: #000;
155
+      height: 120px;
156
+      font-weight: bolder;
157
+      display: flex;
158
+      align-items: center;
159
+      justify-content: center;
160
+      user-select: none;
161
+      &::after {
162
+        content: "";
163
+        position: absolute;
164
+        top: 50%;
165
+        left: 0;
166
+        transform: translateY(-50%);
167
+        height: 2px;
168
+        width: 100%;
169
+        background-color: #e1e1e1;
170
+      }
171
+      & > span {
172
+        background-color: #fff;
173
+        padding: 10px;
174
+        z-index: 999;
175
+      }
181 176
     }
182 177
     .el-form-item {
183
-      display: block;
184
-      padding: 0 20px;
185
-      &__label {
186
-        color: #000;
187
-        font-size: 16px;
178
+      padding: 10px 20px;
179
+      .el-input {
180
+        height: 40px;
188 181
       }
189 182
     }
190 183
     .el-button {
191 184
       width: 100%;
185
+      height: 40px;
186
+      border-radius: 20px;
192 187
       margin: 30px 20px 0 20px;
193 188
       background-color: #4a4996;
194 189
       border-color: #4a4996;
@@ -197,7 +192,7 @@ refreshCode();
197 192
       display: flex;
198 193
       align-items: center;
199 194
       justify-content: space-around;
200
-      margin: 0 0 0 10px;
195
+      margin-left: 10px;
201 196
       .login-code-img {
202 197
         margin-top: 2px;
203 198
         width: 100px;