Commit 374c13ad authored by Maofei94's avatar Maofei94

merge: merge

parents a3bf4073 7213e1ef
...@@ -9,7 +9,7 @@ module.exports = options => ({ ...@@ -9,7 +9,7 @@ module.exports = options => ({
output: Object.assign( output: Object.assign(
{ {
path: path.resolve(process.cwd(), 'build'), path: path.resolve(process.cwd(), 'build'),
publicPath: process.env.PUBLIC_PATH || '/reactOMS', publicPath: process.env.PUBLIC_PATH || '/CivManage',
}, },
options.output, options.output,
), // Merge with env dependent settings ), // Merge with env dependent settings
......
...@@ -18,8 +18,8 @@ module.exports = require('./webpack.base.babel')({ ...@@ -18,8 +18,8 @@ module.exports = require('./webpack.base.babel')({
// Utilize long-term caching by adding content hashes (not compilation hashes) to compiled assets // Utilize long-term caching by adding content hashes (not compilation hashes) to compiled assets
output: { output: {
filename: 'static/[name].[chunkhash].js', filename: 'static/[name].[chunkhash:8].js',
chunkFilename: 'static/[name].[chunkhash].chunk.js', chunkFilename: 'static/[name].[chunkhash:8].chunk.js',
}, },
optimization: { optimization: {
......
import React, { useState, useEffect } from 'react'; import React, { useState, useEffect } from 'react';
import { Spin, Button, Empty } from 'antd'; import { Spin, Checkbox, Button, Empty } from 'antd';
import _ from 'lodash'; import _ from 'lodash';
import ListCardItem from './ItemCard'; import ListCardItem from './ItemCard';
import styles from './ItemCard.less'; import styles from './ItemCard.less';
...@@ -60,6 +60,32 @@ const ListCard = props => { ...@@ -60,6 +60,32 @@ const ListCard = props => {
// console.timeEnd('updateValueList:'); // console.timeEnd('updateValueList:');
}; };
const checkAll = e => {
if (e.target.checked) {
const result = dataList.map(item => getAllID(item)).flat(Infinity);
setValueList(result);
// eslint-disable-next-line no-unused-expressions
onChange && onChange(result);
} else {
setValueList([]);
// eslint-disable-next-line no-unused-expressions
onChange && onChange([]);
}
};
const getAllID = item => {
let result = [];
const haveChildren =
Array.isArray(item.children) && item.children.length > 0;
// 统一使用 getId
result.push(getId(item));
if (haveChildren) {
// 每次递归result被置空,所以要另外保存
result = [...item.children.map(i => getAllID(i)), ...result];
}
return result;
};
return ( return (
<div> <div>
{loading ? ( {loading ? (
...@@ -77,6 +103,7 @@ const ListCard = props => { ...@@ -77,6 +103,7 @@ const ListCard = props => {
/> />
) : ( ) : (
<> <>
<Checkbox onChange={checkAll}>全选/全不选</Checkbox>
{dataList && dataList.length > 0 ? ( {dataList && dataList.length > 0 ? (
dataList dataList
.filter(d => d.type === 'widgetGroup' || 'widget') .filter(d => d.type === 'widgetGroup' || 'widget')
......
...@@ -17,7 +17,21 @@ ...@@ -17,7 +17,21 @@
background-size: 75px 75px, 75px 75px, 15px 15px, 15px 15px; background-size: 75px 75px, 75px 75px, 15px 15px, 15px 15px;
} }
} }
.modal {
.ant-tabs-content{
height: 100%;
.ant-tabs-tabpane{
padding-left: 0 !important;
}
}
.ant-tabs-content-holder{
padding: 5px 0;
}
.ant-modal-body{
padding-top: 0;
padding-bottom: 0;
}
}
.wallBtn { .wallBtn {
position: absolute; position: absolute;
left: 140px; left: 140px;
...@@ -42,9 +56,15 @@ ...@@ -42,9 +56,15 @@
.imgBox { .imgBox {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
max-height: 520px; max-height: calc(100% - 40px);
overflow: auto; overflow: auto;
.ant-collapse-content-box{
display: flex;
flex-wrap: wrap;
}
.ant-collapse{
width: 100%;
}
.imgItem { .imgItem {
flex: 0 0 75px; flex: 0 0 75px;
position: relative; position: relative;
......
import React from 'react'; import React from 'react';
import { Upload, Modal, message, Tabs, Result, Input } from 'antd'; import { Upload, Modal, message, Tabs, Result, Input, Collapse } from 'antd';
import { PlusOutlined, CheckCircleFilled } from '@ant-design/icons'; import { PlusOutlined, CheckCircleFilled } from '@ant-design/icons';
import ImgCrop from 'antd-img-crop'; import ImgCrop from 'antd-img-crop';
import classnames from 'classnames'; import classnames from 'classnames';
...@@ -47,6 +47,7 @@ interface PicturesWallType { ...@@ -47,6 +47,7 @@ interface PicturesWallType {
value?: string | string[], value?: string | string[],
uploadContext: any, uploadContext: any,
search: string, search: string,
actives: any,
} }
class PicturesWall extends React.Component<PicturesWallType> { class PicturesWall extends React.Component<PicturesWallType> {
...@@ -59,6 +60,7 @@ class PicturesWall extends React.Component<PicturesWallType> { ...@@ -59,6 +60,7 @@ class PicturesWall extends React.Component<PicturesWallType> {
curSelectedImg: '', curSelectedImg: '',
prevProps:{}, prevProps:{},
search: '', search: '',
actives: {},
fileList: this.props.value ? Array.isArray(this.props.value) ? this.props.value.map((v) => ({ fileList: this.props.value ? Array.isArray(this.props.value) ? this.props.value.map((v) => ({
url: v, url: v,
uid: uuid(8, 16), uid: uuid(8, 16),
...@@ -100,9 +102,12 @@ class PicturesWall extends React.Component<PicturesWallType> { ...@@ -100,9 +102,12 @@ class PicturesWall extends React.Component<PicturesWallType> {
} }
} }
if(imgBed != state.prevProps.uploadContext?.imgBed){ if(imgBed != state.prevProps.uploadContext?.imgBed){
const activeKeys = {};
imgBed.forEach(item => activeKeys[item.moduleName] = item.child.map(c => c.moduleName));
return { return {
prevProps: props, prevProps: props,
imgBed imgBed,
actives: activeKeys,
} }
} }
return { return {
...@@ -234,6 +239,57 @@ class PicturesWall extends React.Component<PicturesWallType> { ...@@ -234,6 +239,57 @@ class PicturesWall extends React.Component<PicturesWallType> {
return match&&match[1]||'' return match&&match[1]||''
} }
renderImgItem(url){
const fileName = this.getFileName(url)
const {curSelectedImg, search} = this.state;
return (
<div
className={classnames({
[styles.imgItem]:true,
[styles.hide]: !fileName.includes(search)
})}
key={url}
onClick={() => this.handleImgSelected(url)}>
<div
className={classnames(
curSelectedImg === url ? styles.seleted : '',
)}
>
<img
className={classnames({
[styles.svgGray]: /\.svg$/.test(url)
})}
src={this.getImageUrl(url)}
title={url}
alt="熊猫运维中台系统" />
<span className={styles.iconBtn}>
<CheckCircleFilled />
</span>
</div>
<span>{fileName}</span>
</div>
);
}
renderCollapse(module){
const { Panel } = Collapse;
const items = module.fileUrls.map(url =>this.renderImgItem(url))
return items.length>0&&<Panel
forceRender
header={module.moduleName}
key={module.moduleName}>
{items}
</Panel>
}
handleCollapseChange(v, moduleName){
const activeKeys = {...this.state.actives}
activeKeys[moduleName] = v;
this.setState({
actives: activeKeys
})
}
render() { render() {
const { const {
previewVisible, previewVisible,
...@@ -242,6 +298,7 @@ class PicturesWall extends React.Component<PicturesWallType> { ...@@ -242,6 +298,7 @@ class PicturesWall extends React.Component<PicturesWallType> {
previewTitle, previewTitle,
wallModalVisible, wallModalVisible,
imgBed, imgBed,
actives,
curSelectedImg, curSelectedImg,
} = this.state; } = this.state;
const { const {
...@@ -328,11 +385,12 @@ class PicturesWall extends React.Component<PicturesWallType> { ...@@ -328,11 +385,12 @@ class PicturesWall extends React.Component<PicturesWallType> {
width={860} width={860}
onCancel={this.handleModalCancel} onCancel={this.handleModalCancel}
onOk={this.handleModalOk} onOk={this.handleModalOk}
className={styles.modal}
> >
<Tabs defaultActiveKey={imgBed[0]?.moduleName} tabPosition="left" style={{ height: 520 }}> <Tabs defaultActiveKey={imgBed[0]?.moduleName} tabPosition="left" style={{ height: 520 }}>
{imgBed.map((item, i) => { {imgBed.map((item, i) => {
return ( return (
<TabPane tab={tabNames[item.moduleName]} key={item.moduleName}> <TabPane tab={tabNames[item.moduleName]||item.moduleName} key={item.moduleName}>
<Input <Input
placeholder="搜索图库" placeholder="搜索图库"
className={styles.search} className={styles.search}
...@@ -341,30 +399,12 @@ class PicturesWall extends React.Component<PicturesWallType> { ...@@ -341,30 +399,12 @@ class PicturesWall extends React.Component<PicturesWallType> {
onChange={e => this.setState({search: e.target.value})} onChange={e => this.setState({search: e.target.value})}
allowClear/> allowClear/>
<div className={styles.imgBox}> <div className={styles.imgBox}>
{item.child?.map(m => m.fileUrls).flat(Infinity).map((item: string, i: number) => { <Collapse
const fileName = this.getFileName(item) bordered
return ( activeKey={actives[item.moduleName]}
<div onChange={(v) => this.handleCollapseChange(v, item.moduleName)}>
className={classnames({ {item.child?.map(child => this.renderCollapse(child))}
[styles.imgItem]:true, </Collapse>
[styles.hide]: !fileName.includes(this.state.search)
})}
key={i}
onClick={() => this.handleImgSelected(item)}>
<div
className={classnames(
curSelectedImg === item ? styles.seleted : '',
)}
>
<img className={classnames({[styles.svgGray]: /\.svg$/.test(item)})} src={this.getImageUrl(item)} title={item} alt="熊猫运维中台系统" />
<span className={styles.iconBtn}>
<CheckCircleFilled />
</span>
</div>
<span>{fileName}</span>
</div>
);
})}
</div> </div>
</TabPane> </TabPane>
); );
......
...@@ -59,10 +59,13 @@ const Login = props => { ...@@ -59,10 +59,13 @@ const Login = props => {
} }
} }
if (userMode === USER_MODE.COMMON) { if (userMode === USER_MODE.COMMON) {
const authority = [AUTHORITY.LOGIN, AUTHORITY.COMMON]; // const authority = [AUTHORITY.LOGIN, AUTHORITY.COMMON];
setAuthority(authority); // setAuthority(authority);
setAuth(authority); // setAuth(authority);
history.push(`/userCenter/UserManage`); // history.push(`/userCenter/UserManage`);
notification.warning({
message: msg || '没有权限!',
});
} }
} else { } else {
notification.warning({ notification.warning({
......
...@@ -496,7 +496,7 @@ const UserManage = () => { ...@@ -496,7 +496,7 @@ const UserManage = () => {
const changePassword = record => { const changePassword = record => {
setPasswordVisible(true); setPasswordVisible(true);
passwordForm.setFieldsValue({ passwordForm.setFieldsValue({
oldpassword: record.password, oldPassword: record.password,
newPassword: '', newPassword: '',
passwordConfirm: '', passwordConfirm: '',
}); });
...@@ -867,7 +867,7 @@ const UserManage = () => { ...@@ -867,7 +867,7 @@ const UserManage = () => {
}); });
// 提交-修改密码 // 提交-修改密码
const submitChangePassword = () => { const submitChangePassword = () => {
const password = passwordForm.getFieldValue('password'); const oldPassword = passwordForm.getFieldValue('oldPassword');
const newPassword = passwordForm.getFieldValue('newPassword'); const newPassword = passwordForm.getFieldValue('newPassword');
const passwordConfirm = passwordForm.getFieldValue('passwordConfirm'); const passwordConfirm = passwordForm.getFieldValue('passwordConfirm');
if ( if (
...@@ -877,14 +877,13 @@ const UserManage = () => { ...@@ -877,14 +877,13 @@ const UserManage = () => {
newPassword.length >= 6 && newPassword.length >= 6 &&
newPassword === passwordConfirm newPassword === passwordConfirm
) { ) {
updateUserPassword( updateUserPassword({
currentUser.userID, UserId: +currentUser.userID,
password, OldPassWord: oldPassword,
newPassword, NewPassWord: newPassword,
passwordConfirm, })
)
.then(res => { .then(res => {
if (res.success) { if (res.code === 0) {
setPasswordVisible(false); setPasswordVisible(false);
notification.success({ notification.success({
message: '提交成功', message: '提交成功',
...@@ -1404,7 +1403,7 @@ const UserManage = () => { ...@@ -1404,7 +1403,7 @@ const UserManage = () => {
cancelText="取消" cancelText="取消"
> >
<Form form={passwordForm} labelCol={{ span: 4 }}> <Form form={passwordForm} labelCol={{ span: 4 }}>
<Form.Item name="oldpassword" label="原始密码"> <Form.Item name="oldPassword" label="原始密码">
<Input disabled /> <Input disabled />
</Form.Item> </Form.Item>
<Form.Item <Form.Item
......
...@@ -185,6 +185,7 @@ ...@@ -185,6 +185,7 @@
.ant-tree-switcher{ .ant-tree-switcher{
line-height: 1; line-height: 1;
color:#1890FF; color:#1890FF;
margin-right: 0px !important;
} }
.ant-checkbox-group .ant-checkbox-group-item { .ant-checkbox-group .ant-checkbox-group-item {
margin-right: 0px !important; margin-right: 0px !important;
......
...@@ -110,20 +110,8 @@ export const addToOrgs = (userIDs, orgIDs, newOrgID) => ...@@ -110,20 +110,8 @@ export const addToOrgs = (userIDs, orgIDs, newOrgID) =>
newGroupId: newOrgID, newGroupId: newOrgID,
}); });
export const updateUserPassword = ( export const updateUserPassword = params =>
userID, post(`${PUBLISH_SERVICE}/UserCenter/UpdateUserPassword`, params);
oldpassword,
newPassword,
passwordConfirm,
) =>
get(`${CITY_SERVICE}/OMS.svc/U_UpdatePassword`, {
_version: 9999,
_dc: Date.now(),
userID,
oldpassword,
newPassword,
passwordConfirm,
});
export const editUser = (userID, loginName, userName, phone, email) => export const editUser = (userID, loginName, userName, phone, email) =>
get(`${CITY_SERVICE}/OMS.svc/U_EditUser`, { get(`${CITY_SERVICE}/OMS.svc/U_EditUser`, {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment