Commit a42687031a7ee314ff234d533d069255474c6c8f

Authored by 陈鑫涛
2 parents 3431a3ec ad257f3e

Merge branch 'main' of http://git.xlyprint.cn/zhangz/xlyUmi into main

src/components/UserRegistration/index.jsx 0 → 100644
  1 +import { useState, useEffect } from "react";
  2 +import { ConfigProvider, Modal, Form, Input, Select, message } from "antd";
  3 +import commonConfig from "@/utils/config";
  4 +import * as commonServices from "@/services/services";
  5 +
  6 +const UserRegistrationEvent = () => {
  7 + const [state, setState0] = useState({});
  8 + const setState = payload => {
  9 + setState0({ ...state, ...payload });
  10 + };
  11 +
  12 + // 初始化获取所属客户
  13 + useEffect(() => {
  14 + const url = `${commonConfig.feedback_host}sysworkorder/getCustomerData`;
  15 + commonServices.postValueService("", {}, url).then(({ data: result = {} }) => {
  16 + const { code = -1, data, msg = "接口出错" } = result;
  17 + if (code > -1) {
  18 + setState({ customerData: data });
  19 + } else {
  20 + message.error(msg);
  21 + }
  22 + });
  23 + }, []);
  24 +
  25 + return {
  26 + ...state,
  27 + setState,
  28 + };
  29 +};
  30 +
  31 +const UserRegistration = ({ _this }) => {
  32 + const { userRegisterMode } = _this.state;
  33 + if (!userRegisterMode) return "";
  34 +
  35 + const props = UserRegistrationEvent();
  36 + const { customerData = [] } = props;
  37 +
  38 + const [form] = Form.useForm();
  39 +
  40 + const handleCancel = () => {
  41 + _this.setState({
  42 + userRegisterMode: false,
  43 + });
  44 + };
  45 +
  46 + const handleOk = () => {
  47 + form.submit();
  48 + };
  49 +
  50 + const onFinish = values => {
  51 + console.log("=====Success:", values);
  52 + };
  53 +
  54 + return (
  55 + <ConfigProvider prefixCls="antdV5">
  56 + <Modal title="用户注册" open={userRegisterMode} okText="确认" cancelText="取消" onOk={handleOk} onCancel={handleCancel} width={400}>
  57 + <Form
  58 + name="basic"
  59 + form={form}
  60 + labelCol={{ span: 6 }}
  61 + wrapperCol={{ span: 18 }}
  62 + style={{ maxWidth: 600 }}
  63 + initialValues={{ remember: true }}
  64 + onFinish={onFinish}
  65 + autoComplete="off"
  66 + labelAlign="left"
  67 + >
  68 + <Form.Item label="用户名" name="username" rules={[{ required: true, message: "未填写用户名!" }]}>
  69 + <Input />
  70 + </Form.Item>
  71 +
  72 + <Form.Item
  73 + label="手机号"
  74 + name="telenumber"
  75 + rules={[
  76 + { required: true, message: "未填写手机号!" },
  77 + {
  78 + pattern: /^1[3-9]\d{9}$/,
  79 + message: "请输入有效的中国大陆手机号",
  80 + },
  81 + ]}
  82 + >
  83 + <Input />
  84 + </Form.Item>
  85 +
  86 + <Form.Item label="公司名称" name="company" rules={[{ required: true, message: "未选择公司!" }]}>
  87 + <Select
  88 + fieldNames={{ label: "sCustomerName", value: "sCustomerId" }}
  89 + options={customerData}
  90 + showSearch
  91 + filterOption={(inputValue, option) => option.sCustomerName?.includes(inputValue)}
  92 + />
  93 + </Form.Item>
  94 + </Form>
  95 + </Modal>
  96 + </ConfigProvider>
  97 + );
  98 +};
  99 +
  100 +export default UserRegistration;
... ...
src/components/login/Login.css
... ... @@ -220,3 +220,11 @@
220 220 /*color:#1890ff;*/
221 221 }
222 222  
  223 +.userRegister {
  224 + position: absolute;
  225 + left: 0;
  226 + top: 0;
  227 + padding-left: 0;
  228 + font-weight: bold;
  229 +}
  230 +
... ...
src/components/login/Login.js
1 1 /* eslint-disable */
2 2 /* eslint-disable no-undef,no-param-reassign */
3   -import React, { Component } from 'react';
4   -import { LockOutlined, UserOutlined } from '@ant-design/icons';
5   -import { Form } from '@ant-design/compatible';
  3 +import React, { Component } from "react";
  4 +import { LockOutlined, UserOutlined } from "@ant-design/icons";
  5 +import { Form } from "@ant-design/compatible";
6 6 // import '@ant-design/compatible/assets/index.css';
7 7 import { Input, Button, Select, message, Radio } from 'antd-v4';
8   -import commonConfig from '@/utils/config';
  8 +import commonConfig from "@/utils/config";
9 9 // import * as commonUtils from '../../utils/utils';
10   -import * as commonServices from '@/services/services';
11   -import * as commonFunc from '@/components/Common/commonFunc';
12   -import logo from '@/assets/foot_logo.png';
13   -import * as commonUtils from '@/utils/utils';
14   -import styles from './Login.css';
15   -import FaceDetect from '../FaceDetect';
  10 +import * as commonServices from "@/services/services";
  11 +import * as commonFunc from "@/components/Common/commonFunc";
  12 +import logo from "@/assets/foot_logo.png";
  13 +import * as commonUtils from "@/utils/utils";
  14 +import styles from "./Login.css";
  15 +import FaceDetect from "../FaceDetect";
  16 +import UserRegistration from "../UserRegistration";
