Compare commits

..

No commits in common. "feature-requirement" and "feature-console" have entirely different histories.

65 changed files with 32736 additions and 24492 deletions

3
.gitignore vendored
View File

@ -77,8 +77,7 @@ 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/)

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.5</version> <version>1.4</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: 2023-02-28 23:20:12 * @LastEditTime: 2022-12-16 17:57:06
* @FilePath: /后端-用户验证/src/main/java/com/cpic/xim/myutils/account/CpicXIMStaffInfo.java * @FilePath: \AdminSys\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: 2023-03-06 15:05:03 * @LastEditTime: 2022-12-16 15:29:34
* @FilePath: /ts-practiced:/develop/cpicxim/it-console/code/java/后端-用户验证/src/main/java/com/cpic/xim/myutils/account/LdapAccountCheck.java * @FilePath: \AdminSys\src\main\java\com\cpic\xim\myutils\account\LdapAccountCheck.java
* @Description: LDAP验证相关方法 * @Description: P13验证相关方法
* *
* 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,16 +2,14 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-12-15 11:11:21 * @Date: 2022-12-15 11:11:21
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-03-25 17:28:39 * @LastEditTime: 2023-01-17 23:28:21
* @FilePath: /后端-用户验证/src/main/java/com/cpic/xim/web/controllers/account/P13AccountCheckController.java * @FilePath: \AdminSys\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;
@ -23,84 +21,94 @@ 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 );
* 根据用户提供的P09工号或者P13账号密码查找用户信息并AD域服务器验证p13账号密码 CpicXIMStaffInfo staff = null;
* 验证通过即返回人员信息
* 验证不通过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();
CpicXIMStaffInfo staff = null; try
{
// 先根据用户输入的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 );
}
try { // 查询结果是null说明没有查询到结果工号或p13账号不存在返回结果
// 先根据用户输入的09工号或p13账号获得p13账号确定账号存在 if ( staff == null )
staff = CpicXIMStaffInfo.getStaffInfo(param.getP13Account()); {
} catch (SQLException error) { result.setMessage( "人员工号或P13账号不存在" );
staff = null; result.setSuccess( false );
result.setMessage("人员工号或P13账号不存在");
result.setSuccess(false); return result;
} catch (ClassNotFoundException error) { }
staff = null;
result.setMessage("加载Oracle驱动失败"); // 判断一下p13是否存在如果不存在就结束过程
result.setSuccess(false); 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;
} }
// 查询结果是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

@ -0,0 +1,37 @@
<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

@ -0,0 +1,57 @@
<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

@ -0,0 +1,68 @@
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

@ -0,0 +1,25 @@
#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

@ -0,0 +1,349 @@
/*! 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

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

View File

@ -0,0 +1,20 @@
: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

@ -0,0 +1,17 @@
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

@ -0,0 +1,23 @@
<%-- /*
* @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

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

View File

@ -0,0 +1,13 @@
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

@ -0,0 +1,13 @@
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

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -9,7 +9,6 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
interface Point interface Point
{ {
x: number; x: number;

View File

@ -1,77 +0,0 @@
/*
* @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

@ -1,12 +0,0 @@
/*
* @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,12 +1,3 @@
### VUE_APP_API_URL_LOGIN = "http://222.76.244.118:11001/admin-system/account/p13_account_check"
# @Author: Kane VUE_APP_API_URL_UPLOAD_FILE= "http://222.76.244.118:11001/admin-system/file/file-upload.do"
# @Date: 2023-02-23 09:41:37 VUE_APP_API_URL_REQUIREMENT_STATUS= "http://222.76.244.118:11001/requirement/query_requirement_status.do"
# @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

@ -1,174 +0,0 @@
/*
* @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,44 @@
/*
* @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,2 +0,0 @@
registry=https://registry.npmjs.org/
proxy=http://127.0.0.1:7890/

View File

@ -1,14 +1,5 @@
/*
* @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'
], ]
}; }

View File

@ -1,20 +0,0 @@
/*
* @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

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

File diff suppressed because it is too large Load Diff

View File

@ -1,57 +1,52 @@
{ {
"name": "CPIC-IT-Console", "name": "CPIC-IT-Console",
"version": "0.1.0", "version": "0.1.0",
"private": true, "private": true,
"scripts": { "scripts": {
"serve": "vue-cli-service serve", "serve": "vue-cli-service serve",
"build": "vue-cli-service build", "build": "vue-cli-service build",
"lint": "vue-cli-service lint", "lint": "vue-cli-service lint",
"serve-vite": "vite", "serve-vite": "vite",
"build-vite": "vite build", "build-vite": "vite build",
"preview-vite": "vite preview" "preview-vite": "vite preview"
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^2.1.0", "@element-plus/icons-vue": "^2.0.10",
"@typescript-eslint/eslint-plugin": "^5.57.1", "@vitejs/plugin-vue": "^4.0.0",
"@typescript-eslint/parser": "^5.57.1", "@wangeditor/editor": "^5.1.23",
"@vitejs/plugin-vue": "^4.1.0", "@wangeditor/editor-for-vue": "^5.1.12",
"@wangeditor/editor": "^5.1.23", "axios": "^1.2.1",
"@wangeditor/editor-for-vue": "^5.1.12", "core-js": "^3.8.3",
"axios": "^1.3.4", "element-plus": "^2.2.26",
"core-js": "^3.30.0", "sass": "^1.56.2",
"element-plus": "^2.3.2", "scss": "^0.2.4",
"sass": "^1.60.0", "scss-loader": "^0.0.1",
"scss": "^0.2.4", "vite": "^4.1.4",
"scss-loader": "^0.0.1", "vue": "^3.2.13",
"vue": "^3.2.47", "vue-router": "^4.0.3",
"vue-router": "^4.1.6", "vuex": "^4.0.0"
"vuex": "^4.1.0" },
}, "devDependencies": {
"devDependencies": { "@babel/core": "^7.12.16",
"@babel/core": "^7.21.4", "@babel/eslint-parser": "^7.12.16",
"@babel/eslint-parser": "^7.21.3", "@vue/cli-plugin-babel": "~5.0.0",
"@originjs/vite-plugin-commonjs": "^1.0.3", "@vue/cli-plugin-eslint": "~5.0.0",
"@originjs/vite-plugin-require-context": "1.0.9", "@vue/cli-plugin-router": "~5.0.0",
"@vitejs/plugin-vue": "^4.1.0", "@vue/cli-plugin-vuex": "~5.0.0",
"@vitejs/plugin-vue-jsx": "^3.0.1", "@vue/cli-service": "~5.0.0",
"@vue/cli-plugin-babel": "~5.0.8", "eslint": "^7.32.0",
"@vue/cli-plugin-eslint": "~5.0.8", "eslint-plugin-vue": "^8.0.3",
"@vue/cli-plugin-router": "~5.0.8", "node-sass": "^8.0.0",
"@vue/cli-plugin-vuex": "~5.0.8", "sass-loader": "^13.2.0",
"@vue/cli-service": "~5.0.8", "svg-sprite-loader": "^2.1.0",
"@vue/compiler-sfc": "^3.2.47", "vue-cli-plugin-element-plus": "~0.0.13",
"eslint": "^8.37.0", "@vue/compiler-sfc": "^3.2.26",
"eslint-config-recommended": "^4.1.0", "@vitejs/plugin-vue": "^2.0.1",
"eslint-config-standard-with-typescript": "^34.0.1", "@vitejs/plugin-vue-jsx": "^1.3.2",
"eslint-plugin-vue": "^9.10.0", "vite-plugin-env-compatible": "^1.1.1",
"node-sass": "^8.0.0", "vite-plugin-html": "3.2.0",
"sass": "^1.60.0", "vite": "^2.7.2",
"sass-loader": "^13.2.2", "@originjs/vite-plugin-require-context": "1.0.9",
"vite": "^4.2.1", "@originjs/vite-plugin-commonjs": "^1.0.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

@ -1,15 +0,0 @@
/*
* @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

@ -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-03-21 23:49:05 * @LastEditTime: 2023-02-15 09:34:25
* @FilePath: /it-console/src/App.vue * @FilePath: /IT/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="locale"> <el-config-provider :locale="this.locale">
<router-view /> <router-view></router-view>
</el-config-provider> </el-config-provider>
</template> </template>
<script lang="ts"> <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: { setup()
// HelloWorld, {
}, const locale = zhCn;
setup()
{
const locale = zhCn;
return { locale, }; return { locale, };
}, },
components: {
// HelloWorld,
},
}; };
</script> </script>

View File

@ -9,19 +9,19 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
svg-icon:{{ iconName }} svg-icon:{{ this.iconName }}
</template> </template>
<script> <script>
export default { export default {
name: "SvgIcon", name: "svg-icon",
props: ["icon",],
data() data()
{ {
return { return {
iconName: "", iconName: "",
}; };
}, },
props: ["icon",],
created() created()
{ {
console.log("svg"); console.log("svg");

View File

@ -1,56 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-02-24 09:36:08
* @LastEditors: Kane
* @LastEditTime: 2023-02-24 16:06:58
* @FilePath: /it-console/src/css/public/_public.scss
* @Description: 公共变量
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
//背景色
$wrap-bg-color:#fff;
$span-font-color:#5f5f5f;
//阴影
$box-shadow:0px 0px 20px -10px rgb(14 18 22 / 25%);
$box-shadow-hover:0px 0px 20px -10px rgb(14 18 22 / 50%);
//文字大小
$font-size-normal:14px;
//查询框
@mixin query-box-wrap {
padding: 0px 10px;
span {
font-weight: normal;
display: block;
text-align: right;
font-size: $font-size-normal;
color: $span-font-color;
}
.el-row {
display: flex;
align-items: center;
justify-content: left;
}
.el-row+.el-row {
margin-top: 10px;
}
.button-wrapper-right {
display: flex;
justify-content: right;
align-items: center;
}
.button-wrapper-left {
display: flex;
justify-content: left;
align-items: center;
}
}

View File

@ -9,26 +9,19 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<el-container <el-container id="layout-container" v-loading="ui.ageVisible" element-loading-text="载入应用数据…">
id="layout-container" <el-header id="layout-header">
v-loading="ui.ageVisible" <LayoutHeader />
element-loading-text="载入应用数据…" </el-header>
> <el-container id="layout-container-down">
<el-header id="layout-header"> <el-aside :width="asideWidth" id="layout-aside">
<LayoutHeader /> <LayoutAside />
</el-header> </el-aside>
<el-container id="layout-container-down"> <el-main id="layout-main">
<el-aside <LayoutMain />
id="layout-aside" </el-main>
:width="asideWidth"
>
<LayoutAside />
</el-aside>
<el-main id="layout-main">
<LayoutMain />
</el-main>
</el-container>
</el-container> </el-container>
</el-container>
</template> </template>
<script> <script>
@ -40,50 +33,50 @@ 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: { setup()
LayoutAside, {
LayoutHeader, const store = useStore();
LayoutMain,
}, const ui = reactive(
setup() {
pageVisible: true,
});
const asideWidth = computed(() =>
{ {
const store = useStore(); const collapse = store.state.app.asideBarCollapse;
const ui = reactive( return collapse === true ? "65px" : "180px";
{ });
pageVisible: true,
});
const asideWidth = computed(() => onMounted(() =>
{ {
const collapse = store.state.app.asideBarCollapse; //
// query_requirement_status()
// .then((response) =>
// {
// // debugger;
// const data = response.data;
// console.log(data);
// })
// .catch((error) =>
// {
// // debugger;
// console.log(error);
// });
});
return collapse === true ? "65px" : "180px"; return {
}); ui,
asideWidth,
onMounted(() => };
{ },
// components: {
// query_requirement_status() LayoutAside,
// .then((response) => LayoutHeader,
// { LayoutMain,
// // debugger; },
// const data = response.data;
// console.log(data);
// })
// .catch((error) =>
// {
// // debugger;
// console.log(error);
// });
});
return {
ui,
asideWidth,
};
},
}; };
</script> </script>

View File

@ -2,75 +2,39 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-01-04 11:30:33 * @Date: 2023-01-04 11:30:33
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-03-27 14:45:35 * @LastEditTime: 2023-02-06 09:28:16
* @FilePath: /it-console/src/layout/components/Aside.vue * @FilePath: /IT/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 <el-menu id="side-bar" router :default-active="currentPath" background-color="#2f4156" text-color="#fff"
id="side-bar" active-text-color="#ffd04b" :collapse="asideCollapse">
router <template v-for="route in routes" :key="route.path">
: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 <el-menu-item :index="route.children[0].path" class="sidebar-submenu">
:key="route.path" <component :is="route.children[0].meta.icon" class="icons">
:index="route.children[0].path" </component>
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> <template #title>{{ route.children[0].meta && route.children[0].meta.title }}</template>
{{ 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 <el-sub-menu v-if="route.children && route.children.length" :index="route.path"
v-if="route.children && route.children.length" class="sidebar-submenu">
:key="route.path"
:index="route.path"
class="sidebar-submenu"
>
<template #title> <template #title>
<component <component :is="route.meta.icon" class="icons"></component>
:is="route.meta.icon"
class="icons"
/>
<span>{{ route.meta && route.meta.title }}</span> <span>{{ route.meta && route.meta.title }}</span>
</template> </template>
<template <template v-for="child in route.children" :key="child.path">
v-for="child in route.children" <el-menu-item v-if="!child.hidden" :index="child.path" class="sidebar-item">
> <component :is="child.meta.icon" class="icons"></component>
<el-menu-item <template #title>{{ child.meta && child.meta.title }}</template>
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>
@ -90,23 +54,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; return item.hidden ? false : true;
}); });
if (routes.length === 1) if (routes.length === 1)
@ -117,16 +81,16 @@ export default {
return false; return false;
}; };
// //
// //
const currentPath = computed(() => const currentPath = computed(() =>
{ {
const path = useRoute().path; let 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;
@ -170,10 +134,10 @@ export default {
} }
/* 顺序必须在上面两个之后*/ /* 顺序必须在上面两个之后*/
.el-menu-item.is-active { .is-active {
background-color: #ffffff4f !important; background-color: #ffffff4f !important;
font-weight: 1000; /* font-weight: 1000; */
font-size: 15px; /* font-size: 15px; */
color: #ffd04b; color: #ffd04b;
} }

