70 Commits

Author SHA1 Message Date
280636bd14 修改链接 2023-06-09 17:45:50 +08:00
679c12fb92 保存进度! 2023-04-04 16:10:47 +08:00
e3ada43d48 保存进度! 2023-03-28 15:09:28 +08:00
1a1e230ead 保存进度! 2023-03-27 17:53:21 +08:00
8b0f8e618b 保存进度! 2023-03-27 17:52:22 +08:00
a0f23c3a4c 保存进度! 2023-03-27 17:51:01 +08:00
0bf3ae2520 保存进度! 2023-03-27 17:49:16 +08:00
0c9df7d70d lint一下下 2023-03-27 17:43:54 +08:00
57dc7568b1 。。。 2023-03-27 15:30:10 +08:00
968eaed581 保存进度! 2023-03-27 15:18:57 +08:00
304acb5c6c 消除一个跳转路由路径bug 2023-03-27 14:49:08 +08:00
64b59e02ae 独立项目 2023-03-25 18:02:59 +08:00
9e25df4b6c 独立项目 2023-03-25 18:02:48 +08:00
ebf4a37529 修复bug 2023-03-22 01:04:56 +08:00
ba44c9bc31 整理代码 2023-03-21 23:49:27 +08:00
cdc7efce15 Merge branch 'feature-requirement' of http://222.76.244.118:3000/CPICXIM/it-console into feature-requirement 2023-03-21 23:29:11 +08:00
bf19c775cf 修改eslint配置文件 2023-03-21 23:28:44 +08:00
011a3f58e6 ... 2023-03-06 15:05:07 +08:00
c814278905 Merge branch 'feature-requirement' of http://222.76.244.118:3000/CPICXIM/it-console into feature-requirement 2023-03-02 00:14:56 +08:00
580bffc207 保存进度! 2023-03-02 00:14:53 +08:00
702912ef00 保存进度! 2023-03-01 16:08:00 +08:00
12ce6403dd 保存进度! 2023-02-27 23:59:37 +08:00
6a93923edd 保存进度! 2023-02-24 17:22:42 +08:00
9460316a69 保存进度! 2023-02-23 23:58:58 +08:00
6d6ce6025b 保存进度! 2023-02-23 18:10:53 +08:00
f24a47f27d 保存进度! 2023-02-23 10:00:52 +08:00
a7ff72c4b7 保存进度! 2023-02-23 09:55:58 +08:00
f380cbd812 保存进度! 2023-02-23 09:55:47 +08:00
c25f8a2401 保存进度! 2023-02-23 09:37:36 +08:00
178ae16c73 保存进度! 2023-02-23 01:03:39 +08:00
3afde75e85 整理目录 2023-02-23 01:00:59 +08:00
7154edde7c 保存进度! 2023-02-23 00:57:48 +08:00
f22f6b268a 迁移到vite 2023-02-23 00:56:44 +08:00
1c44e56b56 保存进度! 2023-02-23 00:09:03 +08:00
3f93afede3 保存进度! 2023-02-22 18:33:27 +08:00
8dd5f27d47 Merge branch 'feature-requirement' of http://222.76.244.118:3000/CPICXIM/it-console into feature-requirement 2023-02-22 17:12:56 +08:00
557452aedc 修改一些javascript的语法错误。 2023-02-22 17:12:54 +08:00
46cfdc28a6 Merge branch 'feature-requirement' of http://222.76.244.118:3000/CPICXIM/it-console into feature-requirement
...
2023-02-21 23:56:44 +08:00
e450e280d4 保存进度! 2023-02-21 23:56:17 +08:00
8248fe942a 保存进度! 2023-02-21 18:33:59 +08:00
a97d222486 保存进度! 2023-02-20 18:01:20 +08:00
f354d141f5 保存进度! 2023-02-20 00:34:13 +08:00
8902b2761b Merge branch 'feature-requirement' of http://222.76.244.118:3000/CPICXIM/it-console into feature-requirement 2023-02-19 21:38:41 +08:00
81d52412db 。。。 2023-02-19 21:36:12 +08:00
9afe66b769 保存进度! 2023-02-19 17:56:05 +08:00
c2bc64fd36 保存进度! 2023-02-18 00:17:55 +08:00
e7e8ec49e2 修改了mysql的访问url 2023-02-17 18:34:53 +08:00
05e131ecbe 保存进度! 2023-02-17 13:12:02 +08:00
55cf233192 保存进度! 2023-02-17 13:10:40 +08:00
5822212970 保存进度! 2023-02-17 00:08:13 +08:00
e685197674 保存进度! 2023-02-16 00:23:15 +08:00
a81bdc330c 保存进度! 2023-02-15 00:26:37 +08:00
8315b1f9b2 保存进度! 2023-02-14 23:36:40 +08:00
007953d129 保存进度! 2023-02-14 18:57:03 +08:00
f2802722c1 保存进度! 2023-02-14 00:26:46 +08:00
655af8eec1 ... 2023-02-14 00:25:06 +08:00
5c0050fe13 Merge branch 'feature-requirement' of http://222.76.244.118:3000/CPICXIM/it-console into feature-requirement 2023-02-14 00:24:55 +08:00
c28c4c7789 保存进度! 2023-02-14 00:23:26 +08:00
608b1d1b41 保存进度! 2023-02-14 00:20:47 +08:00
12674fa58f 保存进度! 2023-02-13 23:18:50 +08:00
db0ac8c960 加入了pako和axios的测试。 2023-02-13 16:52:44 +08:00
946cf852d2 Merge branch 'feature-requirement' of http://222.76.244.118:3000/CPICXIM/it-console into feature-requirement 2023-02-13 09:31:48 +08:00
f4769057db 保存进度! 2023-02-13 09:30:18 +08:00
33195638ca 保存进度! 2023-02-13 00:43:14 +08:00
44acd8856a ... 2023-02-11 00:12:33 +08:00
2d9178e4ae 保存进度! 2023-02-10 23:43:56 +08:00
e142a2a624 保存进度! 2023-02-10 18:38:33 +08:00
a5fa62c5d0 加入后端工具项目。 2023-02-09 18:36:43 +08:00
8e5dc6e617 保存进度! 2023-02-08 17:54:32 +08:00
365815735e 准备修改需求详情对话框的布局。 2023-02-08 16:48:15 +08:00
151 changed files with 26245 additions and 26652 deletions

5
.gitignore vendored
View File

