Compare commits
2 Commits
011a3f58e6
...
cdc7efce15
Author | SHA1 | Date |
---|---|---|
Kane | cdc7efce15 | |
Kane | bf19c775cf |
|
@ -0,0 +1,174 @@
|
|||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-03-14 09:19:21
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /it-console/.eslintrc.cjs
|
||||
* @Description: eslint 配置文件
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: { // 需要在env中指定运行的环境,这些环境其实就是一组预定义的全局变量,让 ESLint 知道当前环境存在这些全局变量
|
||||
node: true,
|
||||
browser: true,
|
||||
es2021: true,
|
||||
},
|
||||
parser:"espree",
|
||||
parserOptions:{
|
||||
sourceType: "module",
|
||||
ecmaVersion: 2021,
|
||||
},
|
||||
extends:["eslint:recommended",],
|
||||
rules:{
|
||||
indent: ["warn", 4,],
|
||||
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"no-unused-vars": "warn",
|
||||
semi: ["error", "always",], // 控制行尾部分号
|
||||
quotes: ["error", "double",],
|
||||
"comma-dangle": ["error", {
|
||||
arrays: "always",
|
||||
objects: "always",
|
||||
imports: "never",
|
||||
exports: "never",
|
||||
functions: "never",
|
||||
},], // 数组和对象键值对最后一个逗号
|
||||
"comma-style": ["error", "last",], // 逗号在行位
|
||||
"array-bracket-spacing": ["error", "never",],
|
||||
"no-undef-init": "error",
|
||||
"no-invalid-this": "error",
|
||||
"no-use-before-define": "error",
|
||||
"no-shadow-restricted-names": "error", // 禁止对一些关键字或者保留字进行赋值操作,比如NaN、Infinity、undefined、eval、arguments等
|
||||
"comma-spacing": ["error", { before: false, after: true, },],
|
||||
"brace-style": ["error", "allman", { allowSingleLine: true, },],
|
||||
"prefer-const": "warn",
|
||||
"space-before-function-paren": ["error", {
|
||||
anonymous: "always",
|
||||
named: "never",
|
||||
asyncArrow: "always",
|
||||
},],
|
||||
},
|
||||
overrides: [
|
||||
{
|
||||
files: ["*.vue",],
|
||||
parser: "vue-eslint-parser",
|
||||
parserOptions: {
|
||||
ecmaVersion: 2021,
|
||||
sourceType: "module",
|
||||
parser: { // <script>标签中的lang属性配置不同的parser
|
||||
ts: "@typescript-eslint/parser",
|
||||
js: "espree",
|
||||
"<template>": "espree",
|
||||
},
|
||||
},
|
||||
plugins: ["eslint-plugin-vue",],
|
||||
extends: [
|
||||
"plugin:vue/vue3-essential",
|
||||
"plugin:vue/recommended",
|
||||
"eslint:recommended",
|
||||
"standard-with-typescript",
|
||||
"plugin:@typescript-eslint/eslint-recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
],
|
||||
rules: {
|
||||
indent: ["warn", 4,],
|
||||
// "space-in-parens": ["error", "always", { exceptions: ["empty",], },],
|
||||
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"no-unused-vars": "warn",
|
||||
semi: ["error", "always",], // 控制行尾部分号
|
||||
quotes: ["error", "double",],
|
||||
"comma-dangle": ["error", {
|
||||
arrays: "always",
|
||||
objects: "always",
|
||||
imports: "never",
|
||||
exports: "never",
|
||||
functions: "never",
|
||||
},], // 数组和对象键值对最后一个逗号
|
||||
"comma-style": ["error", "last",], // 逗号在行位
|
||||
"array-bracket-spacing": ["error", "never",],
|
||||
"no-undef-init": "error",
|
||||
"no-invalid-this": "error",
|
||||
"no-use-before-define": "error",
|
||||
"no-shadow-restricted-names": "error", // 禁止对一些关键字或者保留字进行赋值操作,比如NaN、Infinity、undefined、eval、arguments等
|
||||
"comma-spacing": ["error", { before: false, after: true, },],
|
||||
"brace-style": ["error", "allman", { allowSingleLine: true, },],
|
||||
"prefer-const": "warn",
|
||||
"space-before-function-paren": ["error", {
|
||||
anonymous: "always",
|
||||
named: "never",
|
||||
asyncArrow: "always",
|
||||
},],
|
||||
// vue
|
||||
"vue/html-indent": ["error", 4,],
|
||||
// typescript
|
||||
"@typescript-eslint/indent": ["warn", 4,],
|
||||
"@typescript-eslint/no-extra-semi": "off",
|
||||
"@typescript-eslint/no-inferrable-types": "off",
|
||||
"@typescript-eslint/no-unused-vars": "warn",
|
||||
"@typescript-eslint/ban-ts-comment": "warn",
|
||||
"@typescript-eslint/member-delimiter-style": "off",
|
||||
"@typescript-eslint/semi": ["error", "always",], // 控制行尾部分号
|
||||
"@typescript-eslint/brace-style": ["error", "allman", { allowSingleLine: true, },],
|
||||
"@typescript-eslint/comma-dangle": ["error", {
|
||||
arrays: "always",
|
||||
objects: "always",
|
||||
imports: "never",
|
||||
exports: "never",
|
||||
functions: "never",
|
||||
},], // 数组和对象键值对最后一个逗号
|
||||
"@typescript-eslint/quotes": ["error", "double",],
|
||||
"@typescript-eslint/space-before-function-paren": "off",
|
||||
},
|
||||
},
|
||||
{
|
||||
files: ["*.ts",],
|
||||
parser: "@typescript-eslint/parser",
|
||||
parserOptions: {
|
||||
project: "./tsconfig.json",
|
||||
},
|
||||
plugins: ["@typescript-eslint",],
|
||||
extends: [
|
||||
"standard-with-typescript",
|
||||
"eslint:recommended",
|
||||
"plugin:@typescript-eslint/eslint-recommended",
|
||||
"plugin:@typescript-eslint/recommended",
|
||||
],
|
||||
rules: {
|
||||
"space-in-parens": ["error", "always", { exceptions: ["empty",], },],
|
||||
"no-console": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"no-debugger": process.env.NODE_ENV === "production" ? "warn" : "off",
|
||||
"@typescript-eslint/indent": ["error", 4,],
|
||||
"@typescript-eslint/no-extra-semi": "off",
|
||||
"@typescript-eslint/no-inferrable-types": "off",
|
||||
"@typescript-eslint/no-unused-vars": "warn",
|
||||
"@typescript-eslint/ban-ts-comment": "warn",
|
||||
"@typescript-eslint/member-delimiter-style": "off",
|
||||
"@typescript-eslint/semi": ["error", "always",], // 控制行尾部分号
|
||||
"@typescript-eslint/brace-style": ["error", "allman", { allowSingleLine: true, },],
|
||||
"@typescript-eslint/comma-dangle": ["error", {
|
||||
arrays: "always",
|
||||
objects: "always",
|
||||
imports: "never",
|
||||
exports: "never",
|
||||
functions: "never",
|
||||
},], // 数组和对象键值对最后一个逗号
|
||||
"@typescript-eslint/quotes": ["error", "double",],
|
||||
"@typescript-eslint/space-before-function-paren": "off",
|
||||
"@typescript-eslint/strict-boolean-expressions": ["error", {
|
||||
allowString: false,
|
||||
},],
|
||||
"comma-style": ["error", "last",], // 逗号在行位
|
||||
"array-bracket-spacing": ["error", "never",],
|
||||
"no-undef-init": "error",
|
||||
"no-invalid-this": "error",
|
||||
"no-use-before-define": "error",
|
||||
"no-shadow-restricted-names": "error", // 禁止对一些关键字或者保留字进行赋值操作,比如NaN、Infinity、undefined、eval、arguments等
|
||||
"prefer-const": "warn",
|
||||
"spaced-comment": "error",
|
||||
"space-before-function-paren": "off",
|
||||
},
|
||||
},
|
||||
],
|
||||
};
|
|
@ -1,44 +0,0 @@
|
|||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2022-12-14 15:12:46
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-02-14 23:10:53
|
||||
* @FilePath: /IT工具综合平台/.eslintrc.js
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
module.exports = {
|
||||
root: true,
|
||||
env: {
|
||||
node: true,
|
||||
},
|
||||
'extends': [
|
||||
'plugin:vue/vue3-essential',
|
||||
'eslint:recommended',
|
||||
],
|
||||
parserOptions: {
|
||||
parser: '@babel/eslint-parser',
|
||||
},
|
||||
rules: {
|
||||
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
|
||||
"no-unused-vars": "warn",
|
||||
"semi": ["error", "always",],//控制行尾部分号
|
||||
"comma-dangle": ["warn", {
|
||||
"arrays": "always",
|
||||
"objects": "always",
|
||||
"imports": "never",
|
||||
"exports": "never",
|
||||
"functions": "never",
|
||||
},],//数组和对象键值对最后一个逗号
|
||||
"comma-style": ["error", "last",], //逗号在行位
|
||||
"array-bracket-spacing": ["error", "never",],
|
||||
"no-undef-init": "error",
|
||||
"no-invalid-this": "error",
|
||||
"no-use-before-define": "error",
|
||||
"no-shadow-restricted-names": "error", //禁止对一些关键字或者保留字进行赋值操作,比如NaN、Infinity、undefined、eval、arguments等
|
||||
// "comma-spacing": ["error", { "before": false, "after": true, },],
|
||||
"brace-style": ["error", "allman", { "allowSingleLine": true, },],
|
||||
},
|
||||
};
|
|
@ -1,5 +1,14 @@
|
|||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-02-23 00:15:23
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /it-console/babel.config.js
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
module.exports = {
|
||||
presets: [
|
||||
'@vue/cli-plugin-babel/preset'
|
||||
]
|
||||
}
|
||||
presets: [
|
||||
"@vue/cli-plugin-babel/preset",
|
||||
],
|
||||
};
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-03-03 10:07:00
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/env.d.ts
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
interface ImportMetaEnv
|
||||
{
|
||||
readonly VITE_APP_TITLE: string;
|
||||
readonly VITE_URL_VALIDATE_ACCOUNT: string;
|
||||
// 更多环境变量...
|
||||
}
|
||||
|
||||
interface ImportMeta
|
||||
{
|
||||
readonly env: ImportMetaEnv;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -24,7 +24,9 @@
|
|||
"vite": "^4.1.4",
|
||||
"vue": "^3.2.13",
|
||||
"vue-router": "^4.0.3",
|
||||
"vuex": "^4.0.0"
|
||||
"vuex": "^4.0.0",
|
||||
"@typescript-eslint/eslint-plugin": "^5.54.0",
|
||||
"@typescript-eslint/parser": "^5.54.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.16",
|
||||
|
@ -39,8 +41,7 @@
|
|||
"@vue/cli-plugin-vuex": "~5.0.0",
|
||||
"@vue/cli-service": "~5.0.0",
|
||||
"@vue/compiler-sfc": "^3.2.26",
|
||||
"eslint": "^7.32.0",
|
||||
"eslint-plugin-vue": "^8.0.3",
|
||||
"eslint": "^8.35.0",
|
||||
"node-sass": "^8.0.0",
|
||||
"sass-loader": "^13.2.0",
|
||||
"vite": "^2.7.2",
|
||||
|
@ -48,6 +49,10 @@
|
|||
"vite-plugin-html": "3.2.0",
|
||||
"vue-cli-plugin-element-plus": "~0.0.13",
|
||||
"webpack": "^5.75.0",
|
||||
"webpack-cli": "^5.0.1"
|
||||
"webpack-cli": "^5.0.1",
|
||||
"eslint-config-recommended": "^4.1.0",
|
||||
"eslint-config-standard-with-typescript": "^34.0.0",
|
||||
"eslint-plugin-vue": "^9.9.0",
|
||||
"sass": "^1.58.3"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-03-04 17:21:37
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/sfc.d.ts
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-03-04 17:23:02
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/shims-vue.d.ts
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
declare module '*.vue' {
|
||||
import { ComponentOptions } from 'vue';
|
||||
const componentOptions: ComponentOptions;
|
||||
export default componentOptions;
|
||||
}
|
|
@ -2,33 +2,33 @@
|
|||
* @Author: Kane
|
||||
* @Date: 2022-12-14 15:12:46
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-02-15 09:34:25
|
||||
* @FilePath: /IT工具综合平台/src/App.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
* @LastEditTime: 2023-03-21 23:14:06
|
||||
* @FilePath: /it-console/src/App.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<el-config-provider :locale="this.locale">
|
||||
<router-view></router-view>
|
||||
</el-config-provider>
|
||||
<el-config-provider :locale="locale">
|
||||
<router-view />
|
||||
</el-config-provider>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
//引入语言组件
|
||||
// 引入语言组件
|
||||
import zhCn from "element-plus/lib/locale/lang/zh-cn";
|
||||
|
||||
export default {
|
||||
name: "App",
|
||||
setup()
|
||||
{
|
||||
const locale = zhCn;
|
||||
|
||||
return { locale, };
|
||||
},
|
||||
components: {
|
||||
name: "App",
|
||||
components: {
|
||||
// HelloWorld,
|
||||
},
|
||||
},
|
||||
setup()
|
||||
{
|
||||
const locale = zhCn;
|
||||
|
||||
return { locale, };
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
|
|
|
@ -4,24 +4,31 @@
|
|||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-02-06 09:26:48
|
||||
* @FilePath: /IT工具综合平台/src/layout/Index.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<el-container id="layout-container" v-loading="ui.ageVisible" element-loading-text="载入应用数据…">
|
||||
<el-header id="layout-header">
|
||||
<LayoutHeader />
|
||||
</el-header>
|
||||
<el-container id="layout-container-down">
|
||||
<el-aside :width="asideWidth" id="layout-aside">
|
||||
<LayoutAside />
|
||||
</el-aside>
|
||||
<el-main id="layout-main">
|
||||
<LayoutMain />
|
||||
</el-main>
|
||||
<el-container
|
||||
id="layout-container"
|
||||
v-loading="ui.ageVisible"
|
||||
element-loading-text="载入应用数据…"
|
||||
>
|
||||
<el-header id="layout-header">
|
||||
<LayoutHeader />
|
||||
</el-header>
|
||||
<el-container id="layout-container-down">
|
||||
<el-aside
|
||||
id="layout-aside"
|
||||
:width="asideWidth"
|
||||
>
|
||||
<LayoutAside />
|
||||
</el-aside>
|
||||
<el-main id="layout-main">
|
||||
<LayoutMain />
|
||||
</el-main>
|
||||
</el-container>
|
||||
</el-container>
|
||||
</el-container>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
@ -33,50 +40,50 @@ import { onMounted, computed, reactive } from "vue";
|
|||
// import { query_requirement_status } from "@/utils/api/requirement/requirement.js";
|
||||
|
||||
export default {
|
||||
name: "layoutPage",
|
||||
setup()
|
||||
{
|
||||
const store = useStore();
|
||||
|
||||
const ui = reactive(
|
||||
{
|
||||
pageVisible: true,
|
||||
});
|
||||
|
||||
const asideWidth = computed(() =>
|
||||
name: "LayoutPage",
|
||||
components: {
|
||||
LayoutAside,
|
||||
LayoutHeader,
|
||||
LayoutMain,
|
||||
},
|
||||
setup()
|
||||
{
|
||||
const collapse = store.state.app.asideBarCollapse;
|
||||
const store = useStore();
|
||||
|
||||
return collapse === true ? "65px" : "180px";
|
||||
});
|
||||
const ui = reactive(
|
||||
{
|
||||
pageVisible: true,
|
||||
});
|
||||
|
||||
onMounted(() =>
|
||||
{
|
||||
//加载数据
|
||||
// query_requirement_status()
|
||||
// .then((response) =>
|
||||
// {
|
||||
// // debugger;
|
||||
// const data = response.data;
|
||||
// console.log(data);
|
||||
// })
|
||||
// .catch((error) =>
|
||||
// {
|
||||
// // debugger;
|
||||
// console.log(error);
|
||||
// });
|
||||
});
|
||||
const asideWidth = computed(() =>
|
||||
{
|
||||
const collapse = store.state.app.asideBarCollapse;
|
||||
|
||||
return {
|
||||
ui,
|
||||
asideWidth,
|
||||
};
|
||||
},
|
||||
components: {
|
||||
LayoutAside,
|
||||
LayoutHeader,
|
||||
LayoutMain,
|
||||
},
|
||||
return collapse === true ? "65px" : "180px";
|
||||
});
|
||||
|
||||
onMounted(() =>
|
||||
{
|
||||
// 加载数据
|
||||
// query_requirement_status()
|
||||
// .then((response) =>
|
||||
// {
|
||||
// // debugger;
|
||||
// const data = response.data;
|
||||
// console.log(data);
|
||||
// })
|
||||
// .catch((error) =>
|
||||
// {
|
||||
// // debugger;
|
||||
// console.log(error);
|
||||
// });
|
||||
});
|
||||
|
||||
return {
|
||||
ui,
|
||||
asideWidth,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
|
@ -115,4 +122,4 @@ export default {
|
|||
/* flex-grow: 1; */
|
||||
/* overflow: overlay; */
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
@ -2,39 +2,75 @@
|
|||
* @Author: Kane
|
||||
* @Date: 2023-01-04 11:30:33
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-02-06 09:28:16
|
||||
* @FilePath: /IT工具综合平台/src/layout/components/Aside.vue
|
||||
* @Description:
|
||||
*
|
||||
* @LastEditTime: 2023-03-21 23:18:41
|
||||
* @FilePath: /it-console/src/layout/components/Aside.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved. 223142 2f4156
|
||||
-->
|
||||
<template>
|
||||
<el-scrollbar class="wrapper">
|
||||
<el-menu id="side-bar" router :default-active="currentPath" background-color="#2f4156" text-color="#fff"
|
||||
active-text-color="#ffd04b" :collapse="asideCollapse">
|
||||
<template v-for="route in routes" :key="route.path">
|
||||
<el-menu
|
||||
id="side-bar"
|
||||
router
|
||||
:default-active="currentPath"
|
||||
background-color="#2f4156"
|
||||
text-color="#fff"
|
||||
active-text-color="#ffd04b"
|
||||
:collapse="asideCollapse"
|
||||
>
|
||||
<template
|
||||
v-for="route in routes"
|
||||
>
|
||||
<template v-if="!route.hidden">
|
||||
<template v-if="hasOnlyChild(route.children)">
|
||||
<!-- 当只有一个子路由时,直接渲染子路由 -->
|
||||
<el-menu-item :index="route.children[0].path" class="sidebar-submenu">
|
||||
<component :is="route.children[0].meta.icon" class="icons">
|
||||
</component>
|
||||
<el-menu-item
|
||||
:key="route.path"
|
||||
:index="route.children[0].path"
|
||||
class="sidebar-submenu"
|
||||
>
|
||||
<component
|
||||
:is="route.children[0].meta.icon"
|
||||
class="icons"
|
||||
/>
|
||||
<!-- <el-icon v-html="route.children[0].meta && route.children[0].meta.icon"></el-icon> -->
|
||||
<template #title>{{ route.children[0].meta && route.children[0].meta.title }}</template>
|
||||
<template #title>
|
||||
{{ route.children[0].meta && route.children[0].meta.title }}
|
||||
</template>
|
||||
</el-menu-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<!-- 不是一个子路由时,有可能没有子路由,或者是多个子路由 -->
|
||||
<el-sub-menu v-if="route.children && route.children.length" :index="route.path"
|
||||
class="sidebar-submenu">
|
||||
<el-sub-menu
|
||||
v-if="route.children && route.children.length"
|
||||
:key="route.path"
|
||||
:index="route.path"
|
||||
class="sidebar-submenu"
|
||||
>
|
||||
<template #title>
|
||||
<component :is="route.meta.icon" class="icons"></component>
|
||||
<component
|
||||
:is="route.meta.icon"
|
||||
class="icons"
|
||||
/>
|
||||
<span>{{ route.meta && route.meta.title }}</span>
|
||||
</template>
|
||||
<template v-for="child in route.children" :key="child.path">
|
||||
<el-menu-item v-if="!child.hidden" :index="child.path" class="sidebar-item">
|
||||
<component :is="child.meta.icon" class="icons"></component>
|
||||
<template #title>{{ child.meta && child.meta.title }}</template>
|
||||
<template
|
||||
v-for="child in route.children"
|
||||
>
|
||||
<el-menu-item
|
||||
v-if="!child.hidden"
|
||||
:key="child.path"
|
||||
:index="child.path"
|
||||
class="sidebar-item"
|
||||
>
|
||||
<component
|
||||
:is="child.meta.icon"
|
||||
class="icons"
|
||||
/>
|
||||
<template #title>
|
||||
{{ child.meta && child.meta.title }}
|
||||
</template>
|
||||
</el-menu-item>
|
||||
</template>
|
||||
</el-sub-menu>
|
||||
|
@ -54,23 +90,23 @@ export default {
|
|||
name: "LayoutAside",
|
||||
setup()
|
||||
{
|
||||
const router = useRouter();//路由
|
||||
const routes = router.getRoutes();//路由数组
|
||||
const router = useRouter();// 路由
|
||||
const routes = router.getRoutes();// 路由数组
|
||||
const store = useStore();
|
||||
|
||||
//用于判断一个路由是否只有一项子路由
|
||||
// 用于判断一个路由是否只有一项子路由
|
||||
const hasOnlyChild = (children) =>
|
||||
{
|
||||
//防御验证
|
||||
// 防御验证
|
||||
if (!children)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
//剔除掉hidden的路由
|
||||
// 剔除掉hidden的路由
|
||||
const routes = children.filter((item) =>
|
||||
{
|
||||
return item.hidden ? false : true;
|
||||
return !item.hidden;
|
||||
});
|
||||
|
||||
if (routes.length === 1)
|
||||
|
@ -81,16 +117,16 @@ export default {
|
|||
return false;
|
||||
};
|
||||
|
||||
//计算变量
|
||||
//获取当前的路由
|
||||
// 计算变量
|
||||
// 获取当前的路由
|
||||
const currentPath = computed(() =>
|
||||
{
|
||||
let path = useRoute().path;
|
||||
const path = useRoute().path;
|
||||
|
||||
return path;
|
||||
});
|
||||
|
||||
//获取导航栏是否折叠的标志
|
||||
// 获取导航栏是否折叠的标志
|
||||
const asideCollapse = computed(() =>
|
||||
{
|
||||
return store.state.app.ui.asideBarCollapse;
|
||||
|
@ -163,4 +199,4 @@ export default {
|
|||
height: 100%;
|
||||
/* min-height: 400px; */
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
@ -4,54 +4,57 @@
|
|||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-02-04 01:09:49
|
||||
* @FilePath: \IT工具综合平台\src\layout\components\Header.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="app_banner no_select">
|
||||
<span class="company_name">CPIC</span>
|
||||
<div class="version_div">
|
||||
<div>测试版</div>
|
||||
<div>3.6.7 x64 Build 202208301257</div>
|
||||
<div class="app_banner no_select">
|
||||
<span class="company_name">CPIC</span>
|
||||
<div class="version_div">
|
||||
<div>测试版</div>
|
||||
<div>3.6.7 x64 Build 202208301257</div>
|
||||
</div>
|
||||
<div class="buttons_div">
|
||||
<User style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" />
|
||||
<SwitchButton
|
||||
style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;"
|
||||
@click="logout"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="buttons_div">
|
||||
<User style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" />
|
||||
<SwitchButton style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" @click="logout" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
//import { ElMessage } from "element-plus";
|
||||
// import { ElMessage } from "element-plus";
|
||||
import { Logout } from "../../utils/api/info/account";
|
||||
|
||||
export default {
|
||||
name: "AppBanner",
|
||||
data()
|
||||
{
|
||||
return {};
|
||||
},
|
||||
// created() {
|
||||
// console.log("banner请求数据!");
|
||||
// },
|
||||
mounted()
|
||||
{
|
||||
//console.log("banner请求数据!");
|
||||
},
|
||||
methods: {
|
||||
logout()
|
||||
name: "AppBanner",
|
||||
data()
|
||||
{
|
||||
this.$confirm("是否退出系统?", "请确认", {
|
||||
confirmButtonText: "是",
|
||||
cancelButtonText: "否",
|
||||
type: "warning",
|
||||
}).then(() =>
|
||||
{
|
||||
Logout();
|
||||
});
|
||||
return {};
|
||||
},
|
||||
// created() {
|
||||
// console.log("banner请求数据!");
|
||||
// },
|
||||
mounted()
|
||||
{
|
||||
// console.log("banner请求数据!");
|
||||
},
|
||||
methods: {
|
||||
logout()
|
||||
{
|
||||
this.$confirm("是否退出系统?", "请确认", {
|
||||
confirmButtonText: "是",
|
||||
cancelButtonText: "否",
|
||||
type: "warning",
|
||||
}).then(() =>
|
||||
{
|
||||
Logout();
|
||||
});
|
||||
},
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
|
@ -96,4 +99,4 @@ export default {
|
|||
padding-top: 5px;
|
||||
/* border: 1px solid salmon; */
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
@ -2,24 +2,27 @@
|
|||
* @Author: Kane
|
||||
* @Date: 2023-01-04 11:39:04
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-02-22 18:33:11
|
||||
* @FilePath: /IT工具综合平台/src/layout/components/Header.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
* @LastEditTime: 2023-03-21 23:19:06
|
||||
* @FilePath: /it-console/src/layout/components/Header.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="app_banner no_select">
|
||||
<span class="company_name">CPIC</span>
|
||||
<div class="version_div">
|
||||
<div>测试版</div>
|
||||
<div>3.6.7 x64 Build 202208301257</div>
|
||||
<div class="app_banner no_select">
|
||||
<span class="company_name">CPIC</span>
|
||||
<div class="version_div">
|
||||
<div>测试版</div>
|
||||
<div>3.6.7 x64 Build 202208301257</div>
|
||||
</div>
|
||||
<div class="buttons_div">
|
||||
<User style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" />
|
||||
<SwitchButton
|
||||
style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;"
|
||||
@click="logout"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="buttons_div">
|
||||
<User style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" />
|
||||
<SwitchButton style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" @click="logout" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
@ -27,23 +30,23 @@ import { ElMessageBox } from "element-plus";
|
|||
import { Logout } from "../../utils/api/info/account";
|
||||
|
||||
export default {
|
||||
name: "AppBanner",
|
||||
setup()
|
||||
{
|
||||
const logout = () =>
|
||||
name: "AppBanner",
|
||||
setup()
|
||||
{
|
||||
ElMessageBox.confirm("是否退出系统?", "请确认", {
|
||||
confirmButtonText: "是",
|
||||
cancelButtonText: "否",
|
||||
type: "warning",
|
||||
}).then(() =>
|
||||
{
|
||||
Logout();
|
||||
});
|
||||
};
|
||||
const logout = () =>
|
||||
{
|
||||
ElMessageBox.confirm("是否退出系统?", "请确认", {
|
||||
confirmButtonText: "是",
|
||||
cancelButtonText: "否",
|
||||
type: "warning",
|
||||
}).then(() =>
|
||||
{
|
||||
Logout();
|
||||
});
|
||||
};
|
||||
|
||||
return { logout, };
|
||||
},
|
||||
return { logout, };
|
||||
},
|
||||
};
|
||||
</script>
|
||||
<style scoped>
|
||||
|
@ -88,4 +91,4 @@ export default {
|
|||
padding-top: 5px;
|
||||
/* border: 1px solid salmon; */
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
* @Author: Kane
|
||||
* @Date: 2023-01-04 11:40:03
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-02-07 10:47:57
|
||||
* @FilePath: /IT工具综合平台/src/layout/components/Main.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
* @LastEditTime: 2023-03-21 23:19:27
|
||||
* @FilePath: /it-console/src/layout/components/Main.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<!-- <div class="main-content"> -->
|
||||
|
@ -33,4 +33,4 @@ export default {
|
|||
.view-wrapper {
|
||||
padding: 10px;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
@ -2,214 +2,214 @@
|
|||
* @Author: Kane
|
||||
* @Date: 2022-12-14 15:12:46
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-02-21 13:09:15
|
||||
* @FilePath: /IT工具综合平台/src/router/index.js
|
||||
* @LastEditTime: 2023-03-21 23:20:10
|
||||
* @FilePath: /it-console/src/router/index.js
|
||||
* @Description: 定义应用路由配置
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
import { createRouter, createWebHashHistory } from 'vue-router';
|
||||
import { createRouter, createWebHashHistory } from "vue-router";
|
||||
|
||||
const routes = [
|
||||
//框架路由
|
||||
{
|
||||
path: "/",
|
||||
name: "Root",
|
||||
redirect: "Login", //默认路由指向登录页面
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
path: "/error-page",
|
||||
name: "ErrorPage",
|
||||
hidden: true,
|
||||
component: () => import("@/views/ErrorPage.vue"),
|
||||
},
|
||||
{
|
||||
path: "/login",
|
||||
name: "Login",
|
||||
component: () => import("../views/account/Login.vue"),
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
path: "/home",
|
||||
name: "Home",
|
||||
hidden: true,
|
||||
meta: {
|
||||
title: "控制台",
|
||||
//框架路由
|
||||
{
|
||||
path: "/",
|
||||
name: "Root",
|
||||
redirect: "Login", //默认路由指向登录页面
|
||||
hidden: true,
|
||||
},
|
||||
component: () => import("../layout/Index.vue"),
|
||||
},
|
||||
//侧边导航栏路由
|
||||
{ //首页
|
||||
path: "/console",
|
||||
name: "Console",
|
||||
meta: {
|
||||
title: "总览",
|
||||
icon: "house",
|
||||
{
|
||||
path: "/error-page",
|
||||
name: "ErrorPage",
|
||||
hidden: true,
|
||||
component: () => import("@/views/ErrorPage.vue"),
|
||||
},
|
||||
component: () => import("../layout/Index.vue"),
|
||||
children: [
|
||||
{
|
||||
path: "/desktop",
|
||||
name: "DeskTop",
|
||||
{
|
||||
path: "/login",
|
||||
name: "Login",
|
||||
component: () => import("../views/account/Login.vue"),
|
||||
hidden: true,
|
||||
},
|
||||
{
|
||||
path: "/home",
|
||||
name: "Home",
|
||||
hidden: true,
|
||||
meta: {
|
||||
title: "工作台",
|
||||
icon: "house",
|
||||
title: "控制台",
|
||||
},
|
||||
component: () => import("../views/overview/Desktop.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
component: () => import("../layout/Index.vue"),
|
||||
},
|
||||
//侧边导航栏路由
|
||||
{ //首页
|
||||
path: "/console",
|
||||
name: "Console",
|
||||
meta: {
|
||||
title: "总览",
|
||||
icon: "house",
|
||||
},
|
||||
component: () => import("../layout/Index.vue"),
|
||||
children: [
|
||||
{
|
||||
path: "/desktop",
|
||||
name: "DeskTop",
|
||||
meta: {
|
||||
title: "工作台",
|
||||
icon: "house",
|
||||
},
|
||||
component: () => import("../views/overview/Desktop.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
//需求管理
|
||||
path: "/requirement",
|
||||
name: "Requirement",
|
||||
meta: {
|
||||
title: "需求管理",
|
||||
icon: "Document",
|
||||
path: "/requirement",
|
||||
name: "Requirement",
|
||||
meta: {
|
||||
title: "需求管理",
|
||||
icon: "Document",
|
||||
},
|
||||
component: () => import("../layout/Index.vue"),
|
||||
children: [
|
||||
{
|
||||
path: "/requirement-manager",
|
||||
name: "RequirementManager",
|
||||
meta: {
|
||||
title: "需求管理",
|
||||
icon: "Document",
|
||||
},
|
||||
component: () => import("../views/requirement/RequirementManager.vue"),
|
||||
},
|
||||
{
|
||||
path: "/requirement-editing",
|
||||
name: "RequirementEditing",
|
||||
hidden: true,
|
||||
meta: {
|
||||
title: "需求管理",
|
||||
icon: "edit",
|
||||
},
|
||||
component: () => import("../views/requirement/RequirementEditing.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
component: () => import("../layout/Index.vue"),
|
||||
children: [
|
||||
{
|
||||
path: "/requirement-manager",
|
||||
name: "RequirementManager",
|
||||
meta: {
|
||||
title: "需求管理",
|
||||
icon: "Document",
|
||||
},
|
||||
component: () => import("../views/requirement/RequirementManager.vue"),
|
||||
},
|
||||
{
|
||||
path: "/requirement-editing",
|
||||
name: "RequirementEditing",
|
||||
hidden: true,
|
||||
meta: {
|
||||
title: "需求管理",
|
||||
icon: "edit",
|
||||
},
|
||||
component: () => import("../views/requirement/RequirementEditing.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
{
|
||||
//信息查询
|
||||
path: "/query_info",
|
||||
name: "QueryInfo",
|
||||
meta: {
|
||||
title: "信息查询",
|
||||
icon: "search",
|
||||
path: "/query_info",
|
||||
name: "QueryInfo",
|
||||
meta: {
|
||||
title: "信息查询",
|
||||
icon: "search",
|
||||
},
|
||||
component: () => import("@/layout/Index.vue"),
|
||||
children: [
|
||||
{
|
||||
path: "/query_stuff",
|
||||
name: "QueryStuff",
|
||||
meta: {
|
||||
title: "人员信息",
|
||||
icon: "user",
|
||||
},
|
||||
component: () => import("@/views/info/StaffInfo.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
component: () => import("@/layout/Index.vue"),
|
||||
children: [
|
||||
{
|
||||
path: "/query_stuff",
|
||||
name: "QueryStuff",
|
||||
{//权限管理
|
||||
path: "/privilege",
|
||||
name: "Privilege",
|
||||
meta: {
|
||||
title: "人员信息",
|
||||
icon: "user",
|
||||
title: "权限管理",
|
||||
icon: "User",
|
||||
},
|
||||
component: () => import("@/views/info/StaffInfo.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
{//权限管理
|
||||
path: "/privilege",
|
||||
name: "Privilege",
|
||||
meta: {
|
||||
title: "权限管理",
|
||||
icon: "User",
|
||||
children: [
|
||||
{
|
||||
path: "/user-manager",
|
||||
name: "UserManager",
|
||||
meta: {
|
||||
title: "用户管理",
|
||||
icon: "User",
|
||||
},
|
||||
component: () => import("../views/privilege/StaffInfo.vue"),
|
||||
},
|
||||
{
|
||||
path: "/privilege-manager",
|
||||
name: "PrivilegeManager",
|
||||
meta: {
|
||||
title: "权限管理",
|
||||
icon: "edit",
|
||||
},
|
||||
component: () => import("../views/privilege/PrivilegeManager.vue"),
|
||||
},
|
||||
],
|
||||
component: () => import("../layout/Index.vue"),
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: "/user-manager",
|
||||
name: "UserManager",
|
||||
{
|
||||
path: "/network",
|
||||
name: "NetworkManager",
|
||||
meta: {
|
||||
title: "用户管理",
|
||||
icon: "User",
|
||||
title: "网络管理",
|
||||
icon: "switch",
|
||||
},
|
||||
component: () => import("../views/privilege/StaffInfo.vue"),
|
||||
},
|
||||
{
|
||||
path: "/privilege-manager",
|
||||
name: "PrivilegeManager",
|
||||
meta: {
|
||||
title: "权限管理",
|
||||
icon: "edit",
|
||||
},
|
||||
component: () => import("../views/privilege/PrivilegeManager.vue"),
|
||||
},
|
||||
],
|
||||
component: () => import("../layout/Index.vue"),
|
||||
},
|
||||
{
|
||||
path: "/network",
|
||||
name: "NetworkManager",
|
||||
meta: {
|
||||
title: "网络管理",
|
||||
icon: "switch",
|
||||
component: () => import("../layout/Index.vue"),
|
||||
children: [
|
||||
{
|
||||
path: "/network-point-manager",
|
||||
name: "NetworkPointManager",
|
||||
meta: {
|
||||
title: "网络点管理",
|
||||
icon: "Monitor",
|
||||
},
|
||||
component: () => import("../views/network/NetworkPoint/NetworkPoint.vue"),
|
||||
},
|
||||
{
|
||||
path: "/network-point-edit",
|
||||
name: "NetworkPointEdit",
|
||||
hidden: true,
|
||||
component: () => import("../views/network/NetworkPoint/EditNetworkPoint.vue"),
|
||||
},
|
||||
{
|
||||
path: "/switch-manager",
|
||||
name: "SwitchManager",
|
||||
meta: {
|
||||
title: "交换机管理",
|
||||
icon: "switch",
|
||||
},
|
||||
component: () => import("../views/network/switch/SwitchManager.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
component: () => import("../layout/Index.vue"),
|
||||
children: [
|
||||
{
|
||||
path: "/network-point-manager",
|
||||
name: "NetworkPointManager",
|
||||
meta: {
|
||||
title: "网络点管理",
|
||||
icon: "Monitor",
|
||||
},
|
||||
component: () => import("../views/network/NetworkPoint/NetworkPoint.vue"),
|
||||
},
|
||||
{
|
||||
path: "/network-point-edit",
|
||||
name: "NetworkPointEdit",
|
||||
hidden: true,
|
||||
component: () => import("../views/network/NetworkPoint/EditNetworkPoint.vue"),
|
||||
},
|
||||
{
|
||||
path: "/switch-manager",
|
||||
name: "SwitchManager",
|
||||
meta: {
|
||||
title: "交换机管理",
|
||||
icon: "switch",
|
||||
},
|
||||
component: () => import("../views/network/switch/SwitchManager.vue"),
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const router = createRouter({
|
||||
history: createWebHashHistory(),
|
||||
routes,
|
||||
history: createWebHashHistory(),
|
||||
routes,
|
||||
});
|
||||
|
||||
//前置路由守卫
|
||||
router.beforeEach((to) =>
|
||||
{
|
||||
const token = window.localStorage.getItem("token");
|
||||
const token = window.localStorage.getItem("token");
|
||||
|
||||
//先检查token
|
||||
if (!token)
|
||||
{
|
||||
//先检查token
|
||||
if (!token)
|
||||
{
|
||||
//如果token不存在,判断路由是否走向login,如果不是则指向login
|
||||
//走向login则不干预
|
||||
if (to.name !== "Login")
|
||||
{
|
||||
return {
|
||||
name: "Login",
|
||||
};
|
||||
if (to.name !== "Login")
|
||||
{
|
||||
return {
|
||||
name: "Login",
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//修改默认打开的页面,跳向工作台
|
||||
// if (to.name === "Home")
|
||||
// {
|
||||
// console.log("跳向工作台");
|
||||
//修改默认打开的页面,跳向工作台
|
||||
// if (to.name === "Home")
|
||||
// {
|
||||
// console.log("跳向工作台");
|
||||
|
||||
// return {
|
||||
// name: "DeskTop",
|
||||
// };
|
||||
// }
|
||||
// return {
|
||||
// name: "DeskTop",
|
||||
// };
|
||||
// }
|
||||
});
|
||||
|
||||
export default router;
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
*/
|
||||
|
||||
const state = {
|
||||
status: {},//包含全部需求状态的数组
|
||||
status: {}, //包含全部需求状态的数组
|
||||
status_update_time: new Date(),
|
||||
ui: {
|
||||
selected_status: [], //已选择的需求状态
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
*/
|
||||
|
||||
//常量
|
||||
const REQUIREMRNT_UI = `requirement_ui`;
|
||||
const REQUIREMRNT_UI = "requirement_ui";
|
||||
|
||||
/**
|
||||
* 从localStorage中读取 REQUIREMRNT_UI 的值,并转换成对象。
|
||||
|
|
|
@ -18,7 +18,7 @@ import router from "@/router/index";
|
|||
* @param store 保存在vuex中需求相关的对象
|
||||
* @param {string} error_page_name 提示错误页面的路径
|
||||
*****************************************************/
|
||||
function query_requirement_ui(requirement_store, error_page_name)
|
||||
function queryRequirementUI(requirement_store, error_page_name)
|
||||
{
|
||||
//发送请求
|
||||
instance.request(
|
||||
|
@ -48,4 +48,4 @@ function query_requirement_ui(requirement_store, error_page_name)
|
|||
});
|
||||
}
|
||||
|
||||
export { query_requirement_ui };
|
||||
export { queryRequirementUI };
|
|
@ -5,52 +5,82 @@
|
|||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-02-07 10:46:48
|
||||
* @FilePath: /IT工具综合平台/src/views/account/Login.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div id="login">
|
||||
<div class="form-wrapper">
|
||||
<ul class="menu-tab">
|
||||
<li :class="{ 'current': ui.current_menu === item.type }" @click="onToggleMenu(item.type)"
|
||||
v-for="item in tab_menu" :key="item.type">{{ item.label }}
|
||||
</li>
|
||||
</ul>
|
||||
<!-- <el-form ref="form" :model="form"> -->
|
||||
<el-form ref="form">
|
||||
<el-form-item>
|
||||
<label class="form-label">用户名</label>
|
||||
<el-input type="text" v-model.lazy.trim="loginForm.username"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<label class="form-label">密码</label>
|
||||
<el-input type="password" v-model.lazy.trim="loginForm.password"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item v-show="ui.current_menu === tab_menu[1].type">
|
||||
<label class="form-label">确认密码</label>
|
||||
<el-input type="password" disabled v-model.lazy.trim="loginForm.confirm_password"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<label class="form-label">验证码</label>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="14">
|
||||
<el-input type="text" disabled></el-input>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
<el-button type="danger" disabled class="el-button-block" @click="getValidateCode()">获取验证码</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button type="primary" class="el-button-block" @click="login" :disabled="ui.submit_btn_disable"
|
||||
:loading="ui.submit_btn_loading">
|
||||
{{ ui.current_menu === "login" ? "登录" : "注册" }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<div id="login">
|
||||
<div class="form-wrapper">
|
||||
<ul class="menu-tab">
|
||||
<li
|
||||
v-for="item in tabMenu"
|
||||
:key="item.type"
|
||||
:class="{ 'current': ui.current_menu === item.type }"
|
||||
@click="onToggleMenu(item.type)"
|
||||
>
|
||||
{{ item.label }}
|
||||
</li>
|
||||
</ul>
|
||||
<!-- <el-form ref="form" :model="form"> -->
|
||||
<el-form ref="form">
|
||||
<el-form-item>
|
||||
<label class="form-label">用户名</label>
|
||||
<el-input
|
||||
v-model.lazy.trim="loginForm.username"
|
||||
type="text"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<label class="form-label">密码</label>
|
||||
<el-input
|
||||
v-model.lazy.trim="loginForm.password"
|
||||
type="password"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item v-show="ui.current_menu === tabMenu[1].type">
|
||||
<label class="form-label">确认密码</label>
|
||||
<el-input
|
||||
v-model.lazy.trim="loginForm.confirm_password"
|
||||
type="password"
|
||||
disabled
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<label class="form-label">验证码</label>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="14">
|
||||
<el-input
|
||||
type="text"
|
||||
disabled
|
||||
/>
|
||||
</el-col>
|
||||
<el-col :span="10">
|
||||
<el-button
|
||||
type="danger"
|
||||
disabled
|
||||
class="el-button-block"
|
||||
@click="getValidateCode()"
|
||||
>
|
||||
获取验证码
|
||||
</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<el-button
|
||||
type="primary"
|
||||
class="el-button-block"
|
||||
:disabled="ui.submit_btn_disable"
|
||||
:loading="ui.submit_btn_loading"
|
||||
@click="login"
|
||||
>
|
||||
{{ ui.current_menu === "login" ? "登录" : "注册" }}
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
@ -60,168 +90,168 @@ import { useRouter } from "vue-router";
|
|||
import { Login } from "@/utils/api/info/account";
|
||||
import { ElMessage } from "element-plus";
|
||||
|
||||
//import router from "../../router/index";
|
||||
// import router from "../../router/index";
|
||||
|
||||
export default {
|
||||
name: "loginPage",
|
||||
setup()
|
||||
{
|
||||
const store = useStore();
|
||||
const router = useRouter();
|
||||
|
||||
const loginForm = reactive({
|
||||
username: "",
|
||||
password: "",
|
||||
confirm_password: "",
|
||||
validateCode: "",
|
||||
});
|
||||
|
||||
const tab_menu = reactive(
|
||||
[
|
||||
{ type: "login", label: "登录", },
|
||||
{ type: "regiester", label: "注册", },
|
||||
]);
|
||||
|
||||
const ui = reactive(
|
||||
{
|
||||
current_menu: "",
|
||||
staffInfo: null,
|
||||
submit_btn_disable: false,
|
||||
submit_btn_loading: false,
|
||||
});
|
||||
|
||||
const onToggleMenu = (type) =>
|
||||
name: "LoginPage",
|
||||
setup()
|
||||
{
|
||||
ui.current_menu = type;
|
||||
console.log(process.env.VUE_APP_API_URL_LOGIN);
|
||||
};
|
||||
const store = useStore();
|
||||
const router = useRouter();
|
||||
|
||||
const getValidateCode = () =>
|
||||
{
|
||||
ElMessage({
|
||||
message: "测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字",
|
||||
center: true,
|
||||
type: "error",
|
||||
});
|
||||
};
|
||||
const loginForm = reactive({
|
||||
username: "",
|
||||
password: "",
|
||||
confirm_password: "",
|
||||
validateCode: "",
|
||||
});
|
||||
|
||||
//将获取到的用户信息和token保存到vuex和localStorage
|
||||
const saveUserInfo = (userInfo) =>
|
||||
{
|
||||
console.log("保存用户信息");
|
||||
console.log("保存用户信息", store);
|
||||
//保存到vuex
|
||||
store.commit("app/SET_USERINFO", userInfo);
|
||||
const tabMenu = reactive(
|
||||
[
|
||||
{ type: "login", label: "登录", },
|
||||
{ type: "regiester", label: "注册", },
|
||||
]);
|
||||
|
||||
//保存到localStorage
|
||||
const token = userInfo.token;
|
||||
const userInfoJson = JSON.stringify(userInfo);
|
||||
const ui = reactive(
|
||||
{
|
||||
current_menu: "",
|
||||
staffInfo: null,
|
||||
submit_btn_disable: false,
|
||||
submit_btn_loading: false,
|
||||
});
|
||||
|
||||
window.localStorage.setItem("token", token);
|
||||
window.localStorage.setItem("user_info", userInfoJson);
|
||||
};
|
||||
const onToggleMenu = (type) =>
|
||||
{
|
||||
ui.current_menu = type;
|
||||
console.log(process.env.VUE_APP_API_URL_LOGIN);
|
||||
};
|
||||
|
||||
/**
|
||||
const getValidateCode = () =>
|
||||
{
|
||||
ElMessage({
|
||||
message: "测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字",
|
||||
center: true,
|
||||
type: "error",
|
||||
});
|
||||
};
|
||||
|
||||
// 将获取到的用户信息和token保存到vuex和localStorage
|
||||
const saveUserInfo = (userInfo) =>
|
||||
{
|
||||
console.log("保存用户信息");
|
||||
console.log("保存用户信息", store);
|
||||
// 保存到vuex
|
||||
store.commit("app/SET_USERINFO", userInfo);
|
||||
|
||||
// 保存到localStorage
|
||||
const token = userInfo.token;
|
||||
const userInfoJson = JSON.stringify(userInfo);
|
||||
|
||||
window.localStorage.setItem("token", token);
|
||||
window.localStorage.setItem("user_info", userInfoJson);
|
||||
};
|
||||
|
||||
/**
|
||||
* 登录
|
||||
*/
|
||||
const login = () =>
|
||||
{
|
||||
if (loginForm.username.length === 0 || loginForm.password === 0)
|
||||
{
|
||||
ElMessage({
|
||||
message: "请填写您的P13账号和密码!",
|
||||
type: "error",
|
||||
const login = () =>
|
||||
{
|
||||
if (loginForm.username.length === 0 || loginForm.password === 0)
|
||||
{
|
||||
ElMessage({
|
||||
message: "请填写您的P13账号和密码!",
|
||||
type: "error",
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
ui.submit_btn_disable = true;
|
||||
ui.submit_btn_loading = true;
|
||||
|
||||
const userInfo = {
|
||||
p13account: loginForm.username,
|
||||
password: loginForm.password,
|
||||
};
|
||||
|
||||
Login(userInfo)
|
||||
.then((response) =>
|
||||
{
|
||||
// 成功获取到返回值时的响应函数,要判断返回值的成功标志
|
||||
// 验证成功,将获取到的token和用户信息保存到vuex和localStoreage
|
||||
// 然后router.push,进行路由跳转到控制台
|
||||
const data = response.data;
|
||||
|
||||
// 判断是否成功,显示提示信息
|
||||
if (data.success === true)
|
||||
{
|
||||
ElMessage({
|
||||
message: data.message,
|
||||
type: "success",
|
||||
center: true,
|
||||
});
|
||||
|
||||
ui.staffInfo = data.staffInfo;
|
||||
|
||||
// 保存用户信息和token
|
||||
saveUserInfo(data);
|
||||
|
||||
// 验证成功,跳转路由
|
||||
router.push("/Desktop");
|
||||
}
|
||||
else
|
||||
{
|
||||
// 验证失败
|
||||
ElMessage({
|
||||
message: data.message,
|
||||
type: "error",
|
||||
center: true,
|
||||
});
|
||||
|
||||
ui.submit_btn_disable = false;
|
||||
ui.submit_btn_loading = false;
|
||||
}
|
||||
})
|
||||
.catch((error) =>
|
||||
{
|
||||
// 没有获取到响应数据
|
||||
console.log(error);
|
||||
|
||||
ElMessage({
|
||||
message: error.message,
|
||||
type: "error",
|
||||
center: true,
|
||||
});
|
||||
|
||||
ui.submit_btn_disable = false;
|
||||
ui.submit_btn_loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
onBeforeMount(() =>
|
||||
{
|
||||
// 初始化菜单选项
|
||||
ui.current_menu = tabMenu[0].type;
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
ui.submit_btn_disable = true;
|
||||
ui.submit_btn_loading = true;
|
||||
|
||||
const userInfo = {
|
||||
p13account: loginForm.username,
|
||||
password: loginForm.password,
|
||||
};
|
||||
|
||||
Login(userInfo)
|
||||
.then((response) =>
|
||||
onMounted(() =>
|
||||
{
|
||||
//成功获取到返回值时的响应函数,要判断返回值的成功标志
|
||||
//验证成功,将获取到的token和用户信息保存到vuex和localStoreage
|
||||
//然后router.push,进行路由跳转到控制台
|
||||
const data = response.data;
|
||||
|
||||
//判断是否成功,显示提示信息
|
||||
if (data.success === true)
|
||||
{
|
||||
ElMessage({
|
||||
message: data.message,
|
||||
type: "success",
|
||||
center: true,
|
||||
});
|
||||
|
||||
ui.staffInfo = data.staffInfo;
|
||||
|
||||
//保存用户信息和token
|
||||
saveUserInfo(data);
|
||||
|
||||
//验证成功,跳转路由
|
||||
router.push("/Desktop");
|
||||
}
|
||||
else
|
||||
{
|
||||
//验证失败
|
||||
ElMessage({
|
||||
message: data.message,
|
||||
type: "error",
|
||||
center: true,
|
||||
});
|
||||
|
||||
ui.submit_btn_disable = false;
|
||||
ui.submit_btn_loading = false;
|
||||
}
|
||||
})
|
||||
.catch((error) =>
|
||||
{
|
||||
//没有获取到响应数据
|
||||
console.log(error);
|
||||
|
||||
ElMessage({
|
||||
message: error.message,
|
||||
type: "error",
|
||||
center: true,
|
||||
});
|
||||
|
||||
ui.submit_btn_disable = false;
|
||||
ui.submit_btn_loading = false;
|
||||
// 清理状态
|
||||
store.state.app.userInfo = null;
|
||||
});
|
||||
};
|
||||
|
||||
onBeforeMount(() =>
|
||||
{
|
||||
//初始化菜单选项
|
||||
ui.current_menu = tab_menu[0].type;
|
||||
});
|
||||
|
||||
onMounted(() =>
|
||||
{
|
||||
//清理状态
|
||||
store.state.app.userInfo = null;
|
||||
});
|
||||
|
||||
return {
|
||||
//数据
|
||||
ui,
|
||||
loginForm,
|
||||
tab_menu,
|
||||
//方法
|
||||
onToggleMenu,
|
||||
saveUserInfo,
|
||||
login,
|
||||
getValidateCode,
|
||||
};
|
||||
},
|
||||
return {
|
||||
// 数据
|
||||
ui,
|
||||
loginForm,
|
||||
tabMenu,
|
||||
// 方法
|
||||
onToggleMenu,
|
||||
saveUserInfo,
|
||||
login,
|
||||
getValidateCode,
|
||||
};
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
|
@ -292,4 +322,4 @@ export default {
|
|||
.el-button-block {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
<!--
|
||||
* 佛曰:
|
||||
* 写字楼里写字间,写字间里程序员;
|
||||
* 程序人员写程序,又拿程序换酒钱。
|
||||
* 酒醒只在网上坐,酒醉还来网下眠;
|
||||
* 酒醉酒醒日复日,网上网下年复年。
|
||||
* 但愿老死电脑间,不愿鞠躬老板前;
|
||||
* 奔驰宝马贵者趣,公交自行程序员。
|
||||
* 别人笑我忒疯癫,我笑自己命太贱;
|
||||
* 不见满街漂亮妹,哪个归得程序员?
|
||||
* 佛曰:
|
||||
* 写字楼里写字间,写字间里程序员;
|
||||
* 程序人员写程序,又拿程序换酒钱。
|
||||
* 酒醒只在网上坐,酒醉还来网下眠;
|
||||
* 酒醉酒醒日复日,网上网下年复年。
|
||||
* 但愿老死电脑间,不愿鞠躬老板前;
|
||||
* 奔驰宝马贵者趣,公交自行程序员。
|
||||
* 别人笑我忒疯癫,我笑自己命太贱;
|
||||
* 不见满街漂亮妹,哪个归得程序员?
|
||||
* @Author: Kane
|
||||
* @Date: 2023-02-21 11:03:15
|
||||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-02-24 11:09:40
|
||||
* @LastEditTime: 2023-03-21 23:22:57
|
||||
* @FilePath: /it-console/src/views/info/StaffInfo.vue
|
||||
* @Description:<
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
<div class="view_wrapper">
|
||||
|
@ -25,19 +25,19 @@
|
|||
<span>姓名</span>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-input v-model.trim.lazy="query_param.stuffName"></el-input>
|
||||
<el-input v-model.trim.lazy="queryParam.stuffName" />
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<span>工号</span>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-input v-model.trim.lazy="query_param.stuffCode"></el-input>
|
||||
<el-input v-model.trim.lazy="queryParam.stuffCode" />
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<span>P13账号</span>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-input v-model.trim.lazy="query_param.p13UID"></el-input>
|
||||
<el-input v-model.trim.lazy="queryParam.p13UID" />
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="10">
|
||||
|
@ -45,18 +45,25 @@
|
|||
<span>部门</span>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-input v-model.trim.lazy="query_param.departmentName"></el-input>
|
||||
<el-input v-model.trim.lazy="queryParam.departmentName" />
|
||||
</el-col>
|
||||
<el-col :span="2">
|
||||
<span>部门代码</span>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-input v-model.trim.lazy="query_param.departmentCode"></el-input>
|
||||
<el-input v-model.trim.lazy="queryParam.departmentCode" />
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<div class="toolbutton-wrapper">
|
||||
<el-button type="primary" icon="search">查询</el-button>
|
||||
<el-button icon="Refresh">重置</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
icon="search"
|
||||
>
|
||||
查询
|
||||
</el-button>
|
||||
<el-button icon="Refresh">
|
||||
重置
|
||||
</el-button>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
@ -71,7 +78,7 @@ export default {
|
|||
name: "StuffInfo",
|
||||
setup()
|
||||
{
|
||||
const query_param = reactive(
|
||||
const queryParam = reactive(
|
||||
{
|
||||
stuffName: "",
|
||||
stuffCode: "",
|
||||
|
@ -82,7 +89,7 @@ export default {
|
|||
);
|
||||
|
||||
return {
|
||||
query_param,
|
||||
queryParam,
|
||||
};
|
||||
},
|
||||
};
|
||||
|
@ -114,4 +121,4 @@ export default {
|
|||
justify-content: right;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
|
|
|
@ -4,25 +4,25 @@
|
|||
* @LastEditors: Kane
|
||||
* @LastEditTime: 2023-02-06 08:32:09
|
||||
* @FilePath: /IT工具综合平台/src/views/requirement/RequirementEditing.vue
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
-->
|
||||
<template>
|
||||
需求编辑页面
|
||||
<div>需求编辑页面</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { onBeforeMount, onBeforeUpdate } from 'vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { onBeforeMount, onBeforeUpdate } from "vue";
|
||||
import { useRoute } from "vue-router";
|
||||
|
||||
export default {
|
||||
name: "requirement-editing",
|
||||
name: "RequirementEditing",
|
||||
setup()
|
||||
{
|
||||
const route = useRoute();
|
||||
|
||||
//生命周期
|
||||
// 生命周期
|
||||
onBeforeMount(() =>
|
||||
{
|
||||
console.log("接收的参数:", route.query);
|
||||
|
@ -40,4 +40,4 @@ export default {
|
|||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
</style>
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,47 @@
|
|||
/*
|
||||
* @Author: Kane
|
||||
* @Date: 2023-03-01 23:38:12
|
||||
* @LastEditors: Kane
|
||||
* @FilePath: /task_schedule/tsconfig.json
|
||||
* @Description:
|
||||
*
|
||||
* Copyright (c) ${2022} by Kane, All Rights Reserved.
|
||||
*/
|
||||
{
|
||||
"compilerOptions": {
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"useDefineForClassFields": true,
|
||||
"target": "ESNext",
|
||||
"module": "CommonJS",
|
||||
"moduleResolution": "node",
|
||||
"strict": true,
|
||||
"jsx": "preserve",
|
||||
"sourceMap": true,
|
||||
"resolveJsonModule": true,
|
||||
"esModuleInterop": false,
|
||||
"baseUrl": "./", // paths 路径解析起点
|
||||
"paths": { // 别名路径设置
|
||||
"@/*": [
|
||||
"src/*"
|
||||
],
|
||||
},
|
||||
"lib": [
|
||||
"ESNext",
|
||||
"DOM"
|
||||
],
|
||||
"types": [
|
||||
"vite/client"
|
||||
]
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts",
|
||||
"src/**/*.tsx",
|
||||
"src/**/*.vue",
|
||||
"*.d.ts",
|
||||
"src/router/index.js",
|
||||
"src/router/index.js",
|
||||
],
|
||||
"exclude": [
|
||||
"./node_modules",
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue