Compare commits

..

2 Commits

23 changed files with 7388 additions and 1520 deletions

View File

@ -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",
},
},
],
};

View File

@ -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, },],
},
};

View File

@ -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 = { module.exports = {
presets: [ presets: [
'@vue/cli-plugin-babel/preset' "@vue/cli-plugin-babel/preset",
] ],
} };

20
code/web/it-console/env.d.ts vendored Normal file
View File

@ -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

View File

@ -24,7 +24,9 @@
"vite": "^4.1.4", "vite": "^4.1.4",
"vue": "^3.2.13", "vue": "^3.2.13",
"vue-router": "^4.0.3", "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": { "devDependencies": {
"@babel/core": "^7.12.16", "@babel/core": "^7.12.16",
@ -39,8 +41,7 @@
"@vue/cli-plugin-vuex": "~5.0.0", "@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0", "@vue/cli-service": "~5.0.0",
"@vue/compiler-sfc": "^3.2.26", "@vue/compiler-sfc": "^3.2.26",
"eslint": "^7.32.0", "eslint": "^8.35.0",
"eslint-plugin-vue": "^8.0.3",
"node-sass": "^8.0.0", "node-sass": "^8.0.0",
"sass-loader": "^13.2.0", "sass-loader": "^13.2.0",
"vite": "^2.7.2", "vite": "^2.7.2",
@ -48,6 +49,10 @@
"vite-plugin-html": "3.2.0", "vite-plugin-html": "3.2.0",
"vue-cli-plugin-element-plus": "~0.0.13", "vue-cli-plugin-element-plus": "~0.0.13",
"webpack": "^5.75.0", "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"
} }
} }

10
code/web/it-console/sfc.d.ts vendored Normal file
View File

@ -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.
*/

14
code/web/it-console/shims-vue.d.ts vendored Normal file
View File

@ -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;
}

View File

@ -2,33 +2,33 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-12-14 15:12:46 * @Date: 2022-12-14 15:12:46
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-02-15 09:34:25 * @LastEditTime: 2023-03-21 23:14:06
* @FilePath: /IT/src/App.vue * @FilePath: /it-console/src/App.vue
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<el-config-provider :locale="this.locale"> <el-config-provider :locale="locale">
<router-view></router-view> <router-view />
</el-config-provider> </el-config-provider>
</template> </template>
<script> <script>
// //
import zhCn from "element-plus/lib/locale/lang/zh-cn"; import zhCn from "element-plus/lib/locale/lang/zh-cn";
export default { export default {
name: "App", name: "App",
components: {
// HelloWorld,
},
setup() setup()
{ {
const locale = zhCn; const locale = zhCn;
return { locale, }; return { locale, };
}, },
components: {
// HelloWorld,
},
}; };
</script> </script>

View File