@@ -77,7 +77,8 @@ bower_components
build/Release build/Release
# Dependency directories # Dependency directories
node_modules/ node_modules*/
node_modules_bak/
jspm_packages/ jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/) # Snowpack dependency directory (https://snowpack.dev/)
@@ -722,3 +723,5 @@ local.properties
# Typically, this file would be tracked if it contains build/dependency configurations: # Typically, this file would be tracked if it contains build/dependency configurations:
#.project #.project
target
target/*

View File

@@ -73,7 +73,7 @@
<dependency> <dependency>
<groupId>commons-fileupload</groupId> <groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId> <artifactId>commons-fileupload</artifactId>
<version>1.4</version> <version>1.5</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api --> <!-- https://mvnrepository.com/artifact/javax.annotation/javax.annotation-api -->
<dependency> <dependency>

View File

@@ -2,8 +2,8 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-12-15 14:08:28 * @Date: 2022-12-15 14:08:28
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2022-12-16 17:57:06 * @LastEditTime: 2023-02-28 23:20:12
* @FilePath: \AdminSys\src\main\java\com\cpic\xim\myutils\account\CpicXIMStaffInfo.java * @FilePath: /后端-用户验证/src/main/java/com/cpic/xim/myutils/account/CpicXIMStaffInfo.java
* @Description: 产险厦门分公司员工信息对象 * @Description: 产险厦门分公司员工信息对象
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
@@ -59,7 +59,7 @@ public class CpicXIMStaffInfo
result = stmt.executeQuery(); result = stmt.executeQuery();
if ( result.next()) if ( result.next() )
{ {
info = new CpicXIMStaffInfo(); info = new CpicXIMStaffInfo();
@@ -76,7 +76,7 @@ public class CpicXIMStaffInfo
{ {
try try
{ {
if ( result != null) if ( result != null )
{ {
result.close(); result.close();
} }
@@ -88,7 +88,7 @@ public class CpicXIMStaffInfo
try try
{ {
if ( stmt != null) if ( stmt != null )
{ {
stmt.close(); stmt.close();
} }
@@ -100,7 +100,7 @@ public class CpicXIMStaffInfo
try try
{ {
if ( connection != null) if ( connection != null )
{ {
connection.close(); connection.close();
} }
@@ -187,24 +187,24 @@ public class CpicXIMStaffInfo
this.setctionOfficeName = setctionOfficeName; this.setctionOfficeName = setctionOfficeName;
} }
@JsonProperty( "name") @JsonProperty( "name" )
private String name; private String name;
@JsonProperty( "code") @JsonProperty( "code" )
private String code; private String code;
@JsonProperty( "p13uid") @JsonProperty( "p13uid" )
private String p13UID; private String p13UID;
@JsonProperty( "department_code") @JsonProperty( "department_code" )
private String departmentCode; private String departmentCode;
@JsonProperty( "department_name") @JsonProperty( "department_name" )
private String departmentName; private String departmentName;
@JsonProperty( "section_office_code") @JsonProperty( "section_office_code" )
private String sectionOfficeCode; private String sectionOfficeCode;
@JsonProperty( "section_office_name") @JsonProperty( "section_office_name" )
private String setctionOfficeName; private String setctionOfficeName;
} }

View File

@@ -2,9 +2,9 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-12-15 09:51:12 * @Date: 2022-12-15 09:51:12
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2022-12-16 15:29:34 * @LastEditTime: 2023-03-06 15:05:03
* @FilePath: \AdminSys\src\main\java\com\cpic\xim\myutils\account\LdapAccountCheck.java * @FilePath: /ts-practiced:/develop/cpicxim/it-console/code/java/后端-用户验证/src/main/java/com/cpic/xim/myutils/account/LdapAccountCheck.java
* @Description: P13验证相关方法。 * @Description: LDAP验证相关方法。
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
@@ -31,7 +31,7 @@ public class LdapAccountCheck
{ {
boolean result = false; boolean result = false;
if ( userName.endsWith( "@pr.intra.cpic.com.cn" ) == false) if ( userName.endsWith( "@pr.intra.cpic.com.cn" ) == false )
{ {
userName += "@pr.intra.cpic.com.cn"; userName += "@pr.intra.cpic.com.cn";
} }

View File

@@ -2,14 +2,16 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-12-15 11:11:21 * @Date: 2022-12-15 11:11:21
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-01-17 23:28:21 * @LastEditTime: 2023-03-25 17:28:39
* @FilePath: \AdminSys\src\main\java\com\cpic\xim\web\controllers\account\P13AccountCheckController.java * @FilePath: /后端-用户验证/src/main/java/com/cpic/xim/web/controllers/account/P13AccountCheckController.java
* @Description: P13账号验证用Controller。 * @Description: P13账号验证用Controller。
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
package com.cpic.xim.web.controllers.account; package com.cpic.xim.web.controllers.account;
import com.cpic.xim.myutils.account.CpicXIMStaffInfo;
import com.cpic.xim.myutils.account.LdapAccountCheck;
import java.io.IOException; import java.io.IOException;
import java.nio.channels.IllegalSelectorException; import java.nio.channels.IllegalSelectorException;
import java.sql.SQLException; import java.sql.SQLException;
@@ -21,94 +23,84 @@ import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import com.cpic.xim.myutils.account.CpicXIMStaffInfo;
import com.cpic.xim.myutils.account.LdapAccountCheck;
@Controller @Controller
@RequestMapping( path = "/account" ) @RequestMapping(path = "/account")
@SuppressWarnings( "unused" ) @SuppressWarnings("unused")
public class P13AccountCheckController public class P13AccountCheckController {
{
/*****************************************************
* 根据用户提供的P09工号或者P13账号密码查找用户信息并AD域服务器验证p13账号密码。
* 验证通过即返回人员信息。
* 验证不通过result.success值为false并在message提供失败原因。
* @param param 由json格式转换的请求参数
* @param request
* @param response
* @return 返回一个P13AccountCheckResult对象其中提供验证结果
*****************************************************/
@ResponseBody
@RequestMapping( path = "/p13_account_check" )
public P13AccountCheckResult checkP13Account( @RequestBody P13AccountCheckRequest param,
HttpServletRequest request, HttpServletResponse response )
throws IllegalSelectorException, IOException
{
P13AccountCheckResult result = new P13AccountCheckResult();
ServletContext context = request.getServletContext();
// context.getAttribute( null ); /*****************************************************
CpicXIMStaffInfo staff = null; * 根据用户提供的P09工号或者P13账号密码查找用户信息并AD域服务器验证p13账号密码。
* 验证通过即返回人员信息。
* 验证不通过result.success值为false并在message提供失败原因。
* @param param 由json格式转换的请求参数
* @param request
* @param response
* @return 返回一个P13AccountCheckResult对象其中提供验证结果
*****************************************************/
@ResponseBody
@RequestMapping(path = "/p13_account_check")
public P13AccountCheckResult checkP13Account(
@RequestBody P13AccountCheckRequest param,
HttpServletRequest request,
HttpServletResponse response
) throws IllegalSelectorException, IOException {
P13AccountCheckResult result = new P13AccountCheckResult();
ServletContext context = request.getServletContext();
try CpicXIMStaffInfo staff = null;
{
// 先根据用户输入的09工号或p13账号获得p13账号确定账号存在
staff = CpicXIMStaffInfo.getStaffInfo( param.getP13Account() );
}
catch ( SQLException error )
{
staff = null;
result.setMessage( "人员工号或P13账号不存在" );
result.setSuccess( false );
}
catch ( ClassNotFoundException error )
{
staff = null;
result.setMessage( "加载Oracle驱动失败" );
result.setSuccess( false );
}
// 查询结果是null说明没有查询到结果工号或p13账号不存在返回结果。 try {
if ( staff == null ) // 先根据用户输入的09工号或p13账号获得p13账号确定账号存在
{ staff = CpicXIMStaffInfo.getStaffInfo(param.getP13Account());
result.setMessage( "人员工号或P13账号不存在" ); } catch (SQLException error) {
result.setSuccess( false ); staff = null;
result.setMessage("人员工号或P13账号不存在");
return result; result.setSuccess(false);
} } catch (ClassNotFoundException error) {
staff = null;
// 判断一下p13是否存在如果不存在就结束过程 result.setMessage("加载Oracle驱动失败");
if ( staff.getP13UID().isEmpty() == true ) result.setSuccess(false);
{
result.setMessage( "P13账号不存在请联系信息技术部申请账号" );
result.setSuccess( false );
return result;
}
// 进行ldap验证
boolean ldapCheckResult =
LdapAccountCheck.ldapLogin( staff.getP13UID(), param.getPassword() );
if ( ldapCheckResult == true )
{
result.setSuccess( true );
result.setMessage( "验证成功!" );
result.setStaffInfo( staff );
// 将获取到的人员信息保存到会话中
HttpSession session = request.getSession();
session.setAttribute( "staff_info", staff );
}
else
{
result.setSuccess( false );
result.setMessage( "密码错误!" );
}
result.setToken( param.getP13Account() );
return result;
} }
// 查询结果是null说明没有查询到结果工号或p13账号不存在返回结果。
if (staff == null) {
result.setMessage("人员工号或P13账号不存在");
result.setSuccess(false);
return result;
}
// 判断一下p13是否存在如果不存在就结束过程
if (staff.getP13UID().isEmpty() == true) {
result.setMessage("P13账号不存在请联系信息技术部申请账号");
result.setSuccess(false);
return result;
}
// 进行ldap验证
boolean ldapCheckResult = LdapAccountCheck.ldapLogin(
staff.getP13UID(),
param.getPassword()
);
if (ldapCheckResult == true) {
result.setSuccess(true);
result.setMessage("验证成功!");
result.setStaffInfo(staff);
// 将获取到的人员信息保存到会话中
HttpSession session = request.getSession();
session.setAttribute("staff_info", staff);
} else {
result.setSuccess(false);
result.setMessage("密码错误!");
}
result.setToken(param.getP13Account());
return result;
}
} }

View File

@@ -1,37 +0,0 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd">
<context:component-scan base-package="com.cpic.xim" />
<mvc:annotation-driven />
<mvc:default-servlet-handler />
<!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property
name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean> -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8" />
<property name="maxUploadSize" value="-1" />
</bean>
</beans>

View File

@@ -1,57 +0,0 @@
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<display-name>Archetype Created Web Application</display-name>
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/account/p13_account_check</url-pattern>
</servlet-mapping>
<!-- 用于验证Token的Filter -->
<filter>
<filter-name>token-filter</filter-name>
<filter-class>com.cpic.xim.web.filters.token.TokenFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>token-filter</filter-name>
<url-pattern>*.do</url-pattern>
</filter-mapping>
<!-- 用于实现跨域访问的Filter -->
<filter>
<filter-name>cros-filter</filter-name>
<filter-class>com.cpic.xim.web.filters.cros.CrosFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cros-filter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
<!-- 配置文件路径参数 -->
<context-param>
<param-name>config_file_location</param-name>
<param-value>config.xml</param-value>
</context-param>
<listener>
<listener-class>com.cpic.xim.web.listener.ContextLoaderListener</listener-class>
</listener>
</web-app>

View File

@@ -1,68 +0,0 @@
html {
--backupground-color: #f7f7f7;
--btn-color-blue: #307dbe;
--btn-color-yellow: #f7b24d;
--btn-color-green: #5bad60;
--btn-color-red: #e56651;
--btn-font-color: #fff;
background-color: #eee;
}
#root,
#app {
height: 100vh;
width: 100vw;
position: fixed;
padding: 50px;
/* font-size: 0; */
overflow: auto;
}
#root,
#app * + * {
margin-top: 15px;
}
hr {
background-color: steelblue;
border: none;
height: 3px;
}
.test {
width: 110vw;
height: 100vh;
border: 1px solid red;
overflow: auto;
}
button {
padding: 5px 10px;
background-color: var(--btn-color-red);
color: var(--btn-font-color);
width: 10em;
border: none;
border-radius: 0.25em;
font-size: 1.5rem;
}
button + button {
margin-left: 0.5em;
}
button:active {
background-color: var(--btn-font-color);
color: var(--btn-color-red);
}
input {
border: none;
outline: solid 2px #e56651;
font-size: 2rem;
}
label {
display: inline-block;
font-size: 2rem;
margin-top: 15px;
}

View File