View File

@ -9,52 +9,49 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div class="app_banner no_select"> <div class="app_banner no_select">
<span class="company_name">CPIC</span> <span class="company_name">CPIC</span>
<div class="version_div"> <div class="version_div">
<div>测试版</div> <div>测试版</div>
<div>3.6.7 x64 Build 202208301257</div> <div>3.6.7 x64 Build 202208301257</div>
</div>
<div class="buttons_div">
<User style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" />
<SwitchButton
style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;"
@click="logout"
/>
</div>
</div> </div>
<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> </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 {
name: "AppBanner", name: "AppBanner",
data() data()
{
return {};
},
// created() {
// console.log("banner");
// },
mounted()
{
//console.log("banner");
},
methods: {
logout()
{ {
return {}; this.$confirm("是否退出系统?", "请确认", {
}, confirmButtonText: "是",
// created() { cancelButtonText: "否",
// console.log("banner"); type: "warning",
// }, }).then(() =>
mounted() {
{ Logout();
// console.log("banner"); });
},
methods: {
logout()
{
this.$confirm("是否退出系统?", "请确认", {
confirmButtonText: "是",
cancelButtonText: "否",
type: "warning",
}).then(() =>
{
Logout();
});
},
}, },
},
}; };
</script> </script>
<style scoped> <style scoped>

View File

@ -2,27 +2,24 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-01-04 11:39:04 * @Date: 2023-01-04 11:39:04
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-03-21 23:19:06 * @LastEditTime: 2023-02-22 18:33:11
* @FilePath: /it-console/src/layout/components/Header.vue * @FilePath: /IT/src/layout/components/Header.vue
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div class="app_banner no_select"> <div class="app_banner no_select">
<span class="company_name">CPIC</span> <span class="company_name">CPIC</span>
<div class="version_div"> <div class="version_div">
<div>测试版</div> <div>测试版</div>
<div>3.6.7 x64 Build 202208301257</div> <div>3.6.7 x64 Build 202208301257</div>
</div>
<div class="buttons_div">
<User style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;" />
<SwitchButton
style="width: 25px; height; 25px; margin-right: 8px; cursor:pointer;"
@click="logout"
/>
</div>
</div> </div>
<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> </template>
<script> <script>
@ -30,23 +27,23 @@ import { ElMessageBox } from "element-plus";
import { Logout } from "../../utils/api/info/account"; import { Logout } from "../../utils/api/info/account";
export default { export default {
name: "AppBanner", name: "AppBanner",
setup() setup()
{
const logout = () =>
{ {
const logout = () => ElMessageBox.confirm("是否退出系统?", "请确认", {
{ confirmButtonText: "是",
ElMessageBox.confirm("是否退出系统?", "请确认", { cancelButtonText: "否",
confirmButtonText: "是", type: "warning",
cancelButtonText: "否", }).then(() =>
type: "warning", {
}).then(() => Logout();
{ });
Logout(); };
});
};
return { logout, }; return { logout, };
}, },
}; };
</script> </script>
<style scoped> <style scoped>

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-03-21 23:19:27 * @LastEditTime: 2023-02-07 10:47:57
* @FilePath: /it-console/src/layout/components/Main.vue * @FilePath: /IT/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,19 +2,19 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-12-14 15:12:46 * @Date: 2022-12-14 15:12:46
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-03-21 23:48:46 * @LastEditTime: 2023-02-17 13:11:43
* @FilePath: /it-console/src/main.js * @FilePath: /IT/src/main.js
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
import { createApp } from "vue"; import { createApp } from 'vue';
import App from "./App.vue"; import App from './App.vue';
//路由 //路由
import router from "./router"; import router from './router';
//vuex //vuex
import store from "./store"; import store from './store';
//引入全局函数 //引入全局函数
import global from "@/utils/global"; import global from "@/utils/global";
@ -40,4 +40,4 @@ app.use(ElementPlus);
app.use(store); app.use(store);
app.use(router); app.use(router);
app.use(global); app.use(global);
app.mount("#app"); app.mount('#app');

View File

@ -2,214 +2,214 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-12-14 15:12:46 * @Date: 2022-12-14 15:12:46
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-03-21 23:20:10 * @LastEditTime: 2023-02-21 13:09:15
* @FilePath: /it-console/src/router/index.js * @FilePath: /IT/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 = [
//框架路由 //框架路由
{ {
path: "/", path: "/",
name: "Root", name: "Root",
redirect: "Login", //默认路由指向登录页面 redirect: "Login", //默认路由指向登录页面
hidden: true, 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: "/error-page", },
name: "ErrorPage", //侧边导航栏路由
hidden: true, { //首页
component: () => import("@/views/ErrorPage.vue"), path: "/console",
name: "Console",
meta: {
title: "总览",
icon: "house",
}, },
{ component: () => import("../layout/Index.vue"),
path: "/login", children: [
name: "Login", {
component: () => import("../views/account/Login.vue"), path: "/desktop",
hidden: true, name: "DeskTop",
},
{
path: "/home",
name: "Home",
hidden: true,
meta: { meta: {
title: "控制台", title: "工作台",
icon: "house",
}, },
component: () => import("../layout/Index.vue"), component: () => import("../views/overview/Desktop.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", path: "/requirement",
name: "Requirement", name: "Requirement",
meta: { meta: {
title: "需求管理", title: "需求管理",
icon: "Document", icon: "Document",
},
component: () => import("../layout/Index.vue"),
children: [
{
path: "/requirement-manager",
name: "RequirementManager",
meta: {
title: "需求管理",
icon: "Document",
},
component: () => import("../views/requirement/RequirementManager.vue"),
},
{
path: "/requirement-editing",
name: "RequirementEditing",
hidden: true,
meta: {
title: "需求管理",
icon: "edit",
},
component: () => import("../views/requirement/RequirementEditing.vue"),
},
],
}, },
{ component: () => import("../layout/Index.vue"),
children: [
{
path: "/requirement-manager",
name: "RequirementManager",
meta: {
title: "需求管理",
icon: "Document",
},
component: () => import("../views/requirement/RequirementManager.vue"),
},
{
path: "/requirement-editing",
name: "RequirementEditing",
hidden: true,
meta: {
title: "需求管理",
icon: "edit",
},
component: () => import("../views/requirement/RequirementEditing.vue"),
},
],
},
{
//信息查询 //信息查询
path: "/query_info", path: "/query_info",
name: "QueryInfo", name: "QueryInfo",
meta: { meta: {
title: "信息查询", title: "信息查询",
icon: "search", icon: "search",
},
component: () => import("@/layout/Index.vue"),
children: [
{
path: "/query_stuff",
name: "QueryStuff",
meta: {
title: "人员信息",
icon: "user",
},
component: () => import("@/views/info/StaffInfo.vue"),
},
],
}, },
{//权限管理 component: () => import("@/layout/Index.vue"),
path: "/privilege", children: [
name: "Privilege", {
path: "/query_stuff",
name: "QueryStuff",
meta: { meta: {
title: "权限管理", title: "人员信息",
icon: "User", icon: "user",
}, },
children: [ component: () => import("@/views/info/StaffInfo.vue"),
{ },
path: "/user-manager", ],
name: "UserManager", },
meta: { {//权限管理
title: "用户管理", path: "/privilege",
icon: "User", name: "Privilege",
}, meta: {
component: () => import("../views/privilege/StaffInfo.vue"), title: "权限管理",
}, icon: "User",
{
path: "/privilege-manager",
name: "PrivilegeManager",
meta: {
title: "权限管理",
icon: "edit",
},
component: () => import("../views/privilege/PrivilegeManager.vue"),
},
],
component: () => import("../layout/Index.vue"),
}, },
{ children: [
path: "/network", {
name: "NetworkManager", path: "/user-manager",
name: "UserManager",
meta: { meta: {
title: "网络管理", title: "用户管理",
icon: "switch", icon: "User",
}, },
component: () => import("../layout/Index.vue"), component: () => import("../views/privilege/StaffInfo.vue"),
children: [ },
{ {
path: "/network-point-manager", path: "/privilege-manager",
name: "NetworkPointManager", name: "PrivilegeManager",
meta: { meta: {
title: "网络点管理", title: "权限管理",
icon: "Monitor", icon: "edit",
}, },
component: () => import("../views/network/NetworkPoint/NetworkPoint.vue"), component: () => import("../views/privilege/PrivilegeManager.vue"),
}, },
{ ],
path: "/network-point-edit", component: () => import("../layout/Index.vue"),
name: "NetworkPointEdit", },
hidden: true, {
component: () => import("../views/network/NetworkPoint/EditNetworkPoint.vue"), path: "/network",
}, name: "NetworkManager",
{ meta: {
path: "/switch-manager", title: "网络管理",
name: "SwitchManager", icon: "switch",
meta: {
title: "交换机管理",
icon: "switch",
},
component: () => import("../views/network/switch/SwitchManager.vue"),
},
],
}, },
component: () => import("../layout/Index.vue"),
children: [
{
path: "/network-point-manager",
name: "NetworkPointManager",
meta: {
title: "网络点管理",
icon: "Monitor",
},
component: () => import("../views/network/NetworkPoint/NetworkPoint.vue"),
},
{
path: "/network-point-edit",
name: "NetworkPointEdit",
hidden: true,
component: () => import("../views/network/NetworkPoint/EditNetworkPoint.vue"),
},
{
path: "/switch-manager",
name: "SwitchManager",
meta: {
title: "交换机管理",
icon: "switch",
},
component: () => import("../views/network/switch/SwitchManager.vue"),
},
],
},
]; ];
const router = createRouter({ const router = createRouter({
history: createWebHashHistory(), history: createWebHashHistory(),
routes, routes,
}); });
//前置路由守卫 //前置路由守卫
router.beforeEach((to) => router.beforeEach((to) =>
{ {
const token = window.localStorage.getItem("token"); const token = window.localStorage.getItem("token");
//先检查token //先检查token
if (!token) if (!token)
{ {
//如果token不存在判断路由是否走向login,如果不是则指向login //如果token不存在判断路由是否走向login,如果不是则指向login
//走向login则不干预 //走向login则不干预
if (to.name !== "Login") if (to.name !== "Login")
{ {
return { return {
name: "Login", name: "Login",
}; };
}
} }
}
//修改默认打开的页面,跳向工作台 //修改默认打开的页面,跳向工作台
// if (to.name === "Home") // if (to.name === "Home")
// { // {
// console.log("跳向工作台"); // console.log("跳向工作台");
// return { // return {
// name: "DeskTop", // name: "DeskTop",
// }; // };
// } // }
}); });
export default router; export default router;

View File

@ -8,15 +8,15 @@
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
import { createStore } from "vuex"; import { createStore } from 'vuex';
import app from "./modules/app"; import app from "./modules/app";
import requirement from "./modules/requirement"; import requirement from "./modules/requirement";
const store = createStore({ const store = createStore({
modules: { modules: {
app, app,
requirement, requirement,
}, },
}); });
export default store; export default store;

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

@ -1,860 +0,0 @@
/*
* @Author: Kane
* @Date: 2023-01-28 08:56:40
* @LastEditors: Kane
* @LastEditTime: 2023-02-22 17:09:17
* @FilePath: /IT/src/test/data/TestData.js
* @Description:
*
* Copyright (c) ${2022} by Kane, All Rights Reserved.
*/
const requirementTestData = [
{
"serial_no": "RPXIM-220104-775",
"title": "关于开发与第三方合作意外险产品团单保险凭证的申请",
"department": "自贸试验区",
"request_people": "曾素素",
"status": "已取消",
"current_department": "",
"current_people": "",
"submit_date": "2022年1月4日",
"issue_date": "",
"close_date": "2022年1月12日",
"comment": "缺少审核材料。",
},
{
"serial_no": "RPXIM-220112-138",
"title": "关于将业务审批权限下放至厦门分公司且取消异地审核的申请",
"department": "自贸试验区",
"request_people": "黄冬瑶",
"status": "已取消",
"current_department": "",
"current_people": "",
"submit_date": "2022年1月12日",
"issue_date": "",
"close_date": "2022年3月2日",
"comment": "企客部会签不同意,会签意见:从需求上看不涉及意外险。若为意外险保单,需按系统流程规则审核。",
},
{
"serial_no": "RPXIM-220112-213",
"title": "关于为政府团意添加主附险关系的申请",
"department": "政保部",
"request_people": "游凤至",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年1月12日",
"issue_date": "",
"close_date": "2022年2月11日",
"comment": "已发布。",
},
{
"serial_no": "RPXIM-220114-324",
"title": "关于在“产险2018版非车业务管理系统”中开发批量退保功能的申请",
"department": "非车险市场发展部",
"request_people": "唐小兰",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年1月14日",
"issue_date": "",
"close_date": "2022年3月7日",
"comment": "已发布。",
},
{
"serial_no": "RPXIM-220110-777",
"title": "关于开发在线小程序的申请",
"department": "代理业务部 ",
"request_people": "林臻瑜",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年1月10日",
"issue_date": "",
"close_date": "2022年1月25日",
"comment": "开发微信小程序,用于导入线下出单的服务合同,系统自动生成电子版用印版服务合同(无客户签字),并实现自动下载功能。",
},
{
"serial_no": "RPXIM-220207-108",
"title": "关于提取“2007版车险承保系统”权限清单的申请",
"department": "信息技术部",
"request_people": "王炜",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年2月7日",
"issue_date": "",
"close_date": "2022年2月10日",
"comment": "提取车险系统权限清单。",
},
{
"serial_no": "RPXIM-220211-080",
"title": "关于与厦门建发保险代理有限公司厦门自贸试验区分公司进行业务数据对接的申请",
"department": "海沧支公司",
"request_people": "侯美琪",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年2月11日",
"issue_date": "",
"close_date": "2022年4月19日",
"comment": "",
},
{
"serial_no": "RPXIM-220223-240",
"title": "关于变更与国家电网对接接口及相关方案的申请",
"department": "信息技术部",
"request_people": "王炜",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年2月23日",
"issue_date": "",
"close_date": "2022年4月15日",
"comment": "",
},
{
"serial_no": "RPXIM-220217-057",
"title": "关于优化易验车小程序拍照功能的申请",
"department": "集美支公司",
"request_people": "李兰艳",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年2月28日",
"issue_date": "",
"close_date": "2022年4月30日",
"comment": "",
},
{
"serial_no": "RPXIM-220309-038",
"title": "关于修改与货兜平台合作方案内容的申请",
"department": "自贸试验区",
"request_people": "黄冬瑶",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年3月14日",
"issue_date": "",
"close_date": "2022年5月17日",
"comment": "待修改与货兜平台方案内容。",
},
{
"serial_no": "RPXIM-220309-130",
"title": "关于修改融E保系统方案的申请",
"department": "自贸试验区",
"request_people": "曾素素",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年3月9日",
"issue_date": "",
"close_date": "2022年4月22日",
"comment": "修改方案参数。",
},
{
"serial_no": "RPXIM-220304-488",
"title": "关于在太保在线小程序中映射经销门店的申请",
"department": "代理业务部 ",
"request_people": "林臻瑜",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年3月9日",
"issue_date": "",
"close_date": "2022年4月29日",
"comment": "",
},
{
"serial_no": "RPXIM-220322-880",
"title": "申请产品上线-厦门市商业性柑橘种植保险",
"department": "非车险市场发展部",
"request_people": "唐小兰",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年3月25日",
"issue_date": "",
"close_date": "2022年4月19日",
"comment": "申请农险产品上线。",
},
{
"serial_no": "RPXIM-220324-385",
"title": "关于开发团单保险凭证的申请",
"department": "自贸试验区",
"request_people": "曾素素",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年3月24日",
"issue_date": "",
"close_date": "2022年4月29日",
"comment": "与慧择经纪线上对接旅意险、体育运动意外险等产品开发团单保险凭证。",
},
{
"serial_no": "RPXIM-220328-001",
"title": "申请产品上线-厦门市中央财政补贴型森林综合保险(商品林)(与人保共保跟单专用)",
"department": "非车险市场发展部",
"request_people": "唐小兰",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年3月28日",
"issue_date": "",
"close_date": "2022年4月21日",
"comment": "申请农险产品上线。",
},
{
"serial_no": "RPXIM-220331-554",
"title": "裕欣经纪渠道前端出单系统对接我部新核心系统信息完善需求申请",
"department": "思明支公司",
"request_people": "陈重强",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年3月30日",
"issue_date": "",
"close_date": "2022年4月29日",
"comment": "解决裕欣业务落地非车新核心问题。",
},
{
"serial_no": "RPXIM-220401-218",
"title": "初始化融E保方案",
"department": "自贸试验区",
"request_people": "曾素素",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年4月1日",
"issue_date": "",
"close_date": "2022年5月20日",
"comment": "",
},
{
"serial_no": "RPXIM-220401-125",
"title": "申请产品上线-厦门市中央财政补贴型森林综合保险(公益林)(与人保共保跟单专用)",
"department": "非车险市场发展部",
"request_people": "唐小兰",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年4月1日",
"issue_date": "",
"close_date": "2022年4月21日",
"comment": "",
},
{
"serial_no": "RPXIM-220419-544",
"title": "申请优化非车新核心计划生育家庭意外伤害保险批改界面",
"department": "思明支公司",
"request_people": "陈重强",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年4月19日",
"issue_date": "",
"close_date": "2022年5月5日",
"comment": "新核心系统批改界面增加出险人员实名补录的选项。",
},
{
"serial_no": "RPXIM-220419-267",
"title": "申请变更产险厦门分公司官微客户隐私授权协议及相关接口、参数与文档",
"department": "",
"request_people": "陈果",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年4月19日",
"issue_date": "",
"close_date": "2022年5月10日",
"comment": "",
},
{
"serial_no": "RPXIM-220418-646",
"title": "申请优化车险外网出单系统",
"department": "",
"request_people": "沈立虹",
"status": "已取消",
"current_department": "综合市场部",
"current_people": "袁野",
"submit_date": "2022年4月18日",
"issue_date": "",
"close_date": "2022年4月22日",
"comment": "被综合市场部袁野老师退回原因1、报价单之前进行过一轮改造是合并在一页的由于车险和驾乘险保障责任都要列在上面行间距保持一样的状态下可能会拆成两页所以先请盘点下目前是否所有报价单都是两页的还是部分 2、请附上相关截图标注要在哪里展示等相关信息。",
},
{
"serial_no": "RPXIM-220422-870",
"title": "申请优化cibs系统“产品置换服务合同责任险”入单界面及完善融E保系统相关因子",
"department": "",
"request_people": "林臻瑜",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年4月22日",
"issue_date": "",
"close_date": "2022年5月24日",
"comment": "1、在cibs系统“产品置换服务合同责任险”的特性信息界面下新增“产品置换保障”保险责任项目 2、在融E保系统中同步增加“产品置换保障”保障因子及费率因子。",
},
{
"serial_no": "RPXIM-220429-002",
"title": "北京赛福哈博保险经纪有限公司申请系统对接上线意外险产品",
"department": "",
"request_people": "曾素素",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年4月29日",
"issue_date": "",
"close_date": "2022年5月25日",
"comment": "与北京赛福哈博保险经纪有限公司合作对接意外险产品产品方案已在融E保系统配置完成安排技术人员协助联调测试",
},
{
"serial_no": "RPXIM-220513-575",
"title": "申请变更电销综销系统界面",
"department": "",
"request_people": "洪奕娟",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年5月13日",
"issue_date": "",
"close_date": "2022-05-23",
"comment": "电销综销系统附加险“三者医保外医疗费用责任险”、“车责司机附加医保外医疗费用责任险”、“车责乘客附加医保外医疗费用责任险”增加保险金额“20万”选项。",
},
{
"serial_no": "RPXIM-220524-470",
"title": "申请提取新能源车板块的北理相关评分",
"department": "",
"request_people": "李满",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年5月24日",
"issue_date": "",
"close_date": "2022年6月28日",
"comment": "提数申请",
},
{
"serial_no": "RPXIM-220526-213",
"title": "申请与慧择经纪理赔系统扩展责任险产品对接",
"department": "",
"request_people": "曾素素",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年5月26日",
"issue_date": "",
"close_date": "2022年8月17日",
"comment": "与慧择理赔系统对接接口扩展责任险。",
},
{
"serial_no": "RPXIM-220606-183",
"title": "申请产品上线-厦门市商业性茶树碳汇损失保险",
"department": "",
"request_people": "唐小兰",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年6月6日",
"issue_date": "",
"close_date": "2022年6月16日",
"comment": "",
},
{
"serial_no": "RPXIM-220621-056",
"title": "申请在码上保付款方式中增加“数字货币(交通银行)”选项",
"department": "",
"request_people": "唐小兰",
"status": "已取消",
"current_department": "综合市场部",
"current_people": "邓文杉",
"submit_date": "2022年6月21日",
"issue_date": "",
"close_date": "2022年6月28日",
"comment": "被综合市场部邓文杉老师退回,原因:总公司产品不得修改,请分公司重新选定产品,并明确相关产品代码。",
},
{
"serial_no": "RPXIM-220624-273",
"title": "申请码上保系统为“个人意外险-营总专属方案”付款方式增加数字货币(交通银行)选项",
"department": "",
"request_people": "唐小兰",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年6月24日",
"issue_date": "",
"close_date": "2022年8月11日",
"comment": "",
},
{
"serial_no": "RPXIM-220627-057",
"title": "申请企业客车开通对接车联网分档的外部数据",
"department": "",
"request_people": "游建成",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年6月27日",
"issue_date": "",
"close_date": "2022年7月27日",
"comment": "",
},
{
"serial_no": "RPXIM-220629-666",
"title": "关于合作销售“ETC驾乘”相关产品的申请",
"department": "",
"request_people": "陈新辉",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年6月29日",
"issue_date": "",
"close_date": "2022年9月30日",
"comment": "",
},
{
"serial_no": "RPXIM-220715-021",
"title": "申请cibs系统“教育培训托管机构责任保险”电子保批单权限",
"department": "",
"request_people": "蔡剑蓉",
"status": "已取消",
"current_department": "政保业务部",
"current_people": "尹星",
"submit_date": "2022年7月15日",
"issue_date": "",
"close_date": "2022年7月20日",
"comment": "险种已迁移到新核心系统。",
},
{
"serial_no": "RPXIM-220715-157",
"title": "申请下发idst库数据",
"department": "",
"request_people": "王炜",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年7月15日",
"issue_date": "",
"close_date": "2022年8月10日",
"comment": "申请下发 idst 库 nonauto_coinsurance_t 表数据至分公司oracle 数据库。",
},
{
"serial_no": "RPXIM-220721-138",
"title": "申请在非车新核心系统增加人工批量导入案件的功能",
"department": "",
"request_people": "曾素素",
"status": "已取消",
"current_department": "营运中心",
"current_people": "周聪",
"submit_date": "2022年7月21日",
"issue_date": "",
"close_date": "2022年7月28日",
"comment": "被营运中心周聪老师退回,原因:意外险相关责任中含猝死、意外身故残疾,在未明确说明业务场景及模式情况下,基于风险管理要求默认不同意开通批处理功能。如有特殊需求,请对业务情况及涉及的场景、作业模式详细说明,并经理赔管理部门评估后再行决定。",
},
{
"serial_no": "RPXIM-220726-457",
"title": "申请农险核心系统赋权厦门市商业性玉米种植保险",
"department": "",
"request_people": "唐小兰",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年7月26日",
"issue_date": "",
"close_date": "2022年8月11日",
"comment": "农险相关。",
},
{
"serial_no": "RPXIM-220729-433",
"title": "申请上线厦门市中央政策性繁母猪和育肥猪,育肥猪全生命周期养殖保险",
"department": "",
"request_people": "唐小兰",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年7月29日",
"issue_date": "",
"close_date": "2022年8月24日",
"comment": "农险相关。",
},
{
"serial_no": "RPXIM-220802-517",
"title": "关于开发团意险、雇主险自助线上批改功能的申请",
"department": "",
"request_people": "郑中华",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年8月2日",
"issue_date": "",
"close_date": "2022年9月23日",
"comment": "",
},
{
"serial_no": "RPXIM-220809-255",
"title": "厦分&慧择&中保金服“家庭综合险”项目对接需求申请",
"department": "",
"request_people": "曾素素",
"status": "已取消",
"current_department": "",
"current_people": "",
"submit_date": "2022年8月9日",
"issue_date": "",
"close_date": "2022年8月9日",
"comment": "重复提交!",
},
{
"serial_no": "RPXIM-220809-568",
"title": "慧择渠道“家庭综合险”项目对接需求申请",
"department": "",
"request_people": "曾素素",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年8月9日",
"issue_date": "",
"close_date": "2022年9月7日",
"comment": "与慧择经纪渠道合作对接“家庭综合险”项目。",
},
{
"serial_no": "RPXIM-220820-663",
"title": "申请变更RMI系统续保洞见平台界面",
"department": "",
"request_people": "欧阳俊慧",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年8月20日",
"issue_date": "",
"close_date": "2022年9月23日",
"comment": "在RMI系统续保洞见平台- “趋势分析(赔付进展)”的数据源中增加能源类型”、“多年续保标识(或上年保单的新续转字段)”的字段,便于监控新能源分品牌的已报、预赔的变化,驱动业务发展。",
},
{
"serial_no": "RPXIM-220820-331",
"title": "申请提取账号权限清单",
"department": "",
"request_people": "王炜",
"status": "已取消",
"current_department": "",
"current_people": "",
"submit_date": "2022年8月22日",
"issue_date": "",
"close_date": "2022年10月15日",
"comment": "重新提交新需求。",
},
{
"serial_no": "RPXIM-220822-610",
"title": "申请提取厦门分公司发函流程清单",
"department": "",
"request_people": "王炜",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年8月22日",
"issue_date": "",
"close_date": "2022年8月26日",
"comment": "因合规部需要,提取厦门分公司上半年创建发函流程清单。",
},
{
"serial_no": "RPXIM-220831-802",
"title": "申请为慧择渠道责任险产品开通电子发票短信邮件",
"department": "",
"request_people": "曾素素",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年8月31日",
"issue_date": "",
"close_date": "2022年10月25日",
"comment": "为慧择渠道的责任险保单开通电子发票短信邮件通知功能。",
},
{
"serial_no": "RPXIM-220902-504",
"title": "关于与咪咕动漫有限公司合作销售“体育健身运动人身意外伤害保险”的申请",
"department": "",
"request_people": "张晔",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年9月2日",
"issue_date": "",
"close_date": "2022年11月11日",
"comment": "在厦门i健身公众号上线体育健身运动人身意外伤害保险增加新合作技术方咪咕动漫有限公司。",
},
{
"serial_no": "RPXIM-220909-477",
"title": "关于变更厦门市公共资源交易中心业务接口IP地址的申请",
"department": "",
"request_people": "王炜",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年9月9日",
"issue_date": "",
"close_date": "2022年9月23日",
"comment": "修改合作方接口地址。",
},
{
"serial_no": "RPXIM-220902-648",
"title": "申请融e保系统开发附加调整特定事故保险金额保险互联网条款费率",
"department": "",
"request_people": "张晔",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年9月2日",
"issue_date": "",
"close_date": "2022年11月11日",
"comment": "为“附加调整特定事故保险金额保险(互联网)”产品开发开发条款和费率计算。",
},
{
"serial_no": "RPXIM-220829-756",
"title": "申请在核心系统、融E保系统为险种添加主附险对应关系",
"department": "",
"request_people": "曾素素",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年8月29日",
"issue_date": "",
"close_date": "2022年10月28日",
"comment": "主险23Z3980000000001 家庭人身意外伤害保险(互联网单证通用) 附加险22Q1980000000000 附加团体意外伤害住院津贴保险(互联网)",
},
{
"serial_no": "RPXIM-221017-035",
"title": "申请提取账号权限清单",
"department": "",
"request_people": "王炜",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年10月17日",
"issue_date": "",
"close_date": "2022年10月28日",
"comment": "重新提交RPXIM-220820-331。",
},
{
"serial_no": "RPXIM-220920-632",
"title": "申请为智慧门店自助办理机增加险种,并扩大保单承保地",
"department": "",
"request_people": "戴安琪",
"status": "已取消",
"current_department": "",
"current_people": "",
"submit_date": "2022年9月20日",
"issue_date": "",
"close_date": "2022年11月1日",
"comment": "因开发团队项目分析遗漏部分功能模块,导致进度延误。为不影响开发团队绩效,关闭此需求,重新提交。",
},
{
"serial_no": "RPXIM-220923-388",
"title": "申请提取新核心系统诉讼案件录入清单",
"department": "",
"request_people": "周毅彬",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年9月23日",
"issue_date": "",
"close_date": "2022年10月31日",
"comment": "已交付数据。",
},
{
"serial_no": "RPXIM-221014-671",
"title": "关于增加与慧择平台对接功能的申请",
"department": "",
"request_people": "曾素素",
"status": "已取消",
"current_department": "",
"current_people": "",
"submit_date": "2022年10月14日",
"issue_date": "",
"close_date": "2022年10月14日",
"comment": "因审核人长期未审核通过,撤回需求重新选择审核条线。",
},
{
"serial_no": "RPXIM-221014-165",
"title": "关于增加与慧择平台对接功能的申请",
"department": "",
"request_people": "曾素素",
"status": "待发布",
"current_department": "",
"current_people": "",
"submit_date": "2022年10月14日",
"issue_date": "2022年12月31日",
"close_date": "",
"comment": "变更与慧择平台理赔系统对接的部分功能。",
},
{
"serial_no": "RPXIM-221021-435",
"title": "关于上线产险厦门分公司车险投保实名认证功能的申请",
"department": "",
"request_people": "黄晓玲",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年10月21日",
"issue_date": "",
"close_date": "2022年11月30日",
"comment": "应中国银保信要求上线车险投保实名认证服务。",
},
{
"serial_no": "RPXIM-221021-620",
"title": "关于与慧择经纪合作货运险产品的申请",
"department": "",
"request_people": "曾素素",
"status": "已取消",
"current_department": "科技创新中心",
"current_people": "刘婷婷",
"submit_date": "2022年10月21日",
"issue_date": "",
"close_date": "2022年11月21日",
"comment": "由总公司科技创新中心刘婷婷老师退回,原因:经与业务老师沟通,此需求承保为自动核保与人工核保两种方式,还涉及外币,还需做批改功能,需要明确内容颇多,已与业务老师沟通,请明确需求流程或细节后,在提交。",
},
{
"serial_no": "RPXIM-221026-815",
"title": "申请修复数字承保系统退保功能",
"department": "",
"request_people": "沈立虹",
"status": "部门审核",
"current_department": "综合市场部",
"current_people": "吴凯伦",
"submit_date": "2022年10月26日",
"issue_date": "",
"close_date": "",
"comment": "不止为何未审核。",
},
{
"serial_no": "RPXIM-221026-156",
"title": "关于变更与国家电网对接接口的申请",
"department": "",
"request_people": "王炜",
"status": "需求暂缓",
"current_department": "",
"current_people": "",
"submit_date": "2022年10月26日",
"issue_date": "",
"close_date": "",
"comment": "因合作方支付模式发生变更,接口内容还需调整,故此暂缓此需求。",
},
{
"serial_no": "RPXIM-221028-572",
"title": "关于关闭与国家电网合作业务个人支付模式的申请",
"department": "",
"request_people": "王炜",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年10月28日",
"issue_date": "",
"close_date": "2022年11月12日",
"comment": "国网对接需求。关闭个人支付,保留对公支付。",
},
{
"serial_no": "RPXIM-221028-083",
"title": "申请清理财汇平台历史数据",
"department": "",
"request_people": "郭晓玲",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年10月28日",
"issue_date": "",
"close_date": "2022年11月25日",
"comment": "因总公司财务部发现共保摊赔科目有长账龄负数挂账,影响坏账计提,要求我司对财汇系统进行清理。郭等人对核销科目余额明细查询中抽取“其他应收款-司外保险赔付-共保”数据准备做清理的时候发现,大部分数据已完成核销,但系统仍显示负数挂账。故此提交申请财汇系统同意清理历史数据。",
},
{
"serial_no": "RPXIM-221101-483",
"title": "申请为智慧门店自助办理机增加险种,并扩大保单承保地",
"department": "",
"request_people": "戴安琪",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年11月1日",
"issue_date": "",
"close_date": "",
"comment": "申请客户可在自助办理机上查询太保任意地区全险种的保单。",
},
{
"serial_no": "RPXIM-221107-744",
"title": "关于变更与国家电网对接接口的申请",
"department": "",
"request_people": "王炜",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年11月7日",
"issue_date": "",
"close_date": "2022年11月25日",
"comment": "国网对接需求,因合作方接口变更。",
},
{
"serial_no": "RPXIM-221124-472",
"title": "关于与慧择经纪合作货运险产品的申请",
"department": "",
"request_people": "曾素素",
"status": "需求分析",
"current_department": "科技创新中心",
"current_people": "邵俭",
"submit_date": "2022年11月24日",
"issue_date": "",
"close_date": "",
"comment": "与慧择平台对接上线货运险业务。",
},
{
"serial_no": "RPXIM-221025-861",
"title": "申请开通特种车险的非车险险种出单板块",
"department": "",
"request_people": "游建成",
"status": "已取消",
"current_department": "企业客户部",
"current_people": "刘愉",
"submit_date": "2022年10月25日",
"issue_date": "",
"close_date": "",
"comment": "被企客部刘愉老师退回,原因:请说明体现货运险产品所需的具体产品种类,并不是所有货运险均适合车险。",
},
{
"serial_no": "RPXIM-221117-817",
"title": "太保e办系统申请添加实际用印人功能",
"department": "",
"request_people": "江琳",
"status": "已完成",
"current_department": "",
"current_people": "",
"submit_date": "2022年11月17日",
"issue_date": "",
"close_date": "2022年12月9日",
"comment": "在太保e办系统用印流程界面增加“实际用印人”字段。",
},
{
"serial_no": "RPXIM-221125-036",
"title": "关于变更与国家电网对接接口的申请",
"department": "",
"request_people": "王炜",
"status": "方案确认",
"current_department": "信用险事业部",
"current_people": "陈张立",
"submit_date": "2022年11月25日",
"issue_date": "2023年1月27日",
"close_date": "",
"comment": "从需求RPXIM-221107-744拆分出5.6接口开发任务。增加线下退保后,保费原路退回客户账户,成功后推送通知的功能。",
},
{
"serial_no": "RPXIM-221226-013",
"title": "关于变更在厦门i健身公众号投保界面 产品显示顺序的申请",
"department": "",
"request_people": "张晔",
"status": "需求分析",
"current_department": "",
"current_people": "",
"submit_date": "2022年12月26日",
"issue_date": "",
"close_date": "",
"comment": "修改马上保系统投保界面,将更昂贵的产品放到最前面,蛊惑消费者多花钱。",
},
];
export { requirementTestData };

View File

@ -2,24 +2,21 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-02-06 14:12:11 * @Date: 2023-02-06 14:12:11
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-02-24 09:31:03 * @LastEditTime: 2023-02-08 10:46:41
* @FilePath: /it-console/src/utils/api/LocalStorage.js * @FilePath: /IT/src/utils/api/LocalStorage.js
* @Description: 初始化localStorage中保存的值 * @Description: 初始化localStorage中保存的值
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
//常量 //常量
const REQUIREMRNT_UI = "requirement_ui"; const REQUIREMRNT_UI = `requirement_ui`;
/** //需求管理模块
* 从localStorage中读取 REQUIREMRNT_UI 的值并转换成对象
* 如果转换不成功或者缺少属性就补充属性设置为空值
* 时间属性设置为初始日期
* @returns 读取并装配好的ui对象
*/
function loadRequirementUI() function loadRequirementUI()
{ {
// debugger;
let requirementUI = null; let requirementUI = null;
try try
@ -33,12 +30,30 @@ function loadRequirementUI()
} }
//如果之前不存在json转换结果也会是null //如果之前不存在json转换结果也会是null
requirementUI = requirementUI || {}; if (requirementUI === null)
requirementUI.selected_status = requirementUI.selected_status || []; {
requirementUI.title = requirementUI.title || ""; requirementUI = {};
requirementUI.serial_no = requirementUI.serial_no || ""; }
requirementUI.request_people = requirementUI.request_people || "";
requirementUI.commit_end_date = requirementUI.commit_end_date || new Date(); 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) if (requirementUI.commit_start_date === undefined)
{ {
@ -47,6 +62,11 @@ function loadRequirementUI()
requirementUI.commit_start_date.setDate(1); requirementUI.commit_start_date.setDate(1);
} }
if (requirementUI.commit_end_date === undefined)
{
requirementUI.commit_end_date = new Date();
}
return requirementUI; return requirementUI;
} }

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 queryRequirementUI(requirement_store, error_page_name) function query_requirement_ui(requirement_store, error_page_name)
{ {
//发送请求 //发送请求
instance.request( instance.request(
@ -48,4 +48,4 @@ function queryRequirementUI(requirement_store, error_page_name)
}); });
} }
export { queryRequirementUI }; export { query_requirement_ui };