16 17  
17 18 const FormItem = Form.Item;
18 19 const { Option } = Select;
19 20  
20 21 class LoginForm extends Component {
21 22 constructor(props) {
22   -
23 23 let ssoLoginParams = {};
24 24 const urlParams = new URLSearchParams(location.search);
25 25 const params = {};
... ... @@ -34,16 +34,16 @@ class LoginForm extends Component {
34 34 super(props);
35 35 this.state = {
36 36 companys: [],
37   - sParentId: JSON.parse(localStorage.getItem(`${commonConfig.prefix}companysParentId`)) || '',
38   - sId: JSON.parse(localStorage.getItem(`${commonConfig.prefix}companyId`)) || '',
  37 + sParentId: JSON.parse(localStorage.getItem(`${commonConfig.prefix}companysParentId`)) || "",
  38 + sId: JSON.parse(localStorage.getItem(`${commonConfig.prefix}companyId`)) || "",
39 39 loginInfo: [],
40   - loginType: 'normal',
41   - sEmployeeNo: '',
  40 + loginType: "normal",
  41 + sEmployeeNo: "",
42 42 ssoLoginParams,
43 43 logoImageInfo: [],
44 44 };
45   - this.loginSRMC = props.baseInfo?.flag === 'loginSRMC';
46   - this.erpBaseWord = this.loginSRMC ? this.props.baseInfo.word : 'ERP'
  45 + this.loginSRMC = props.baseInfo?.flag === "loginSRMC";
  46 + this.erpBaseWord = this.loginSRMC ? this.props.baseInfo.word : "ERP";
47 47 }
48 48  
49 49 componentWillMount() {
... ... @@ -57,7 +57,7 @@ class LoginForm extends Component {
57 57 }
58 58  
59 59 handleInit = async () => {
60   - this.handleGetLoginInfo();/* 根据后台配置获取公司信息 */
  60 + this.handleGetLoginInfo(); /* 根据后台配置获取公司信息 */
61 61 const configUrl = `${commonConfig.server_host}sysbrands/getSysbrands`;
62 62 const configReturn = (await commonServices.getService(null, configUrl)).data;
63 63 if (configReturn.code === 1) {
... ... @@ -69,7 +69,7 @@ class LoginForm extends Component {
69 69 } else {
70 70 message.error(configReturn.msg);
71 71 }
72   - }
  72 + };
73 73  
74 74 // 获取自定义logo
75 75 handleGetLogoImage = () => {
... ... @@ -87,7 +87,7 @@ class LoginForm extends Component {
87 87 } else {
88 88 this.setState(({ logoImageInfo }) => {
89 89 const logoImageInfoNew = [...logoImageInfo];
90   - logoImageInfoNew[index] = '';
  90 + logoImageInfoNew[index] = "";
91 91 return { logoImageInfo: logoImageInfoNew };
92 92 });
93 93 }
... ... @@ -95,18 +95,18 @@ class LoginForm extends Component {
95 95 ImgObj.onerror = () => {
96 96 this.setState(({ logoImageInfo }) => {
97 97 const logoImageInfoNew = [...logoImageInfo];
98   - logoImageInfoNew[index] = '';
  98 + logoImageInfoNew[index] = "";
99 99 return { logoImageInfo: logoImageInfoNew };
100 100 });
101 101 };
102 102 }
103   - }
  103 + };
104 104  
105 105 /* 获取登录窗体配置文字 */
106 106 handleGetLoginInfo = async () => {
107   - const sModelsId = '16148217740007696998039471379000';
  107 + const sModelsId = "16148217740007696998039471379000";
108 108 const configUrl = `${commonConfig.server_host}business/getModelBysId/${sModelsId}?sModelsId=${sModelsId}&sName=/commonAuto`;
109   - const configReturn = (await commonServices.getService('', configUrl)).data;
  109 + const configReturn = (await commonServices.getService("", configUrl)).data;
110 110 if (configReturn.code === 1) {
111 111 const dataReturn = configReturn.dataset.rows;
112 112 if (commonUtils.isNotEmptyArr(dataReturn)) {
... ... @@ -123,17 +123,17 @@ class LoginForm extends Component {
123 123 } else {
124 124 message.error(configReturn.msg);
125 125 }
126   - }
  126 + };
127 127  
128 128 handleSelect = (value, option) => {
129   - const sParentId = option.props['data-parentid'];
  129 + const sParentId = option.props["data-parentid"];
130 130 this.setState({
131 131 sParentId,
132 132 sId: value,
133 133 });
134 134 };
135 135  
136   - handleSubmit = (e) => {
  136 + handleSubmit = e => {
137 137 e.preventDefault();
138 138 this.props.form.validateFields(async (err, values) => {
139 139 if (!err) {
... ... @@ -148,19 +148,19 @@ class LoginForm extends Component {
148 148 const xlybusinessActiveTreeArr = [];
149 149 for (let i = 0; i < localStorage.length; i++) {
150 150 const key = localStorage.key(i);
151   - if (key && key.includes('xlybusinessActiveTree')) {
  151 + if (key && key.includes("xlybusinessActiveTree")) {
152 152 xlybusinessActiveTreeArr.push([key, localStorage.getItem(key)]);
153 153 }
154 154 }
155 155 localStorage.clear();
156   - xlybusinessActiveTreeArr.forEach((item) => {
  156 + xlybusinessActiveTreeArr.forEach(item => {
157 157 localStorage.setItem(item[0], item[1]);
158 158 });
159 159 const value = values;
160 160 if (!bSsoLogin) {
161 161 value.sParentId = this.state.sParentId;
162 162 value.sId = this.state.sId;
163   - if (this.state.loginType === 'face') {
  163 + if (this.state.loginType === "face") {
164 164 value.sEmployeeNo = this.sEmployeeNo;
165 165 }
166 166 }
... ... @@ -170,40 +170,49 @@ class LoginForm extends Component {
170 170 if (commonUtils.isNotEmptyObject(dataReturn.msg)) {
171 171 message.warning(dataReturn.msg, 6);
172 172 }
173   - const {
174   - token, gdslogininfo: userinfo, systemData, commonConst, rxtx, passworIsOld, auxiliaryQty,
175   - } = dataReturn.dataset.rows[0];
  173 + const { token, gdslogininfo: userinfo, systemData, commonConst, rxtx, passworIsOld, auxiliaryQty } = dataReturn.dataset.rows[0];
176 174 // commonUtils.setSystemSettings(systemData);
177 175 // commonUtils.setCommonConst(commonConst);
178 176 const decimals = {};
179 177 if (systemData !== undefined) {
180   - const dNetPrice = systemData.filter(item => (item.sName === 'NetPrice'))[0];
181   - const dNetMoney = systemData.filter(item => (item.sName === 'NetMoney'))[0];
182   - const dNumAlign = systemData.filter(item => (item.sName === 'CkxNumAlign'))[0];
  178 + const dNetPrice = systemData.filter(item => item.sName === "NetPrice")[0];
  179 + const dNetMoney = systemData.filter(item => item.sName === "NetMoney")[0];
  180 + const dNumAlign = systemData.filter(item => item.sName === "CkxNumAlign")[0];
183 181 /* 20230628老孟提的需求:单价设置6位,金额设置2位,不根据配置走 */
184 182 // decimals.dNetPrice = 12;
185 183 decimals.dNetPrice = Number(dNetPrice.sValue); // 20240528晚上杨昌辉提-钱豹要求改;
186 184 decimals.dNetMoney = 2;
187 185 // decimals.dNetPrice = dNetPrice !== undefined && dNetPrice.sValue !== undefined ? (dNetPrice.sValue) * 1 : 6;
188 186 // decimals.dNetMoney = dNetMoney !== undefined && dNetMoney.sValue !== undefined ? (dNetMoney.sValue) * 1 : 6;
189   - decimals.dNumAlign = dNumAlign !== undefined && dNumAlign.sValue !== undefined ? (dNumAlign.sValue) : 0;
  187 + decimals.dNumAlign = dNumAlign !== undefined && dNumAlign.sValue !== undefined ? dNumAlign.sValue : 0;
190 188 // commonUtils.setNetPrice(decimals.dNetPrice);
191 189 // commonUtils.setNetMoney(decimals.dNetMoney);
192 190 // commonUtils.setDateFormat(commonFunc.getDateFormat(systemData));
193 191 }
194 192 // 判断是否是初始密码
195   - if (values.username !== 'zhangz') {
196   - localStorage.setItem(`${commonConfig.prefix}changePwd`, (passworIsOld === true || passworIsOld === 'true') ? 'true' : 'false');
  193 + if (values.username !== "zhangz") {
  194 + localStorage.setItem(`${commonConfig.prefix}changePwd`, passworIsOld === true || passworIsOld === "true" ? "true" : "false");
197 195 }
198 196 /* 登录记住公司信息 */
199 197 localStorage.setItem(`${commonConfig.prefix}companysParentId`, JSON.stringify(this.state.sParentId));
200 198 localStorage.setItem(`${commonConfig.prefix}companyId`, JSON.stringify(this.state.sId));
201   - const companyName = commonUtils.isNotEmptyArr(this.state.companys) ? this.state.companys.filter(item => item.sId === userinfo.sSubsidiaryId)[0].sName : '';
  199 + const companyName = commonUtils.isNotEmptyArr(this.state.companys)
  200 + ? this.state.companys.filter(item => item.sId === userinfo.sSubsidiaryId)[0].sName
  201 + : "";
202 202 userinfo.companyName = companyName;
203 203 const { footer, logoImageInfo } = this.state;
204   - const isInitPassword = passworIsOld === true || passworIsOld === 'true';
  204 + const isInitPassword = passworIsOld === true || passworIsOld === "true";
205 205 await this.props.onLogin({
206   - token, systemData, rxtx, commonConst, userinfo, decimals, dateFormat: commonFunc.getDateFormat(systemData), footer, logoImageInfo, auxiliaryQty,
  206 + token,
  207 + systemData,
  208 + rxtx,
  209 + commonConst,
  210 + userinfo,
  211 + decimals,
  212 + dateFormat: commonFunc.getDateFormat(systemData),
  213 + footer,
  214 + logoImageInfo,
  215 + auxiliaryQty,
207 216 isInitPassword,
208 217 });
209 218 } else {
... ... @@ -212,128 +221,142 @@ class LoginForm extends Component {
212 221 this.handleInit();
213 222 });
214 223 }
215   - }
  224 + };
216 225  
217   - onLoginTypeChange = (e) => {
  226 + onLoginTypeChange = e => {
218 227 this.setState({
219   - loginType: e.target.value
220   - })
  228 + loginType: e.target.value,
  229 + });
221 230 };
222 231  
223 232 //人脸验证登录
224   - onIdentifySuccess = async(e) => {
  233 + onIdentifySuccess = async e => {
225 234 this.sEmployeeNo = e.dataset.rows[0].sEmployeeNo;
226 235 const value = {};
227 236 value.sEmployeeNo = this.sEmployeeNo;
228 237 value.sParentId = e.dataset.rows[0].sBrandsId;
229 238 value.sId = e.dataset.rows[0].sSubsidiaryId;
230 239 await this.handleLogin(value);
231   - }
  240 + };
232 241  
233 242 render() {
234 243 const { getFieldDecorator } = this.props.form;
235 244 const { companys, sId, loginInfo, ssoLoginParams, footer } = this.state;
236 245 if (commonUtils.isNotEmptyObject(ssoLoginParams)) {
237   - return ('');
  246 + return "";
238 247 }
239 248  
240 249 const companysId = commonUtils.isNotEmptyObject(sId) ? sId : commonUtils.isNotEmptyArr(companys) ? companys[0].sId : chooseBranchCompany;
241   - const options = companys.map(com =>
242   - (
243   - <Option key={com.sId} data-parentid={com.sParentId} className={styles.loginOption}>
244   - {com.sName}
245   - </Option>));
246   - let sLanguage = 'sChinese';
  250 + const options = companys.map(com => (
  251 + <Option key={com.sId} data-parentid={com.sParentId} className={styles.loginOption}>
  252 + {com.sName}
  253 + </Option>
  254 + ));
  255 + let sLanguage = "sChinese";
247 256 if (companys !== null && companys.length > 0) {
248 257 sLanguage = companys[0].sLanguage !== null ? companys[0].sLanguage.toString() : sLanguage;
249 258 }
250 259 const { loginLoading, logoImageInfo } = this.state;
251   - let XiaoLingYang = sLanguage === 'sChinese' ? '小羚羊' : (sLanguage === 'sEnglish' ? 'XiaoLingYang' : '小羚羊');/* 小羚羊 */
252   - let WelcometoERP = sLanguage === 'sChinese' ? `欢迎登录${this.erpBaseWord}` : (sLanguage === 'sEnglish' ? `Welcometo${this.erpBaseWord}` : `歡迎登錄${this.erpBaseWord}`);/* 欢迎登录ERP */
253   - let companyName = sLanguage === 'sChinese' ? '上海小羚羊软件' : (sLanguage === 'sEnglish' ? 'ShangHaiXiaoLingYangSoft' : '上海小羚羊軟件');/* 上海小羚羊软件 */
254   - let printAllFlow = sLanguage === 'sChinese' ? '智能印刷全流程' : (sLanguage === 'sEnglish' ? 'IntelligentPrintAllFlow' : '智能印刷全流程');/* 智能印刷全流程 */
255   - let ERP = this.erpBaseWord;/* ERP */
256   - let UserLogin = sLanguage === 'sChinese' ? '用户登录' : (sLanguage === 'sEnglish' ? 'UserLogin' : '用戶登錄');/* 用户登录 */
257   - let pleaseInputUserName = sLanguage === 'sChinese' ? '请输入你的用户名' : (sLanguage === 'sEnglish' ? 'pleaseInputUserName' : '請輸入妳的用戶名');/* 请选择分公司名称 */
258   - let pleaseInputPassword = sLanguage === 'sChinese' ? '请输入你的密码' : (sLanguage === 'sEnglish' ? '请输入你的密码' : '請輸入妳的用戶名');/* 请选择分公司名称 */
259   - let chooseBranchCompany = sLanguage === 'sChinese' ? '请选择分公司名称' : (sLanguage === 'sEnglish' ? 'Please select branch name' : '請選擇分公司名稱');/* 请选择分公司名称 */
260   - let btnLogin = sLanguage === 'sChinese' ? '登 录' : (sLanguage === 'sEnglish' ? 'Login' : '登 錄');/* 登 陆 */
261   - let Copyright = 'Copyright';/* Copyright */
262   - let AddrOne = sLanguage === 'sChinese' ? '小羚羊软件' : (sLanguage === 'sEnglish' ? 'XiaoLingYangSoft' : '小羚羊軟件');/* 小羚羊软件 */
263   - let AddrTwo = sLanguage === 'sChinese' ? '印刷智慧工厂' : (sLanguage === 'sEnglish' ? 'PrintingSmartFactory' : '印刷智慧工廠');/* 印刷智慧工厂 */
264   - let AddrThree = sLanguage === 'sChinese' ? '印刷MES' : (sLanguage === 'sEnglish' ? 'WelcometoMes' : '印刷MES');/* 印刷MES */
265   - let AddrFour = sLanguage === 'sChinese' ? '印刷ERP' : (sLanguage === 'sEnglish' ? 'PrintingErp' : '印刷ERP');/* 印刷ERP */
266   - let AddrFive = sLanguage === 'sChinese' ? '印刷电商平台' : (sLanguage === 'sEnglish' ? 'PrintingE-commercePlatform' : '印刷電商平台');/* 印刷电商平台 */
267   - let AddrSix = sLanguage === 'sChinese' ? '文件智能处理' : (sLanguage === 'sEnglish' ? 'FileIntelligenceHandle' : '文件智能處理');/* 文件智能处理 */
268   - let AddrSeven = sLanguage === 'sChinese' ? '印前自动化' : (sLanguage === 'sEnglish' ? 'PrepressAutomation' : '印前自動化');/* 印前自动化 */
269   - let AddrEight = '400-880-6237';/* 400-880-6237 */
270   - const AddrIcp = '沪ICP备14034791号-1'; /* 粤ICP备2022093080号-1 */
  260 + let XiaoLingYang = sLanguage === "sChinese" ? "小羚羊" : sLanguage === "sEnglish" ? "XiaoLingYang" : "小羚羊"; /* 小羚羊 */
  261 + let WelcometoERP =
  262 + sLanguage === "sChinese"
  263 + ? `欢迎登录${this.erpBaseWord}`
  264 + : sLanguage === "sEnglish"
  265 + ? `Welcometo${this.erpBaseWord}`
  266 + : `歡迎登錄${this.erpBaseWord}`; /* 欢迎登录ERP */
  267 + let companyName =
  268 + sLanguage === "sChinese" ? "上海小羚羊软件" : sLanguage === "sEnglish" ? "ShangHaiXiaoLingYangSoft" : "上海小羚羊軟件"; /* 上海小羚羊软件 */
  269 + let printAllFlow =
  270 + sLanguage === "sChinese" ? "智能印刷全流程" : sLanguage === "sEnglish" ? "IntelligentPrintAllFlow" : "智能印刷全流程"; /* 智能印刷全流程 */
  271 + let ERP = this.erpBaseWord; /* ERP */
  272 + let UserLogin = sLanguage === "sChinese" ? "用户登录" : sLanguage === "sEnglish" ? "UserLogin" : "用戶登錄"; /* 用户登录 */
  273 + let pleaseInputUserName =
  274 + sLanguage === "sChinese" ? "请输入你的用户名" : sLanguage === "sEnglish" ? "pleaseInputUserName" : "請輸入妳的用戶名"; /* 请选择分公司名称 */
  275 + let pleaseInputPassword =
  276 + sLanguage === "sChinese" ? "请输入你的密码" : sLanguage === "sEnglish" ? "请输入你的密码" : "請輸入妳的用戶名"; /* 请选择分公司名称 */
  277 + let chooseBranchCompany =
  278 + sLanguage === "sChinese"
  279 + ? "请选择分公司名称"
  280 + : sLanguage === "sEnglish"
  281 + ? "Please select branch name"
  282 + : "請選擇分公司名稱"; /* 请选择分公司名称 */
  283 + let btnLogin = sLanguage === "sChinese" ? "登 录" : sLanguage === "sEnglish" ? "Login" : "登 錄"; /* 登 陆 */
  284 + let Copyright = "Copyright"; /* Copyright */
  285 + let AddrOne = sLanguage === "sChinese" ? "小羚羊软件" : sLanguage === "sEnglish" ? "XiaoLingYangSoft" : "小羚羊軟件"; /* 小羚羊软件 */
  286 + let AddrTwo = sLanguage === "sChinese" ? "印刷智慧工厂" : sLanguage === "sEnglish" ? "PrintingSmartFactory" : "印刷智慧工廠"; /* 印刷智慧工厂 */
  287 + let AddrThree = sLanguage === "sChinese" ? "印刷MES" : sLanguage === "sEnglish" ? "WelcometoMes" : "印刷MES"; /* 印刷MES */
  288 + let AddrFour = sLanguage === "sChinese" ? "印刷ERP" : sLanguage === "sEnglish" ? "PrintingErp" : "印刷ERP"; /* 印刷ERP */
  289 + let AddrFive =
  290 + sLanguage === "sChinese" ? "印刷电商平台" : sLanguage === "sEnglish" ? "PrintingE-commercePlatform" : "印刷電商平台"; /* 印刷电商平台 */
  291 + let AddrSix = sLanguage === "sChinese" ? "文件智能处理" : sLanguage === "sEnglish" ? "FileIntelligenceHandle" : "文件智能處理"; /* 文件智能处理 */
  292 + let AddrSeven = sLanguage === "sChinese" ? "印前自动化" : sLanguage === "sEnglish" ? "PrepressAutomation" : "印前自動化"; /* 印前自动化 */
  293 + let AddrEight = "400-880-6237"; /* 400-880-6237 */
  294 + const AddrIcp = "沪ICP备14034791号-1"; /* 粤ICP备2022093080号-1 */
271 295 if (commonUtils.isNotEmptyArr(loginInfo)) {
272   - const CompanyNameData = loginInfo.filter(item => item.sControlName === 'CompanyName');
  296 + const CompanyNameData = loginInfo.filter(item => item.sControlName === "CompanyName");
273 297 XiaoLingYang = commonUtils.isNotEmptyArr(CompanyNameData) ? CompanyNameData[0].showName : XiaoLingYang;
274 298  
275 299 if (!this.loginSRMC) {
276   - const filterDataLoginERP = loginInfo.filter(item => item.sControlName === 'LoginERP');
  300 + const filterDataLoginERP = loginInfo.filter(item => item.sControlName === "LoginERP");
277 301 WelcometoERP = commonUtils.isNotEmptyArr(filterDataLoginERP) ? filterDataLoginERP[0].showName : WelcometoERP;
278 302 }
279 303  
280   - const CompanyAllNameData = loginInfo.filter(item => item.sControlName === 'CompanyAllName');
  304 + const CompanyAllNameData = loginInfo.filter(item => item.sControlName === "CompanyAllName");
281 305 companyName = commonUtils.isNotEmptyArr(CompanyAllNameData) ? CompanyAllNameData[0].showName : companyName;
282 306  
283   - const PrintAllFlowData = loginInfo.filter(item => item.sControlName === 'PrintAllFlow');
  307 + const PrintAllFlowData = loginInfo.filter(item => item.sControlName === "PrintAllFlow");
284 308 printAllFlow = commonUtils.isNotEmptyArr(PrintAllFlowData) ? PrintAllFlowData[0].showName : printAllFlow;
285 309  
286 310 if (!this.loginSRMC) {
287   - const ERPData = loginInfo.filter(item => item.sControlName === 'ERP');
  311 + const ERPData = loginInfo.filter(item => item.sControlName === "ERP");
288 312 ERP = commonUtils.isNotEmptyArr(ERPData) ? ERPData[0].showName : ERP;
289 313 }
290 314  
291   - const UserLoginData = loginInfo.filter(item => item.sControlName === 'UserLogin');
292   - UserLogin = commonUtils.isNotEmptyArr(UserLoginData) ? UserLoginData[0].showName : 'UserLogin';
  315 + const UserLoginData = loginInfo.filter(item => item.sControlName === "UserLogin");
  316 + UserLogin = commonUtils.isNotEmptyArr(UserLoginData) ? UserLoginData[0].showName : "UserLogin";
293 317  
294   - const PleaseInputUserNameData = loginInfo.filter(item => item.sControlName === 'PleaseInputUserName');
  318 + const PleaseInputUserNameData = loginInfo.filter(item => item.sControlName === "PleaseInputUserName");
295 319 pleaseInputUserName = commonUtils.isNotEmptyArr(PleaseInputUserNameData) ? PleaseInputUserNameData[0].showName : pleaseInputUserName;
296 320  
297   - const PasswordData = loginInfo.filter(item => item.sControlName === 'PleaseInputPassword');
298   - pleaseInputPassword = commonUtils.isNotEmptyArr(PasswordData) ? PasswordData[0].showName : 'PleaseInputPassword';
  321 + const PasswordData = loginInfo.filter(item => item.sControlName === "PleaseInputPassword");
  322 + pleaseInputPassword = commonUtils.isNotEmptyArr(PasswordData) ? PasswordData[0].showName : "PleaseInputPassword";
299 323  
300   - const ChooseBranchCompanyData = loginInfo.filter(item => item.sControlName === 'ChooseBranchCompany');
  324 + const ChooseBranchCompanyData = loginInfo.filter(item => item.sControlName === "ChooseBranchCompany");
301 325 chooseBranchCompany = commonUtils.isNotEmptyArr(ChooseBranchCompanyData) ? ChooseBranchCompanyData[0].showName : chooseBranchCompany;
302 326  
303   - const BtnLoginData = loginInfo.filter(item => item.sControlName === 'BtnLogin');
  327 + const BtnLoginData = loginInfo.filter(item => item.sControlName === "BtnLogin");
304 328 btnLogin = commonUtils.isNotEmptyArr(BtnLoginData) ? BtnLoginData[0].showName : btnLogin;
305 329  
306   - const CopyrightData = loginInfo.filter(item => item.sControlName === 'Copyright');
  330 + const CopyrightData = loginInfo.filter(item => item.sControlName === "Copyright");
307 331 Copyright = commonUtils.isNotEmptyArr(CopyrightData) ? CopyrightData[0].showName : Copyright;
308 332  
309   - const AddrOneData = loginInfo.filter(item => item.sControlName === 'AddrOne');
  333 + const AddrOneData = loginInfo.filter(item => item.sControlName === "AddrOne");
310 334 AddrOne = commonUtils.isNotEmptyArr(AddrOneData) ? AddrOneData[0].showName : AddrOne;
311 335  
312   - const AddrTwoData = loginInfo.filter(item => item.sControlName === 'AddrTwo');
  336 + const AddrTwoData = loginInfo.filter(item => item.sControlName === "AddrTwo");
313 337 AddrTwo = commonUtils.isNotEmptyArr(AddrTwoData) ? AddrTwoData[0].showName : AddrTwo;
314 338  
315   - const AddrThreeData = loginInfo.filter(item => item.sControlName === 'AddrThree');
  339 + const AddrThreeData = loginInfo.filter(item => item.sControlName === "AddrThree");
316 340 AddrThree = commonUtils.isNotEmptyArr(AddrThreeData) ? AddrThreeData[0].showName : AddrThree;
317 341  
318   - const AddrFourData = loginInfo.filter(item => item.sControlName === 'AddrFour');
  342 + const AddrFourData = loginInfo.filter(item => item.sControlName === "AddrFour");
319 343 AddrFour = commonUtils.isNotEmptyArr(AddrFourData) ? AddrFourData[0].showName : AddrFour;
320 344  
321   - const AddrFiveData = loginInfo.filter(item => item.sControlName === 'AddrFive');
  345 + const AddrFiveData = loginInfo.filter(item => item.sControlName === "AddrFive");
322 346 AddrFive = commonUtils.isNotEmptyArr(AddrFiveData) ? AddrFiveData[0].showName : AddrFive;
323 347  
324   - const AddrSixData = loginInfo.filter(item => item.sControlName === 'AddrSix');
  348 + const AddrSixData = loginInfo.filter(item => item.sControlName === "AddrSix");
325 349 AddrSix = commonUtils.isNotEmptyArr(AddrSixData) ? AddrSixData[0].showName : AddrSix;
326 350  
327   - const AddrSevenData = loginInfo.filter(item => item.sControlName === 'AddrSeven');
  351 + const AddrSevenData = loginInfo.filter(item => item.sControlName === "AddrSeven");
328 352 AddrSeven = commonUtils.isNotEmptyArr(AddrSevenData) ? AddrSevenData[0].showName : AddrSeven;
329 353  
330   - const AddrEightData = loginInfo.filter(item => item.sControlName === 'AddrEight');
  354 + const AddrEightData = loginInfo.filter(item => item.sControlName === "AddrEight");
331 355 AddrEight = commonUtils.isNotEmptyArr(AddrEightData) ? AddrEightData[0].showName : AddrEight;
332 356 }
333 357  
334   -
335 358 const dropdownStyle = {
336   - fontSize: '14px',
  359 + fontSize: "14px",
337 360 };
338 361  
339 362 // 修改favicon
... ... @@ -352,24 +375,27 @@ class LoginForm extends Component {
352 375  
353 376 // 修改左上角logo
354 377 const xlyHeaderLogo = logoImageInfo[1];
355   - const root = document.querySelector('#root');
356   - root.style.removeProperty('--xly-header-logo-opacity');
357   - root.style.removeProperty('--xly-header-logo');
  378 + const root = document.querySelector("#root");
  379 + root.style.removeProperty("--xly-header-logo-opacity");
  380 + root.style.removeProperty("--xly-header-logo");
358 381 if (xlyHeaderLogo !== undefined) {
359   - root.style.setProperty('--xly-header-logo-opacity', 1);
360   - if (xlyHeaderLogo !== '') {
361   - root.style.setProperty('--xly-header-logo', `url(${xlyHeaderLogo})`);
  382 + root.style.setProperty("--xly-header-logo-opacity", 1);
  383 + if (xlyHeaderLogo !== "") {
  384 + root.style.setProperty("--xly-header-logo", `url(${xlyHeaderLogo})`);
362 385 }
363 386 }
364 387  
365 388 // 修改foot的logo
366   - const xlyFootLogo = logoImageInfo[3] === '' ? logo : logoImageInfo[3];
  389 + const xlyFootLogo = logoImageInfo[3] === "" ? logo : logoImageInfo[3];
367 390  
368 391 return (
369 392 <div className={styles.wraper}>
370 393 <div className={styles.header}>
371 394 <div className={styles.logo}>
372   - <h1>{XiaoLingYang}<span>{WelcometoERP}</span></h1>
  395 + <h1>
  396 + {XiaoLingYang}
  397 + <span>{WelcometoERP}</span>
  398 + </h1>
373 399 </div>
374 400 </div>
375 401 <div className={styles.login}>
... ... @@ -379,29 +405,42 @@ class LoginForm extends Component {
379 405 <h2>{printAllFlow}</h2>
380 406 <h3>{ERP}</h3>
381 407 </div>
382   - <Form onSubmit={this.handleSubmit} className={`${styles.loginForm_mode} ${this.state.loginType === 'face' ? styles.loginForm_face : ''}`}>
383   - <div className={styles.loginTitle}>
384   - {UserLogin}
385   - </div>
  408 + <Form onSubmit={this.handleSubmit} className={`${styles.loginForm_mode} ${this.state.loginType === "face" ? styles.loginForm_face : ""}`}>
  409 + <div className={styles.loginTitle}>{UserLogin}</div>
386 410 <div className={styles.loginMiddle}>
387   - { this.state.loginType === 'face' ?
388   - <div style={{marginBottom: '22px'}}>
389   - <FaceDetect loginAfterInit={true} onIdentifySuccess={this.onIdentifySuccess} actionType={'identifyFace'}></FaceDetect>
  411 + {this.state.loginType === "face" ? (
  412 + <div style={{ marginBottom: "22px" }}>
  413 + <FaceDetect loginAfterInit={true} onIdentifySuccess={this.onIdentifySuccess} actionType={"identifyFace"}></FaceDetect>
390 414 </div>
391   - :
  415 + ) : (
392 416 <>
393 417 <FormItem className={styles.loginTip}>
394   - {getFieldDecorator('username', {
  418 + {getFieldDecorator("username", {
395 419 rules: [{ required: true, message: pleaseInputUserName }],
396   - })(<Input className={styles.loginInput} size="large" prefix={<UserOutlined className={styles.loginIcon} />} placeholder={pleaseInputUserName} />)}
  420 + })(
  421 + <Input
  422 + className={styles.loginInput}
  423 + size="large"
  424 + prefix={<UserOutlined className={styles.loginIcon} />}
  425 + placeholder={pleaseInputUserName}
  426 + />
  427 + )}
397 428 </FormItem>
398 429 <FormItem className={styles.loginTip}>
399   - {getFieldDecorator('password', {
  430 + {getFieldDecorator("password", {
400 431 rules: [{ required: true, message: pleaseInputPassword }],
401   - })(<Input className={styles.loginInput} size="large" prefix={<LockOutlined className={styles.loginIcon} />} type="password" placeholder={pleaseInputPassword} />)}
  432 + })(
  433 + <Input
  434 + className={styles.loginInput}
  435 + size="large"
  436 + prefix={<LockOutlined className={styles.loginIcon} />}
  437 + type="password"
  438 + placeholder={pleaseInputPassword}
  439 + />
  440 + )}
402 441 </FormItem>
403 442 </>
404   - }
  443 + )}
405 444 {/*<FormItem className={styles.loginTip}>*/}
406 445 {/* {getFieldDecorator('username', {*/}
407 446 {/* rules: [{ required: true, message: pleaseInputUserName }],*/}
... ... @@ -427,35 +466,110 @@ class LoginForm extends Component {
427 466 </Button>
428 467 </FormItem>
429 468 {/*屏蔽人脸*/}
430   - <div style={{textAlign: 'right'}}>
431   - <Radio.Group onChange={this.onLoginTypeChange} value={this.state.loginType} buttonStyle="solid">
  469 + <div style={{ textAlign: "right", position: "relative" }}>
  470 + { ['project.xlyprint.cn', 'localhost'].includes(location.hostname) ? (
  471 + <Button type="link" size="large" className={styles.userRegister} onClick={() => { this.setState({ userRegisterMode: true }); }}>
  472 + 用户注册
  473 + </Button>
  474 + ) : "" }
  475 + <Radio.Group onChange={this.onLoginTypeChange} value={this.state.loginType} buttonStyle="solid">
432 476 <Radio.Button value="normal">普通登录</Radio.Button>
433 477 <Radio.Button value="face">扫脸登录</Radio.Button>
434 478 </Radio.Group>
435 479 </div>
436 480 </Form>
  481 + <UserRegistration _this={this} />
437 482 </div>
438 483 </div>
439 484 <div className={styles.footer}>
440   - {xlyFootLogo && <img alt="logo" src={xlyFootLogo} style={{ maxWidth: 20, maxHeight: 20 }} />}
441   - ©{Copyright} <span className={styles.linkStyle}><a href="http://www.xlyprint.com/" target="_blank" rel="noopener noreferrer">{AddrOne}</a> </span>
442   - {
443   - commonUtils.isNotEmptyArr(footer) ? (
444   - <>
445   - {footer.map(item => {
446   - const { sIcon, sLink, sName } = item;
447   - let sPart = '';
448   - const sIconPart = sIcon ? <img src={sIcon} alt="" /> : '';
449   - if (sLink) {
450   - sPart = <> | <span className={styles.linkStyle}><a href={sLink} target="_blank" rel="noopener noreferrer"> {sIconPart} {sName}</a></span></>;
451   - } else {
452   - sPart = <> | <span>{sIconPart}{sName}</span></>;
453   - }
454   - return sPart;
455   - })}
456   - </>
457   - ) : <> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/zngc.html" target="_blank" rel="noopener noreferrer">{AddrTwo}</a> </span> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/znwl.html" target="_blank" rel="noopener noreferrer">{AddrThree}</a></span> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/yb.html" target="_blank" rel="noopener noreferrer" >{AddrFour}</a></span> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/yshlw.html" target="_blank" rel="noopener noreferrer">{AddrFive}</a></span> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/znwj.html" target="_blank" rel="noopener noreferrer">{AddrSix}</a></span> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/yqzdh.html" target="_blank" rel="noopener noreferrer">{AddrSeven}</a></span> | {AddrEight} | <span className={styles.linkStyle}><a href="http://beian.miit.gov.cn" target="_blank" rel="noopener noreferrer"> <img src="//gw.alicdn.com/tfs/TB1jwakrbH1gK0jSZFwXXc7aXXa-20-20.png" alt="" /> {AddrIcp}</a></span></>
458   - }
  485 + {xlyFootLogo && <img alt="logo" src={xlyFootLogo} style={{ maxWidth: 20, maxHeight: 20 }} />}©{Copyright}{" "}
  486 + <span className={styles.linkStyle}>
  487 + <a href="http://www.xlyprint.com/" target="_blank" rel="noopener noreferrer">
  488 + {AddrOne}
  489 + </a>{" "}
  490 + </span>
  491 + {commonUtils.isNotEmptyArr(footer) ? (
  492 + <>
  493 + {footer.map(item => {
  494 + const { sIcon, sLink, sName } = item;
  495 + let sPart = "";
  496 + const sIconPart = sIcon ? <img src={sIcon} alt="" /> : "";
  497 + if (sLink) {
  498 + sPart = (
  499 + <>
  500 + {" "}
  501 + |{" "}
  502 + <span className={styles.linkStyle}>
  503 + <a href={sLink} target="_blank" rel="noopener noreferrer">
  504 + {" "}
  505 + {sIconPart} {sName}
  506 + </a>
  507 + </span>
  508 + </>
  509 + );
  510 + } else {
  511 + sPart = (
  512 + <>
  513 + {" "}
  514 + |{" "}
  515 + <span>
  516 + {sIconPart}
  517 + {sName}
  518 + </span>
  519 + </>
  520 + );
  521 + }
  522 + return sPart;
  523 + })}
  524 + </>
  525 + ) : (
  526 + <>
  527 + {" "}
  528 + |{" "}
  529 + <span className={styles.linkStyle}>
  530 + <a href="http://www.xlyprint.com/zngc.html" target="_blank" rel="noopener noreferrer">
  531 + {AddrTwo}
  532 + </a>{" "}
  533 + </span>{" "}
  534 + |{" "}
  535 + <span className={styles.linkStyle}>
  536 + <a href="http://www.xlyprint.com/znwl.html" target="_blank" rel="noopener noreferrer">
  537 + {AddrThree}
  538 + </a>
  539 + </span>{" "}
  540 + |{" "}
  541 + <span className={styles.linkStyle}>
  542 + <a href="http://www.xlyprint.com/yb.html" target="_blank" rel="noopener noreferrer">
  543 + {AddrFour}
  544 + </a>
  545 + </span>{" "}
  546 + |{" "}
  547 + <span className={styles.linkStyle}>
  548 + <a href="http://www.xlyprint.com/yshlw.html" target="_blank" rel="noopener noreferrer">
  549 + {AddrFive}
  550 + </a>
  551 + </span>{" "}
  552 + |{" "}
  553 + <span className={styles.linkStyle}>
  554 + <a href="http://www.xlyprint.com/znwj.html" target="_blank" rel="noopener noreferrer">
  555 + {AddrSix}
  556 + </a>
  557 + </span>{" "}
  558 + |{" "}
  559 + <span className={styles.linkStyle}>
  560 + <a href="http://www.xlyprint.com/yqzdh.html" target="_blank" rel="noopener noreferrer">
  561 + {AddrSeven}
  562 + </a>
  563 + </span>{" "}
  564 + | {AddrEight} |{" "}
  565 + <span className={styles.linkStyle}>
  566 + <a href="http://beian.miit.gov.cn" target="_blank" rel="noopener noreferrer">
  567 + {" "}
  568 + <img src="//gw.alicdn.com/tfs/TB1jwakrbH1gK0jSZFwXXc7aXXa-20-20.png" alt="" /> {AddrIcp}
  569 + </a>
  570 + </span>
  571 + </>
  572 + )}
459 573 {/* ©{Copyright} <span className={styles.linkStyle}><a href="http://beian.miit.gov.cn/" target="_blank" rel="noopener noreferrer">{AddrOne}</a> </span> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/zngc.html" target="_blank" rel="noopener noreferrer">{AddrTwo}</a> </span> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/znwl.html" target="_blank" rel="noopener noreferrer">{AddrThree}</a></span> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/yb.html" target="_blank" rel="noopener noreferrer" >{AddrFour}</a></span> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/yshlw.html" target="_blank" rel="noopener noreferrer">{AddrFive}</a></span> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/znwj.html" target="_blank" rel="noopener noreferrer">{AddrSix}</a></span> | <span className={styles.linkStyle}><a href="http://www.xlyprint.com/yqzdh.html" target="_blank" rel="noopener noreferrer">{AddrSeven}</a></span> | {AddrEight} | <span className={styles.linkStyle}><a href="http://beian.miit.gov.cn"> <img src="//gw.alicdn.com/tfs/TB1jwakrbH1gK0jSZFwXXc7aXXa-20-20.png" alt="" /> {AddrIcp}</a></span> */}
460 574 </div>
461 575 </div>
... ...