@@ -1,25 +0,0 @@
#app {
width: 100vw;
height: 100vh;
padding: 0px;
margin: 0px;
display: flex;
flex-direction: column;
}
#header {
flex-basis: 50px;
border: 1px solid red;
max-height: 50px;
}
#main {
flex-grow: 1;
border: 1px solid red;
}
#footer {
flex-basis: 100px;
max-height: 100px;
border: 1px solid red;
}

View File

@@ -1,349 +0,0 @@
/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
/* Document
========================================================================== */
/**
* 1. Correct the line height in all browsers.
* 2. Prevent adjustments of font size after orientation changes in iOS.
*/
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/* Sections
========================================================================== */
/**
* Remove the margin in all browsers.
*/
body {
margin: 0;
}
/**
* Render the `main` element consistently in IE.
*/
main {
display: block;
}
/**
* Correct the font size and margin on `h1` elements within `section` and
* `article` contexts in Chrome, Firefox, and Safari.
*/
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content
========================================================================== */
/**
* 1. Add the correct box sizing in Firefox.
* 2. Show the overflow in Edge and IE.
*/
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics
========================================================================== */
/**
* Remove the gray background on active links in IE 10.
*/
a {
background-color: transparent;
}
/**
* 1. Remove the bottom border in Chrome 57-
* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
*/
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/**
* Add the correct font weight in Chrome, Edge, and Safari.
*/
b,
strong {
font-weight: bolder;
}
/**
* 1. Correct the inheritance and scaling of font size in all browsers.
* 2. Correct the odd `em` font sizing in all browsers.
*/
code,
kbd,
samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/**
* Add the correct font size in all browsers.
*/
small {
font-size: 80%;
}
/**
* Prevent `sub` and `sup` elements from affecting the line height in
* all browsers.
*/
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content
========================================================================== */
/**
* Remove the border on images inside links in IE 10.
*/
img {
border-style: none;
}
/* Forms
========================================================================== */
/**
* 1. Change the font styles in all browsers.
* 2. Remove the margin in Firefox and Safari.
*/
button,
input,
optgroup,
select,
textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/**
* Show the overflow in IE.
* 1. Show the overflow in Edge.
*/
button,
input { /* 1 */
overflow: visible;
}
/**
* Remove the inheritance of text transform in Edge, Firefox, and IE.
* 1. Remove the inheritance of text transform in Firefox.
*/
button,
select { /* 1 */
text-transform: none;
}
/**
* Correct the inability to style clickable types in iOS and Safari.
*/
button,
[type="button"],
[type="reset"],
[type="submit"] {
-webkit-appearance: button;
}
/**
* Remove the inner border and padding in Firefox.
*/
button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/**
* Restore the focus styles unset by the previous rule.
*/
button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/**
* Correct the padding in Firefox.
*/
fieldset {
padding: 0.35em 0.75em 0.625em;
}
/**
* 1. Correct the text wrapping in Edge and IE.
* 2. Correct the color inheritance from `fieldset` elements in IE.
* 3. Remove the padding so developers are not caught out when they zero out
* `fieldset` elements in all browsers.
*/
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/**
* Add the correct vertical alignment in Chrome, Firefox, and Opera.
*/
progress {
vertical-align: baseline;
}
/**
* Remove the default vertical scrollbar in IE 10+.
*/
textarea {
overflow: auto;
}
/**
* 1. Add the correct box sizing in IE 10.
* 2. Remove the padding in IE 10.
*/
[type="checkbox"],
[type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/**
* Correct the cursor style of increment and decrement buttons in Chrome.
*/
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
/**
* 1. Correct the odd appearance in Chrome and Safari.
* 2. Correct the outline style in Safari.
*/
[type="search"] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/**
* Remove the inner padding in Chrome and Safari on macOS.
*/
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/**
* 1. Correct the inability to style clickable types in iOS and Safari.
* 2. Change font properties to `inherit` in Safari.
*/
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive
========================================================================== */
/*
* Add the correct display in Edge, IE 10+, and Firefox.
*/
details {
display: block;
}
/*
* Add the correct display in all browsers.
*/
summary {
display: list-item;
}
/* Misc
========================================================================== */
/**
* Add the correct display in IE 10+.
*/
template {
display: none;
}
/**
* Add the correct display in IE 10.
*/
[hidden] {
display: none;
}

View File

@@ -1,11 +0,0 @@
.panel {
display: flex;
justify-content: center;
align-items: center;
}
.main_form {
height: 50vh;
width: 50vw;
border: 1px solid red;
}

View File

@@ -1,17 +0,0 @@
a,
p {
padding: 5rem;
border: 1px solid red;
line-height: 2rem;
margin: 2em;
}
.warp_test {
width: 5rem;
border: 1px solid red;
}
ol,
li {
background-color: cornflowerblue;
}

View File

@@ -1,23 +0,0 @@
<%-- /*
* @Author: Kane
* @Date: 2022-10-21 00:14:43
* @LastEditors: Kane
* @LastEditTime: 2022-10-21 00:16:48
* @FilePath: \car_dealer\src\main\webapp\test.jsp
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ --%>
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
</body>
</html>

View File

@@ -1,4 +0,0 @@
#Created by Apache Maven 3.8.6
artifactId=admin-system
groupId=com.cpic.xim
version=1.0-SNAPSHOT

View File

@@ -1,13 +0,0 @@
com\cpic\xim\web\filters\cros\CrosFilter.class
com\cpic\xim\web\listener\ContextLoaderListener.class
com\cpic\xim\web\filters\token\TokenFilter.class
com\cpic\xim\myutils\account\CpicXIMStaffInfo.class
com\cpic\xim\myutils\config\json\ConfigLoader.class
com\cpic\xim\web\controllers\account\P13AccountCheckResult.class
com\cpic\xim\web\controllers\FileUpload\FileUploadResult.class
com\cpic\xim\myutils\config\json\AppConfig.class
com\cpic\xim\myutils\config\json\DatabaseConfig.class
com\cpic\xim\web\controllers\FileUpload\FileUpload.class
com\cpic\xim\web\controllers\account\P13AccountCheckController.class
com\cpic\xim\web\controllers\account\P13AccountCheckRequest.class
com\cpic\xim\myutils\account\LdapAccountCheck.class

View File

@@ -1,13 +0,0 @@
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\web\controllers\account\P13AccountCheckController.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\web\controllers\FileUpload\FileUpload.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\myutils\account\LdapAccountCheck.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\web\controllers\account\P13AccountCheckRequest.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\web\filters\token\TokenFilter.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\myutils\account\CpicXIMStaffInfo.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\myutils\config\json\ConfigLoader.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\web\controllers\account\P13AccountCheckResult.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\web\controllers\FileUpload\FileUploadResult.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\myutils\config\json\DatabaseConfig.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\myutils\config\json\AppConfig.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\web\listener\ContextLoaderListener.java
D:\develop\cpicxim\it-console\code\java\后端-用户验证\src\main\java\com\cpic\xim\web\filters\cros\CrosFilter.java

View File

@@ -2,7 +2,7 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-02-04 11:38:32 * @Date: 2023-02-04 11:38:32
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-02-04 14:17:26 * @LastEditTime: 2023-02-17 10:52:40
* @FilePath: /后端-需求/src/main/java/com/cpic/xim/utils/db/RequirementDbOperation.java * @FilePath: /后端-需求/src/main/java/com/cpic/xim/utils/db/RequirementDbOperation.java
* @Description: * @Description:
* *
@@ -20,7 +20,7 @@ import com.cpic.xim.data.RequirementStatus;
public final class RequirementDbOperation public final class RequirementDbOperation
{ {
private static final String MYSQL_JDBC_CONNECT = "jdbc:mysql://192.168.1.14:3306"; private static final String MYSQL_JDBC_CONNECT = "jdbc:mysql://10.39.0.85:3306";
private static final String MYSQL_CLASS_DRIVER = "com.mysql.cj.jdbc.Driver"; private static final String MYSQL_CLASS_DRIVER = "com.mysql.cj.jdbc.Driver";
/***************************************************** /*****************************************************

View File

@@ -0,0 +1,4 @@
node_modules
dist
target
tsconfig.json

60
code/ts/pako/.eslintrc.js Normal file
View File

@@ -0,0 +1,60 @@
/*
* @Author: Kane
* @Date: 2023-02-09 15:26:18
* @LastEditors: Kane
* @LastEditTime: 2023-02-10 10:25:42
* @FilePath: /后端辅助工具/.eslintrc.js
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
module.exports = {
root: true,
env: {
browser: true,
es2021: true,
node: true,
},
parser: "@typescript-eslint/parser",
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
// project: ["./tsconfig.json",],
tsconfigRootDir: __dirname,
},
plugins: [
"@typescript-eslint",
],
extends: [
// "standard-with-typescript",
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
],
rules: {
"no-console": "warn",
"quote-props": ["warn", "as-needed",],
quotes: ["warn", "double", { allowTemplateLiterals: true, },],
indent: ["warn", 4,],
"no-unused-vars": "off",
semi: ["error", "always",], // 控制行尾部分号
"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",
"@typescript-eslint/no-extra-semi": "off",
"@typescript-eslint/no-inferrable-types": "off",
},
};

21
code/ts/pako/package-lock.json generated Normal file
View File

@@ -0,0 +1,21 @@
{
"name": "pako",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "pako",
"version": "1.0.0",
"license": "ISC",
"dependencies": {
"pako": "^2.1.0"
}
},
"node_modules/pako": {
"version": "2.1.0",
"resolved": "https://registry.npmmirror.com/pako/-/pako-2.1.0.tgz",
"integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
}
}
}

19
code/ts/pako/package.json Normal file
View File

@@ -0,0 +1,19 @@
{
"name": "pako",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "node index.js"
},
"keywords": [
"pako"
],
"type": "module",
"author": "Kane",
"license": "ISC",
"dependencies": {
"pako": "^2.1.0"
}
}

22
code/ts/pako/src/index.js Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,37 @@
/*
* @Author: Kane
* @Date: 2023-02-13 14:54:46
* @LastEditors: Kane
* @LastEditTime: 2023-02-13 14:55:19
* @FilePath: /pako/src/utils/StringConverter.js
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
function Uint8ArrayToString(fileData)
{
var dataString = "";
for (var i = 0; i < fileData.length; i++)
{
dataString += String.fromCharCode(fileData[i]);
}
return dataString;
}
function stringToUint8Array(str)
{
var arr = [];
for (var i = 0, j = str.length; i < j; ++i)
{
arr.push(str.charCodeAt(i));
}
var tmpUint8Array = new Uint8Array(arr);
return tmpUint8Array;
}
export { Uint8ArrayToString, stringToUint8Array };

View File

@@ -0,0 +1,4 @@
node_modules
dist
target
tsconfig.json

View File

@@ -0,0 +1,61 @@
/*
* @Author: Kane
* @Date: 2023-02-09 15:26:18
* @LastEditors: Kane
* @LastEditTime: 2023-02-18 23:36:07
* @FilePath: /后端辅助工具/.eslintrc.js
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
module.exports = {
root: true,
env: {
browser: true,
es2021: true,
node: true,
},
parser: "@typescript-eslint/parser",
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
// project: ["./tsconfig.json",],
tsconfigRootDir: __dirname,
},
plugins: [
"@typescript-eslint",
],
extends: [
// "standard-with-typescript",
"eslint:recommended",
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
],
rules: {
"no-console": "off",
"quote-props": ["warn", "as-needed",],
quotes: ["warn", "double", { allowTemplateLiterals: true, },],
indent: ["warn", 4,],
"no-unused-vars": "off",
semi: ["error", "always",], // 控制行尾部分号
"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",
"@typescript-eslint/no-extra-semi": "off",
"@typescript-eslint/no-inferrable-types": "off",
"@typescript-eslint/no-unused-vars": "off",
},
};

View File

@@ -0,0 +1,20 @@
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "pwa-node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${file}",
"outFiles": [
"${workspaceFolder}/**/*.js"
]
}
]
}