View File

@ -2,8 +2,8 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-02-04 22:28:13 * @Date: 2023-02-04 22:28:13
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-03-21 23:41:55 * @LastEditTime: 2023-02-04 23:36:48
* @FilePath: /it-console/src/views/ErrorPage.vue * @FilePath: /IT/src/views/ErrorPage.vue
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
@ -11,7 +11,7 @@
<template> <template>
<el-scrollbar style="height:100vh;width:100vw;"> <el-scrollbar style="height:100vh;width:100vw;">
<div class="container"> <div class="container">
<img src="../assets/skull.png"> <img src="../assets/skull.png" />
<span>妖秀啊</span> <span>妖秀啊</span>
</div> </div>
</el-scrollbar> </el-scrollbar>
@ -22,7 +22,7 @@ export default {
name: "ErrorPage", name: "ErrorPage",
setup() setup()
{ {
return {};
}, },
}; };
</script> </script>

View File

@ -3,84 +3,54 @@
* @Author: Kane * @Author: Kane
* @Date: 2022-12-14 15:23:54 * @Date: 2022-12-14 15:23:54
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-03-27 15:28:21 * @LastEditTime: 2023-02-07 10:46:48
* @FilePath: /it-console/src/views/account/Login.vue * @FilePath: /IT/src/views/account/Login.vue
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div id="login"> <div id="login">
<div class="form-wrapper"> <div class="form-wrapper">
<ul class="menu-tab"> <ul class="menu-tab">
<li <li :class="{ 'current': ui.current_menu === item.type }" @click="onToggleMenu(item.type)"
v-for="item in tabMenu" v-for="item in tab_menu" :key="item.type">{{ item.label }}
:key="item.type" </li>
:class="{ 'current': ui.current_menu === item.type }" </ul>
@click="onToggleMenu(item.type)" <!-- <el-form ref="form" :model="form"> -->
> <el-form ref="form">
{{ item.label }} <el-form-item>
</li> <label class="form-label">用户名</label>
</ul> <el-input type="text" v-model.lazy.trim="loginForm.username"></el-input>
<!-- <el-form ref="form" :model="form"> --> </el-form-item>
<el-form ref="form"> <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 </el-form-item>
v-model.lazy.trim="loginForm.username" <el-form-item v-show="ui.current_menu === tab_menu[1].type">
type="text" <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>
<el-form-item> <el-form-item>
<label class="form-label">密码</label> <label class="form-label">验证码</label>
<el-input <el-row :gutter="10">
v-model.lazy.trim="loginForm.password" <el-col :span="14">
type="password" <el-input type="text" disabled></el-input>
/> </el-col>
</el-form-item> <el-col :span="10">
<el-form-item v-show="ui.current_menu === tabMenu[1].type"> <el-button type="danger" disabled class="el-button-block" @click="getValidateCode()">获取验证码</el-button>
<label class="form-label">确认密码</label> </el-col>
<el-input </el-row>
v-model.lazy.trim="loginForm.confirm_password" </el-form-item>
type="password" <el-form-item>
disabled <el-button type="primary" class="el-button-block" @click="login" :disabled="ui.submit_btn_disable"
/> :loading="ui.submit_btn_loading">
</el-form-item> {{ ui.current_menu === "login" ? "登录" : "注册" }}
<el-form-item> </el-button>
<label class="form-label">验证码</label> </el-form-item>
<el-row :gutter="10"> </el-form>
<el-col :span="14">
<el-input
type="text"
disabled
/>
</el-col>
<el-col :span="10">
<el-button
type="danger"
disabled
class="el-button-block"
@click="getValidateCode()"
>
获取验证码
</el-button>
</el-col>
</el-row>
</el-form-item>
<el-form-item>
<el-button
type="primary"
class="el-button-block"
:disabled="ui.submit_btn_disable"
:loading="ui.submit_btn_loading"
@click="login"
>
{{ ui.current_menu === "login" ? "登录" : "注册" }}
</el-button>
</el-form-item>
</el-form>
</div>
</div> </div>
</div>
</template> </template>
<script> <script>
@ -90,167 +60,168 @@ 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 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) =>
{ {
const store = useStore(); ui.current_menu = type;
const router = useRouter(); console.log(process.env.VUE_APP_API_URL_LOGIN);
};
const loginForm = reactive({ const getValidateCode = () =>
username: "", {
password: "", ElMessage({
confirm_password: "", message: "测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字",
validateCode: "", center: true,
type: "error",
});
};
//tokenvuexlocalStorage
const saveUserInfo = (userInfo) =>
{
console.log("保存用户信息");
console.log("保存用户信息", store);
//vuex
store.commit("app/SET_USERINFO", userInfo);
//localStorage
const token = userInfo.token;
const userInfoJson = JSON.stringify(userInfo);
window.localStorage.setItem("token", token);
window.localStorage.setItem("user_info", userInfoJson);
};
/**
* 登录
*/
const login = () =>
{
if (loginForm.username.length === 0 || loginForm.password === 0)
{
ElMessage({
message: "请填写您的P13账号和密码",
type: "error",
}); });
const tabMenu = reactive( return;
[ }
{ type: "login", label: "登录", },
{ type: "regiester", label: "注册", },
]);
const ui = reactive( ui.submit_btn_disable = true;
{ ui.submit_btn_loading = true;
current_menu: "",
staffInfo: null,
submit_btn_disable: false,
submit_btn_loading: false,
});
const onToggleMenu = (type) => const userInfo = {
p13account: loginForm.username,
password: loginForm.password,
};
Login(userInfo)
.then((response) =>
{ {
ui.current_menu = type; //
}; //tokenvuexlocalStoreage
//router.push
const data = response.data;
const getValidateCode = () => //
{ if (data.success === true)
{
ElMessage({ ElMessage({
message: "测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字测试文字", message: data.message,
center: true, type: "success",
type: "error", center: true,
}); });
};
// tokenvuexlocalStorage ui.staffInfo = data.staffInfo;
const saveUserInfo = (userInfo) =>
//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("保存用户信息"); //
console.log("保存用户信息", store); console.log(error);
// vuex
store.commit("app/SET_USERINFO", userInfo);
// localStorage ElMessage({
const token = userInfo.token; message: error.message,
const userInfoJson = JSON.stringify(userInfo); type: "error",
center: true,
});
window.localStorage.setItem("token", token); ui.submit_btn_disable = false;
window.localStorage.setItem("user_info", userInfoJson); ui.submit_btn_loading = false;
};
/**
* 登录
*/
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) =>
{
//
// tokenvuexlocalStoreage
// router.push
const data = response.data;
//
if (data.success === true)
{
ElMessage({
message: data.message,
type: "success",
center: true,
});
ui.staffInfo = data.staffInfo;
// token
saveUserInfo(data);
//
router.push("/desktop");
}
else
{
//
ElMessage({
message: data.message,
type: "error",
center: true,
});
ui.submit_btn_disable = false;
ui.submit_btn_loading = false;
}
})
.catch((error) =>
{
//
console.log(error);
ElMessage({
message: error.message,
type: "error",
center: true,
});
ui.submit_btn_disable = false;
ui.submit_btn_loading = false;
});
};
onBeforeMount(() =>
{
//
ui.current_menu = tabMenu[0].type;
}); });
};
onMounted(() => onBeforeMount(() =>
{ {
// //
store.state.app.userInfo = null; ui.current_menu = tab_menu[0].type;
}); });
return { onMounted(() =>
// {
ui, //
loginForm, store.state.app.userInfo = null;
tabMenu, });
//
onToggleMenu, return {
saveUserInfo, //
login, ui,
getValidateCode, loginForm,
}; tab_menu,
}, //
onToggleMenu,
saveUserInfo,
login,
getValidateCode,
};
},
}; };
</script> </script>
@ -270,6 +241,24 @@ export default {
border-radius: 5px; 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 { .menu-tab {
text-align: center; text-align: center;
margin-bottom: 15px; margin-bottom: 15px;

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-03-21 23:22:57 * @LastEditTime: 2023-02-23 00:02:40
* @FilePath: /it-console/src/views/info/StaffInfo.vue * @FilePath: /it-console/src/views/info/StaffInfo.vue
* @Description:< * @Description:<
* *
@ -20,50 +20,43 @@
<template> <template>
<div class="view_wrapper"> <div class="view_wrapper">
<div class="query_wrapper"> <div class="query_wrapper">
<el-row :gutter="10"> <el-row gutter="10">
<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="queryParam.stuffName" /> <el-input v-model="query_param.stuffName"></el-input>
</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="queryParam.stuffCode" /> <el-input v-model="query_param.stuffName"></el-input>
</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="queryParam.p13UID" /> <el-input v-model="query_param.stuffName"></el-input>
</el-col> </el-col>
</el-row> </el-row>
<el-row :gutter="10"> <el-row gutter="10">
<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="queryParam.departmentName" /> <el-input v-model="query_param.stuffName"></el-input>
</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="queryParam.departmentCode" /> <el-input v-model="query_param.stuffName"></el-input>
</el-col> </el-col>
<el-col :span="6"> <el-col :span="6">
<div class="toolbutton-wrapper"> <div class="toolbutton-wrapper">
<el-button <el-button type="primary" icon="search">查询</el-button>
type="primary" <el-button icon="Refresh">重置</el-button>
icon="search"
>
查询
</el-button>
<el-button icon="Refresh">
重置
</el-button>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@ -78,7 +71,7 @@ export default {
name: "StuffInfo", name: "StuffInfo",
setup() setup()
{ {
const queryParam = reactive( const query_param = reactive(
{ {
stuffName: "", stuffName: "",
stuffCode: "", stuffCode: "",
@ -89,31 +82,38 @@ export default {
); );
return { return {
queryParam, query_param,
}; };
}, },
}; };
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
@import "@/css/public/public.scss";
.view_wrapper { .view_wrapper {
border-radius: 5px; border-radius: 5px;
background-color: #fff; background-color: #fff;
padding: 10px;
min-width: 800px;
// max-width: 1200px;
box-shadow: $box-shadow;
&:hover {
box-shadow: $box-shadow-hover;
}
} }
.query_wrapper { .query_wrapper {
@include query-box-wrap; min-width: 800px;
max-width: 1200px;
padding: 10px;
.el-row {
display: flex;
align-items: center;
span {
display: block;
text-align: right;
font-size: 15px;
color: #5f5f5f;
}
}
.el-row+.el-row {
margin-top: 15px;
}
} }
.toolbutton-wrapper { .toolbutton-wrapper {

View File

@ -8,17 +8,27 @@
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * 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> <template>
<div>网络点位信息修改</div> <div>网络点位信息修改</div>
</template> </template>
<script lang="ts"> <script>
export default { export default {
name: "NetworkPointEditor", name: "network-point-editor",
setup() data()
{ {
return {}; return {};
}, },
}; };
</script> </script>

View File

@ -2,8 +2,8 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-01-25 11:24:47 * @Date: 2023-01-25 11:24:47
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-03-21 23:46:21 * @LastEditTime: 2023-01-25 11:34:07
* @FilePath: /it-console/src/views/network/NetworkPoint/NetworkPoint.vue * @FilePath: \admin_system\src\views\network\NetworkPoint.vue
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
@ -12,10 +12,10 @@
<div>网络点位管理</div> <div>网络点位管理</div>
</template> </template>
<script lang="ts"> <script>
export default { export default {
name: "NetworkPointManagement", name: "network-point-management",
setup() data()
{ {
return {}; return {};
}, },

View File

@ -9,13 +9,13 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div>交换机管理</div> 交换机管理
</template> </template>
<script lang="ts"> <script>
export default { export default {
name: "SwitchManager", name: "switch-manager",
setup() data()
{ {
return {}; return {};
}, },

View File

@ -14,7 +14,7 @@
<script> <script>
export default { export default {
name: "NewsPage", name: "NewsPage"
}; };
</script> </script>

View File

@ -11,17 +11,12 @@
<template> <template>
信息编辑:{{ getCount }} 信息编辑:{{ getCount }}
<br> <br>
<el-button <el-button type="danger" @click="this.add">计数加一</el-button>
type="danger" <SvgIcon icon="house"></SvgIcon>
@click="add"
>
计数加一
</el-button>
<SvgIcon icon="house" />
</template> </template>
<script> <script>
// import { ElMessage } from 'element-plus'; //import { ElMessage } from 'element-plus';
export default { export default {
name: "NewsEdit", name: "NewsEdit",
@ -37,18 +32,18 @@ export default {
return this.$store.state.app.count; return this.$store.state.app.count;
}, },
}, },
created()
{
this.store = this.$store;
},
methods: { methods: {
add() add()
{ {
const count = this.store.state.app.count + 1; let count = this.store.state.app.count + 1;
this.store.commit("app/SET_COUNT", count); this.store.commit("app/SET_COUNT", count);
}, },
}, },
created()
{
this.store = this.$store;
}
}; };
</script> </script>

View File

@ -24,7 +24,7 @@
<script> <script>
export default { export default {
name: "NewsPage", name: "NewsPage"
}; };
</script> </script>

View File

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

View File

@ -9,16 +9,16 @@
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div /> <div></div>
</template> </template>
<script> <script>
export default { export default {
name: "EditStaffInfo", name: "EditStaffInfo",
data: function () data: function ()
{ {
return {}; return {};
}, },
}; };
</script> </script>

View File

@ -2,14 +2,14 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-02-03 18:54:38 * @Date: 2023-02-03 18:54:38
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-03-21 23:45:04 * @LastEditTime: 2023-02-03 18:56:39
* @FilePath: /it-console/src/views/privilege/PrivilegeManager.vue * @FilePath: \IT工具综合平台\src\views\privilege\PrivilegeManager.vue
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div>权限管理</div> 权限管理
</template> </template>
<script> <script>

View File

@ -3,116 +3,59 @@
* @Author: Kane * @Author: Kane
* @Date: 2023-01-12 14:43:46 * @Date: 2023-01-12 14:43:46
* @LastEditors: Kane * @LastEditors: Kane
* @LastEditTime: 2023-03-21 23:41:05 * @LastEditTime: 2023-01-26 23:18:49
* @FilePath: /it-console/src/views/privilege/StaffInfo.vue * @FilePath: \admin_system\src\views\info\StaffInfo.vue
* @Description: * @Description:
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
--> -->
<template> <template>
<div class="query_box"> <div class="query_box">
<el-form <el-form inline width="600px">
inline <el-row :gutter="10" class="el-row">
width="600px"
>
<el-row
:gutter="10"
class="el-row"
>
<el-col :span="8"> <el-col :span="8">
<el-input <el-input v-model="query_param.staff_code" placeholder="请输入P09工号或P13账号"></el-input>
v-model="query_param.staff_code"
placeholder="请输入P09工号或P13账号"
/>
</el-col> </el-col>
<el-col :span="4"> <el-col :span="4">
<el-button type="danger"> <el-button type="danger">查询</el-button>
查询
</el-button>
</el-col> </el-col>
<el-col :span="12" /> <el-col :span="12"></el-col>
</el-row> </el-row>
</el-form> </el-form>
<el-table <el-table ref="table" :data="table_data" border width="100%" stripe>
ref="table" <el-table-column type="selection" min-width="30" align="center"></el-table-column>
:data="table_data" <el-table-column min-width="200" label="员工名称" align="left" fixed="left">
border
width="100%"
stripe
>
<el-table-column
type="selection"
min-width="30"
align="center"
/>
<el-table-column
min-width="200"
label="员工名称"
align="left"
fixed="left"
>
<template #default="rowdata"> <template #default="rowdata">
<span <span @click="onShowStaffInfo(rowdata.row)" style="cursor: pointer; display: block; height: 100%">{{
style="cursor: pointer; display: block; height: 100%"
@click="onShowStaffInfo(rowdata.row)"
>{{
rowdata.row.staff_name rowdata.row.staff_name
}}</span> }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column <el-table-column prop="staff_code" min-width="100" label="工号" align="left"></el-table-column>
prop="staff_code" <el-table-column prop="p13uid" min-width="200" label="P13账号" align="left"></el-table-column>
min-width="100" <el-table-column label="操作" min-width="200" align="center" fixed="right">
label="工号"
align="left"
/>
<el-table-column
prop="p13uid"
min-width="200"
label="P13账号"
align="left"
/>
<el-table-column
label="操作"
min-width="200"
align="center"
fixed="right"
>
<template #default> <template #default>
<el-button type="warning"> <el-button type="warning">编辑</el-button>
编辑 <el-button type="danger">删除</el-button>
</el-button>
<el-button type="danger">
删除
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-row <el-row :gutter="10" width="100%">
:gutter="10"
width="100%"
>
<el-col :span="18"> <el-col :span="18">
<el-pagination <el-pagination class="pull_left" @current-change="onCurrentPageIndexChange"
class="pull_left" @size-change="onTablePageSizeChange" size="small" background :current-page="this.table_current_page"
size="small" :page-size="10" :page-sizes="[10, 20, 50, 100]" layout="total, sizes, prev, pager, nex, jumper"
background :total="table_data.length">
:current-page="table_current_page" </el-pagination>
:page-size="10"
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, nex, jumper"
:total="table_data.length"
@current-change="onCurrentPageIndexChange"
@size-change="onTablePageSizeChange"
/>
</el-col> </el-col>
</el-row> </el-row>
</div> </div>
</template> </template>
<script> <script>
/* eslint-disable no-unused-vars*/
export default { export default {
name: "StaffInfo", name: "staff-info",
data() data()
{ {
return { return {
@ -150,7 +93,7 @@ export default {
}; };
}, },
methods: { methods: {
// onTableEdit(row) { }, onTableEdit(row) { },
/** /**
* 根据表格行index返回样式实现斑马纹 * 根据表格行index返回样式实现斑马纹
* @param row * @param row
@ -159,8 +102,8 @@ export default {
*/ */
tabRowClassName(row, rowIndex) tabRowClassName(row, rowIndex)
{ {
const index = rowIndex + 1; let index = rowIndex + 1;
if (index % 2 === 0) if (index % 2 == 0)
{ {
return "warning-row"; return "warning-row";
} }
@ -176,11 +119,11 @@ export default {
/** /**
* 表格页显示数量变更时消息处理函数 * 表格页显示数量变更时消息处理函数
*/ */
// onTablePageSizeChange() { }, onTablePageSizeChange() { },
/** /**
* 用户变更当前页时消息处理函数 * 用户变更当前页时消息处理函数
*/ */
// onCurrentPageIndexChange() { }, onCurrentPageIndexChange() { },
}, },
}; };
</script> </script>

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: "RequirementEditing", name: "requirement-editing",
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

@ -1,47 +0,0 @@
/*
* @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",
]
}

View File

@ -8,60 +8,60 @@
* *
* Copyright (c) ${2022} by Kane, All Rights Reserved. * Copyright (c) ${2022} by Kane, All Rights Reserved.
*/ */
import { defineConfig } from "vite"; import { defineConfig } from 'vite';
import path from "path"; import path from 'path';
import vue from "@vitejs/plugin-vue"; import vue from '@vitejs/plugin-vue';
import vueJsx from "@vitejs/plugin-vue-jsx"; import vueJsx from '@vitejs/plugin-vue-jsx';
import ViteRequireContext from "@originjs/vite-plugin-require-context"; import ViteRequireContext from '@originjs/vite-plugin-require-context';
import envCompatible from "vite-plugin-env-compatible"; import envCompatible from 'vite-plugin-env-compatible';
import { createHtmlPlugin } from "vite-plugin-html"; import { createHtmlPlugin } from 'vite-plugin-html';
import { viteCommonjs } from "@originjs/vite-plugin-commonjs"; import { viteCommonjs } from '@originjs/vite-plugin-commonjs';
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig({ export default defineConfig({
resolve: { resolve: {
alias: [ alias: [
{ {
find: /^~/, find: /^~/,
replacement: "", replacement: '',
}, },
{ {
find: "@", find: '@',
replacement: path.resolve(__dirname, "src"), replacement: path.resolve(__dirname, 'src'),
}, },
],
extensions: [
".mjs",
".js",
".ts",
".jsx",
".tsx",
".json",
".vue",
],
},
plugins: [
vue(),
vueJsx(),
ViteRequireContext(),
viteCommonjs(),
envCompatible(),
createHtmlPlugin({
inject: {
data: {
title: "CPIC-IT-Console",
},
},
}),
], ],
base: "./", extensions: [
server: { '.mjs',
strictPort: false, '.js',
port: 8001, '.ts',
host: "localhost", '.jsx',
open: true, '.tsx',
}, '.json',
build: { '.vue',
outDir: "dist", ],
}, },
plugins: [
vue(),
vueJsx(),
ViteRequireContext(),
viteCommonjs(),
envCompatible(),
createHtmlPlugin({
inject: {
data: {
title: 'CPIC-IT-Console',
},
},
}),
],
base: './',
server: {
strictPort: false,
port: 8000,
host: 'localhost',
open: true,
},
build: {
outDir: 'dist',
},
}); });

View File

@ -20,35 +20,35 @@
// } // }
// ); // );
module.exports = { module.exports = {
transpileDependencies: true, transpileDependencies: true,
devServer: { devServer: {
open: true, open: true,
host: "localhost", host: "localhost",
port: 8000, port: 8000,
}, },
// chainWebpack: (config) => // chainWebpack: (config) =>
// { // {
// // svg 图标解析 // // svg 图标解析
// const svgRule = config.module.rule("svg"); //默认规则赋给 subRule 变量 // const svgRule = config.module.rule("svg"); //默认规则赋给 subRule 变量
// svgRule.uses.clear(); // 清除已有的所有规则。 // svgRule.uses.clear(); // 清除已有的所有规则。
// svgRule // 添加要替换的规则 // svgRule // 添加要替换的规则
// .use("svg-sprite-loader") // .use("svg-sprite-loader")
// .loader("svg-sprite-loader") // .loader("svg-sprite-loader")
// .options({ // .options({
// symbolId: "icon-[name]", // symbolId: "icon-[name]",
// include: ["./src/components/svg/icons",], // 特别注意的目录路径 // include: ["./src/components/svg/icons",], // 特别注意的目录路径
// }); // });
// 配置base64转换规则 // 配置base64转换规则
// config.module // config.module
// .rule('images') // .rule('images')
// .use('url-loader') // .use('url-loader')
// .loader('url-loader') // .loader('url-loader')
// .tap(options => Object.assign(options, { limit: 1 })); // .tap(options => Object.assign(options, { limit: 1 }));
// 载入项目分析工具 // 载入项目分析工具
// config.plugin('webpack-bundle-analyzer').use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin) // config.plugin('webpack-bundle-analyzer').use(require('webpack-bundle-analyzer').BundleAnalyzerPlugin)
// }, // },
//打包输出目录 //打包输出目录
publicPath: "./", publicPath: "./",
outputDir: "dist", outputDir: "dist",
}; };