@ -9,12 +9,19 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<el-container id="layout-container" v-loading="ui.ageVisible" element-loading-text="载入应用数据…"> <el-container
id="layout-container"
v-loading="ui.ageVisible"
element-loading-text="载入应用数据…"
>
<el-header id="layout-header"> <el-header id="layout-header">
<LayoutHeader /> <LayoutHeader />
</el-header> </el-header>
<el-container id="layout-container-down"> <el-container id="layout-container-down">
<el-aside :width="asideWidth" id="layout-aside"> <el-aside
id="layout-aside"
:width="asideWidth"
>
<LayoutAside /> <LayoutAside />
</el-aside> </el-aside>
<el-main id="layout-main"> <el-main id="layout-main">
@ -33,7 +40,12 @@ import { onMounted, computed, reactive } from "vue";
// import { query_requirement_status } from "@/utils/api/requirement/requirement.js"; // import { query_requirement_status } from "@/utils/api/requirement/requirement.js";
export default { export default {
name: "layoutPage", name: "LayoutPage",
components: {
LayoutAside,
LayoutHeader,
LayoutMain,
},
setup() setup()
{ {
const store = useStore(); const store = useStore();
@ -52,7 +64,7 @@ export default {
onMounted(() => onMounted(() =>
{ {
// //
// query_requirement_status() // query_requirement_status()
// .then((response) => // .then((response) =>
// { // {
@ -72,11 +84,6 @@ export default {
asideWidth, asideWidth,
}; };
}, },
components: {
LayoutAside,
LayoutHeader,
LayoutMain,
},
}; };
</script> </script>

View File

@ -2,39 +2,75 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-01-04 11:30:33 * @Date: 2023-01-04 11:30:33
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-02-06 09:28:16 * @LastEditTime: 2023-03-21 23:18:41
* @FilePath: /IT/src/layout/components/Aside.vue * @FilePath: /it-console/src/layout/components/Aside.vue
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. 223142 2f4156 * Copyright (c) ${2022} by Kane, All Rights Reserved. 223142 2f4156
--> -->
<template> <template>
<el-scrollbar class="wrapper"> <el-scrollbar class="wrapper">
<el-menu id="side-bar" router :default-active="currentPath" background-color="#2f4156" text-color="#fff" <el-menu
active-text-color="#ffd04b" :collapse="asideCollapse"> id="side-bar"
<template v-for="route in routes" :key="route.path"> 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="!route.hidden">
<template v-if="hasOnlyChild(route.children)"> <template v-if="hasOnlyChild(route.children)">
<!-- 当只有一个子路由时直接渲染子路由 --> <!-- 当只有一个子路由时直接渲染子路由 -->
<el-menu-item :index="route.children[0].path" class="sidebar-submenu"> <el-menu-item
<component :is="route.children[0].meta.icon" class="icons"> :key="route.path"
</component> :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> --> <!-- <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> </el-menu-item>
</template> </template>
<template v-else> <template v-else>
<!-- 不是一个子路由时有可能没有子路由或者是多个子路由 --> <!-- 不是一个子路由时有可能没有子路由或者是多个子路由 -->
<el-sub-menu v-if="route.children && route.children.length" :index="route.path" <el-sub-menu
class="sidebar-submenu"> v-if="route.children && route.children.length"
:key="route.path"
:index="route.path"
class="sidebar-submenu"
>
<template #title> <template #title>
<component :is="route.meta.icon" class="icons"></component> <component
:is="route.meta.icon"
class="icons"
/>
<span>{{ route.meta && route.meta.title }}</span> <span>{{ route.meta && route.meta.title }}</span>
</template> </template>
<template v-for="child in route.children" :key="child.path"> <template
<el-menu-item v-if="!child.hidden" :index="child.path" class="sidebar-item"> v-for="child in route.children"
<component :is="child.meta.icon" class="icons"></component> >
<template #title>{{ child.meta && child.meta.title }}</template> <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> </el-menu-item>
</template> </template>
</el-sub-menu> </el-sub-menu>
@ -54,23 +90,23 @@ export default {
name: "LayoutAside", name: "LayoutAside",
setup() setup()
{ {
const router = useRouter();// const router = useRouter();//
const routes = router.getRoutes();// const routes = router.getRoutes();//
const store = useStore(); const store = useStore();
// //
const hasOnlyChild = (children) => const hasOnlyChild = (children) =>
{ {
// //
if (!children) if (!children)
{ {
return false; return false;
} }
//hidden // hidden
const routes = children.filter((item) => const routes = children.filter((item) =>
{ {
return item.hidden ? false : true; return !item.hidden;
}); });
if (routes.length === 1) if (routes.length === 1)
@ -81,16 +117,16 @@ export default {
return false; return false;
}; };
// //
// //
const currentPath = computed(() => const currentPath = computed(() =>
{ {
let path = useRoute().path; const path = useRoute().path;
return path; return path;
}); });
// //
const asideCollapse = computed(() => const asideCollapse = computed(() =>
{ {
return store.state.app.ui.asideBarCollapse; return store.state.app.ui.asideBarCollapse;

View File

@ -17,13 +17,16 @@
</div> </div>
<div class="buttons_div"> <div class="buttons_div">
<User style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" /> <User style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" />
<SwitchButton style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" @click="logout" /> <SwitchButton
style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;"
@click="logout"
/>
</div> </div>
</div> </div>
</template> </template>
<script> <script>
//import { ElMessage } from "element-plus"; // import { ElMessage } from "element-plus";
import { Logout } from "../../utils/api/info/account"; import { Logout } from "../../utils/api/info/account";
export default { export default {
@ -37,7 +40,7 @@ export default {
// }, // },
mounted() mounted()
{ {
//console.log("banner"); // console.log("banner");
}, },
methods: { methods: {
logout() logout()

View File

@ -2,8 +2,8 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-01-04 11:39:04 * @Date: 2023-01-04 11:39:04
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-02-22 18:33:11 * @LastEditTime: 2023-03-21 23:19:06
* @FilePath: /IT/src/layout/components/Header.vue * @FilePath: /it-console/src/layout/components/Header.vue
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
@ -17,7 +17,10 @@
</div> </div>
<div class="buttons_div"> <div class="buttons_div">
<User style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" /> <User style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" />
<SwitchButton style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" @click="logout" /> <SwitchButton
style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;"
@click="logout"
/>
</div> </div>
</div> </div>
</template> </template>

View File

@ -2,8 +2,8 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-01-04 11:40:03 * @Date: 2023-01-04 11:40:03
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-02-07 10:47:57 * @LastEditTime: 2023-03-21 23:19:27
* @FilePath: /IT/src/layout/components/Main.vue * @FilePath: /it-console/src/layout/components/Main.vue
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.

View File

@ -2,13 +2,13 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-12-14 15:12:46 * @Date: 2022-12-14 15:12:46
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-02-21 13:09:15 * @LastEditTime: 2023-03-21 23:20:10
* @FilePath: /IT/src/router/index.js * @FilePath: /it-console/src/router/index.js
* @Description: 定义应用路由配置 * @Description: 定义应用路由配置
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
import { createRouter, createWebHashHistory } from 'vue-router'; import { createRouter, createWebHashHistory } from "vue-router";
const routes = [ const routes = [
//框架路由 //框架路由

View File

@ -10,7 +10,7 @@
*/ */
const state = { const state = {
status: {},//包含全部需求状态的数组 status: {}, //包含全部需求状态的数组
status_update_time: new Date(), status_update_time: new Date(),
ui: { ui: {
selected_status: [], //已选择的需求状态 selected_status: [], //已选择的需求状态

View File

@ -10,7 +10,7 @@
*/ */
//常量 //常量
const REQUIREMRNT_UI = `requirement_ui`; const REQUIREMRNT_UI = "requirement_ui";
/** /**
* 从localStorage中读取 REQUIREMRNT_UI 的值并转换成对象 * 从localStorage中读取 REQUIREMRNT_UI 的值并转换成对象

View File

@ -18,7 +18,7 @@ import router from "@/router/index";
* @param store 保存在vuex中需求相关的对象 * @param store 保存在vuex中需求相关的对象
* @param {string} error_page_name 提示错误页面的路径 * @param {string} error_page_name 提示错误页面的路径
*****************************************************/ *****************************************************/
function query_requirement_ui(requirement_store, error_page_name) function queryRequirementUI(requirement_store, error_page_name)
{ {
//发送请求 //发送请求
instance.request( instance.request(
@ -48,4 +48,4 @@ function query_requirement_ui(requirement_store, error_page_name)
}); });
} }
export { query_requirement_ui }; export { queryRequirementUI };

View File

@ -13,38 +13,68 @@
<div id="login"> <div id="login">
<div class="form-wrapper"> <div class="form-wrapper">
<ul class="menu-tab"> <ul class="menu-tab">
<li :class="{ 'current': ui.current_menu === item.type }" @click="onToggleMenu(item.type)" <li
v-for="item in tab_menu" :key="item.type">{{ item.label }} v-for="item in tabMenu"
:key="item.type"
:class="{ 'current': ui.current_menu === item.type }"
@click="onToggleMenu(item.type)"
>
{{ item.label }}
</li> </li>
</ul> </ul>
<!-- <el-form ref="form" :model="form"> --> <!-- <el-form ref="form" :model="form"> -->
<el-form ref="form"> <el-form ref="form">
<el-form-item> <el-form-item>
<label class="form-label">用户名</label> <label class="form-label">用户名</label>
<el-input type="text" v-model.lazy.trim="loginForm.username"></el-input> <el-input
v-model.lazy.trim="loginForm.username"
type="text"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<label class="form-label">密码</label> <label class="form-label">密码</label>
<el-input type="password" v-model.lazy.trim="loginForm.password"></el-input> <el-input
v-model.lazy.trim="loginForm.password"
type="password"
/>
</el-form-item> </el-form-item>
<el-form-item v-show="ui.current_menu === tab_menu[1].type"> <el-form-item v-show="ui.current_menu === tabMenu[1].type">
<label class="form-label">确认密码</label> <label class="form-label">确认密码</label>
<el-input type="password" disabled v-model.lazy.trim="loginForm.confirm_password"></el-input> <el-input
v-model.lazy.trim="loginForm.confirm_password"
type="password"
disabled
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<label class="form-label">验证码</label> <label class="form-label">验证码</label>
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="14"> <el-col :span="14">
<el-input type="text" disabled></el-input> <el-input
type="text"
disabled
/>
</el-col> </el-col>
<el-col :span="10"> <el-col :span="10">
<el-button type="danger" disabled class="el-button-block" @click="getValidateCode()">获取验证码</el-button> <el-button
type="danger"
disabled
class="el-button-block"
@click="getValidateCode()"
>
获取验证码
</el-button>
</el-col> </el-col>
</el-row> </el-row>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" class="el-button-block" @click="login" :disabled="ui.submit_btn_disable" <el-button
:loading="ui.submit_btn_loading"> type="primary"
class="el-button-block"
:disabled="ui.submit_btn_disable"
:loading="ui.submit_btn_loading"
@click="login"
>
{{ ui.current_menu === "login" ? "登录" : "注册" }} {{ ui.current_menu === "login" ? "登录" : "注册" }}
</el-button> </el-button>
</el-form-item> </el-form-item>
@ -60,10 +90,10 @@ import { useRouter } from "vue-router";
import { Login } from "@/utils/api/info/account"; import { Login } from "@/utils/api/info/account";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
//import router from "../../router/index"; // import router from "../../router/index";
export default { export default {
name: "loginPage", name: "LoginPage",
setup() setup()
{ {
const store = useStore(); const store = useStore();
@ -76,7 +106,7 @@ export default {
validateCode: "", validateCode: "",
}); });
const tab_menu = reactive( const tabMenu = reactive(
[ [
{ type: "login", label: "登录", }, { type: "login", label: "登录", },
{ type: "regiester", label: "注册", }, { type: "regiester", label: "注册", },
@ -105,15 +135,15 @@ export default {
}); });
}; };
//tokenvuexlocalStorage // tokenvuexlocalStorage
const saveUserInfo = (userInfo) => const saveUserInfo = (userInfo) =>
{ {
console.log("保存用户信息"); console.log("保存用户信息");
console.log("保存用户信息", store); console.log("保存用户信息", store);
//vuex // vuex
store.commit("app/SET_USERINFO", userInfo); store.commit("app/SET_USERINFO", userInfo);
//localStorage // localStorage
const token = userInfo.token; const token = userInfo.token;
const userInfoJson = JSON.stringify(userInfo); const userInfoJson = JSON.stringify(userInfo);
@ -147,12 +177,12 @@ export default {
Login(userInfo) Login(userInfo)
.then((response) => .then((response) =>
{ {
// //
//tokenvuexlocalStoreage // tokenvuexlocalStoreage
//router.push // router.push
const data = response.data; const data = response.data;
// //
if (data.success === true) if (data.success === true)
{ {
ElMessage({ ElMessage({
@ -163,15 +193,15 @@ export default {
ui.staffInfo = data.staffInfo; ui.staffInfo = data.staffInfo;
//token // token
saveUserInfo(data); saveUserInfo(data);
// //
router.push("/Desktop"); router.push("/Desktop");
} }
else else
{ {
// //
ElMessage({ ElMessage({
message: data.message, message: data.message,
type: "error", type: "error",
@ -184,7 +214,7 @@ export default {
}) })
.catch((error) => .catch((error) =>
{ {
// //
console.log(error); console.log(error);
ElMessage({ ElMessage({
@ -200,22 +230,22 @@ export default {
onBeforeMount(() => onBeforeMount(() =>
{ {
// //
ui.current_menu = tab_menu[0].type; ui.current_menu = tabMenu[0].type;
}); });
onMounted(() => onMounted(() =>
{ {
// //
store.state.app.userInfo = null; store.state.app.userInfo = null;
}); });
return { return {
// //
ui, ui,
loginForm, loginForm,
tab_menu, tabMenu,
// //
onToggleMenu, onToggleMenu,
saveUserInfo, saveUserInfo,
login, login,

View File

@ -11,7 +11,7 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-02-21 11:03:15 * @Date: 2023-02-21 11:03:15
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-02-24 11:09:40 * @LastEditTime: 2023-03-21 23:22:57
* @FilePath: /it-console/src/views/info/StaffInfo.vue * @FilePath: /it-console/src/views/info/StaffInfo.vue
* @Description:< * @Description:<
* *
@ -25,19 +25,19 @@
<span>姓名</span> <span>姓名</span>
</el-col> </el-col>
<el-col :span="4"> <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>
<el-col :span="2"> <el-col :span="2">
<span>工号</span> <span>工号</span>
</el-col> </el-col>
<el-col :span="4"> <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>
<el-col :span="2"> <el-col :span="2">
<span>P13账号</span> <span>P13账号</span>
</el-col> </el-col>
<el-col :span="4"> <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-col>
</el-row> </el-row>
<el-row :gutter="10"> <el-row :gutter="10">
@ -45,18 +45,25 @@
<span>部门</span> <span>部门</span>
</el-col> </el-col>
<el-col :span="4"> <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>
<el-col :span="2"> <el-col :span="2">
<span>部门代码</span> <span>部门代码</span>
</el-col> </el-col>
<el-col :span="4"> <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>
<el-col :span="6"> <el-col :span="6">
<div class="toolbutton-wrapper"> <div class="toolbutton-wrapper">
<el-button type="primary" icon="search">查询</el-button> <el-button
<el-button icon="Refresh">重置</el-button> type="primary"
icon="search"
>
查询
</el-button>
<el-button icon="Refresh">
重置
</el-button>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -71,7 +78,7 @@ export default {
name: "StuffInfo", name: "StuffInfo",
setup() setup()
{ {
const query_param = reactive( const queryParam = reactive(
{ {
stuffName: "", stuffName: "",
stuffCode: "", stuffCode: "",
@ -82,7 +89,7 @@ export default {
); );
return { return {
query_param, queryParam,
}; };
}, },
}; };

View File

@ -9,20 +9,20 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
需求编辑页面 <div>需求编辑页面</div>
</template> </template>
<script> <script>
import { onBeforeMount, onBeforeUpdate } from 'vue'; import { onBeforeMount, onBeforeUpdate } from "vue";
import { useRoute } from 'vue-router'; import { useRoute } from "vue-router";
export default { export default {
name: "requirement-editing", name: "RequirementEditing",
setup() setup()
{ {
const route = useRoute(); const route = useRoute();
// //
onBeforeMount(() => onBeforeMount(() =>
{ {
console.log("接收的参数:", route.query); console.log("接收的参数:", route.query);

File diff suppressed because one or more lines are too long

View File

@ -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",
]
}