View File

@@ -0,0 +1,3 @@
{
"typescript.tsdk": "node_modules/typescript/lib"
}

View File

@@ -0,0 +1,14 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "typescript",
"tsconfig": "tsconfig.json",
"problemMatcher": [
"$tsc"
],
"group": "build",
"label": "tsc: build - tsconfig.json"
}
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,15 @@
{
"devDependencies": {
"@typescript-eslint/eslint-plugin": "^5.51.0",
"@typescript-eslint/parser": "^5.51.0",
"eslint": "^8.33.0",
"ts-loader": "^9.4.2",
"webpack": "^5.75.0",
"webpack-cli": "^5.0.1"
},
"dependencies": {
"axios": "^1.3.2",
"pako": "^2.1.0",
"ts-node": "^10.9.1"
}
}

View File

@@ -0,0 +1,41 @@
/*
* @Author: Kane
* @Date: 2023-02-17 22:35:49
* @LastEditors: Kane
* @LastEditTime: 2023-02-19 21:38:18
* @FilePath: /后端辅助工具/src/DataType/Class.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
class CpicximStuff
{
constructor(
private _stuffName: string,
private _stuffCode: string,
private _p13UID: string
) { }
get stuffName(): string
{
return this._stuffName;
}
set stuffName(stuffName: string)
{
this._stuffName = stuffName;
}
get stuffCode(): string
{
return this._stuffCode;
}
set stuffCode(code: string)
{
this._stuffCode = code;
}
};
export { CpicximStuff };

View File

@@ -0,0 +1,73 @@
/*
* @Author: Kane
* @Date: 2023-02-10 15:08:53
* @LastEditors: Kane
* @LastEditTime: 2023-02-13 10:04:33
* @FilePath: /后端辅助工具/src/DataType/DataType.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
/*eslint no-unused-vars: "off" */
/*eslint @typescript-eslint/no-unused-vars: "off" */
//Tuple
function dataTypes()
{
const tu: readonly [number, number, number] = [1, 1, 2,];
const toArray: [number, number, string] = [1, 2, "3",];
const v1: (number | string)[] = toArray;
const s1 = "string";
console.log(typeof s1);
let point: {
x: number,
y: number,
};
point = { x: 0, y: 0, };
function addOne(x: number, y: number = 1): number
{
return x + y;
}
console.log(addOne(1));
function allParams(x: number, y: number): void
{
const z = x + y;
}
//剩余参数,数组形式
function overplusArgusWithArray(x: number, ...argus: number[]): number
{
return argus.length;
}
function overplusArugsWithTuple(x: number, ...argus: [number, number, string]): number
{
console.log(`元组形式的参数表${argus},剩余参数的数量${argus.length}`);
console.log(argus[2]);
return argus.length;
}
overplusArugsWithTuple(1, 2, 3, "test");
console.log(overplusArgusWithArray(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
//测试null
const nulltest: null = null;
let var_2: { x: string; } = { x: "test", };
// var_2 = null;
}
export default dataTypes;

View File

@@ -0,0 +1,30 @@
/*
* @Author: Kane
* @Date: 2023-02-13 23:08:34
* @LastEditors: Kane
* @LastEditTime: 2023-02-16 22:43:22
* @FilePath: /后端辅助工具/src/DataType/Function.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
function f(x: number, y: number): number
{
return x + y;
}
f.version = "1.0.0";
const func: {
(x: number, y: number): void,
version: string,
} = f;
function func_this_void(this: void, arg1: number): number
{
return arg1;
}
let constructor: {
new(x: string, y: string): object;
};

View File

@@ -0,0 +1,24 @@
/*
* @Author: Kane
* @Date: 2023-02-14 22:24:26
* @LastEditors: Kane
* @LastEditTime: 2023-02-21 23:31:40
* @FilePath: /后端辅助工具/src/DataType/Interface.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
interface document
{
getElementById(id: string): HTMLElement | null;
}
interface CpicStuff
{
stuffName: string;
stuffCode: string;
p13uid: string;
password: string;
}

View File

@@ -0,0 +1,24 @@
/*
* @Author: Kane
* @Date: 2023-02-21 17:39:01
* @LastEditors: Kane
* @LastEditTime: 2023-02-22 14:08:48
* @FilePath: /后端辅助工具/src/DataType/Template.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
interface Point
{
x: number;
y: number;
}
function radius<TPoint>(x: TPoint): TPoint
{
const result: TPoint = x;
return result;
}

View File

@@ -0,0 +1,11 @@
/*
* @Author: Kane
* @Date: 2023-02-13 15:46:17
* @LastEditors: Kane
* @LastEditTime: 2023-02-13 23:34:55
* @FilePath: /后端辅助工具/src/axios/AxiosTest.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import axios from "axios";

View File

@@ -0,0 +1,19 @@
/*
* @Author: Kane
* @Date: 2023-02-13 15:53:45
* @LastEditors: Kane
* @LastEditTime: 2023-02-13 22:41:50
* @FilePath: /后端辅助工具/src/axios/request.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import axios, {AxiosInstance, AxiosRequestConfig, AxiosResponse} from 'axios';
// const service = axios.create({
// baseURL: "",
// timeout: 10000,
// timeoutErrorMessage: "请求超时!",
// });

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,21 @@
/*
* @Author: Kane
* @Date: 2023-02-09 22:14:30
* @LastEditors: Kane
* @LastEditTime: 2023-02-21 23:32:00
* @FilePath: /后端辅助工具/src/main.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
import dataTypes from "./DataType/DataType";
import { pakoTest } from "./gzip/PakoTest";
const greetings = "hello, this is kane's typescript!";
console.log(greetings);
console.log("all");
//dataTypes();
pakoTest();

View File

@@ -0,0 +1,38 @@
/*
* @Author: Kane
* @Date: 2023-02-13 14:54:46
* @LastEditors: Kane
* @LastEditTime: 2023-02-13 14:55:19
* @FilePath: /pako/src/utils/StringConverter.js
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
function Uint8ArrayToString(fileData: Uint8Array): string
{
let dataString: string = "";
for (let i = 0; i < fileData.length; i++)
{
dataString += String.fromCharCode(fileData[i]);
}
return dataString;
}
function stringToUint8Array(str: string): Uint8Array
{
const arr: number[] = [];
for (let i = 0, j = str.length; i < j; ++i)
{
arr.push(str.charCodeAt(i));
}
const tmpUint8Array: Uint8Array = new Uint8Array(arr);
return tmpUint8Array;
}
export { Uint8ArrayToString, stringToUint8Array };

View File

@@ -0,0 +1,77 @@
/*
* @Author: Kane
* @Date: 2023-02-28 19:30:40
* @LastEditors: Kane
* @FilePath: /后端辅助工具/src/utils/url.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
/**
* 将url的参数拆分成对象
* @param url 访问的url
* @returns
*/
function getURLParams(url: string)
{
const arr = url.split("?");
const params = arr[1].split("&");
const obj = {};
for (let i = 0; i < params.length; i++)
{
const param = params[i].split("=");
obj[param[0]] = param[1];
}
return obj;
}
function getParamsFromURL(url: string)
{
const indexOfQuestionMark: number = url.indexOf("?");
const indexOfSharp: number = url.indexOf("#");
const paramObj = {};
let paramString;
//url中没有问号说明没有参数
if (indexOfQuestionMark < 0)
{
return paramObj;
}
//检查是否有#号
if (indexOfSharp < 0)
{
//没有#号,可以直接截取参数字符串
paramString = url.substring(indexOfQuestionMark);
}
else
{
//有#号,需要排除掉#的内容
const end: number = indexOfQuestionMark < indexOfSharp ? indexOfSharp : url.length;
paramString = url.substring(indexOfQuestionMark + 1, end);
}
//拆分属性
const paramArray: string[] = paramString.split("&");
paramArray.forEach((item) =>
{
if (item.length == 0)
{
return;
}
const param = item.split("=");
paramObj[param[0]] = param[1] || "";
});
return paramObj;
}
export { getURLParams, getParamsFromURL };

View File

@@ -0,0 +1,40 @@
/*
* @Author: Kane
* @Date: 2023-02-09 15:24:20
* @LastEditors: Kane
* @LastEditTime: 2023-02-17 23:15:11
* @FilePath: //tsconfig.json
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
{
"compilerOptions": {
"outDir": "./target",
"strict": false,
"strictNullChecks": true,
"strictPropertyInitialization": true,
"sourceMap": true,
"allowJs": true,
"checkJs": true,
"moduleResolution": "node",
"module": "CommonJS",
"target": "ES2015"
},
// "files": [
// "./src/main.ts",
// ],
"include": [
"./src/**/*",
// "./src/*.ts",
// "src/main.ts",
// ".eslintrc.js",
],
"exclude": [
"./target",
"node_modules",
"bower_componets",
"jspm_packages",
],
// "outFile": "./target/mian.js",
}

View File

@@ -0,0 +1,12 @@
/*
* @Author: Kane
* @Date: 2023-02-23 16:15:45
* @LastEditors: Kane
* @LastEditTime: 2023-02-28 09:22:08
* @FilePath: /后端辅助工具/webpack.config.js
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
// const path = require("path");
import { path } from "path";

View File

@@ -1,3 +0,0 @@
VUE_APP_API_URL_LOGIN = "http://222.76.244.118:11001/admin-system/account/p13_account_check"
VUE_APP_API_URL_UPLOAD_FILE= "http://222.76.244.118:11001/admin-system/file/file-upload.do"
VUE_APP_API_URL_REQUIREMENT_STATUS= "http://222.76.244.118:11001/requirement/query_requirement_status.do"

View File

@@ -1,44 +0,0 @@
/*
* @Author: Kane
* @Date: 2022-12-14 15:12:46
* @LastEditors: Kane
* @LastEditTime: 2023-02-06 00:36:26
* @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": ["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, },],
},
};

View File

@@ -1,5 +0,0 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,38 +0,0 @@
{
"name": "CPIC-IT-Console",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"@element-plus/icons-vue": "^2.0.10",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^1.2.1",
"core-js": "^3.8.3",
"element-plus": "^2.2.26",
"sass": "^1.56.2",
"sass-loader": "^13.2.0",
"scss": "^0.2.4",
"scss-loader": "^0.0.1",
"vue": "^3.2.13",
"vue-router": "^4.0.3",
"vuex": "^4.0.0"
},
"devDependencies": {
"@babel/core": "^7.12.16",
"@babel/eslint-parser": "^7.12.16",
"@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-plugin-router": "~5.0.0",
"@vue/cli-plugin-vuex": "~5.0.0",
"@vue/cli-service": "~5.0.0",
"eslint": "^7.32.0",
"eslint-plugin-vue": "^8.0.3",
"svg-sprite-loader": "^2.1.0",
"vue-cli-plugin-element-plus": "~0.0.13"
}
}

View File

@@ -1,37 +0,0 @@
<!--
* @Author: Kane
* @Date: 2022-12-14 15:12:46
* @LastEditors: Kane
* @LastEditTime: 2023-02-03 18:53:11
* @FilePath: \IT工具综合平台\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>
</template>
<script>
//引入语言组件
import zhCn from "element-plus/lib/locale/lang/zh-cn";
export default {
name: "App",
setup()
{
const locale = zhCn;
return { locale };
},
components: {
// HelloWorld,
},
};
</script>
<style>
</style>

View File

@@ -1,20 +0,0 @@
:root {
font-size: 1em;
box-sizing: border-box;
}
*,
*::before,
*::after {
margin: 0;
padding: 0;
box-sizing: inherit;
}
body {
font-family: Arial, Helvetica, sans-serif;
}
.pointer {
cursor: pointer;
}

View File

@@ -1,118 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-01-04 11:05:44
* @LastEditors: Kane
* @LastEditTime: 2023-02-06 09:26:48
* @FilePath: /IT/src/layout/Index.vue
* @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>
</el-container>
</template>
<script>
import LayoutAside from "./components/Aside.vue";
import LayoutHeader from "./components/Header.vue";
import LayoutMain from "./components/Main.vue";
import { useStore } from "vuex";
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(() =>
{
const collapse = store.state.app.asideBarCollapse;
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,
};
},
components: {
LayoutAside,
LayoutHeader,
LayoutMain,
},
};
</script>
<style scoped>
#layout-container {
height: 100vh;
/* width: 100vw; */
max-height: 100vh;
}
#layout-container-down {
height: calc(100vh - 50px);
max-height: calc(100vh - 50px);
min-height: calc(100vh - 50px);
}
#layout-aside {
/* width: 175px; */
background-color: #2f4156;
overflow-x: hidden;
height: calc(100vh - 50px);
max-height: calc(100vh - 50px);
min-height: calc(100vh - 50px);
}
#layout-header {
height: 50px;
padding: 0px;
flex-grow: 0;
}
#layout-main {
padding: 0px;
height: 100%;
/* height: calc(100vh - 50px); */
/* flex-grow: 1; */
/* overflow: overlay; */
}
</style>

View File

@@ -1,99 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-01-04 11:39:04
* @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.
-->
<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>
<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 { Logout } from "../../utils/api/info/account";
export default {
name: "AppBanner",
data()
{
return {};
},
// created() {
// console.log("banner请求数据");
// },
mounted()
{
//console.log("banner请求数据");
},
methods: {
logout()
{
this.$confirm("是否退出系统?", "请确认", {
confirmButtonText: "是",
cancelButtonText: "否",
type: "warning",
}).then(() =>
{
Logout();
});
},
},
};
</script>
<style scoped>
.app_banner {
background-color: var(--banner-background-color);
color: #fff;
display: flex;
justify-content: left;
align-items: center;
padding: 0px 15px 0px 15px;
height: 100%;
position: relative;
}
.no_select {
-webkit-touch-callout: none;
-moz-user-select: none;
/*火狐*/
-webkit-user-select: none;
/*webkit浏览器*/
-ms-user-select: none;
/*IE10*/
-khtml-user-select: none;
/*早期浏览器*/
user-select: none;
}
.app_banner>*+* {
margin-left: 10px;
}
.company_name {
font-size: 2rem;
}
.version_div {
font-size: 0.5rem;
}
.buttons_div {
margin-left: auto;
padding-top: 5px;
/* border: 1px solid salmon; */
}
</style>

View File

@@ -1,91 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-01-04 11:39:04
* @LastEditors: Kane
* @LastEditTime: 2023-02-06 10:17:22
* @FilePath: /IT/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>
<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 { ElMessageBox } from "element-plus";
import { Logout } from "../../utils/api/info/account";
export default {
name: "AppBanner",
setup(props, context)
{
const logout = () =>
{
ElMessageBox.confirm("是否退出系统?", "请确认", {
confirmButtonText: "是",
cancelButtonText: "否",
type: "warning",
}).then(() =>
{
Logout();
});
};
return { logout, };
},
};
</script>
<style scoped>
.app_banner {
background-color: var(--banner-background-color);
color: #fff;
display: flex;
justify-content: left;
align-items: center;
padding: 0px 15px 0px 15px;
height: 100%;
position: relative;
}
.no_select {
-webkit-touch-callout: none;
-moz-user-select: none;
/*火狐*/
-webkit-user-select: none;
/*webkit浏览器*/
-ms-user-select: none;
/*IE10*/
-khtml-user-select: none;
/*早期浏览器*/
user-select: none;
}
.app_banner>*+* {
margin-left: 10px;
}
.company_name {
font-size: 2rem;
}
.version_div {
font-size: 0.5rem;
}
.buttons_div {
margin-left: auto;
padding-top: 5px;
/* border: 1px solid salmon; */
}
</style>

View File

@@ -1,194 +0,0 @@
/*
* @Author: Kane
* @Date: 2022-12-14 15:12:46
* @LastEditors: Kane
* @LastEditTime: 2023-02-04 22:36:13
* @FilePath: /IT工具综合平台/src/router/index.js
* @Description: 定义应用路由配置
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
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: "控制台"
},
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",
},
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: "/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"),
},
{
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"),
}
],
},
];
const router = createRouter({
history: createWebHashHistory(),
routes
});
//前置路由守卫
router.beforeEach((to) =>
{
const token = window.localStorage.getItem("token");
//先检查token
if (!token)
{
//如果token不存在判断路由是否走向login,如果不是则指向login
//走向login则不干预
if (to.name !== "Login")
{
return {
name: "Login",
};
}
}
//修改默认打开的页面,跳向工作台
// if (to.name === "Home")
// {
// console.log("跳向工作台");
// return {
// name: "DeskTop",
// };
// }
});
export default router;

View File

@@ -1,73 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-02-06 14:12:11
* @LastEditors: Kane
* @LastEditTime: 2023-02-06 15:52:55
* @FilePath: /IT工具综合平台/src/utils/api/LocalStorage.js
* @Description: 初始化localStorage中保存的值。
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
//常量
const REQUIREMRNT_UI = "requirement_ui";
//需求管理模块
function loadRequirementUI()
{
// debugger;
let requirementUI = null;
try
{
requirementUI = JSON.parse(window.localStorage.getItem(REQUIREMRNT_UI));
}
catch (error)
{
console.log("转换requirement-ui失败", error);
requirementUI = {};
}
//如果之前不存在json转换结果也会是null
if (requirementUI === null)
{
requirementUI = {};
}
if (requirementUI.selected_status === undefined)
{
requirementUI.selected_status = [];
}
if (requirementUI.title === undefined)
{
requirementUI.title = "";
}
if (requirementUI.serial_no === undefined)
{
requirementUI.serial_no = "";
}
if (requirementUI.request_people === undefined)
{
requirementUI.request_people = "";
}
if (requirementUI.commit_start_date === undefined)
{
requirementUI.commit_start_date = new Date();
requirementUI.commit_start_date.setMonth(0);
requirementUI.commit_start_date.setDate(1);
}
if (requirementUI.commit_end_date === undefined)
{
requirementUI.commit_end_date = new Date();
}
return requirementUI;
}
export { loadRequirementUI };

View File

@@ -1,295 +0,0 @@
<!-- eslint-disable no-unused-vars -->
<!--
* @Author: Kane
* @Date: 2022-12-14 15:23:54
* @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.
-->
<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>
</div>
</template>
<script>
import { reactive, onBeforeMount, onMounted } from "vue";
import { useStore } from "vuex";
import { useRouter } from "vue-router";
import { Login } from "@/utils/api/info/account";
import { ElMessage } from "element-plus";
//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) =>
{
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",
});
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 = tab_menu[0].type;
});
onMounted(() =>
{
//清理状态
store.state.app.userInfo = null;
});
return {
//数据
ui,
loginForm,
tab_menu,
//方法
onToggleMenu,
saveUserInfo,
login,
getValidateCode,
};
},
};
</script>
<style scoped>
#login {
height: 100vh;
background-color: #344a5f;
padding-top: 50px;
background-image: url("@/assets/img/cropped-1600-900-36302.jpg");
}
.form-wrapper {
width: 320px;
padding: 30px;
margin: auto;
background-color: #ffffffaf;
border-radius: 5px;
}
/*.menu-tab {
text-align: center;
margin-bottom: 15px;
li {
display: inline-block;
padding: 10px 24px;
margin: 0 10px;
color: #fff;
font-size: 16px;
border-radius: 5px;
cursor: pointer;
&.current {
background-color: rgba(0, 0, 0, 0.1);
}
}
}*/
.menu-tab {
text-align: center;
margin-bottom: 15px;
}
.menu-tab li {
display: inline-block;
padding: 10px 24px;
margin: 0 10px;
color: #344a5fef;
font-size: 14px;
border-radius: 5px;
cursor: pointer;
}
.menu-tab .current {
background-color: rgba(0, 0, 0, 0.1);
}
.form-label {
display: block;
/* color: #fff; */
color: #344a5fef;
font-size: 14px;
}
.el-input {
color: #344a5fef;
}
.el-button-block {
width: 100%;
}
</style>

View File

@@ -1,37 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-01-25 11:26:11
* @LastEditors: Kane
* @LastEditTime: 2023-01-25 11:26:13
* @FilePath: \admin_system\src\views\network\NetworkPoint copy.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<!--
* @Author: Kane
* @Date: 2023-01-25 11:24:47
* @LastEditors: Kane
* @LastEditTime: 2023-01-25 11:24:48
* @FilePath: \admin_system\src\views\network\NetworkPoint.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div>网络点位信息修改</div>
</template>
<script>
export default {
name: "network-point-editor",
data()
{
return {};
},
};
</script>
<style scoped>
</style>

View File

@@ -1,27 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-01-25 11:24:47
* @LastEditors: Kane
* @LastEditTime: 2023-01-25 11:34:07
* @FilePath: \admin_system\src\views\network\NetworkPoint.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div>网络点位管理</div>
</template>
<script>
export default {
name: "network-point-management",
data()
{
return {};
},
};
</script>
<style scoped>
</style>

View File

@@ -1,120 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-01-06 15:30:12
* @LastEditors: Kane
* @LastEditTime: 2023-02-04 22:38:47
* @FilePath: /IT/src/views/overview/desktop.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<el-form :inline="true" label-width="5em" class="query_form">
<el-row :gutter="10">
<el-col :span="7">
<el-form-item label="需求编号">
<el-input style="width:100%;"></el-input>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="标题">
<el-input style="width:100%;"></el-input>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="提交人">
<el-input style="width:100%;"></el-input>
</el-form-item>
</el-col>
<el-col :span="3"></el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="7">
<el-form-item label="状态">
<el-select style="width:100%;">
<el-option key="部门审批" value="部门审批"></el-option>
<el-option key="需求分析" value="需求分析">需求分析</el-option>
<el-option key="技术开发" value="技术开发">技术开发</el-option>
<el-option key="被退回" value="被退回"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="提交日期">
<el-date-picker style="width:100%;" v-model="start_date"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="7">
<el-form-item label="至">
<el-date-picker style="width:100%;" v-model="end_date"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="3"></el-col>
</el-row>
<el-row>
<el-col :span="14">
<el-form-item label="提交日期">
<el-date-picker type="daterange" range-separator="" style="width:100%;"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="10"></el-col>
</el-row>
</el-form>
<el-button type="danger" @click="testRequest">测试</el-button>
<el-button type="danger" @click="testError">错误</el-button>
</template>
<script >
import { reactive, onBeforeMount } from "vue";
import { useStore } from "vuex";
import { useRouter } from "vue-router";
import { query_requirement_ui } from "@/utils/api/requirement/requirement.js";
export default {
name: "DeskTop",
setup()
{
let start_date = reactive(new Date());
let end_date = reactive(new Date());
const router = useRouter();
const store = useStore();
onBeforeMount(() =>
{
end_date = new Date(Date.now());
start_date = new Date();
start_date.setMonth(end_date.getMonth() - 1);
});
const testRequest = () =>
{
// const ui = store.state.app.ui;
// const requirement = store.state.requirement;
//加载数据;
query_requirement_ui(store);
console.log(store.state.app);
console.log(store.state.requirement);
};
const testError = () =>
{
router.push("/error-page");
};
return {
start_date,
end_date,
testRequest,
testError,
};
},
};
</script>
<style scoped>
.query_form {
max-width: 63em;
}
</style>

View File

@@ -1,553 +0,0 @@
<!--
* @Author: Kane
* @Date: 2023-02-02 22:19:12
* @LastEditors: Kane
* @LastEditTime: 2023-02-07 10:48:53
* @FilePath: /IT/src/views/requirement/RequirementManager.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<div class="requirement_wrapper" v-loading="ui.pageVisible">
<!-- 查询框 -->
<div class="search-box">
<el-row :gutter="10">
<el-col :span="2">
<span>标题</span>
</el-col>
<el-col :span="16">
<el-input v-model.trim.lazy="query_param.title"></el-input>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="2">
<span>需求编号</span>
</el-col>
<el-col :span="4">
<el-input v-model.trim.lazy="query_param.serial_no" placeholder="请输入末尾三位数字"></el-input>
</el-col>
<el-col :span="2">
<span>申请人</span>
</el-col>
<el-col :span="4">
<el-input v-model.trim.lazy="query_param.request_people"></el-input>
</el-col>
<el-col :span="2">
<span>状态</span>
</el-col>
<el-col :span="4">
<!-- <el-input v-model="query_param.status"></el-input> -->
<el-select multiple collapse-tags collapse-tags-tooltip
v-model.trim.lazy="query_param.selected_status">
<el-option v-for="option in statusData" :value="option.status_name" lable="option.status_code"
:key="option.status_code + option.status_name"></el-option>
</el-select>
</el-col>
<el-col :span="6"></el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="2">
<span>提交日期</span>
</el-col>
<el-col :span="4">
<el-date-picker v-model="query_param.commit_start_date" style="width:100%;"></el-date-picker>
</el-col>
<el-col :span="2">
<span></span>
</el-col>
<el-col :span="4">
<el-date-picker v-model="query_param.commit_end_date" style="width:100%;"></el-date-picker>
</el-col>
<el-col :span="6">
<div class="button-wrapper-right">
<el-button type="primary" icon="search">查询</el-button>
<el-button icon="Refresh">重置</el-button>
</div>
</el-col>
<el-col :span="6"></el-col>
</el-row>
</div>
<!-- 工具栏 -->
<div class="tool-button-wrapper">
<el-row :gutter="10">
<el-col :span="4">
<div class="button-wrapper-left">
<el-button type="success" icon="DocumentAdd" plain @click="addNewRequirement()">新增</el-button>
<el-button type="warning" icon="document" plain>导出</el-button>
</div>
</el-col>
<el-col :span="20">
<div class="table-display-wrapper">
<span>结果筛选</span>
<div class="result-filter-wrapper">
<el-checkbox-button label="已完成" checked></el-checkbox-button>
<el-checkbox-button label="已取消" checked></el-checkbox-button>
<el-checkbox-button label="被退回" checked></el-checkbox-button>
</div>
</div>
</el-col>
</el-row>
</div>
<!-- 需求列表 -->
<el-table :data="tableData" border stripe style="width:100%;" :height="tableHeight">
<el-table-column type="selection" align="center"></el-table-column>
<el-table-column label="需求编号" align="center" width="160">
<template #default="requirement">
<span @click="showRequirementDetail(requirement.row.serial_no)" class="requirement-serial">{{
requirement.row.serial_no
}}</span>
</template>
</el-table-column>
<el-table-column label="标题" prop="title" min-width="200" align="center">
<template #default="requirement">
<span class="requirement-title">{{ requirement.row.title }}</span>
</template>
</el-table-column>
<el-table-column label="申请人" prop="request_people" align="center" width="100"></el-table-column>
<el-table-column label="状态" prop="status" align="center" width="100"></el-table-column>
<el-table-column label="提交日期" prop="submit_date" align="center" width="130"></el-table-column>
<el-table-column label="操作" align="center" fixed="right" width="200">
<template #default="scope">
<el-button type="warning" icon="edit" @click="editRequirement(scope.row.serial_no)">编辑</el-button>
<el-button type="danger" icon="delete">删除</el-button>
</template>
</el-table-column>
</el-table>
<div class="pagination_wrapper">
<el-pagination class="pull_left" @current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange" size="small" background v-model="ui.table_current_page"
:page-size="ui.table_page_size" :page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper" :total="requirement_data.length">
</el-pagination>
</div>
<!-- 需求详细信息对话框 -->
<el-dialog title="详情" class="requirement-detail-dialog" v-model="ui.dialogRequirementDetailVisible"
width="900px" :close-on-click-modal="true" :close-on-press-escape="false" :show-close="true" :center="false"
@close="closeRequirementDetail">
<el-tabs v-loading="ui.dialogRequirementDetailLoadingVisible" v-model="ui.activeTabName">
<el-tab-pane name="requirement-detail" label="基本信息">
<el-scrollbar height="400px">
<div class="requirement-detail-wrapper">
<el-row :gutter="10">
<el-col :span="2">
<span>标题1</span>
</el-col>
<el-col :span="22">
<el-input readonly></el-input>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="2">
<span>需求编号</span>
</el-col>
<el-col :span="6">
<el-input v-model="query_param.serial_no" readonly></el-input>
</el-col>
<el-col :span="2">
<span>主系统</span>
</el-col>
<el-col :span="14">
<el-input readonly></el-input>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="2">
<span>需求分类</span>
</el-col>
<el-col :span="6">
<el-input readonly v-model="query_param.request_people"></el-input>
</el-col>
<el-col :span="2">
<span>状态</span>
</el-col>
<el-col :span="6">
<el-input readonly v-model="query_param.select_status"></el-input>
</el-col>
<el-col :span="2">
<span>当前处理人</span>
</el-col>
<el-col :span="6">
<el-input readonly v-model="query_param.select_status"></el-input>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="2">
<span>联系人</span>
</el-col>
<el-col :span="6">
<el-input readonly v-model="query_param.select_status"></el-input>
</el-col>
<el-col :span="2">
<span>联系方式</span>
</el-col>
<el-col :span="6">
<el-input readonly v-model="query_param.select_status"></el-input>
</el-col>
<el-col :span="2">
<span>提交日期</span>
</el-col>
<el-col :span="6">
<el-input readonly v-model="query_param.select_status"></el-input>
</el-col>
</el-row>
</div>
</el-scrollbar>
</el-tab-pane>
<el-tab-pane name="requirement-content" label="申请材料">
<el-scrollbar height="400px"></el-scrollbar>
</el-tab-pane>
<el-tab-pane name="issue-date" label="排期">
<el-scrollbar height="400px">
<el-table style="width:100%;height:400px;" border stripe>
<el-table-column label="系统" align="center" min-width="200"></el-table-column>
<el-table-column label="功能" align="center" min-width="200"></el-table-column>
<el-table-column label="首次排期" align="center" width="150"></el-table-column>
<el-table-column label="最新排期" align="center" width="150"></el-table-column>
</el-table>
</el-scrollbar>
</el-tab-pane>
<el-tab-pane name="comment" label="备注">
<el-scrollbar height="400px">
<p>hello world</p>
<p><span style="font-size: 24px;">ejfalsjfoewafsdjfdsfewo;sd;fk</span></p>
<ol>
<li><span style="color: rgb(225, 60, 57); font-size: 24px;">12344</span></li>
<li><span style="font-size: 24px;">33445</span></li>
</ol>
<p><br></p>
</el-scrollbar>
</el-tab-pane>
</el-tabs>
<!-- <template #footer>
<div class="dialogFooter">
<el-button type="primary" @click="dialogRequirementDetailVisible = false;">关闭</el-button>
</div>
</template> -->
</el-dialog>
</div>
</template>
<script>
import { reactive, computed, onBeforeMount, onBeforeUnmount } from "vue";
import { Editor, Toolbar } from '@wangeditor/editor-for-vue';
import { requirementTestData } from '@/test/data/TestData';
import { useRouter } from "vue-router";
import { useStore } from "vuex";
import { query_requirement_ui } from "@/utils/api/requirement/requirement";
import { loadRequirementUI } from "@/utils/api/LocalStorage.js";
export default {
name: "requirement-manager",
setup()
{
const router = useRouter();
const store = useStore();
const requirement_data = requirementTestData;
const ui = reactive(
{
table_current_page: 1,//分页组件当前的页面索引
table_page_size: 10,
dialogRequirementDetailVisible: false, //需求详情对话框是否显示
dialogRequirementDetailLoadingVisible: true,
pageVisible: false,
activeTabName: "requirement-detail",
});
//从localStorage加载
const query_param = reactive(loadRequirementUI());
/*计算变量 *****************/
const tableHeight = computed(() =>
{
return 10 * 50 + 40;
});
const tableData = computed(() =>
{
const startIndex = ui.table_page_size * (ui.table_current_page - 1);
const endIndex = (ui.table_page_size * ui.table_current_page);
return requirement_data.slice(startIndex, endIndex);
});
const statusData = computed(() =>
{
return store.state.requirement.status;
});
const onTablePageSizeChange = (pageSize) =>
{
console.log("选择的pageSize", pageSize);
ui.table_page_size = pageSize;
};
//用户变更当前页时消息处理函数
const onCurrentPageIndexChange = (pageIndex) =>
{
ui.table_current_page = pageIndex;
};
const addNewRequirement = () =>
{
router.push({
name: "RequirementEditing",
query: {
serial: "new",
},
});
};
const editRequirement = (requirement_serial) =>
{
window.localStorage.setItem("requirement_serial", requirement_serial);
router.push({
name: "RequirementEditing",
query: {
serial: requirement_serial,
},
});
};
/*****************************************************
* 响应显示需求详情的点击事件
* @param serial_no 需求编号
*****************************************************/
const showRequirementDetail = (serial_no) =>
{
console.log("状态", query_param.select_status);
setTimeout(() =>
{
ui.dialogRequirementDetailLoadingVisible = false;
}, 1000);
ui.dialogRequirementDetailVisible = true;
console.log("查看需求号:", serial_no);
};
//#region 需求详情对话框关闭事件
const closeRequirementDetail = () =>
{
ui.dialogRequirementDetailLoadingVisible = true;
};
//#endregion
//用户选择状态时的事件
const onUIChange = () =>
{
//console.log("当前选择的状态:", query_param.status);
// debugger;
//保存到浏览器
window.localStorage.setItem("requirement_ui", JSON.stringify(query_param));
store.state.requirement.ui.selected_status = query_param.select_status;
};
//#region onBeforeMount定义
onBeforeMount(() =>
{
// debugger;
//判断selected_status是否有保存的值有的话就直接用否则从获取到数据中添加
if (query_param.selected_status.length === 0)
{
for (let index in store.state.requirement.status)
{
const status_name = store.state.requirement.status[index].status_name;
if (typeof status_name === "string" && status_name.length != 0)
{
query_param.selected_status.push(status_name);
}
}
onUIChange();
}
});
//#endregion
//#region onBeforeUnmount
onBeforeUnmount(() =>
{
onUIChange();
});
//#endregion
//#region 加载数据
//需求状态相关,默认全部选择
query_requirement_ui(store.state.requirement, "ErrorPage");
//#endregion
//输出控制台
console.log(store.state.app);
console.log(store.state.requirement);
//#region 返回值
return {
//data
requirement_data,
ui,
query_param,
//计算属性
tableHeight,
tableData,
statusData,
//方法
editRequirement,
addNewRequirement,
onCurrentPageIndexChange,
onTablePageSizeChange,
showRequirementDetail,
closeRequirementDetail,
onUIChange,
//生命周期
onBeforeMount,
};
//#endregion
},
};
</script>
<style scoped>
/* 整个页面的外壳 ******************************/
.requirement_wrapper {
padding: 10px;
background-color: #fff;
border-radius: 5px;
box-shadow: 0px 0px 20px -10px rgb(14 18 22 / 25%);
}
.requirement_wrapper:hover {
box-shadow: 0px 0px 20px -10px rgb(14 18 22 / 40%);
}
.requirement_wrapper>*+* {
margin-top: 10px;
}
/* 查询框 **********************************/
.search-box {
padding: 0 10px;
}
.search-box span {
font-weight: normal;
display: block;
text-align: right;
font-size: 15px;
color: #5f5f5f;
}
.search-box>.el-row {
display: flex;
align-items: center;
justify-content: left;
}
.search-box .el-row+.el-row {
margin-top: 10px;
}
/* 查询结果筛选框 */
.tool-button-wrapper {
padding: 0px 15px;
width: 100%;
}
.tool-button-wrapper>.el-row {
display: flex;
align-items: center;
justify-content: left;
}
.tool-button-wrapper span {
font-weight: small;
display: block;
text-align: right;
font-size: 15px;
color: #5f5f5f;
}
.tool-button-wrapper .el-checkbox {
font-size: 15px;
}
.table-display-wrapper {
display: flex;
align-items: center;
justify-content: right;
}
.button-wrapper-right {
display: flex;
justify-content: right;
align-items: center;
}
.button-wrapper-left {
display: flex;
justify-content: left;
align-items: center;
}
.result-filter-wrapper {
padding: 0 5px;
}
/* 需求列表 */
.requirement-title {
display: block;
text-align: left;
width: 100%;
font-size: 14px;
}
.requirement-serial {
width: 100%;
text-align: center;
cursor: pointer;
}
/***分页组件 *************/
.pagination_wrapper {
padding-right: 15px;
display: flex;
justify-content: right;
}
/*需求详情对话框 */
.requirement-detail-dialog {
width: 400px;
height: 600px;
}
.requirement-detail-dialog .el-row {
display: flex;
justify-content: left;
align-items: center;
/* margin-top: 10px; */
}
.requirement-detail-dialog .el-row+.el-row {
margin-top: 10px;
}
.requirement-detail-wrapper {
padding: 0px 10px;
}
.requirement-detail-wrapper span {
display: block;
text-align: right;
width: 100%;
}
</style>
<style>
.requirement-detail-dialog .el-dialog__body {
padding: 0px 15px 15px 15px !important;
}
</style>

View File

@@ -0,0 +1,12 @@
###
# @Author: Kane
# @Date: 2023-02-23 09:41:37
# @LastEditors: Kane
# @FilePath: /it-console/.env.development
# @Description:
#
# Copyright (c) ${2022} by Kane, All Rights Reserved.
###
VUE_APP_API_URL_LOGIN = "http://222.76.244.118:11101/admin-system/account/p13_account_check"
VUE_APP_API_URL_UPLOAD_FILE= "http://222.76.244.118:11101/admin-system/file/file-upload.do"
VUE_APP_API_URL_REQUIREMENT_STATUS= "http://222.76.244.118:11101/requirement/query_requirement_status.do"

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

@@ -0,0 +1,2 @@
registry=https://registry.npmjs.org/
proxy=http://127.0.0.1:7890/

View File

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

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

View File

@@ -0,0 +1,44 @@
<!--
* @Author: Kane
* @Date: 2022-12-17 11:08:18
* @LastEditors: Kane
* @LastEditTime: 2023-02-23 00:40:59
* @FilePath: /it-console-toVite/index.html
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" />
<link rel="icon" href="public/favicon.ico" />
<title>王炜的工具箱</title>
</head>
<body>
<noscript>
<strong
>We're sorry but <%= title %> doesn't work properly without
JavaScript enabled. Please enable it to continue.</strong
>
</noscript>
<div id="app" v-cloak></div>
<!-- built files will be auto injected -->
<script type="module" src="/src/main.js"></script>
</body>
<style>
.v-cloak {
display: none;
}
body {
width: 100vw;
height: 100vh;
max-height: 100vh;
min-width: 1280px;
}
</style>
</html>

View File

@@ -15,5 +15,9 @@
"dom.iterable", "dom.iterable",
"scripthost" "scripthost"
] ]
} },
} "exclude": [
"node_modules",
"node_modules_1"
],
}

18887
code/web/it-console/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,57 @@
{
"name": "CPIC-IT-Console",
"version": "0.1.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint",
"serve-vite": "vite",
"build-vite": "vite build",
"preview-vite": "vite preview"
},
"dependencies": {
"@element-plus/icons-vue": "^2.1.0",
"@typescript-eslint/eslint-plugin": "^5.57.1",
"@typescript-eslint/parser": "^5.57.1",
"@vitejs/plugin-vue": "^4.1.0",
"@wangeditor/editor": "^5.1.23",
"@wangeditor/editor-for-vue": "^5.1.12",
"axios": "^1.3.4",
"core-js": "^3.30.0",
"element-plus": "^2.3.2",
"sass": "^1.60.0",
"scss": "^0.2.4",
"scss-loader": "^0.0.1",
"vue": "^3.2.47",
"vue-router": "^4.1.6",
"vuex": "^4.1.0"
},
"devDependencies": {
"@babel/core": "^7.21.4",
"@babel/eslint-parser": "^7.21.3",
"@originjs/vite-plugin-commonjs": "^1.0.3",
"@originjs/vite-plugin-require-context": "1.0.9",
"@vitejs/plugin-vue": "^4.1.0",
"@vitejs/plugin-vue-jsx": "^3.0.1",
"@vue/cli-plugin-babel": "~5.0.8",
"@vue/cli-plugin-eslint": "~5.0.8",
"@vue/cli-plugin-router": "~5.0.8",
"@vue/cli-plugin-vuex": "~5.0.8",
"@vue/cli-service": "~5.0.8",
"@vue/compiler-sfc": "^3.2.47",
"eslint": "^8.37.0",
"eslint-config-recommended": "^4.1.0",
"eslint-config-standard-with-typescript": "^34.0.1",
"eslint-plugin-vue": "^9.10.0",
"node-sass": "^8.0.0",
"sass": "^1.60.0",
"sass-loader": "^13.2.2",
"vite": "^4.2.1",
"vite-plugin-env-compatible": "^1.1.1",
"vite-plugin-html": "3.2.0",
"vue-cli-plugin-element-plus": "~0.0.13",
"webpack": "^5.77.0",
"webpack-cli": "^5.0.1"
}
}

View File

Before

Width:  |  Height:  |  Size: 4.2 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -2,8 +2,8 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-12-17 11:08:18 * @Date: 2022-12-17 11:08:18
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-02-04 22:47:11 * @LastEditTime: 2023-02-23 00:44:29
* @FilePath: /IT工具综合平台/public/index.html * @FilePath: /it-console-toVite/public/index.html
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
@@ -14,7 +14,7 @@
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" /> <meta name="viewport" content="width=device-width,initial-scale=1.0" />
<link rel="icon" href="<%= BASE_URL %>favicon.ico" /> <link rel="icon" href="favicon.ico" />
<title>王炜的工具箱</title> <title>王炜的工具箱</title>
</head> </head>
<body> <body>
@@ -25,9 +25,10 @@
continue.</strong continue.</strong
> >
</noscript> </noscript>
<div id="app" v-cloak></div> <div id="app"></div>
<!-- built files will be auto injected --> <!-- built files will be auto injected -->
</body> </body>
<script type="module" src="../src/main.js"></script>
<style> <style>
.v-cloak { .v-cloak {
display: none; display: none;

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

@@ -0,0 +1,15 @@
/*
* @Author: Kane
* @Date: 2023-03-04 17:23:02
* @LastEditors: Kane
* @FilePath: /it-console/shims-vue.d.ts
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
declare module "*.vue"
{
import { type ComponentOptions } from "vue";
const componentOptions: ComponentOptions;
export default componentOptions;
}

View File

@@ -0,0 +1,37 @@
<!--
* @Author: Kane
* @Date: 2022-12-14 15:12:46
* @LastEditors: Kane
* @LastEditTime: 2023-03-21 23:49:05
* @FilePath: /it-console/src/App.vue
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
-->
<template>
<el-config-provider :locale="locale">
<router-view />
</el-config-provider>
</template>
<script lang="ts">
// 引入语言组件
import zhCn from "element-plus/lib/locale/lang/zh-cn";
export default {
name: "App",
components: {
// HelloWorld,
},
setup()
{
const locale = zhCn;
return { locale, };
},
};
</script>
<style>
</style>

View File

Before

Width:  |  Height:  |  Size: 773 KiB

After

Width:  |  Height:  |  Size: 773 KiB

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Before

Width:  |  Height:  |  Size: 195 KiB

After

Width:  |  Height:  |  Size: 195 KiB

View File

@@ -2,26 +2,26 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-01-06 20:33:57 * @Date: 2023-01-06 20:33:57
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-01-07 17:10:07 * @LastEditTime: 2023-02-22 17:10:18
* @FilePath: \admin_system\src\components\svg\SvgIcon.vue * @FilePath: /IT/src/components/svg/SvgIcon.vue
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
svg-icon:{{ this.iconName }} svg-icon:{{ iconName }}
</template> </template>
<script> <script>
export default { export default {
name: "svg-icon", name: "SvgIcon",
props: ["icon",],
data() data()
{ {
return { return {
iconName: "" iconName: "",
}; };
}, },
props: ["icon"],
created() created()
{ {
console.log("svg"); console.log("svg");
@@ -31,6 +31,4 @@ export default {
}; };
</script> </script>
<style scoped> <style scoped></style>
</style>

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

View File

Before

Width:  |  Height:  |  Size: 928 B

After

Width:  |  Height:  |  Size: 928 B

Some files were not shown because too many files have changed in this diff Show More