Commit 95c86962 by 潘本斌

1

parent 58e6835e
......@@ -18,7 +18,7 @@ console.log(process.env.NODE_ENV,'============')
var rootPath = path.resolve(__dirname, "..");
module.exports = _.merge(config, {
optimization: {
minimize: true,
minimize: false,
runtimeChunk: {
name: entrypoint => `runtime~${entrypoint.name}`
},
......
File added
.bread {
position : fixed;
top : 64px;
right : 0;
width : calc(100% - 200px);
top : 72px;
right: 15px;
width: calc(100% - 230px);
z-index : 29;
transition : width 0.2s;
height : 60px;
background-color: rgb(255, 255, 255);
box-shadow:0px 1px 4px 0px rgba(0,21,41,0.12);
// box-shadow:0px 1px 4px 0px rgba(0,21,41,0.12);
}
.collapsed {
position : fixed;
top : 64px;
right : 0;
top : 72px;
right : 15px;
width : calc(100% - 200px);
z-index : 29;
transition : width 0.2s;
height : 60px;
background-color: rgb(255, 255, 255);
width : ~"calc(100% - 80px)";
box-shadow:0px 1px 4px 0px rgba(0,21,41,0.12);
width : ~"calc(100% - 110px)";
// box-shadow:0px 1px 4px 0px rgba(0,21,41,0.12);
}
\ No newline at end of file
/**
* 更多文档:https://www.yuque.com/braft-editor/be/
*
*
* */
*
*
* */
import React, { PureComponent } from "react";
import BraftEditor from "braft-editor";
......@@ -11,7 +10,7 @@ import "braft-editor/dist/index.css";
import styles from "./editor.less";
import { connect } from "react-redux";
import { gupfetch } from "../UpLoad/redux/actions";
import services from "@/services/serve";
class Editor extends PureComponent {
constructor() {
super(...arguments);
......@@ -274,22 +273,24 @@ class Editor extends PureComponent {
const fileName = `${param.id + time}.${
param.file.name.split(".")[param.file.name.split(".").length - 1]
}`;
fd.append("name", param.file.name);
fd.append("Filename", `${uploadParam.dir}/${fileName}`);
fd.append("key", `${uploadParam.dir}/${fileName}`);
fd.append("policy", uploadParam.policy);
fd.append("OSSAccessKeyId", uploadParam.accessid);
fd.append("success_action_status", "200");
fd.append("signature", uploadParam.signature);
// fd.append("name", param.file.name);
// fd.append("Filename", `${uploadParam.dir}/${fileName}`);
// fd.append("key", `${uploadParam.dir}/${fileName}`);
// fd.append("policy", uploadParam.policy);
// fd.append("OSSAccessKeyId", uploadParam.accessid);
// fd.append("success_action_status", "200");
// fd.append("signature", uploadParam.signature);
fd.append("file", param.file);
xhr.open("POST", serverURL, true);
xhr.open("POST", services.uploadApi, true);
xhr.setRequestHeader("Authorization", sessionStorage.getItem("mgtk"));
xhr.send(fd);
const successFn = response => {
var responses = JSON.parse(xhr.responseText);
// 假设服务端直接返回文件上传后的地址
// 上传成功后调用param.success并传入上传后的文件地址
param.success({
url: `${uploadParam.host}/${uploadParam.dir}/${fileName}`,
url: responses.data,
meta: {
id: "1",
title: "1",
......
......@@ -72,7 +72,7 @@ class Header extends PureComponent {
id="layoutHeader"
>
<div>
{collapsed && (
{/* {collapsed && (
<div
className={styles.button}
onClick={onCollapseChange.bind(this, !collapsed)}
......@@ -84,14 +84,14 @@ class Header extends PureComponent {
})}
/>
</div>
)}
<div className={styles.logo}>
)} */}
{/* <div className={styles.logo}>
<img
className={styles.image}
// src={nav.logo ? nav.logo : headerLogo}
src={headerLogo}
/>
</div>
</div> */}
</div>
<div className={styles.rightContainer}>
{/* bug-11961-cwj暂时注释 2期上 */}
......@@ -107,7 +107,7 @@ class Header extends PureComponent {
<div className={styles.assText}>社群平台</div>
</a>
)} */}
<Tooltip title={"使用帮助"}>
{/* <Tooltip title={"使用帮助"}>
<a
target="_blank"
href="http://help.fairyclass.cn/hc/"
......@@ -116,7 +116,7 @@ class Header extends PureComponent {
>
<Icon type="question-circle-o" />
</a>
</Tooltip>
</Tooltip> */}
<Tooltip title={"站点切换"}>
<Dropdown
overlay={siteMenu}
......
import React, { PureComponent, Fragment } from "react";
import { Menu, Icon } from "antd";
import IconFont from "@/common/IconFont";
import { set as setGlobalData, get as getGlobalData } from "@/util/globalData.js";
import {
set as setGlobalData,
get as getGlobalData,
} from "@/util/globalData.js";
import { Link, withRouter } from "react-router-dom";
import styles from "./Sider.less";
import { arrayToTree, queryAncestors, pathMatchRegexp } from "@/util/index";
......@@ -54,7 +57,15 @@ class SiderMenu extends PureComponent {
<Fragment>
{item.icon && (
// <IconFont className={item.id==currentMenuId&&this.props.collapsed?styles.activeIconFont:""} key={item.id} type={item.id==currentMenuId ? item.activeIcon : item.icon} />
<IconFont className={item.id == currentMenuId && this.props.collapsed ? styles.activeIconFont : ""} key={item.id} type={item.icon} />
<IconFont
className={
item.id == currentMenuId && this.props.collapsed
? styles.activeIconFont
: ""
}
key={item.id}
type={item.icon}
/>
)}
<span>{item.name}</span>
</Fragment>
......@@ -64,31 +75,48 @@ class SiderMenu extends PureComponent {
</SubMenu>
);
}
return (
item.menuType == 2 ? <Menu.ItemGroup title={item.name} key={item.id}></Menu.ItemGroup> :
<Menu.Item key={item.id}>
{item.url &&
<Link
to={`${match.url}${item.url.trim()}`}// bug-12622-cwj
onClick={() => {
setGlobalData("breadName", item.name);
setGlobalData("currentMenuId", item.id[0] - 0);
}}
>
<span className='title'>{item.name}</span>
<span style={{ float: "right" }}>{item.total}</span>
{/* <span>{item.total}</span> */}
</Link>
}
{!item.url &&
<div
>
<IconFont className={item.id == currentMenuId && this.props.collapsed ? styles.activeIconFont : ""} key={item.id} type={item.icon} />
<span className='title'>{item.name}</span>
<span style={{ float: "right" }}>{item.total}</span>
</div>
}
</Menu.Item>
return item.menuType == 2 ? (
<Menu.ItemGroup title={item.name} key={item.id}></Menu.ItemGroup>
) : (
<Menu.Item key={item.id}>
{item.url && (
<Link
to={`${match.url}${item.url.trim()}`} // bug-12622-cwj
onClick={() => {
setGlobalData("breadName", item.name);
setGlobalData("currentMenuId", item.id[0] - 0);
}}
>
{item.icon && (
<IconFont
className={
item.id == currentMenuId ? styles.activeIconFont : ""
}
key={item.id}
type={item.icon}
/>
)}
<span className="title">{item.name}</span>
<span style={{ float: "right" }}>{item.total}</span>
{/* <span>{item.total}</span> */}
</Link>
)}
{!item.url && (
<div>
<IconFont
className={
item.id == currentMenuId && this.props.collapsed
? styles.activeIconFont
: ""
}
key={item.id}
type={item.icon}
/>
<span className="title">{item.name}</span>
<span style={{ float: "right" }}>{item.total}</span>
</div>
)}
</Menu.Item>
);
});
};
......@@ -96,7 +124,7 @@ class SiderMenu extends PureComponent {
render() {
const { collapsed, theme, menus, match } = this.props;
// Generating tree-structured data for menu content.
let nwesmenus = menus.filter(item => item.name !== '社群');
let nwesmenus = menus.filter(item => item.name !== "社群");
const menuTree = arrayToTree(nwesmenus, "id", "menuParentId");
// Find a menu that matches the pathname.
......@@ -115,7 +143,6 @@ class SiderMenu extends PureComponent {
: [];
const menuProps = collapsed ? {} : { openKeys: this.state.openKeys };
return (
<Menu
mode="inline"
......@@ -125,7 +152,6 @@ class SiderMenu extends PureComponent {
defaultOpenKeys={this.state.openKeys}
defaultSelectedKeys={selectedKeys}
{...menuProps}
>
{this.generateMenus(menuTree, selectedKeys)}
</Menu>
......
......@@ -5,7 +5,7 @@
:global {
.ant-menu-vertical.ant-menu-sub {
background-image: linear-gradient(to bottom, #404C5B, #2E3945);
// background-image: linear-gradient(to bottom, #404C5B, #2E3945);
overflow-x: scroll;
max-height: 100vh;
.ant-menu-item-active,
......@@ -17,7 +17,7 @@
.ant-menu-item-selected {
opacity : 0.85;
background : rgba(255, 255, 255, 1);
background : #D23A29;
border-radius: 4px;
margin-left : 8px;
text-indent: -8px;
......@@ -25,7 +25,7 @@
.title {
font-weight: 400;
color : rgba(0, 0, 0, 1);
color : white;
}
}
......@@ -37,12 +37,16 @@
.ant-menu-submenu-selected {
opacity : 0.85;
background : rgba(255, 255, 255, 1);
background : #D23A29;
border-radius: 4px;
margin-left : 8px;
text-indent: -8px;
width : ~"calc(100% - 16px)";
color : rgba(0, 0, 0, 1);
.title {
font-weight: 400;
color : white;
}
.ant-menu-submenu-title {
&:hover {
......@@ -94,8 +98,9 @@
.sider {
box-shadow : fade(@primary-color, 10%) 0 0 28px 0;
z-index : 10;
background-image: linear-gradient(to bottom, #404C5B, #2E3945);
z-index : 30;
background: #282733;
// background-image: linear-gradient(to bottom, #404C5B, #2E3945);
:global {
.ant-layout-sider-children {
display : flex;
......@@ -117,6 +122,10 @@
width : 100%;
.extCni{
cursor: pointer;
& img{
width: 120px;
height: 40px;
}
&:hover{
.icon,.logoText{
color: #fff;
......@@ -130,27 +139,7 @@
margin-left: 5px;
}
.button {
margin-left: 20px;
float : left;
text-align : center;
font-size : 24px;
cursor : pointer;
transition : @transition-ease-in;
&:hover{
.icon {
color: #fff;
}
}
.menuFold {
color : rgba(255, 255, 255, .65);
&:hover{
color: #fff;
}
}
}
.icon {
font-size: 20px;
......@@ -158,6 +147,7 @@
}
}
.logoOne {
display : flex;
align-items : center;
......@@ -181,6 +171,12 @@
color: red;
}
}
.icon1{
background: url('./img/3.png') no-repeat;
background-size: 100% 100%;
width: 32px ;
height: 32px;
}
.logo {
width: 100%;
......@@ -208,6 +204,53 @@
}
}
}
.button {
background: url('./img/2.png') no-repeat;
background-size: 100% 100%;
z-index: 31;
margin-left: 20px;
float : left;
text-align : center;
cursor : pointer;
transition : @transition-ease-in;
width: 32px;
height: 32px;
position: absolute;
right: -16px;
top:16px;
border-radius: 16px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
&:hover{
.icon {
color: #fff;
}
}
}
.button1 {
background: url('./img/2.png') no-repeat;
background-size: 100% 100%;
z-index: 31;
transform: rotate(180deg);
margin-left: 20px;
float : left;
text-align : center;
cursor : pointer;
transition : @transition-ease-in;
width: 32px;
height: 32px;
position: absolute;
border-radius: 16px;
box-shadow: -3px -2px 5px rgba(0, 0, 0, 0.5);
right: -16px;
top:16px;
&:hover{
.icon {
color: #fff;
}
}
}
.menuContainer {
height : ~"calc(100vh - 120px)";
......@@ -257,7 +300,7 @@
.ant-menu-item-selected {
opacity : 0.85;
background : rgba(255, 255, 255, 1);
background :#D23A29;
border-radius: 4px;
margin-left : 8px;
text-indent: -8px;
......@@ -265,7 +308,7 @@
.title {
font-weight: 400;
color : rgba(0, 0, 0, 1);
color : white;
}
}
}
......
......@@ -5,6 +5,8 @@ import SiderMenu from "./Menu";
import styles from "./Sider.less";
import IconFont from "@/common/IconFont";
import classnames from "classnames";
import img1 from "./img/1.png";
import img2 from "./img/2.png";
class Sider extends PureComponent {
render() {
......@@ -29,38 +31,46 @@ class Sider extends PureComponent {
collapsible
collapsed={collapsed}
className={styles.sider}
>
<div className={styles.brand}>
<div className={styles.logo}>
{collapsed ? (
<div className={styles.logoOne} >
<div className={styles.logoOne}>
<a onClick={onDashboardClick}>
<div className={styles.icon}><IconFont type='icon-dashboard1' /></div>
<div className={styles.icon}>
<div className={styles.icon1} />
</div>
</a>
</div>
) : (
<div className={styles.logoAll}>
<span className={styles.extCni} onClick={onDashboardClick} style={{display:"flex"}}>
<div className={styles.icon}><IconFont type='icon-dashboard1' /></div>
<div className={styles.logoText}>Dashboard</div>
<span
className={styles.extCni}
onClick={onDashboardClick}
style={{ display: "block", margin: "0 auto" }}
>
<img src={img1} alt="" />
{/* <div className={styles.icon}>
<IconFont type="icon-dashboard1" />
</div>
<div className={styles.logoText}>Dashboard</div> */}
</span>
<div
className={styles.button}
onClick={onCollapseChange.bind(this, !collapsed)}
>
<Icon
className={styles.menuFold}
type={classnames({
"menu-unfold": collapsed,
"menu-fold": !collapsed,
})}
/>
</div>
</div>
)}
</div>
</div>
<div
className={collapsed ? styles.button1 : styles.button}
onClick={onCollapseChange.bind(this, !collapsed)}
>
{/* <Icon
className={styles.menuFold}
type={classnames({
"menu-unfold": collapsed,
"menu-fold": !collapsed,
})}
/> */}
</div>
<div className={styles.menuContainer} id={"styles_sider"}>
<ScrollBar
......
......@@ -4,6 +4,7 @@ import { Upload, Icon, Form, Button, message, Progress } from "antd";
//上传阿里云action
import { gupList, gupfetch } from "./redux/actions";
import "./index.less";
import services from "@/services/serve";
// form Item
const FormItem = Form.Item;
class UploadUtil extends Component {
......@@ -16,13 +17,13 @@ class UploadUtil extends Component {
originalFileUrl: "",
fileList: [],
key: "",
processNum: 0 //进度条--liyuan
processNum: 0, //进度条--liyuan
};
}
//修改一
componentDidMount() {
//上传阿里云
this.props.gupfetch();
// this.props.gupfetch();
}
beforeUpload = (file, fileList) => {
......@@ -35,8 +36,8 @@ class UploadUtil extends Component {
// message.info("文件名不能使用特殊字符");
// return false;
// }
if (file.size > 3 * 1024 * 1024) {
message.info("请上传小于3M的图片");
if (file.size > 10 * 1024 * 1024) {
message.info("请上传小于10M的图片");
return false;
}
} else {
......@@ -60,8 +61,8 @@ class UploadUtil extends Component {
//判断类型 学习营销名片只用上传图片`
let reg = ""; //正则匹配格式
this.props.extra === "markeCardExtra"
? (reg = /(png|jpg|gif|jpeg)$/g)
: (reg = /(mp4|png|jpg|gif|mp3|pdf|jpeg)$/g);
? (reg = /(png|jpg|gif|jpeg|doc|docx|pdf|PDF|wps)$/g)
: (reg = /(mp4|png|jpg|gif|mp3|pdf|jpeg|doc|docx|pdf|PDF|wps)$/g);
if (!reg.test(file.name)) {
message.error("文件类型不对");
return false;
......@@ -71,26 +72,10 @@ class UploadUtil extends Component {
const fileLength = file.name.split(".").length;
this.setState(
{
uploadParams: {
Filename:
param.dir + "/" + time + "." + file.name.split(".")[fileLength - 1],
key:
param.dir + "/" + time + "." + file.name.split(".")[fileLength - 1],
policy: param.policy,
OSSAccessKeyId: param.accessid,
success_action_status: "200",
signature: param.signature,
},
uploadAction: param.host,
uploadParams: {},
uploadAction: `${services.uploadApi}`,
originalFile: file.name,
originalFileUrl:
param.host +
"/" +
param.dir +
"/" +
time +
"." +
file.name.split(".")[fileLength - 1],
originalFileUrl: "",
},
() => {
// 修改bug 6378 【UAT】【管理端】-名片配置-上传新图片修改时-名片预览未显示
......@@ -109,16 +94,17 @@ class UploadUtil extends Component {
// this.setState({fileList});
// }
//6378 【UAT】【管理端】-名片配置-上传新图片修改时-名片预览未显示
this.setState({ //进度条--liyuan
processNum: info.file.percent ? info.file.percent : 0
})
this.setState({
//进度条--liyuan
processNum: info.file.percent ? info.file.percent : 0,
});
if (fileList[0] && fileList[0].status === "done") {
if (this.props.getUrl) {
this.props.getUrl(this.state.originalFileUrl, this.state.originalFile);
this.props.getUrl(fileList[0].response.data, this.state.originalFile);
}
console.log("检测打印变量=fileList ", fileList);
this.setState({ fileList });
message.success("上传成功");//进度条--liyuan
message.success("上传成功"); //进度条--liyuan
}
//6378 【UAT】【管理端】-名片配置-上传新图片修改时-名片预览未显示
if (fileList[0] && fileList[0].status === "error") {
......@@ -153,8 +139,8 @@ class UploadUtil extends Component {
<FormItem
extra={
this.props.extra === "markeCardExtra"
? "请上传资源附件(附件格式:png、jpg、jpeg、gif)"
: "请上传资源附件(附件格式:mp4、png、jpg、jpeg、gif、mp3)"
? "请上传资源附件(附件格式:png、jpg、jpeg、gif、word、pdf)"
: "请上传资源附件(附件格式:mp4、png、jpg、jpeg、gif、mp3、word、pdf)"
}
>
{getFieldDecorator("upload", {
......@@ -164,10 +150,10 @@ class UploadUtil extends Component {
})(
<Upload
style={{ display: "inline-block" }}
headers={{ "X-Requested-With": null }}
beforeUpload={this.beforeUpload}
action={uploadAction}
data={uploadParams}
headers={{ authorization: sessionStorage.getItem("mgtk") }}
// data={uploadParams}
onChange={this.handleChange}
onRemove={this.fnRemove}
>
......@@ -179,9 +165,16 @@ class UploadUtil extends Component {
</Button>
</Upload>
)}
{(this.state.processNum != 0 && this.state.processNum != 100) && <p>
<Progress percent={this.state.processNum} strokeWidth={5} showInfo={false}/>
</p>}{/*//进度条--liyuan*/}
{this.state.processNum != 0 && this.state.processNum != 100 && (
<p>
<Progress
percent={this.state.processNum}
strokeWidth={5}
showInfo={false}
/>
</p>
)}
{/*//进度条--liyuan*/}
</FormItem>
</Form>
);
......
......@@ -5,15 +5,25 @@
* react-cropper:更多选项参数look官方地址:http://roadmanfong.github.io/react-cropper
*
*/
import React, { Component,createRef } from "react";
import { Row, Icon, Button, Upload, Modal, Divider, Radio,message } from "antd";
import React, { Component, createRef } from "react";
import {
Row,
Icon,
Button,
Upload,
Modal,
Divider,
Radio,
message,
} from "antd";
import Cropper from "react-cropper";
import "./cropper.css"; //必须引入该css文件!
import { connect } from "react-redux";
import { gupfetch } from "@/common/UpLoad/redux/actions";
import axios from "axios";
import request from "@/util/request.js";
import services from "@/services/serve";
function mapStateToProps(state) {
return {
......@@ -28,15 +38,16 @@ function mapDispatchToProps(dispatch) {
}
//将base64转换为文件
function dataURLtoFile(dataurl, filename) {
var arr = dataurl.split(","),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
const arr = dataurl.split(",");
const mime = arr[0].match(/:(.*?);/)[1];
const suffix = mime.split("/")[1];
const bstr = atob(arr[1]);
let n = bstr.length;
const u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: mime });
return new File([u8arr], `${filename}.${suffix}`, { type: mime });
}
class UploadImageCover extends Component {
......@@ -72,14 +83,14 @@ class UploadImageCover extends Component {
this.props.gupfetch();
this.cancelUploadImage = this.cancelUploadImage.bind(this);
this.cropperRef = createRef();
}
// Upload上传之前函数
beforeUpload = file => {
if(file.size > 2*1024*1024){ //bug-13496-liyuan
message.error("该图片超过大小,不支持上传");//bug 15215
if (file.size > 20 * 1024 * 1024) {
//bug-13496-liyuan
message.error("该图片超过大小,不支持上传"); //bug 15215
return false;
}
if (this.props.disabled) {
......@@ -92,7 +103,7 @@ class UploadImageCover extends Component {
// message.error("该图片文件格式不支持(支持jpg、ipeg、png)");
message.error("该图片文件格式不支持(支持jpg、jpeg、png)"); //bug-12706-liyuan
return false;
}//bug-12150-cwj end
} //bug-12150-cwj end
var imgefile = window.URL
? window.URL.createObjectURL(file)
: window.webkitURL.createObjectURL(file);
......@@ -111,68 +122,91 @@ class UploadImageCover extends Component {
//点击保存的函数,需要在这里进行压缩
saveImg = () => {
// 读取阿里云秘钥
const { param } = this.props;
if (param !== null) {
let formData = new FormData();
let randomNumber = Math.floor(Math.random() * 999999)
.toString()
.padStart(6, "0");
var file = dataURLtoFile(
this.state.imgbase.replace(" ", "").replace("\n", ""),
randomNumber
);
formData.append("file", file);
request({
url: `POST ${services.uploadsApi}`,
data: formData,
}).then(res => {
this.setState(
{
uploadParams: {
Filename:
param.dir +
"/" +
this.state.uid +
"." +
this.state.selectImgName.split(".")[1],
key:
param.dir +
"/" +
this.state.uid +
"." +
this.state.selectImgName.split(".")[1],
policy: param.policy,
OSSAccessKeyId: param.accessid,
success_action_status: "200",
signature: param.signature,
},
uploadAction: param.host,
hostAndDir: param.host + "/" + param.dir,
editImageModalVisible: false,
},
() => {
let formData = new FormData();
for (let i in this.state.uploadParams) {
formData.append(i, this.state.uploadParams[i]);
}
var file = dataURLtoFile(this.state.imgbase, "2019009999999999");
formData.append("file", file);
const instance = axios.create({
withCredentials: false,
});
instance
.post(this.state.uploadAction, formData)
.then(res => {
console.log("ok", res);
if (res.status === 200) {
this.setState(
{
imgDoneSrc:
this.state.uploadAction +
"/" +
this.state.uploadParams.Filename,
editImageModalVisible: false,
},
() => {
this.props.getImgUrl(this.state.imgDoneSrc);
}
);
}
})
.catch(function(error) {
console.log("err", error.message);
});
this.props.getImgUrl(res.data);
}
);
}
});
// 读取阿里云秘钥
// const { param } = this.props;
// if (param !== null) {
// this.setState(
// {
// uploadParams: {
// Filename:
// param.dir +
// "/" +
// this.state.uid +
// "." +
// this.state.selectImgName.split(".")[1],
// key:
// param.dir +
// "/" +
// this.state.uid +
// "." +
// this.state.selectImgName.split(".")[1],
// policy: param.policy,
// OSSAccessKeyId: param.accessid,
// success_action_status: "200",
// signature: param.signature,
// },
// uploadAction: param.host,
// hostAndDir: param.host + "/" + param.dir,
// },
// () => {
// let formData = new FormData();
// for (let i in this.state.uploadParams) {
// formData.append(i, this.state.uploadParams[i]);
// }
// var file = dataURLtoFile(this.state.imgbase, "2019009999999999");
// formData.append("file", file);
// const instance = axios.create({
// withCredentials: false,
// });
// instance
// .post(this.state.uploadAction, formData)
// .then(res => {
// console.log("ok", res);
// if (res.status === 200) {
// this.setState(
// {
// imgDoneSrc:
// this.state.uploadAction +
// "/" +
// this.state.uploadParams.Filename,
// editImageModalVisible: false,
// },
// () => {
// this.props.getImgUrl(this.state.imgDoneSrc);
// }
// );
// }
// })
// .catch(function(error) {
// console.log("err", error.message);
// });
// }
// );
// }
};
crop = e => {
// console.log(e);
......@@ -225,7 +259,6 @@ class UploadImageCover extends Component {
render() {
let { imgbase, editImageModalVisible, srcCropper } = this.state;
const uploadButton = (
<div>
<Icon type="plus" />
......@@ -243,10 +276,10 @@ class UploadImageCover extends Component {
showUploadList={false} //不以默认的列表显示
listType="picture-card" //上传列表的内建样式,支持三种基本样式 text, picture 和 picture-card
>
{imgbase||this.props.details ? (//bug-12535-cwj
{imgbase || this.props.details ? ( //bug-12535-cwj
<img
className="common-upload-img-display"
src={imgbase||this.props.details}//bug-12535-cwj
src={imgbase || this.props.details} //bug-12535-cwj
alt="avatar"
style={{ width: "100%" }}
/>
......@@ -313,7 +346,7 @@ class UploadImageCover extends Component {
</div>
<Cropper
src={srcCropper} //图片路径,即是base64的值,在Upload上传的时候获取到的
ref={(ref)=>this.cropperRef = ref}
ref={ref => (this.cropperRef = ref)}
key={this.state.myRatio}
style={{ height: 400, width: "100%" }}
aspectRatio={
......
......@@ -534,7 +534,7 @@
"inputCaseTopicTip": "Please enter case subject!",
"caseCover": "Cover",
"uploadCaseCoverTip": "Please upload the cover!",
"caseCoverRequire": "Click '+' to add a photo. Size: 1125*675, with in 500k. jpg, png, and jpeg allowed",
"caseCoverRequire": "Click '+' to add a photo. Size: 1125*900, with in 500k. jpg, png, and jpeg allowed",
"caseContent": "Content",
"caseContentTip": "Please upload the content!",
"attachment": "Attachment",
......
......@@ -521,7 +521,7 @@
"inputCaseTopicTip": "请输入作品主题!",
"caseCover": "作品封面",
"uploadCaseCoverTip": "请上传作品封面!",
"caseCoverRequire": "点击“+”添加图片,图片最佳尺寸:1125*675,支持jpg、png、jpeg,大小500K以内",
"caseCoverRequire": "点击“+”添加图片,图片最佳尺寸:1125*900,支持jpg、png、jpeg,大小500K以内",
"caseContent": "作品内容",
"caseContentTip": "请上传作品内容!",
"attachment": "附件",
......@@ -1702,7 +1702,7 @@
"caseadmin108": "作品主题",
"caseadmin109": "请输入作品主题!",
"caseadmin110": "作品内容",
"caseadmin111": "添加图片,图片最佳尺寸:1125*675,支持jpg、png、jpeg,",
"caseadmin111": "添加图片,图片最佳尺寸:1125*900,支持jpg、png、jpeg,",
"caseadmin112": "添加图片、视频、音频、文档及压缩包,每个文件最大为50M,每次最多上传9个文件",
"caseadmin113": "提交审核",
"caseadmin114": "作品提醒",
......@@ -2505,7 +2505,7 @@
"Statisitic31": "复制调研",
"Statisitic32": "选择调研",
"Statisitic33": "调研logo",
"Statisitic34": "图片最佳尺寸:1125*675,比例为5:3,支持jpg、png、jpeg",
"Statisitic34": "图片最佳尺寸:1125*900,比例为5:4,支持jpg、png、jpeg",
"Statisitic35": "调研说明",
"Statisitic36": "调研备注",
"Statisitic37": "问题内容",
......@@ -2730,7 +2730,7 @@
"SystemActive1": "图片上传中",
"SystemActive2": "上架时间",
"SystemActive3": "请上传小于500k的图片",
"SystemActive4": "请上传资源附件(支持格式jpeg、jpg、png,大小500k以内,建议尺寸:1125*675",
"SystemActive4": "请上传资源附件(支持格式jpeg、jpg、png,大小500k以内,建议尺寸:1125*900",
"SystemActive5": "推荐活动内容不能为空",
"SystemActive6": "推荐活动封面图不能为空",
"SystemActive7": "请填写模块名称",
......@@ -2910,7 +2910,7 @@
"SystemNews3": "更换图片",
"SystemNews4": "封面logo",
"SystemNews5": "新建资讯",
"SystemNews6": "请上传资源附件(支持格式jpeg、jpg、png,大小1m以内)建议尺寸:1125*675",
"SystemNews6": "请上传资源附件(支持格式jpeg、jpg、png,大小1m以内)建议尺寸:1125*900",
"SystemNews7": "新闻必须上传logo",
"SystemNews8": "文章名称",
"SystemNews9": "请输入文章名称",
......@@ -3752,7 +3752,7 @@
"mycaselibrary25": "执行进度",
"mycaselibrary26": "图片大小超过10M",
"mycaselibrary27": "图片类型不允许",
"mycaselibrary28": "图片最佳尺寸:1125*675,",
"mycaselibrary28": "图片最佳尺寸:1125*900,",
"mycaselibrary29": "支持jpg、png、jpeg,大小10*1024k以内",
"mycaselibrary30": "关键词字数过多",
"mycaselibrary31": "您未输入自定义关键词",
......@@ -4136,7 +4136,7 @@
"practiceText1": "请输入陪练名称(100字以内)",
"practiceText2": "陪练名称最多可输入100字",
"practiceText3": "(图片最佳尺寸:1125*675,比例为5:3,支持jpg、png、jpeg,大小2M以内)",
"practiceText3": "(图片最佳尺寸:1125*900,比例为5:4,支持jpg、png、jpeg,大小2M以内)",
"practiceText4": "请输入训练介绍(500字以内)",
"practiceText5": "请选择训练生效时段",
"practiceText6": "请选择考核生效时段",
......
......@@ -8,7 +8,8 @@ export default {
//公共
common: {
//用户查询域名
userUrl: `GET ${services.base}/system`,
getUrl: `GET ${services.base}`,
postUrl: `POST ${services.base}`,
// videoUpload: `POST ${services.ossUrl}/video/upload`,
},
};
export const ACTIVE_ACCOUNT = "ACTIVE_ACCOUNT";
export const COURSE_TIME = "COURSE_TIME";
export const COURSE_FINISH = "COURSE_FINISH";
export const TP_FINISH = "TP_FINISH";
export const ACCOUNT_TO_MONTH = "ACCOUNT_TO_MONTH";
export const ACCOUNT_TO_WEEK = "ACCOUNT_TO_WEEK";
export const ACCOUNT_TO_YESTERDAY = "ACCOUNT_TO_YESTERDAY";
export const ACCOUNT_READY_TASK = "ACCOUNT_READY_TASK";
export const USED_FUNCTIONS = "USED_FUNCTIONS";
export const LOGO_SITE = "LOGO_SITE";
export const ACTION_LIST = "ACTION_LIST";
export const PHB_CHART = "PHB_CHART";
export const DLL_DATA = "DLL_DATA";
export const LLL_DATA = "LLL_DATA";
export const HDL_MENU = "HDL_MENU";
export const HDL_DATA = "HDL_DATA";
export const ZLL_DATA = "ZLL_DATA";
export const ZLR_DATA = "ZLR_DATA";
export const WJ_DATA = "WJ_DATA";
export const TG_DATA = "TG_DATA";
export const LEVEL2_MENU = "LEVEL2_MENU";
export const TGR_DATA = "TGR_DATA";
export const TGR_DATA1 = "TGR_DATA1";
......@@ -2,187 +2,162 @@ import request from "@/util/request.js";
import api from "../api";
import * as Types from "./actionTypes";
const { common } = api;
const { userUrl } = common;
const { getUrl, postUrl } = common;
// 活跃用户比例
export function activeAccountNumber() {
const url = `${userUrl}/manage/dashboard/activeAccount`;
export function getActionList() {
const url = `${getUrl}/web-manage/manage/api/eventTrack/getTodayNum`;
return dispatch => {
return request({
url,
}).then(res => {
dispatch({ type: Types.ACTIVE_ACCOUNT, activeAccount: res });
dispatch({ type: Types.ACTION_LIST, data: res.data });
});
};
}
// 学员访问总时长
export function courseTimeNumber(data, callback) {
const url = `${userUrl}/manage/dashboard/courseTime`;
export function getPhbChartList(data) {
const url = `${getUrl}/web-manage/manage/point/user/new/rank/list`;
return dispatch => {
return request({
url,
data,
}).then(res => {
if (res.code == "1000") {
if (callback) {
callback(res);
}
}
dispatch({ type: Types.COURSE_TIME, courseTime: res });
dispatch({ type: Types.PHB_CHART, data: res.data.records });
});
};
}
// 完成课程
export function courseFinishNumber(data, callback) {
const url = `${userUrl}/manage/dashboard/courseFinish`;
export function getDllData(data) {
const url = `${getUrl}/web-manage/manage/api/eventTrack/getNumByType`;
return dispatch => {
return request({
url,
data,
}).then(res => {
if (res.code == "1000") {
if (callback) {
callback(res);
}
}
dispatch({ type: Types.COURSE_FINISH, courseFinish: res });
dispatch({ type: Types.DLL_DATA, data: res.data });
});
};
}
// 项目通过率
export function tpFinishNumber(data, callback) {
const url = `${userUrl}/manage/dashboard/tpFinish`;
export function getLllData(data) {
const url = `${getUrl}/web-manage/manage/api/eventTrack/queryNumByType`;
return dispatch => {
return request({
url,
data,
}).then(res => {
if (res.code == "1000") {
if (callback) {
callback(res);
}
}
dispatch({ type: Types.TP_FINISH, tpFinish: res });
dispatch({ type: Types.LLL_DATA, data: res.data });
});
};
}
// 按月统计
export function accountToMonthNumber(data, callback) {
const url = `${userUrl}/manage/dashboard/accountToMonth`;
//互动量枚举
export function getHdlMenu(data) {
const url = `${getUrl}/web-manage/manage/classify/childnode/find`;
return dispatch => {
return request({
url,
data,
}).then(res => {
if (res.code == "1000") {
if (callback) {
callback(res);
}
let list = [];
if (res.data.length > 0) {
list = res.data.filter(item => item.id != 0);
}
dispatch({ type: Types.ACCOUNT_TO_MONTH, accountToMonth: res });
dispatch({ type: Types.HDL_MENU, data: list });
});
};
}
// 按周统计
export function accountToWeekNumber(data, callback) {
const url = `${userUrl}/manage/dashboard/accountToWeek`;
//互动量枚举
export function getLevel2Menu(data) {
const url = `${getUrl}/web-manage/manage/classify/childnode/find`;
return dispatch => {
return request({
url,
data,
}).then(res => {
if (res.code == "1000") {
if (callback) {
callback(res);
}
let list = [];
if (res.data.length > 0) {
list = res.data.filter(item => item.id != 0);
}
dispatch({ type: Types.ACCOUNT_TO_WEEK, accountToWeek: res });
dispatch({ type: Types.LEVEL2_MENU, data: list });
});
};
}
// 按天统计
export function accountToYesterdayNumber(data, callback) {
const url = `${userUrl}/manage/dashboard/accountYesterday`;
//互动量
export function getHdlData(data) {
const url = `${getUrl}/web-manage/manage/api/eventTrack/queryNumByType`;
return dispatch => {
return request({
url,
data,
}).then(res => {
if (res.code == "1000") {
if (callback) {
callback(res);
}
}
dispatch({ type: Types.ACCOUNT_TO_YESTERDAY, accountToYesterday: res });
dispatch({ type: Types.HDL_DATA, data: res.data });
});
};
}
// 待办事项
export function accountReadyTaskNumber(data, callback) {
const url = `${userUrl}/manage/dashboard/accountReadyTask`;
//专栏左侧
export function getZllData(data) {
const url = `${getUrl}/web-manage/manage/api/eventTrack/queryDeptByType`;
return dispatch => {
return request({
url,
data,
}).then(res => {
if (res.code == "1000") {
if (callback) {
callback(res);
}
}
dispatch({ type: Types.ACCOUNT_READY_TASK, accountReadyTask: res });
dispatch({ type: Types.ZLL_DATA, data: res.data });
});
};
}
// 常用功能
export function usedFunctionsNumber(data, callback) {
const url = `${userUrl}/manage/dashboard/usedFunctions`;
//专栏右侧
export function getZlrData(data) {
const url = `${getUrl}/web-manage/manage/api/eventTrack/selectExamListBySta`;
return dispatch => {
return request({
url,
data,
}).then(res => {
if (res.code == "1000") {
if (callback) {
callback(res);
}
}
dispatch({ type: Types.USED_FUNCTIONS, usedFunctions: res });
dispatch({ type: Types.ZLR_DATA, data: res.data });
});
};
}
//问卷
export function getWjData(data) {
const url = `${getUrl}/web-manage/manage/api/eventTrack/getNumByType`;
return dispatch => {
return request({
url,
data,
}).then(res => {
dispatch({ type: Types.WJ_DATA, data: res.data });
});
};
}
//投稿
export function getTgData(data) {
const url = `${getUrl}/web-manage/manage/api/eventTrack/getNumByType`;
return dispatch => {
return request({
url,
data,
}).then(res => {
dispatch({ type: Types.TG_DATA, data: res.data });
});
};
}
// 头像,站点获取
export function logoSiteNumber(data, callback) {
const url = `${userUrl}/manage/site/get`;
//投稿折线
export function getTgrData(data) {
const url = `${getUrl}/web-manage/manage/api/eventTrack/queryTgNumByDept`;
return dispatch => {
return request({
url,
data,
}).then(res => {
if (res.code == "1000") {
if (callback) {
callback(res);
}
dispatch({ type: Types.TGR_DATA, data: res.data });
let array = [];
for (let index = 0; index < 4; index++) {
let param = { month: "", data: [] };
param.month = res.data[0].eventTrackTypeNumVoList[index].subType + "月";
res.data.forEach(item => {
param.data.push(item.eventTrackTypeNumVoList[index].num);
});
array.unshift(param);
}
dispatch({ type: Types.LOGO_SITE, logoSite: res });
dispatch({ type: Types.TGR_DATA1, data: array });
});
};
}
import * as Types from "./actionTypes";
const initialState = {
activeAccountList: {},
courseTimeList: {},
courseFinishList: {},
tpFinishList: {},
accountToMonthList: [],
accountToWeekList: [],
accountToYesterdayList: [],
accountReadyTaskList: {},
usedFunctionsList: {},
logoSiteList: {},
actionList: {},
pbhChartList: [],
dllData: [],
hdlMenu: [],
hdlData: [],
zllData: [],
zlrData: [],
tgData: [],
wjData: [],
level2Menu: [],
tgrData: [],
tgrData1: [],
};
function homePage(state = initialState, action) {
switch (action.type) {
case Types.ACTIVE_ACCOUNT:
case Types.ACTION_LIST:
return Object.assign({}, state, {
activeAccountList: action.activeAccount,
actionList: action.data,
});
case Types.COURSE_TIME:
case Types.PHB_CHART:
return Object.assign({}, state, {
courseTimeList: action.courseTime,
pbhChartList: action.data,
});
case Types.COURSE_FINISH:
case Types.DLL_DATA:
return Object.assign({}, state, {
courseFinishList: action.courseFinish,
dllData: action.data,
});
case Types.TP_FINISH:
case Types.LLL_DATA:
return Object.assign({}, state, {
tpFinishList: action.tpFinish,
lllData: action.data,
});
case Types.ACCOUNT_TO_MONTH:
case Types.HDL_MENU:
return Object.assign({}, state, {
accountToMonthList: action.accountToMonth,
hdlMenu: action.data,
});
case Types.ACCOUNT_TO_WEEK:
case Types.HDL_DATA:
return Object.assign({}, state, {
accountToWeekList: action.accountToWeek,
hdlData: action.data,
});
case Types.ACCOUNT_TO_YESTERDAY:
case Types.ZLL_DATA:
return Object.assign({}, state, {
accountToYesterdayList: action.accountToYesterday,
zllData: action.data,
});
case Types.ACCOUNT_READY_TASK:
case Types.ZLR_DATA:
return Object.assign({}, state, {
accountReadyTaskList: action.accountReadyTask,
zlrData: action.data,
});
case Types.USED_FUNCTIONS:
case Types.TG_DATA:
return Object.assign({}, state, {
usedFunctionsList: action.usedFunctions,
tgData: action.data,
});
case Types.LOGO_SITE:
case Types.WJ_DATA:
return Object.assign({}, state, {
logoSiteList: action.logoSite,
wjData: action.data,
});
case Types.LEVEL2_MENU:
return Object.assign({}, state, {
level2Menu: action.data,
});
case Types.TGR_DATA:
return Object.assign({}, state, {
tgrData: action.data,
});
case Types.TGR_DATA1:
return Object.assign({}, state, {
tgrData1: action.data,
});
}
return state;
......
......@@ -598,4 +598,22 @@
// }
}
:global{
.ant-input-group-addon{
z-index: 999;
padding: 0;
border: none;
width: 80px;
height: 30px;
display: block;
position: absolute;
right: 0;
top:-2px;
background: transparent;
& img{
width: 80px;
height: 30px;
}
}
}
\ No newline at end of file
......@@ -14,5 +14,6 @@ export default {
getSkin: `GET ${services.base}/web-student/api/portal/theme/color/public/get`,
getAssToken: `GET ${services.systemManage}/account/access/community`,
getCode: `${services.systemApi}/public/getCaptcha`,
},
};
......@@ -7,7 +7,14 @@ import React from "react";
import { connect } from "react-redux";
import { Button, Form, Input, message } from "antd";
import style from "./Style/login.less";
import { exfetchR, getSkinData, toAssToken } from "./redux/actions";
import api from "./api";
const { common } = api;
import {
exfetchR,
getSkinData,
toAssToken,
getLoginCode,
} from "./redux/actions";
import commonFunc from "@/util/commonFunc";
import SelectLang from "@/common/Layout/Header/SelectLang";
{
......@@ -24,12 +31,18 @@ const companySiteCode = `${commonFunc.companyCode}/${commonFunc.siteCode}`;
const shenWanHongYuanCode = "aegonthtf/home";
class Login extends React.Component {
constructor(props) {
super(props);
this.state = {
captchaKey: 1,
};
}
onPressEnter = e => {
this.handleSubmit(e);
};
componentDidMount() {
const { getSkinData } = this.props;
const { getSkinData, getLoginCode } = this.props;
getSkinData(res => {
console.log("primary-color:", res);
document.documentElement.style.setProperty(
......@@ -37,6 +50,7 @@ class Login extends React.Component {
res.data.themeColor
);
});
this.getCaptchaKey();
}
generateCharacter(n) {
......@@ -92,6 +106,12 @@ class Login extends React.Component {
date = moment(new Date()).format("YYYYMMDD");
return date;
}
getCaptchaKey() {
let randomNumber = Math.floor(Math.random() * 999999)
.toString()
.padStart(6, "0");
this.setState({ captchaKey: randomNumber });
}
// 提交登录按钮发送给后台json
handleSubmit = e => {
......@@ -147,8 +167,11 @@ class Login extends React.Component {
password,
salt: salt,
sign: md5(sign),
captchaVal: values.captchaVal,
captchaKey: this.state.captchaKey,
languageCode: sessionStorage.getItem("lang") || null, //用户选择的语种,否则为null
};
console.log(parms, 1111);
// let data = {
// account: String(values.account).trim(),
......@@ -225,7 +248,7 @@ class Login extends React.Component {
<div>
<div className={style.imgDiv}>
<img
src={require("./imgages/loginleft1.jpg")}
src={require("./imgages/loginleft2.png")}
// style={{ height: "276px" }}
// style={{ height: "552px" }}
className={style.contentImg}
......@@ -271,6 +294,31 @@ class Login extends React.Component {
/>
)}
</FormItem>
<FormItem {...formItemLayout} label="验证码" hasFeedback>
{getFieldDecorator("captchaVal", {
rules: [
{
required: true,
whitespace: true,
message: "请填验证码",
// validator: this.validateToNextPassword,
},
],
})(
<Input
placeholder="请输入验证码"
maxLength={4}
addonAfter={
<img
src={`${common.getCode}?companyCode=zhdj&siteCode=edu&captchaKey=${this.state.captchaKey}`}
onClick={() => {
this.getCaptchaKey();
}}
></img>
}
/>
)}
</FormItem>
<FormItem className={style.loginBtn}>
<Button type="primary" onClick={this.handleSubmit}>
登录
......@@ -304,6 +352,7 @@ function mapDispatchToProps(dispatch) {
exfetchR: (data, cb) => dispatch(exfetchR(data, cb)),
getSkinData: cb => dispatch(getSkinData(cb)),
toAssToken: (data, cb) => dispatch(toAssToken(data, cb)),
getLoginCode: (data, cb) => dispatch(getLoginCode(data, cb)),
};
}
......
// 登录和checkToken
export const SIGN_FORM = "SIGN_FORM";
//获取站点默认配色
export const CHANGE_SKIN = "CHANGE_SKIN"
export const CHANGE_SKIN = "CHANGE_SKIN";
//获取站点默认配色
export const SET_FLAG = "SET_FLAG"
export const SET_FLAG = "SET_FLAG";
export const LOGIN_CODE = "LOGIN_CODE";
export const LOGIN_KEY = "LOGIN_KEY";
......@@ -10,30 +10,29 @@ import { set as setGlobalData } from "@/util/globalData.js";
import * as Types from "./actionTypes";
const { common } = api;
const { login, checkToken,getSkin ,getAssToken } = common;
const that = this
export function getSkinData(callback){
const { login, checkToken, getSkin, getAssToken, getCode } = common;
const that = this;
export function getSkinData(callback) {
let url = getSkin;
return dispatch => {
return request({
url
url,
}).then(res => {
if (res.code==1000) {
if (res.code == 1000) {
let companyCode = location.pathname.split("/")[1];
let siteCode = location.pathname.split("/")[2];
// 站点code
window.sessionStorage.setItem("auxiliarColor", res.data.auxiliarColor);
window.sessionStorage.setItem("themeColor", res.data.themeColor);
window.sessionStorage.setItem("skinId",res.data.id);
window.sessionStorage.setItem("skinId", res.data.id);
// 更新菜单和用户信息
dispatch({ type: Types.CHANGE_SKIN});
dispatch({ type: Types.CHANGE_SKIN });
}
if(callback){
if (callback) {
callback(res);
}
});
};
}
export function exfetchR(data, cb, check) {
// 登录
......@@ -53,35 +52,35 @@ export function exfetchR(data, cb, check) {
}).then(res => {
if (res.success) {
//只有社群的话直接滚走去社群
if(res.data.isOnlyCommunity){
sessionStorage.setItem("mgtk",res.data.Authorization)
return cb(res)
}else{
if (cb) {
cb(res);
}
// 登录
if (!check) {
if (res.data.isOnlyCommunity) {
sessionStorage.setItem("mgtk", res.data.Authorization);
return cb(res);
} else {
if (cb) {
cb(res);
}
// 登录
if (!check) {
// 临时设置语言,后期需要根据选择语言更改
setGlobalData("language", "zh-CN");
// 站点code
setGlobalData("companyCode", location.pathname.split("/")[1]);
setGlobalData("siteCode", location.pathname.split("/")[2]);
// 存储token
// cookie.save("token", res.data.Authorization);
sessionStorage.setItem("mgtk", res.data.Authorization);
// cookie.save("token", res.data.Authorization);
}
// 任意进入
// 临时设置语言,后期需要根据选择语言更改
setGlobalData("language", "zh-CN");
// cookie.save("userName", res.data.userInfo.fullName);//bug-12952-cwj
sessionStorage.setItem("userName", res.data.userInfo.fullName);
// 站点code
setGlobalData("companyCode", location.pathname.split("/")[1]);
setGlobalData("siteCode", location.pathname.split("/")[2]);
// 存储token
// cookie.save("token", res.data.Authorization);
sessionStorage.setItem("mgtk",res.data.Authorization)
// cookie.save("token", res.data.Authorization);
}
// 任意进入
// 临时设置语言,后期需要根据选择语言更改
setGlobalData("language", "zh-CN");
// cookie.save("userName", res.data.userInfo.fullName);//bug-12952-cwj
sessionStorage.setItem("userName",res.data.userInfo.fullName)
// 站点code
setGlobalData("companyCode", location.pathname.split("/")[1]);
setGlobalData("siteCode", location.pathname.split("/")[2]);
// 更新菜单和用户信息
dispatch({ type: Types.SIGN_FORM, userLogin: res.data });
// 更新菜单和用户信息
dispatch({ type: Types.SIGN_FORM, userLogin: res.data });
}
}
});
......@@ -98,18 +97,18 @@ export function toAssToken(data, cb, check) {
}).then(res => {
if (res.success) {
//得到token
const assToken = res.data
if(location.host.includes("localhost")){
const assToken = res.data;
if (location.host.includes("localhost")) {
//跳转
window.location.href=`http://localhost:7000/login?token=${assToken}`
}else if(window.location.host.includes("dev")){
window.location.href=`http://dev.association-admin.kmelearning.com/login?token=${assToken}`
}else if(window.location.host.includes("test")){
window.location.href=`http://test.association-admin.kmelearning.com/login?token=${assToken}`
}else if(window.location.host.includes("uat")){
window.location.href=`http://uat.association-admin.kmelearning.com/login?token=${assToken}`
}else {
window.location.href=`https://association-admin.kmelearning.com/login?token=${assToken}`
window.location.href = `http://localhost:7000/login?token=${assToken}`;
} else if (window.location.host.includes("dev")) {
window.location.href = `http://dev.association-admin.kmelearning.com/login?token=${assToken}`;
} else if (window.location.host.includes("test")) {
window.location.href = `http://test.association-admin.kmelearning.com/login?token=${assToken}`;
} else if (window.location.host.includes("uat")) {
window.location.href = `http://uat.association-admin.kmelearning.com/login?token=${assToken}`;
} else {
window.location.href = `https://association-admin.kmelearning.com/login?token=${assToken}`;
}
}
});
......@@ -126,7 +125,21 @@ export function toAssToken(data, cb, check) {
// }
//
// }
export function getLoginCode(data, cb, check) {
// 派发请求
let randomNumber = Math.floor(Math.random() * 999999)
.toString()
.padStart(6, "0");
let url = getCode;
return dispatch => {
return request({ url, data: { ...data, captchaKey: randomNumber } }).then(
res => {
dispatch({ type: Types.LOGIN_CODE, data: res });
dispatch({ type: Types.LOGIN_KEY, data: randomNumber });
}
);
};
}
export function setCollapsedFlag(data, cb) {
return dispatch => {
......
......@@ -8,6 +8,8 @@ const initialState = {
// siteData: [mockMenu],
siteData: [],
collapsedFlag: false,
loginCode: "",
loginKey: "",
};
function login(state = initialState, action) {
......@@ -23,7 +25,16 @@ function login(state = initialState, action) {
collapsedFlag: action.collapsedFlag,
// siteData: state.siteData,
});
case Types.LOGIN_CODE:
return Object.assign({}, state, {
loginCode: action.data,
// siteData: state.siteData,
});
case Types.LOGIN_KEY:
return Object.assign({}, state, {
loginKey: action.data,
// siteData: state.siteData,
});
}
return state;
}
......
......@@ -199,6 +199,7 @@ function mapStateToProps(state, ownProps) {
icon: item.node.icon,
// activeIcon: item.node.activeIcon,
menuType: item.node.menuType,
url: item.node.url,
});
//
......
......@@ -18,14 +18,14 @@
}
.content {
background-color: #F0F2F5;
background-color: #f8f9ff;
padding: 16px;
padding-top: 76px;
min-height: ~"calc(100% - 72px)";
min-height: ~"calc(100% - 0px)";
}
.contentnopadding {
background-color: #F0F2F5;
min-height: ~"calc(100% - 72px)";
background-color: #f8f9ff;
min-height: ~"calc(100% - 0px)";
}
.container {
......
......@@ -157,7 +157,8 @@ class Lookcase extends Component {
index: i,
});
});
if (list && list.length) { //bug 14763 zj
if (list && list.length) {
//bug 14763 zj
res.data.classifyListVOList.map((v, i) => {
if (list[i].level == 1) {
v.selectList.push(list[i].classifyId);
......@@ -196,12 +197,12 @@ class Lookcase extends Component {
index,
};
}
if (this.state.classlist) { //bug 14763 zj
if (this.state.classlist) {
//bug 14763 zj
this.state.classlist.splice(index, 1, list);
} else {
this.state.classlist.push(list)
this.state.classlist.push(list);
}
}
handleSearch(type) {
const htmlContent = this.state.editorContent;
......@@ -508,7 +509,7 @@ class Lookcase extends Component {
info.file.uid +
"." +
info.file.name.split(".")[
info.file.name.split(".").length - 1
info.file.name.split(".").length - 1
],
},
]),
......@@ -596,36 +597,35 @@ class Lookcase extends Component {
{/* {id?data&&<MUpload {...uploadProps} ref={(c) =>this.validate = c} /> :
<MUpload {...uploadProps} ref={(c) =>this.validate = c} /> } */}
<FormItem {...formItemLayout} label="作品封面">
{data.productCover == 80 ?
getFieldDecorator("caseLogo", {
rules: [
{
required: true,
message: "请上传作品封面",
},
],
initialValue: data ? data.logoUrl : null,
})(
<UploadImageCover
details={data ? data.logoUrl : null}
getImgUrl={this.getImgUrl}
preRatio={["5/3"]}
maxSize={500}
extra="图片最佳尺寸:1125*675,比例为5:3,支持jpg、png、jpeg" //task-1110-cwj 删除500k
/>
) :
getFieldDecorator("caseLogo", {
initialValue: data ? data.logoUrl : null,
})(
<UploadImageCover
details={data ? data.logoUrl : null}
getImgUrl={this.getImgUrl}
preRatio={["5/3"]}
maxSize={500}
extra="图片最佳尺寸:1125*675,比例为5:3,支持jpg、png、jpeg" //task-1110-cwj 删除500k
/>
)
}
{data.productCover == 80
? getFieldDecorator("caseLogo", {
rules: [
{
required: true,
message: "请上传作品封面",
},
],
initialValue: data ? data.logoUrl : null,
})(
<UploadImageCover
details={data ? data.logoUrl : null}
getImgUrl={this.getImgUrl}
preRatio={["5/4"]}
maxSize={500}
extra="图片最佳尺寸:1125*900,比例为5:4,支持jpg、png、jpeg" //task-1110-cwj 删除500k
/>
)
: getFieldDecorator("caseLogo", {
initialValue: data ? data.logoUrl : null,
})(
<UploadImageCover
details={data ? data.logoUrl : null}
getImgUrl={this.getImgUrl}
preRatio={["5/4"]}
maxSize={500}
extra="图片最佳尺寸:1125*900,比例为5:4,支持jpg、png、jpeg" //task-1110-cwj 删除500k
/>
)}
</FormItem>
<FormItem
......@@ -651,20 +651,21 @@ class Lookcase extends Component {
{data && data.textEditType == 2 ? (
<div dangerouslySetInnerHTML={{ __html: data.content }} />
) : (
<div style={{ border: "1px solid #ccc" }}>
{/* <CaseEditor
<div style={{ border: "1px solid #ccc" }}>
{/* <CaseEditor
refreshEditor={this.state.refreshEditor}
initValue={this.state.editorContent}
onChange={this.handleEditorChange2}
uploadParam={this.props.param}
/> 旧的富文本编辑器 */}
{data.id &&
<Editor
cbReceiver={this.handleEditorChange2}
importContent={data.content}
/>}
</div>
)}
{data.id && (
<Editor
cbReceiver={this.handleEditorChange2}
importContent={data.content}
/>
)}
</div>
)}
</FormItem>
<FormItem {...formItemLayout} label="附件(最多支持9个附件)">
{getFieldDecorator("upload", {
......
......@@ -9,7 +9,7 @@ import {
Progress,
message,
Dropdown,
Menu
Menu,
} from "antd";
import { Link } from "react-router-dom";
import func from "@/util/commonFunc";
......@@ -116,7 +116,7 @@ class CourseDetail extends Component {
baseInfo.description = courseInfo.courseVo.description;
baseInfo.tags = oldTags;
baseInfo.courseType = courseInfo.courseVo.courseType;
const info = this.handleTitle(courseInfo.courseVo.classifyName)
const info = this.handleTitle(courseInfo.courseVo.classifyName);
_this.setState({
baseInfo: baseInfo,
defaultUrl: courseInfo.courseVo.image,
......@@ -225,17 +225,16 @@ class CourseDetail extends Component {
};
if (_this.props.type === "edit") {
data.id = this.props.courseId;
saveCourseBasicInfo(data, (res) => {
saveCourseBasicInfo(data, res => {
if (res.code == "1000") {
message.success("保存成功");
_this.props.step(1, courseType);
}
});
} else {
if (_this.props.courseId) {
data.id = _this.props.courseId;
saveCourseBasicInfo(data, (res) => {
saveCourseBasicInfo(data, res => {
if (res.code == "1000") {
message.success("保存成功");
_this.props.step(1, courseType);
......@@ -314,20 +313,30 @@ class CourseDetail extends Component {
this.props = null;
}
displayRender = (label, selectedOptions) => {
console.log("display: " + label, selectedOptions)
console.log("display: " + label, selectedOptions);
const length = selectedOptions.length;
const showLabel = length === 0 ? label :
length === 1 ? selectedOptions[0].name :
length === 2 ? selectedOptions[0].name + "/" + selectedOptions[1].name :
length === 3 ? selectedOptions[0].name + "/" + selectedOptions[1].name + "/" + selectedOptions[2].name : "";
const showLabel =
length === 0
? label
: length === 1
? selectedOptions[0].name
: length === 2
? selectedOptions[0].name + "/" + selectedOptions[1].name
: length === 3
? selectedOptions[0].name +
"/" +
selectedOptions[1].name +
"/" +
selectedOptions[2].name
: "";
this.setState({
showRender: showLabel
})
showRender: showLabel,
});
return showLabel;
}
handleTitle = (title) => {
const { classify } = this.props
console.log("classify", classify)
};
handleTitle = title => {
const { classify } = this.props;
console.log("classify", classify);
const items = title.split(",");
var newTitle = "";
classify.forEach(element => {
......@@ -342,18 +351,18 @@ class CourseDetail extends Component {
if (item.id === items[2]) {
newTitle += "/" + item.name;
}
})
});
}
}
})
});
}
}
})
});
// classify.forEach(element => {
// console.log("element",element)
// });
return newTitle
}
return newTitle;
};
render() {
const { defaultUrl, baseInfo } = this.state;
const { getFieldDecorator } = this.props.form;
......@@ -520,10 +529,10 @@ class CourseDetail extends Component {
<UploadImageCover
details={this.state.baseInfo.logo}
getImgUrl={this.getImgUrl}
preRatio={["5/3"]}
preRatio={["5/4"]}
maxSize={2 * 1024} //修改 任务 1087 此前为500K
disabled={this.props.type === "look" ? true : false}
extra="图片最佳尺寸:1125*675,比例为5:3,支持jpg、png、jpeg"
extra="图片最佳尺寸:1125*900,比例为5:4,支持jpg、png、jpeg"
/>
)}
</FormItem>
......@@ -612,7 +621,11 @@ class CourseDetail extends Component {
>
<Button>返回</Button>
</Link>
<Button type="primary" onClick={this.baseInfoSubmit} style={{ margin: "0 16px" }}>
<Button
type="primary"
onClick={this.baseInfoSubmit}
style={{ margin: "0 16px" }}
>
下一步
</Button>
</FormItem>
......
......@@ -321,7 +321,7 @@ class RegistrationForm extends React.Component {
},
],
initialValue: name,
})(<Input placeholder="请输入企业名称" />)}
})(<Input placeholder="请输入企业名称" />)}
</FormItem>
{/*企业类型*/}
<FormItem label="企业类型" {...formItemLayout}>
......@@ -365,15 +365,16 @@ class RegistrationForm extends React.Component {
<span>https://pc.kmelearning.com/{domain}/login</span>
</FormItem>
{/*企业logo*/}
<FormItem
// extra="(图片最佳尺寸:128*40,比例为5:3,支持jpg、png、jpeg,大小2M以内)"
>
{/*企业logo*/}
<UpLoad {...uploadProps1} ref={c => (this.validate = c)} />
<span style={{marginLeft:"25%"}}>(图片最佳尺寸:128*40,比例为5:3,支持jpg、png、jpeg,大小2M以内)</span>
</FormItem>
{/*企业logo*/}
<FormItem
// extra="(图片最佳尺寸:128*40,比例为5:4,支持jpg、png、jpeg,大小2M以内)"
>
{/*企业logo*/}
<UpLoad {...uploadProps1} ref={c => (this.validate = c)} />
<span style={{ marginLeft: "25%" }}>
(图片最佳尺寸:128*40,比例为5:4,支持jpg、png、jpeg,大小2M以内)
</span>
</FormItem>
{/*企业简介*/}
<FormItem {...formItemLayout} label="企业简介">
{getFieldDecorator("context", {
......@@ -417,13 +418,13 @@ class RegistrationForm extends React.Component {
{/*修改联系人*/}
{/*<h1 style={{ fontSize: "16px", margin: "0 0 12px 0" }}>企业联系人</h1>*/}
{/*<Table*/}
{/*loading={this.state.loading}*/}
{/*columns={userColumns}*/}
{/*pagination={false}*/}
{/*dataSource={contactorVOs}*/}
{/*rowClassName={record => {*/}
{/*return record.editable ? styles.editable : "";*/}
{/*}}*/}
{/*loading={this.state.loading}*/}
{/*columns={userColumns}*/}
{/*pagination={false}*/}
{/*dataSource={contactorVOs}*/}
{/*rowClassName={record => {*/}
{/*return record.editable ? styles.editable : "";*/}
{/*}}*/}
{/*/>*/}
</Form>
<div
......@@ -433,10 +434,12 @@ class RegistrationForm extends React.Component {
marginTop: "30px",
}}
>
<Button onClick={hideModal}>
取消
</Button>
<Button style={{ marginLeft: 15 }} type="primary" onClick={() => this.handleSubmit()}>
<Button onClick={hideModal}>取消</Button>
<Button
style={{ marginLeft: 15 }}
type="primary"
onClick={() => this.handleSubmit()}
>
保存
</Button>
</div>
......
......@@ -50,8 +50,8 @@ class Company extends Component {
constructor(props) {
super(props);
this.state = {
name: '',
value: '',
name: "",
value: "",
pagesize: 5,
visible1: false,
modal2Visible: false,
......@@ -61,7 +61,7 @@ class Company extends Component {
data: [],
logourl: "",
pages: {},
_status: '',
_status: "",
current: "1",
pageSize: "10",
};
......@@ -154,7 +154,7 @@ class Company extends Component {
componentDidMount() {
const { companyList } = this.props;
// 企业列表action
companyList({ pageNo: "1", pageSize: "10"});
companyList({ pageNo: "1", pageSize: "10" });
}
// 显示弹窗
......@@ -233,7 +233,8 @@ class Company extends Component {
getGlobalData("companyCode") +
"/" +
getGlobalData("siteCode") +
"/index/operating/editCompany?id="+record.key
"/index/operating/editCompany?id=" +
record.key
);
// this.props.companyGet({ companyId: record.key }, res => {
......@@ -275,10 +276,10 @@ class Company extends Component {
const { companyList } = this.props;
const { name, _status } = this.state;
const pages = { pageNo: 1, pageSize: 10 };
let companyJson = ''
if(_status === '1'){
let companyJson = "";
if (_status === "1") {
companyJson = { name, ...pages };
}else{
} else {
companyJson = { name, status: _status, ...pages };
}
......@@ -489,13 +490,13 @@ class Company extends Component {
onShowSizeChange(current, pageSize) {
//bug-12232-jmy 分页bug
that.setState({ current, pageSize });
if(that.state._status === '1'){
companyList({
pageNo: current,
pageSize,
name,
});
}else{
if (that.state._status === "1") {
companyList({
pageNo: current,
pageSize,
name,
});
} else {
companyList({
pageNo: current,
pageSize,
......@@ -507,13 +508,13 @@ class Company extends Component {
onChange(current, pageSize) {
//
that.setState({ current, pageSize });
if(that.state._status === '1'){
companyList({
pageNo: current,
pageSize,
name,
});
}else{
if (that.state._status === "1") {
companyList({
pageNo: current,
pageSize,
name,
});
} else {
companyList({
pageNo: current,
pageSize,
......@@ -669,38 +670,38 @@ class Company extends Component {
/>
{/* 展示头部 */}
{/*<div className={styles.list_btn}>*/}
{/*<div>*/}
{/*<Input*/}
{/*addonBefore="企业名称"*/}
{/*placeholder="请输入企业名称"*/}
{/*style={{ width: 250, marginRight: 10 }}*/}
{/*onKeyDown={this.getExamKeyword}*/}
{/*onChange={this.handleGetValue}*/}
{/*/>*/}
{/*<Select*/}
{/*defaultValue="启用"*/}
{/*style={{ width: 120 }}*/}
{/*onChange={this.handleGetState}*/}
{/*>*/}
{/*<Option value="2">启用</Option>*/}
{/*<Option value="3">停用</Option>*/}
{/*</Select>*/}
{/*<Button*/}
{/*type="primary"*/}
{/*className="company-primary"*/}
{/*onClick={this.handleSearch}*/}
{/*style={{ marginLeft: 10 }}*/}
{/*>*/}
{/*查询*/}
{/*</Button>*/}
{/*/!*<Button*!/*/}
{/*/!*type="primary"*!/*/}
{/*/!*onClick={() => this.open()}*!/*/}
{/*/!*style={{ marginLeft: 10 }}*!/*/}
{/*/!*>*!/*/}
{/*/!*新增企业*!/*/}
{/*/!*</Button>*!/*/}
{/*</div>*/}
{/*<div>*/}
{/*<Input*/}
{/*addonBefore="企业名称"*/}
{/*placeholder="请输入企业名称"*/}
{/*style={{ width: 250, marginRight: 10 }}*/}
{/*onKeyDown={this.getExamKeyword}*/}
{/*onChange={this.handleGetValue}*/}
{/*/>*/}
{/*<Select*/}
{/*defaultValue="启用"*/}
{/*style={{ width: 120 }}*/}
{/*onChange={this.handleGetState}*/}
{/*>*/}
{/*<Option value="2">启用</Option>*/}
{/*<Option value="3">停用</Option>*/}
{/*</Select>*/}
{/*<Button*/}
{/*type="primary"*/}
{/*className="company-primary"*/}
{/*onClick={this.handleSearch}*/}
{/*style={{ marginLeft: 10 }}*/}
{/*>*/}
{/*查询*/}
{/*</Button>*/}
{/*/!*<Button*!/*/}
{/*/!*type="primary"*!/*/}
{/*/!*onClick={() => this.open()}*!/*/}
{/*/!*style={{ marginLeft: 10 }}*!/*/}
{/*/!*>*!/*/}
{/*/!*新增企业*!/*/}
{/*/!*</Button>*!/*/}
{/*</div>*/}
{/*</div>*/}
{/* 企业列表 */}
<Table
......@@ -762,7 +763,7 @@ class Company extends Component {
message: "站点名称最长不可超过60个字",
},
],
})(<Input placeholder="请输入企业名称"/>)}
})(<Input placeholder="请输入企业名称" />)}
</FormItem>
{/*企业类型*/}
<FormItem
......@@ -819,13 +820,14 @@ class Company extends Component {
/>
)}
</FormItem>
<FormItem
// extra="(图片最佳尺寸:128*40,比例为5:3,支持jpg、png、jpeg,大小2M以内)"
<FormItem
// extra="(图片最佳尺寸:128*40,比例为5:4,支持jpg、png、jpeg,大小2M以内)"
>
{/*企业logo*/}
<UpLoad {...uploadProps1} ref={c => (this.validate = c)} />
<span style={{marginLeft:"25%"}}>(图片最佳尺寸:128*40,比例为53,支持jpgpngjpeg,大小2M以内)</span>
{/*企业logo*/}
<UpLoad {...uploadProps1} ref={c => (this.validate = c)} />
<span style={{ marginLeft: "25%" }}>
(图片最佳尺寸:128*40,比例为54,支持jpgpngjpeg,大小2M以内)
</span>
</FormItem>
{/*企业简介*/}
<FormItem {...formItemLayout} label="企业简介">
......@@ -872,12 +874,12 @@ class Company extends Component {
</Form>
{/*设置联系人*/}
{/*<Button*/}
{/*style={{ marginTop: 16, marginBottom: 8, display: "block" }}*/}
{/*type="primary"*/}
{/*onClick={this.newMember}*/}
{/*icon="plus"*/}
{/*style={{ marginTop: 16, marginBottom: 8, display: "block" }}*/}
{/*type="primary"*/}
{/*onClick={this.newMember}*/}
{/*icon="plus"*/}
{/*>*/}
{/*新增成员*/}
{/*新增成员*/}
{/*</Button>*/}
{this.state.flag ? (
<Table
......@@ -897,7 +899,11 @@ class Company extends Component {
>
取消
</Button>
<Button style={{ marginLeft: 15 }} type="primary" onClick={this.handleSubmit}>
<Button
style={{ marginLeft: 15 }}
type="primary"
onClick={this.handleSubmit}
>
保存
</Button>
</div>
......
......@@ -753,7 +753,7 @@ class AlbumStatisticts extends React.Component {
return (
<div className="album-statistics-body" style={{ padding: 10 }}>
<Breadcrumb title="专辑统计"/>
<Breadcrumb title="专辑统计" />
<div>
<span style={{ marginRight: 20 }}>时间段</span>
<RangePicker
......
......@@ -51,6 +51,7 @@ class addEdit extends React.Component {
return;
}
const { param } = this.props;
console.log(param, 1111111);
if (param !== null) {
this.setState({
uploadParams: {
......@@ -168,16 +169,40 @@ class addEdit extends React.Component {
const { getFieldDecorator } = form;
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 4 },
span: 2,
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 20 },
span: 22,
},
};
const { id } = this.props.seeEdit;
console.log(JSON.parse(seeEdit.ossUrl));
let residences;
if (this.props.ificationList) {
residences = this.props.ificationList.map((item, index) => {
if (item.data.length > 0) {
return {
value: item.id,
label: item.name,
children: item.data.map((items, indexs) => {
return {
value: items.id,
label: items.name,
children: items.childClassifyNews.map((itemss, indexss) => {
return {
value: itemss.id,
label: itemss.name,
children: [],
};
}),
};
}),
};
} else {
return { value: item.id, label: item.name };
}
});
}
return (
<Modal
visible={visible}
......@@ -235,7 +260,14 @@ class addEdit extends React.Component {
/>
</FormItem>
<FormItem {...formItemLayout} label="上传文件">
<FormItem {...formItemLayout} label="图片">
{seeEdit.ossUrl &&
JSON.parse(seeEdit.ossUrl).length > 0 &&
JSON.parse(seeEdit.ossUrl).map((item, index) => (
<img key={index} src={item} alt="" style={{ width: "300px" }} />
))}
</FormItem>
{/* <FormItem {...formItemLayout} label="上传文件">
<Upload
headers={{ "X-Requested-With": null }}
fileList={this.state.fileList}
......@@ -250,12 +282,38 @@ class addEdit extends React.Component {
</Button>
</Upload>
<p>大小50mb以内</p>
</FormItem>
</FormItem> */}
<FormItem {...formItemLayout} label="作者">
{getFieldDecorator("author", {
initialValue: seeEdit && seeEdit.author,
})(<Input disabled={type != "edit" ? true : false} />)}
</FormItem>
<FormItem {...formItemLayout} label="所属栏位">
{getFieldDecorator("type", {
initialValue: seeEdit && [
seeEdit.typeOne,
seeEdit.typeTwo,
seeEdit.typeThree,
],
rules: [
{
type: "array",
required: true,
message: "请输入所属栏位!",
},
],
})(
<Cascader
multiple
disabled={type != "edit" ? true : false}
options={residences}
onChange={this.loadData}
// disabled={type == "look" ? !false : false}
changeOnSelect={true}
placeholder="请选择"
/>
)}
</FormItem>
<FormItem {...formItemLayout} label="支部或部室">
{getFieldDecorator("deptName", {
initialValue: seeEdit && seeEdit.deptName,
......
......@@ -77,14 +77,14 @@ class Header extends React.Component {
</FormItem>
<FormItem label="投稿状态:">
{getFieldDecorator("state")(
<Select style={{ width: "200px" }} placeholder="请选择投稿状态">
<Select style={{ width: "185px" }} placeholder="请选择投稿状态">
{option}
</Select>
)}
</FormItem>
<FormItem label="审核时间">
{getFieldDecorator("time")(
<RangePicker style={{ width: "220px" }} format="YYYY-MM-DD" />
<RangePicker style={{ width: "200px" }} format="YYYY-MM-DD" />
)}
</FormItem>
</Col>
......
......@@ -30,6 +30,7 @@ import {
getList,
menu,
} from "./redux/action";
import { getIficationList } from "../Information/redux/action";
import moment from "moment";
import Styles from "./style.less";
const TreeNode = Tree.TreeNode;
......@@ -59,6 +60,7 @@ class Atricle extends React.Component {
}
componentDidMount() {
const { page, pagesize } = this.state;
this.props.getIficationList({}, () => {});
let _this = this;
this.props.getList(
{
......@@ -244,7 +246,7 @@ class Atricle extends React.Component {
if (type == 1) {
//发布
postReleases({ ids: [id] }, () => {
postReleases({ id }, () => {
getList(
_this.filterParams({
pageNo: page,
......@@ -262,7 +264,7 @@ class Atricle extends React.Component {
});
} else {
//取消发布
postUnReleases({ ids: [id] }, () => {
postUnReleases({ id }, () => {
getList(
_this.filterParams({
pageNo: page,
......@@ -298,6 +300,9 @@ class Atricle extends React.Component {
deptName: values.deptName,
pdfOssUrl: pdfOssUrl,
pdfFileName: pdfFileName,
typeOne: values.type[0],
typeTwo: values.type[1] ? values.type[1] : 0,
typeThree: values.type[2] ? values.type[2] : 0,
};
postUpdata(_this.filterParams(jsonEdit), () => {
// reset
......@@ -329,6 +334,7 @@ class Atricle extends React.Component {
{
title: "序号",
dataIndex: "key",
width: "80px",
key: "key",
render: (text, record, index) => (
<span>{this.state.pagesize * (this.state.page - 1) + index + 1}</span>
......@@ -337,6 +343,7 @@ class Atricle extends React.Component {
{
title: "投稿id",
dataIndex: "number",
width: "100px",
key: "number",
render: text => {
return <span title={text}>{text}</span>;
......@@ -345,6 +352,7 @@ class Atricle extends React.Component {
{
title: "投稿类型",
dataIndex: "typeId",
width: "100px",
key: "typeId",
render: (text, record) => {
return (
......@@ -357,6 +365,7 @@ class Atricle extends React.Component {
{
title: "作者",
dataIndex: "author",
width: "100px",
key: "author",
render: text => {
return <span title={text}>{text}</span>;
......@@ -365,6 +374,7 @@ class Atricle extends React.Component {
{
title: "支部或部室",
dataIndex: "deptName",
width: "150px",
key: "deptName",
render: text => {
return <span title={text}>{text}</span>;
......@@ -373,12 +383,16 @@ class Atricle extends React.Component {
{
title: "投稿时间",
dataIndex: "submitTime",
width: "100px",
key: "submitTime",
render: text => <span>{moment(text).format("YYYY-MM-DD HH:mm")}</span>,
render: text => (
<span>{text ? moment(text).format("YYYY-MM-DD HH:mm") : "-"}</span>
),
},
{
title: "投稿标题",
dataIndex: "fileName",
width: "200px",
key: "fileName",
render: text => {
return (
......@@ -390,13 +404,17 @@ class Atricle extends React.Component {
},
{
title: "审核时间",
width: "100px",
dataIndex: "approveTime",
key: "approveTime",
render: text => <span>{moment(text).format("YYYY-MM-DD HH:mm")}</span>,
render: text => (
<span>{text ? moment(text).format("YYYY-MM-DD HH:mm") : "-"}</span>
),
},
{
title: "状态",
dataIndex: "state",
width: "80px",
key: "state",
render: text => <span>{this.getStatus(text)}</span>,
},
......@@ -404,7 +422,7 @@ class Atricle extends React.Component {
title: "操作",
dataIndex: "operation",
key: "operation",
width: "30%",
width: "300px",
render: (text, record) => {
return (
<div>
......@@ -530,6 +548,7 @@ function mapStateToProps(state, ownProps) {
return {
tableList: state.article.tableList,
menuList: state.article.menuList,
ificationList: state.information.ificationList,
};
}
function mapDispatchToProps(dispatch) {
......@@ -545,6 +564,8 @@ function mapDispatchToProps(dispatch) {
getSeeEdit: (obj, callback) => dispatch(getSeeEdit(obj, callback)),
getApprove: (obj, callback) => dispatch(getApprove(obj, callback)),
menu: (obj, callback) => dispatch(menu(obj, callback)),
getIficationList: (obj, callback) =>
dispatch(getIficationList(obj, callback)),
};
}
export default connect(mapStateToProps, mapDispatchToProps)(Atricle);
import services from "@/services/serve";
export default {
postReleasesApi: `POST ${services.webManage}/site/classify/publication/releases`, //id
postUnReleasesApi: `POST ${services.webManage}/site/classify/publication/unreleases`, //id
postReleasesApi: `GET ${services.webManage}/site/classify/publication/releases`, //id
postUnReleasesApi: `GET ${services.webManage}/site/classify/publication/unreleases`, //id
postInsertApi: `POST ${services.webManage}/site/classify/publication/insert`,
getSeeEditApi: `GET ${services.webManage}/site/classify/publication/view`, //id
postUpdataApi: `POST ${services.webManage}/site/classify/publication/update`,
......
......@@ -5,7 +5,8 @@
* */
import React from "react";
import { Table, Select, Popconfirm, Button } from "antd";
import { Table, Select, Popconfirm, Button, Form, Row, Col, Input } from "antd";
const FormItem = Form.Item;
import { connect } from "react-redux";
import styles from "./index.less";
import intl from "react-intl-universal";
......@@ -169,23 +170,42 @@ class Banner extends React.PureComponent {
componentDidMount() {
this.reGetBannerList();
}
reGetBannerList = () => {
filterParams(params) {
for (let key in params) {
if (
params[key] === "" ||
params[key] === null ||
params[key] === undefined
) {
delete params[key];
}
}
return params;
}
reGetBannerList = values => {
let {
currentTerminal = {},
currentModule = {},
state,
pageNo,
pageSize,
} = this.state;
let _this = this;
let param = {
bannerName: currentModule.moduleName,
terminalName: currentTerminal.terminalName, // 移动端 或 PC
state: state,
pageNo: pageNo,
pageSize: pageSize,
};
let param;
values
? (param = {
bannerName: currentModule.moduleName,
terminalName: currentTerminal.terminalName, // 移动端 或 PC
pageNo: pageNo,
pageSize: pageSize,
...values,
})
: (param = {
bannerName: currentModule.moduleName,
terminalName: currentTerminal.terminalName, // 移动端 或 PC
pageNo: pageNo,
pageSize: pageSize,
state: 3,
});
this.props.getBannerList(param, () => {
let { bannerList = {} } = _this.props;
let { page = {} } = bannerList;
......@@ -264,10 +284,19 @@ class Banner extends React.PureComponent {
editBannerVS: false,
});
};
handleSubmit = e => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
if (!err) {
this.reGetBannerList(values);
}
});
};
render() {
console.log("this.props==", this.props);
console.log("this.state==", this.state);
const { getFieldDecorator, resetFields } = this.props.form;
const {
currentModule = {},
currentTerminal = {},
......@@ -277,7 +306,7 @@ class Banner extends React.PureComponent {
return (
<div className={styles.banner_manage_body}>
<Breadcrumb title="滚动首图管理" />
<div className={styles.left}>
{/* <div className={styles.left}>
{this.terminalList.map((item, index) => {
return (
<div key={item.id} className={styles.terminalItem}>
......@@ -304,29 +333,66 @@ class Banner extends React.PureComponent {
</div>
);
})}
</div>
</div> */}
<Row>
<Form
layout="inline"
onSubmit={this.handleSubmit}
style={{ paddingBottom: 30 }}
>
<Col span={22} offset={1}>
<FormItem label="图片名称:">
{getFieldDecorator("imgTitle")(
<Input
style={{ width: "200px" }}
placeholder="请输入图片名称"
/>
)}
</FormItem>
<FormItem label="状态:">
{getFieldDecorator("state", { initialValue: "3" })(
<Select
style={{ width: "200px" }}
placeholder="请选择问题类型"
>
<Option value="3">全部</Option>
<Option value="1">已上架</Option>
<Option value="2">已下架</Option>
</Select>
)}
</FormItem>
</Col>
<Col span={8} offset={16}>
<FormItem>
<Button
type="primary"
onClick={() => this.toEditBanner({}, "add")}
style={{ marginRight: 8 }}
>
新建Banner
</Button>
<Button
type="primary"
onClick={() => {
resetFields();
this.reGetBannerList();
}}
style={{ marginRight: 8 }}
>
重置
</Button>
<Button
type="primary"
htmlType="submit"
style={{ marginLeft: "30px" }}
>
查询
</Button>
</FormItem>
</Col>
</Form>
</Row>
<div className={styles.right}>
<div className={styles.rightTop}>
<div className={styles.topLeft}>Bannner列表</div>
<div className={styles.topRight}>
<Button
type="primary"
onClick={() => this.toEditBanner({}, "add")}
style={{ marginRight: 8 }}
>
新建Banner
</Button>
<Select
style={{ width: 152 }}
value={this.state.state}
onChange={this.selectState}
>
<Option value="3">全部</Option>
<Option value="1">已上架</Option>
<Option value="2">已下架</Option>
</Select>
</div>
</div>
<Table
rowKey={record => record.id}
columns={this.columns}
......@@ -381,4 +447,7 @@ function mapDispatchToProps(dispatch) {
dispatch(handleBannerDelete(param, callback)),
};
}
export default connect(mapStateToProps, mapDispatchToProps)(Banner);
export default connect(
mapStateToProps,
mapDispatchToProps
)(Form.create()(Banner));
.banner_manage_body {
display: flex;
// padding: 16px;
border-radius: 4px;
......
import React from "react";
import { Form, Icon, Input, Button, DatePicker } from "antd";
import { Row, Col, Form, Icon, Input, Button, DatePicker, Select } from "antd";
const FormItem = Form.Item;
const Option = Select.Option;
const RangePicker = DatePicker.RangePicker;
class Header extends React.Component {
handleSubmit = e => {
......@@ -11,53 +12,105 @@ class Header extends React.Component {
}
});
};
reset = () => {
this.props.headForm({});
};
showModal = () => {
this.props.showModal();
};
render() {
const {
getFieldDecorator,
resetFields,
getFieldsError,
getFieldError,
isFieldTouched,
} = this.props.form;
const List = [
{ value: 2, text: "上架" },
{ value: 1, text: "下架" },
];
const option = List.map((item, index) => {
return (
<Option value={item.value} key={index}>
{item.text}
</Option>
);
});
const List1 = [
{ value: 1, text: "同步首页" },
{ value: 2, text: "移除首页" },
];
const option1 = List1.map((item, index) => {
return (
<Option value={item.value} key={index}>
{item.text}
</Option>
);
});
return (
<Form
layout="inline"
onSubmit={this.handleSubmit}
style={{ paddingBottom: 30 }}
>
<FormItem label="关键字(词):">
{getFieldDecorator("fileName")(
<Input
style={{ width: "250px" }}
placeholder="请输入资讯标题、自定义关键词"
/>
)}
</FormItem>
{/* <FormItem label="关键字">
{getFieldDecorator('keyWords')(
<Input placeholder="请输入资讯标题" />
)}
</FormItem> */}
<FormItem label="创建时间">
{getFieldDecorator("time")(
<RangePicker style={{ width: "220px" }} format="YYYY-MM-DD" />
)}
</FormItem>
<FormItem>
<Button type="primary" htmlType="submit">
查询
</Button>
<Button
type="primary"
style={{ marginLeft: "30px" }}
onClick={this.showModal}
>
新建内容
</Button>
</FormItem>
</Form>
<Row>
<Form
layout="inline"
onSubmit={this.handleSubmit}
style={{ paddingBottom: 30 }}
>
<Col span={22} offset={1}>
<FormItem label="关键字(词):">
{getFieldDecorator("fileName")(
<Input
style={{ width: "200px" }}
placeholder="请输入资讯标题、自定义关键词"
/>
)}
</FormItem>
<FormItem label="发布状态:">
{getFieldDecorator("state")(
<Select style={{ width: "200px" }} placeholder="请选择发布状态">
{option}
</Select>
)}
</FormItem>
<FormItem label="是否同步首页:">
{getFieldDecorator("isTop")(
<Select
style={{ width: "200px" }}
placeholder="请选择是否同步首页"
>
{option1}
</Select>
)}
</FormItem>
<FormItem label="修改时间">
{getFieldDecorator("time")(<RangePicker format="YYYY-MM-DD" />)}
</FormItem>
</Col>
<Col span={8} offset={16}>
<FormItem>
<Button type="primary" htmlType="submit">
查询
</Button>
<Button
style={{ marginLeft: "30px" }}
type="primary"
onClick={() => {
resetFields();
this.reset();
}}
>
重置
</Button>
<Button
type="primary"
style={{ marginLeft: "30px" }}
onClick={this.showModal}
>
新建内容
</Button>
</FormItem>
</Col>
</Form>
</Row>
);
}
}
......
......@@ -15,6 +15,7 @@ const {
postInsertApi,
getSeeEditApi,
postUpdataApi,
getMenuApi,
} = apis;
//资讯管理
......@@ -28,6 +29,7 @@ export const SEEEDIT = "SEEEDIT";
// let seeEdit = createAction(SEEEDIT);
export const NULLSEEEDIT = "NULLSEEEDIT";
// let nullSeeEdit = createAction(NULLSEEEDIT);
export const MENULIST = "MENULIST";
// 获取分类信息
export function getIficationList(data, callback) {
return dispatch => {
......@@ -223,3 +225,17 @@ export function nullSeeEdit(data, callback) {
return dispatch({ type: NULLSEEEDIT });
};
}
export function getMenu(data, callback) {
return dispatch => {
// return fetch(api.informationUrl+`/manage/site/classify/info/insert`,{type:'POST',data:data})
return request({
url: getMenuApi,
data: data,
}).then(res => {
dispatch({ type: MENULIST, data: res.data });
if (callback) {
callback();
}
});
};
}
......@@ -12,4 +12,5 @@ export default {
postInsertApi: `POST ${services.webManage}/site/classify/info/insert`,
getSeeEditApi: `GET ${services.webManage}/site/classify/info/view`,
postUpdataApi: `POST ${services.webManage}/site/classify/info/update`,
getMenuApi: `GET ${services.base}/system/dictionary/child/listByCode`,
};
......@@ -11,6 +11,7 @@ const initialState = {
tableList: null,
classifySelect: null,
seeEdit: null,
menuList: [],
};
function information(state = initialState, action) {
......@@ -40,6 +41,10 @@ function information(state = initialState, action) {
return Object.assign({}, state, {
seeEdit: null,
});
case "MENULIST":
return Object.assign({}, state, {
menuList: action.data,
});
default:
return state;
}
......
import React from "react";
import {
Button,
Modal,
Form,
Input,
Radio,
Cascader,
DatePicker,
Upload,
Icon,
message,
} from "antd";
import { connect } from "react-redux";
// import {gupList, gupfetch} from 'ACTIONS/upload';
import { gupList, gupfetch } from "@/common/UpLoad/redux/actions";
import Editor from "@/common/Editor/editor";
import UpLoad from "@/common/UpLoad";
import moment from "moment";
import validator from "@/common/validatorForm/index";
const FormItem = Form.Item;
class addEdit extends React.Component {
constructor(props) {
super(props);
this.state = {
uploadParams: {},
uploadAction: "",
editor: "",
tags: [],
fileList: [],
responseList: [],
};
this.props.gupfetch();
this.beforeUpload = this.beforeUpload.bind(this);
this.handleUploadChange = this.handleUploadChange.bind(this);
}
componentDidMount() {
const { seeEdit, type } = this.props;
}
//多媒体组件事件
getEditorHtml = editor => {
this.props.onEditor(editor);
};
//上传文件
beforeUpload(file, fileList) {
console.log("检测打印变量=file ", file);
if (file.size > 1024 * 1024 * 50) {
message.error("上传最大限制50mb以内");
return;
}
const { param } = this.props;
if (param !== null) {
this.setState({
uploadParams: {
Filename:
param.dir +
"/" +
file.uid +
"." +
file.name.substr(file.name.length - 3),
key:
param.dir +
"/" +
file.uid +
"." +
file.name.substr(file.name.length - 3),
policy: param.policy,
OSSAccessKeyId: param.accessid,
success_action_status: "200",
signature: param.signature,
},
uploadAction: param.host,
});
this.setState({
hostAndDir: param.host + "/" + param.dir,
fileList: [],
});
}
}
//123
handleUploadChange({ file, fileList }) {
// console.log(123,file.name.split('.')[1])
// if (file.name.indexOf("pdf") == -1) {
// message.error("请上传pdf文件");
// return;
// }
let temp = this.state.fileList;
if (file.status == "removed") {
temp = temp.filter(item => {
return item.uid != file.uid;
});
this.setState({
fileList: temp,
responseList: temp.map(item => {
return {
fileName: item.name,
fileUrl: item.fileUrl
? item.fileUrl
: this.state.hostAndDir +
"/" +
item.uid +
"." +
item.name.substr(item.name.length - 3),
size: item.size + "",
suffix: "." + item.name.split(".")[1],
};
}),
});
} else {
temp.push(fileList.pop());
this.setState({
fileList: temp.map(item => {
return {
uid: item.uid,
name: item.name,
size: item.size,
fileUrl: item.fileUrl,
};
}),
});
this.setState({
responseList: temp.map(item => {
return {
fileName: item.name,
fileUrl: item.fileUrl
? item.fileUrl
: this.state.hostAndDir +
"/" +
item.uid +
"." +
item.name.substr(item.name.length - 3),
size: item.size + "",
suffix: "." + item.name.split(".")[1],
};
}),
});
}
}
normFile = e => {
if (Array.isArray(e)) {
return e;
}
return e && this.state.fileLists;
};
render() {
var fileUrl = "";
var fileName = "";
if (this.state.responseList[0]) {
var fileUrl = this.state.responseList[0].fileUrl;
var fileName = this.state.responseList[0].fileName;
}
const {
visible,
onCancel,
onCreate,
onApprove,
title,
fileList,
form,
seeEdit = {},
type,
} = this.props;
const { uploadParams, uploadAction, tags } = this.state;
const { getFieldDecorator } = form;
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 4 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 20 },
},
};
const { id } = this.props.seeEdit;
const types = this.props.seeEdit.type;
return (
<Modal
visible={visible}
title={title}
okText="确定"
width={1000}
destroyOnClose
onCancel={onCancel}
footer={
<>
{type == "edit" && (
<Button
key="1"
type="primary"
onClick={() => onCreate(id, types)}
>
保存
</Button>
)}
<Button key="3" type="primary" onClick={onCancel}>
返回
</Button>
</>
}
>
<Form>
<FormItem {...formItemLayout} label="联系人">
{getFieldDecorator("contactName", {
initialValue: seeEdit && seeEdit.contactName,
})(<Input style={{ width: "300px" }} disabled />)}
</FormItem>
<FormItem {...formItemLayout} label="联系人手机/邮箱">
{getFieldDecorator("contactNumber", {
initialValue: seeEdit && seeEdit.contactNumber,
})(<Input style={{ width: "300px" }} disabled />)}
</FormItem>
<FormItem {...formItemLayout} label="来源类型">
{getFieldDecorator("targetFrom", {
initialValue: seeEdit && seeEdit.targetFrom,
})(
<Input
style={{ width: "300px" }}
disabled={type != "edit" ? true : false}
/>
)}
</FormItem>
<FormItem {...formItemLayout} label="标题">
{getFieldDecorator("name", {
initialValue: seeEdit && seeEdit.fileName,
})(
<Input
style={{ width: "300px" }}
disabled={type != "edit" ? true : false}
/>
)}
</FormItem>
<FormItem {...formItemLayout} label="图片">
{seeEdit.ossPicUrl &&
JSON.parse(seeEdit.ossPicUrl).length > 0 &&
JSON.parse(seeEdit.ossPicUrl).map((item, index) => (
<img key={index} src={item} alt="" style={{ width: "300px" }} />
))}
</FormItem>
<FormItem {...formItemLayout} label="视频">
{seeEdit.ossVideoUrl &&
JSON.parse(seeEdit.ossVideoUrl).length > 0 &&
JSON.parse(seeEdit.ossVideoUrl).map((item, index) => (
<video
style={{ width: "300px" }}
key={index}
src={item}
controls="controls"
>
您的浏览器不支持 video 标签。
</video>
))}
</FormItem>
<FormItem {...formItemLayout} label="内容">
{getFieldDecorator("content", {
initialValue: seeEdit && seeEdit.content,
})(
<textarea
style={{ width: "600px", minHeight: "200px" }}
disabled={type != "edit" ? true : false}
/>
)}
</FormItem>
{types == 2 && (
<FormItem {...formItemLayout} label="期望结果">
{getFieldDecorator("remark", {
initialValue: seeEdit && seeEdit.remark,
})(
<textarea
style={{ width: "600px", minHeight: "200px" }}
disabled={type != "edit" ? true : false}
/>
)}
</FormItem>
)}
</Form>
</Modal>
);
}
}
function mapStateToProps(state, ownProps) {
return {
param: state.uploadParam.param,
fileList: state.uploadParam.fileList,
ificationList: state.article.ificationList,
seeEdit: state.article.seeEdit,
};
}
function mapDispatchToProps(dispatch) {
return {
gupfetch: () => dispatch(gupfetch()),
gupList: fileList => dispatch(gupList(fileList)),
};
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(Form.create()(addEdit));
import React from "react";
import { Row, Col, Form, Icon, Input, Button, DatePicker, Select } from "antd";
const FormItem = Form.Item;
const RangePicker = DatePicker.RangePicker;
const Option = Select.Option;
class Header extends React.Component {
handleSubmit = e => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
if (!err) {
this.props.headForm(values);
}
});
};
reset = () => {
this.props.headForm({});
};
render() {
const { getFieldDecorator, resetFields } = this.props.form;
const List = [
{ value: 1, text: "纪检" },
{ value: 2, text: "书记" },
];
const option = List.map((item, index) => {
return (
<Option value={item.value} key={index}>
{item.text}
</Option>
);
});
const status = [
{ value: 1, text: "代接收" },
{ value: 2, text: "已接收" },
];
const types = status.map((item, index) => {
return (
<Option value={item.value} key={index}>
{item.text}
</Option>
);
});
return (
<Row>
<Form
layout="inline"
onSubmit={this.handleSubmit}
style={{ paddingBottom: 30 }}
>
<Col span={22} offset={1}>
<FormItem label="信箱标题:">
{getFieldDecorator("fileName")(
<Input
style={{ width: "200px" }}
placeholder="请输入信箱标题"
/>
)}
</FormItem>
<FormItem label="信箱类型:">
{getFieldDecorator("type")(
<Select style={{ width: "200px" }} placeholder="请选择信箱类型">
{option}
</Select>
)}
</FormItem>
<FormItem label="联系人:">
{getFieldDecorator("contactName")(
<Input style={{ width: "200px" }} placeholder="请输入联系人" />
)}
</FormItem>
</Col>
<Col span={6} offset={18}>
<FormItem>
<Button
type="primary"
onClick={() => {
resetFields();
this.reset();
}}
>
重置
</Button>
<Button
type="primary"
htmlType="submit"
style={{ marginLeft: "30px" }}
>
查询
</Button>
</FormItem>
</Col>
</Form>
</Row>
);
}
}
const Head = Form.create()(Header);
export default Head;
import { message } from "antd";
import request from "@/util/request.js";
import apis from "./api";
const {
// postReleasesApi,
// postUnReleasesApi,
// postInsertApi,
// postUpdataApi,
// getApproveApi,
// getUnapproveApi,
getSeeEditApi,
// searchApi,
updateState,
updateState1,
listApi,
deleteApi,
// menuApi,
} = apis;
//投稿管理
export const IFICATIONLIST = "IFICATIONLIST";
// let ificationList = createAction(IFICATIONLIST);
export const TABLELIST = "TABLELIST";
export const MENULIST = "MENULIST";
// let tableList = createAction(TABLELIST);
export const CLASSIFYSELECT = "CLASSIFYSELECT";
// let classifySelect = createAction(CLASSIFYSELECT);
export const SEEEDIT = "SEEEDIT";
// let seeEdit = createAction(SEEEDIT);
export const NULLSEEEDIT = "NULLSEEEDIT";
// let nullSeeEdit = createAction(NULLSEEEDIT);
// 获取列表
export function getList(data, callback) {
return dispatch => {
return request({
url: listApi,
data: data,
}).then(res => {
dispatch({ type: TABLELIST, data: res.data });
if (callback) {
callback();
}
});
};
}
//查看
export function getSeeEdit(data, callback) {
return dispatch => {
return request({
url: getSeeEditApi,
data: data,
}).then(res => {
dispatch({ type: SEEEDIT, data: res.data });
if (callback) {
callback();
}
});
};
}
// 更新状态
export function getUpdateState(data, callback) {
return dispatch => {
return request({
url: updateState,
data: data,
}).then(res => {
if (callback) {
callback();
}
});
};
}
// 更新状态
export function getUpdateState1(data, callback) {
return dispatch => {
return request({
url: updateState1,
data: data,
}).then(res => {
if (callback) {
callback();
}
});
};
}
// 删除
export function getDelete(data, callback) {
return dispatch => {
return request({
url: deleteApi,
data: data,
}).then(res => {
if (callback) {
callback();
}
});
};
}
// 搜索
// export function getSearch(data, callback) {
// return dispatch => {
// return request({
// url: searchApi,
// data: data,
// }).then(res => {
// dispatch({ type: IFICATIONLIST, data: arr });
// if (callback) {
// callback();
// }
// });
// };
// }
// 审批通过
// export function getApprove(data, callback) {
// return dispatch => {
// return request({
// url: getApproveApi,
// data: data,
// }).then(res => {
// if (callback) {
// callback();
// }
// });
// };
// }
// 审批不通过
// export function getUnapprove(data, callback) {
// return dispatch => {
// return request({
// url: getUnapproveApi,
// data: data,
// }).then(res => {
// if (callback) {
// callback();
// }
// });
// };
// }
//发布
// export function postReleases(data, callback) {
// return dispatch => {
// return request({
// url: postReleasesApi,
// data: data,
// }).then(res => {
// dispatch({ type: TABLELIST, data: res.data });
// if (callback) {
// callback();
// }
// });
// };
// }
//取消发布
// export function postUnReleases(data, callback) {
// return dispatch => {
// return request({
// url: postUnReleasesApi,
// data: data,
// }).then(res => {
// if (callback) {
// callback();
// }
// });
// };
// }
//编辑
// export function postUpdata(data, callback) {
// return dispatch => {
// return request({
// url: postUpdataApi,
// data: data,
// }).then(res => {
// if (callback) {
// callback();
// }
// });
// };
// }
//菜单
// export function menu(data, callback) {
// return dispatch => {
// return request({
// url: menuApi,
// data: data,
// }).then(res => {
// dispatch({ type: MENULIST, data: res.data });
// if (callback) {
// callback();
// }
// });
// };
// }
import services from "@/services/serve";
export default {
// postReleasesApi: `POST ${services.webManage}/site/classify/publication/releases`, //id
// postUnReleasesApi: `POST ${services.webManage}/site/classify/publication/unreleases`, //id
// postInsertApi: `POST ${services.webManage}/site/classify/publication/insert`,
getSeeEditApi: `GET ${services.webManage}/systemMailbox/getById`, //id
// postUpdataApi: `POST ${services.webManage}/site/classify/publication/update`,
// getApproveApi: `GET ${services.webManage}/site/classify/publication/approve`, //id
// getUnapproveApi: `GET ${services.webManage}/site/classify/publication/unApprove`, //id
// searchApi: `GET ${services.webManage}/site/classify/publication/listbyName`, //?name=''&siteId
updateState: `POST ${services.webManage}/systemMailbox/save/1`,
updateState1: `POST ${services.webManage}/systemMailbox/save/2`,
listApi: `POST ${services.webManage}/systemMailbox/selectPage`,
deleteApi: `GET ${services.webManage}/systemMailbox/removeById`,
// menuApi: `GET ${services.base}/system/dictionary/child/list`,
};
// 资讯管理
// import {
// IFICATIONLIST,
// TABLELIST,
// CLASSIFYSELECT,
// SEEEDIT,
// NULLSEEEDIT,
// } from "../../actions/information/informationManag";
const initialState = {
ificationList: null,
tableList: null,
classifySelect: null,
seeEdit: null,
menuList: null,
};
function article(state = initialState, action) {
switch (action.type) {
//获取资讯分类
case "IFICATIONLIST":
return Object.assign({}, state, {
ificationList: action.data,
});
//获取Table List
case "TABLELIST":
return Object.assign({}, state, {
tableList: action.data,
});
//获取父级分类
case "CLASSIFYSELECT":
return Object.assign({}, state, {
classifySelect: action.data,
});
//获取查看信息
case "SEEEDIT":
return Object.assign({}, state, {
seeEdit: action.data,
});
//清seeEdit
case "NULLSEEEDIT":
return Object.assign({}, state, {
seeEdit: null,
});
case "MENULIST":
return Object.assign({}, state, {
menuList: action.data,
});
default:
return state;
}
}
export default article;
.pm-content {
padding: 20px;
padding-top: 0;
.ant-tree li .ant-tree-node-content-wrapper {
width: 85%;
}
.ant-tree li {
white-space: normal;
}
.pm-tree {
font-size: 15px;
}
.pmEditIcon {
:hover {
color: #0e77ca;
}
margin-left: 10px;
}
}
.marr10 {
margin-right: 10px;
}
.comment {
.dispno {
display: none;
}
.wid40 {
width: 40%;
}
.wid50 {
width: 50%;
}
.fl {
float: left;
}
.fr {
float: right;
}
.mar40 {
margin: 10px;
.ant-input-search-button {
width: 100%;
}
.editable-cell {
display: inline-block;
}
}
.marb40 {
margin-bottom: 10px;
}
.marl20 {
margin-left: 20px;
}
.marl40 {
margin-left: 40px;
}
.ovehid {
overflow: hidden;
}
.otwhen {
width: 260px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-bottom: 0;
}
.comment-pagination {
text-align: center;
margin-top: 20px;
}
}
.steps-content {
margin-top: 16px;
border: 1px dashed #e9e9e9;
border-radius: 6px;
background-color: white;
min-height: 320px;
text-align: center;
padding-top: 20px;
}
.steps-action {
margin-top: 24px;
}
// .ant-form-explain {
// float: left;
// }
.train-list-pagination {
margin-top: 20px;
text-align: center;
}
.custom-filter-dropdown {
padding: 8px;
border-radius: 6px;
background: #fff;
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2);
}
.custom-filter-dropdown input {
width: 130px;
margin-right: 8px;
}
.highlight {
color: #f50;
}
.third {
overflow: hidden;
}
.qclist {
display: none;
}
.treeTtitle {
span[draggable] {
width: 85% !important;
}
}
\ No newline at end of file
import React from "react";
import {
Button,
Modal,
Form,
Input,
Radio,
Cascader,
DatePicker,
Upload,
Icon,
message,
} from "antd";
import { connect } from "react-redux";
// import {gupList, gupfetch} from 'ACTIONS/upload';
import { gupList, gupfetch } from "@/common/UpLoad/redux/actions";
import Editor from "@/common/Editor/editor";
import UpLoad from "@/common/UpLoad";
import moment from "moment";
import validator from "@/common/validatorForm/index";
const FormItem = Form.Item;
class addEdit extends React.Component {
constructor(props) {
super(props);
this.state = {
uploadParams: {},
uploadAction: "",
editor: "",
tags: [],
fileList: [],
responseList: [],
};
this.props.gupfetch();
this.beforeUpload = this.beforeUpload.bind(this);
this.handleUploadChange = this.handleUploadChange.bind(this);
}
componentDidMount() {
const { seeEdit, type } = this.props;
}
//多媒体组件事件
getEditorHtml = editor => {
this.props.onEditor(editor);
};
//上传文件
beforeUpload(file, fileList) {
console.log("检测打印变量=file ", file);
if (file.size > 1024 * 1024 * 50) {
message.error("上传最大限制50mb以内");
return;
}
const { param } = this.props;
if (param !== null) {
this.setState({
uploadParams: {
Filename:
param.dir +
"/" +
file.uid +
"." +
file.name.substr(file.name.length - 3),
key:
param.dir +
"/" +
file.uid +
"." +
file.name.substr(file.name.length - 3),
policy: param.policy,
OSSAccessKeyId: param.accessid,
success_action_status: "200",
signature: param.signature,
},
uploadAction: param.host,
});
this.setState({
hostAndDir: param.host + "/" + param.dir,
fileList: [],
});
}
}
//123
handleUploadChange({ file, fileList }) {
// console.log(123,file.name.split('.')[1])
// if (file.name.indexOf("pdf") == -1) {
// message.error("请上传pdf文件");
// return;
// }
let temp = this.state.fileList;
if (file.status == "removed") {
temp = temp.filter(item => {
return item.uid != file.uid;
});
this.setState({
fileList: temp,
responseList: temp.map(item => {
return {
fileName: item.name,
fileUrl: item.fileUrl
? item.fileUrl
: this.state.hostAndDir +
"/" +
item.uid +
"." +
item.name.substr(item.name.length - 3),
size: item.size + "",
suffix: "." + item.name.split(".")[1],
};
}),
});
} else {
temp.push(fileList.pop());
this.setState({
fileList: temp.map(item => {
return {
uid: item.uid,
name: item.name,
size: item.size,
fileUrl: item.fileUrl,
};
}),
});
this.setState({
responseList: temp.map(item => {
return {
fileName: item.name,
fileUrl: item.fileUrl
? item.fileUrl
: this.state.hostAndDir +
"/" +
item.uid +
"." +
item.name.substr(item.name.length - 3),
size: item.size + "",
suffix: "." + item.name.split(".")[1],
};
}),
});
}
}
normFile = e => {
if (Array.isArray(e)) {
return e;
}
return e && this.state.fileLists;
};
render() {
var fileUrl = "";
var fileName = "";
if (this.state.responseList[0]) {
var fileUrl = this.state.responseList[0].fileUrl;
var fileName = this.state.responseList[0].fileName;
}
const {
visible,
onCancel,
onCreate,
onApprove,
title,
fileList,
form,
seeEdit = {},
type,
} = this.props;
const { uploadParams, uploadAction, tags } = this.state;
const { getFieldDecorator } = form;
const formItemLayout = {
labelCol: {
xs: { span: 24 },
sm: { span: 4 },
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 20 },
},
};
const { id, state } = this.props.seeEdit;
return (
<Modal
visible={visible}
title={title}
okText="确定"
width={1000}
destroyOnClose
onCancel={onCancel}
footer={
<>
{state == 1 && (
<Button key="1" type="primary" onClick={() => onApprove(id, 2)}>
接收
</Button>
)}
<Button key="3" type="primary" onClick={onCancel}>
返回
</Button>
</>
}
>
<Form>
<FormItem {...formItemLayout} label="留言标题">
{getFieldDecorator("name", {
initialValue: seeEdit && seeEdit.name,
})(
<Input
disabled={type != "edit" ? true : false}
style={{ width: "300px" }}
/>
)}
</FormItem>
<FormItem {...formItemLayout} label="留言图片">
{seeEdit.ossUrl &&
JSON.parse(seeEdit.ossUrl).length > 0 &&
JSON.parse(seeEdit.ossUrl).map((item, index) => (
<img key={index} src={item} alt="" style={{ width: "300px" }} />
))}
</FormItem>
<FormItem {...formItemLayout} label="内容">
{getFieldDecorator("content", {
initialValue: seeEdit && seeEdit.content,
})(
<textarea
disabled={type != "edit" ? true : false}
style={{ width: "600px", minHeight: "200px" }}
/>
)}
</FormItem>
</Form>
</Modal>
);
}
}
function mapStateToProps(state, ownProps) {
return {
param: state.uploadParam.param,
fileList: state.uploadParam.fileList,
ificationList: state.article.ificationList,
seeEdit: state.article.seeEdit,
};
}
function mapDispatchToProps(dispatch) {
return {
gupfetch: () => dispatch(gupfetch()),
gupList: fileList => dispatch(gupList(fileList)),
};
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(Form.create()(addEdit));
import React from "react";
import { Row, Col, Form, Icon, Input, Button, DatePicker, Select } from "antd";
const FormItem = Form.Item;
const RangePicker = DatePicker.RangePicker;
const Option = Select.Option;
class Header extends React.Component {
handleSubmit = e => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
if (!err) {
this.props.headForm(values);
}
});
};
reset = () => {
this.props.headForm({});
};
render() {
const { getFieldDecorator, resetFields } = this.props.form;
const List = [
{ value: 1, text: "功能异常" },
{ value: 2, text: "体验问题" },
{ value: 3, text: "产品建议" },
{ value: 4, text: "其他" },
];
const option = List.map((item, index) => {
return (
<Option value={item.value} key={index}>
{item.text}
</Option>
);
});
const status = [
{ value: 1, text: "代接收" },
{ value: 2, text: "已接收" },
];
const types = status.map((item, index) => {
return (
<Option value={item.value} key={index}>
{item.text}
</Option>
);
});
return (
<Row>
<Form
layout="inline"
onSubmit={this.handleSubmit}
style={{ paddingBottom: 30 }}
>
<Col span={22} offset={1}>
<FormItem label="留言类型:">
{getFieldDecorator("bizType")(
<Select style={{ width: "200px" }} placeholder="请选择留言类型">
{option}
</Select>
)}
</FormItem>
<FormItem label="用户名:">
{getFieldDecorator("createByName")(
<Input style={{ width: "200px" }} placeholder="请输入用户名" />
)}
</FormItem>
<FormItem label="状态:">
{getFieldDecorator("state")(
<Select style={{ width: "200px" }} placeholder="请选择问题类型">
{types}
</Select>
)}
</FormItem>
</Col>
<Col span={6} offset={18}>
<FormItem>
<Button
type="primary"
onClick={() => {
resetFields();
this.reset();
}}
>
重置
</Button>
<Button
type="primary"
htmlType="submit"
style={{ marginLeft: "30px" }}
>
查询
</Button>
</FormItem>
</Col>
</Form>
</Row>
);
}
}
const Head = Form.create()(Header);
export default Head;
import { message } from "antd";
import request from "@/util/request.js";
import apis from "./api";
const {
// postReleasesApi,
// postUnReleasesApi,
// postInsertApi,
// postUpdataApi,
// getApproveApi,
// getUnapproveApi,
getSeeEditApi,
// searchApi,
updateState,
listApi,
deleteApi,
// menuApi,
} = apis;
//投稿管理
export const IFICATIONLIST = "IFICATIONLIST";
// let ificationList = createAction(IFICATIONLIST);
export const TABLELIST = "TABLELIST";
export const MENULIST = "MENULIST";
// let tableList = createAction(TABLELIST);
export const CLASSIFYSELECT = "CLASSIFYSELECT";
// let classifySelect = createAction(CLASSIFYSELECT);
export const SEEEDIT = "SEEEDIT";
// let seeEdit = createAction(SEEEDIT);
export const NULLSEEEDIT = "NULLSEEEDIT";
// let nullSeeEdit = createAction(NULLSEEEDIT);
// 获取列表
export function getList(data, callback) {
return dispatch => {
return request({
url: listApi,
data: data,
}).then(res => {
dispatch({ type: TABLELIST, data: res.data });
if (callback) {
callback();
}
});
};
}
//查看
export function getSeeEdit(data, callback) {
return dispatch => {
return request({
url: getSeeEditApi,
data: data,
}).then(res => {
dispatch({ type: SEEEDIT, data: res.data });
if (callback) {
callback();
}
});
};
}
// 更新状态
export function getUpdateState(data, callback) {
return dispatch => {
return request({
url: updateState,
data: data,
}).then(res => {
if (callback) {
callback();
}
});
};
}
// 删除
export function getDelete(data, callback) {
return dispatch => {
return request({
url: deleteApi,
data: data,
}).then(res => {
if (callback) {
callback();
}
});
};
}
// 搜索
// export function getSearch(data, callback) {
// return dispatch => {
// return request({
// url: searchApi,
// data: data,
// }).then(res => {
// dispatch({ type: IFICATIONLIST, data: arr });
// if (callback) {
// callback();
// }
// });
// };
// }
// 审批通过
// export function getApprove(data, callback) {
// return dispatch => {
// return request({
// url: getApproveApi,
// data: data,
// }).then(res => {
// if (callback) {
// callback();
// }
// });
// };
// }
// 审批不通过
// export function getUnapprove(data, callback) {
// return dispatch => {
// return request({
// url: getUnapproveApi,
// data: data,
// }).then(res => {
// if (callback) {
// callback();
// }
// });
// };
// }
//发布
// export function postReleases(data, callback) {
// return dispatch => {
// return request({
// url: postReleasesApi,
// data: data,
// }).then(res => {
// dispatch({ type: TABLELIST, data: res.data });
// if (callback) {
// callback();
// }
// });
// };
// }
//取消发布
// export function postUnReleases(data, callback) {
// return dispatch => {
// return request({
// url: postUnReleasesApi,
// data: data,
// }).then(res => {
// if (callback) {
// callback();
// }
// });
// };
// }
//编辑
// export function postUpdata(data, callback) {
// return dispatch => {
// return request({
// url: postUpdataApi,
// data: data,
// }).then(res => {
// if (callback) {
// callback();
// }
// });
// };
// }
//菜单
// export function menu(data, callback) {
// return dispatch => {
// return request({
// url: menuApi,
// data: data,
// }).then(res => {
// dispatch({ type: MENULIST, data: res.data });
// if (callback) {
// callback();
// }
// });
// };
// }
import services from "@/services/serve";
export default {
// postReleasesApi: `POST ${services.webManage}/site/classify/publication/releases`, //id
// postUnReleasesApi: `POST ${services.webManage}/site/classify/publication/unreleases`, //id
// postInsertApi: `POST ${services.webManage}/site/classify/publication/insert`,
getSeeEditApi: `GET ${services.webManage}/leaveWord/getById`, //id
// postUpdataApi: `POST ${services.webManage}/site/classify/publication/update`,
// getApproveApi: `GET ${services.webManage}/site/classify/publication/approve`, //id
// getUnapproveApi: `GET ${services.webManage}/site/classify/publication/unApprove`, //id
// searchApi: `GET ${services.webManage}/site/classify/publication/listbyName`, //?name=''&siteId
updateState: `GET ${services.webManage}/leaveWord/updateState`,
listApi: `POST ${services.webManage}/leaveWord/page`,
deleteApi: `GET ${services.webManage}/leaveWord/removeById`,
// menuApi: `GET ${services.base}/system/dictionary/child/list`,
};
// 资讯管理
// import {
// IFICATIONLIST,
// TABLELIST,
// CLASSIFYSELECT,
// SEEEDIT,
// NULLSEEEDIT,
// } from "../../actions/information/informationManag";
const initialState = {
ificationList: null,
tableList: null,
classifySelect: null,
seeEdit: null,
menuList: null,
};
function article(state = initialState, action) {
switch (action.type) {
//获取资讯分类
case "IFICATIONLIST":
return Object.assign({}, state, {
ificationList: action.data,
});
//获取Table List
case "TABLELIST":
return Object.assign({}, state, {
tableList: action.data,
});
//获取父级分类
case "CLASSIFYSELECT":
return Object.assign({}, state, {
classifySelect: action.data,
});
//获取查看信息
case "SEEEDIT":
return Object.assign({}, state, {
seeEdit: action.data,
});
//清seeEdit
case "NULLSEEEDIT":
return Object.assign({}, state, {
seeEdit: null,
});
case "MENULIST":
return Object.assign({}, state, {
menuList: action.data,
});
default:
return state;
}
}
export default article;
.pm-content {
padding: 20px;
padding-top: 0;
.ant-tree li .ant-tree-node-content-wrapper {
width: 85%;
}
.ant-tree li {
white-space: normal;
}
.pm-tree {
font-size: 15px;
}
.pmEditIcon {
:hover {
color: #0e77ca;
}
margin-left: 10px;
}
}
.marr10 {
margin-right: 10px;
}
.comment {
.dispno {
display: none;
}
.wid40 {
width: 40%;
}
.wid50 {
width: 50%;
}
.fl {
float: left;
}
.fr {
float: right;
}
.mar40 {
margin: 10px;
.ant-input-search-button {
width: 100%;
}
.editable-cell {
display: inline-block;
}
}
.marb40 {
margin-bottom: 10px;
}
.marl20 {
margin-left: 20px;
}
.marl40 {
margin-left: 40px;
}
.ovehid {
overflow: hidden;
}
.otwhen {
width: 260px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
margin-bottom: 0;
}
.comment-pagination {
text-align: center;
margin-top: 20px;
}
}
.steps-content {
margin-top: 16px;
border: 1px dashed #e9e9e9;
border-radius: 6px;
background-color: white;
min-height: 320px;
text-align: center;
padding-top: 20px;
}
.steps-action {
margin-top: 24px;
}
// .ant-form-explain {
// float: left;
// }
.train-list-pagination {
margin-top: 20px;
text-align: center;
}
.custom-filter-dropdown {
padding: 8px;
border-radius: 6px;
background: #fff;
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.2);
}
.custom-filter-dropdown input {
width: 130px;
margin-right: 8px;
}
.highlight {
color: #f50;
}
.third {
overflow: hidden;
}
.qclist {
display: none;
}
.treeTtitle {
span[draggable] {
width: 85% !important;
}
}
\ No newline at end of file
......@@ -80,7 +80,7 @@ class AddUser extends Component {
// console.log(userJson);
//添加用户action //关闭模态框onCancel
this.props.insertUser(userJson, res => {
message.success("新增用户成功")
message.success("新增用户成功");
this.props.onCancel(false);
this.props.handleSearch(); //bug-12527-liyuan
});
......@@ -153,8 +153,9 @@ class AddUser extends Component {
rules: [
{
required: true,
pattern: /^\w+$/,
message: "只能输入大小英文字母和数字",
pattern: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~@#$%\*-\+=:,\\?\[\]\{}]).{8,16}$/,
message:
"8-16位字符,同时包括数字、大小写字母和特殊字符四种组合",
},
],
})(<Input placeholder="密码" type="password" />)}
......
......@@ -30,10 +30,9 @@ class AddUser extends Component {
constructor(props) {
super(props);
this.state = {
companyCode:"",
siteCode:""
companyCode: "",
siteCode: "",
};
}
onChange = (orgId, val, extra) => {
// orgId = orgId?orgId.replace(val,""):"";
......@@ -47,9 +46,9 @@ class AddUser extends Component {
handleSubmit = e => {
e.preventDefault();
this.props.form.validateFields((err, values) => {
if (err){
if (err) {
return;
}
}
//选择设置时间
let { time } = values;
let startTime;
......@@ -88,23 +87,21 @@ class AddUser extends Component {
let userJson = { ...userValue, orgId };
console.log("用户信息说明=================" + userJson);
//添加用户action //关闭模态框onCancel
const _this = this
const _this = this;
this.props.insertUser(userJson, res => {
message.success("新增用户成功")
_this.props.history.push(
{
pathname:
"/" +
this.state.companyCode +
"/" +
this.state.siteCode +
"/index/manager/system/organization",
state:{
flag:true
}
}
);
message.success("新增用户成功");
_this.props.history.push({
pathname:
"/" +
this.state.companyCode +
"/" +
this.state.siteCode +
"/index/manager/system/organization",
state: {
flag: true,
},
});
// _this.props.handleSearch(); //bug-12527-liyuan
});
// this.props.handleSearch(); bug-12527-liyuan
......@@ -112,24 +109,22 @@ class AddUser extends Component {
});
};
handleCancelAddUser = () =>{
this.props.history.push(
{
pathname:
"/" +
this.state.companyCode +
"/" +
this.state.siteCode +
"/index/manager/system/organization",
state:{
flag:true
}
}
);
}
handleCancelAddUser = () => {
this.props.history.push({
pathname:
"/" +
this.state.companyCode +
"/" +
this.state.siteCode +
"/index/manager/system/organization",
state: {
flag: true,
},
});
};
render() {
let treeData = this.props.location.state.departmentTree.trees
let treeData = this.props.location.state.departmentTree.trees;
this.state.companyCode = this.props.location.state.companyCode;
this.state.siteCode = this.props.location.state.siteCode;
// = this.props.location.state.companyCode
......@@ -192,18 +187,31 @@ class AddUser extends Component {
},
},
],
})(<Input placeholder="请输入有效用户名称" maxLength={51} autocomplete="off"/>)}
})(
<Input
placeholder="请输入有效用户名称"
maxLength={51}
autocomplete="off"
/>
)}
</FormItem>
<FormItem {...formItemLayout} label="密码:">
{getFieldDecorator("userPassword", {
rules: [
{
required: true,
pattern: /^\w+$/,
message: "只能输入大小英文字母和数字",
pattern: /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[~@#$%\*-\+=:,\\?\[\]\{}]).{8,16}$/,
message:
"8-16位字符,同时包括数字、大小写字母和特殊字符四种组合",
},
],
})(<Input placeholder="密码" type="password" autoComplete="new-password" />)}
})(
<Input
placeholder="密码"
type="password"
autoComplete="new-password"
/>
)}
</FormItem>
<FormItem {...formItemLayout} label="工号:">
{getFieldDecorator("workNum", {
......@@ -211,12 +219,17 @@ class AddUser extends Component {
})(<Input placeholder="请输入工号" />)}
</FormItem>
<FormItem {...formItemLayout} label="姓名:">
{getFieldDecorator("fullName", {})(<Input placeholder="请输入姓名" />)}
{getFieldDecorator(
"fullName",
{}
)(<Input placeholder="请输入姓名" />)}
</FormItem>
<FormItem {...formItemLayout} label="部门">
{getFieldDecorator("orgId", {
// initialValue:window.orgId
initialValue: window._orgName ? window._orgName : treeData[0].name,
initialValue: window._orgName
? window._orgName
: treeData[0].name,
})(
<TreeSelect
showSearch
......@@ -231,7 +244,10 @@ class AddUser extends Component {
)}
</FormItem>
<FormItem {...formItemLayout} label="职务:">
{getFieldDecorator("position", {})(<Input placeholder="请输入职务" />)}
{getFieldDecorator(
"position",
{}
)(<Input placeholder="请输入职务" />)}
</FormItem>
<FormItem {...formItemLayout} label="手机号:">
{getFieldDecorator("mobile", {
......@@ -323,17 +339,20 @@ class AddUser extends Component {
rules: [{ required: true, message: "请选择有效期" }],
})(
<RadioGroup>
<div style={{marginTop:"10px"}}>
<div style={{ marginTop: "10px" }}>
<Radio value="1" checked>
永不过期
</Radio>
</div>
<div className={Styles.setDayView} style={{marginTop:"20px"}}>
<div
className={Styles.setDayView}
style={{ marginTop: "20px" }}
>
<Radio value="3">
<FormItem>
<span>设置周期:</span>
{getFieldDecorator("validDays", { initialValue: 1 })(
<InputNumber min={1} style={{marginLeft:"10px"}}/>
<InputNumber min={1} style={{ marginLeft: "10px" }} />
)}
<span className="ant-form-text"></span>
</FormItem>
......@@ -369,7 +388,13 @@ class AddUser extends Component {
)}
</FormItem>
<FormItem>
<div style={{ display: "flex", justifyContent: "center",marginBottom:"20px" }}>
<div
style={{
display: "flex",
justifyContent: "center",
marginBottom: "20px",
}}
>
<div>
<Button
type="default"
......
......@@ -21,6 +21,7 @@ import {
postPointAdd,
postPointModify,
pointActivityDel,
getCodeList,
} from "./redux/action";
import Styles from "./index.less";
import ModalForm from "./ModalForm";
......@@ -41,7 +42,8 @@ class ActiveOption extends React.Component {
};
componentDidMount() {
this.props.getPointTable({pageNo: 1, pageSize: 20});
this.props.getPointTable({ pageNo: 1, pageSize: 20 });
this.props.getCodeList({ code: "point_activity" });
}
//获取头部查询的值
onSearch = value => {
......@@ -108,6 +110,8 @@ class ActiveOption extends React.Component {
{
id: record.id,
activityName: values.activityName,
code: values.code,
activityType: values.activityType,
multiple: values.multiple,
startTime: values.time[0],
endTime: values.time[1],
......@@ -125,6 +129,8 @@ class ActiveOption extends React.Component {
this.props.postPointAdd(
{
activityName: values.activityName,
code: values.code,
activityType: values.activityType,
multiple: values.multiple,
startTime: values.time[0],
endTime: values.time[1],
......@@ -157,13 +163,13 @@ class ActiveOption extends React.Component {
render() {
const that = this;
const { current, pageSize, activityName } = this.state;
const { table, getPointTable } = this.props;
const { table, getPointTable, codeList } = this.props;
const columns = [
{
title: "活动策略名称",
dataIndex: "activityName",
key: "activityName",
width: 300, //bug-11246-liyuan 管理端-积分管理 -积分活动策略 UI bug
//width: 300, //bug-11246-liyuan 管理端-积分管理 -积分活动策略 UI bug
render: text => {
//bug-11246-liyuan 管理端-积分管理 -积分活动策略 UI bug
return (
......@@ -184,10 +190,28 @@ class ActiveOption extends React.Component {
},
},
{
title: "积分编号",
dataIndex: "code",
key: "code",
// width: 200, //bug-11246-liyuan 管理端-积分管理 -积分活动策略 UI bug
render: text => {
return codeList?.data?.find(item => item.code == text).cnName;
},
},
{
title: "积分类型",
dataIndex: "activityType",
key: "activityType",
// width: 200, //bug-11246-liyuan 管理端-积分管理 -积分活动策略 UI bug
render: text => {
return <span>{text == "1" ? "否" : text}</span>;
},
},
{
title: "积分倍数",
dataIndex: "multiple",
key: "multiple",
width: 200, //bug-11246-liyuan 管理端-积分管理 -积分活动策略 UI bug
// width: 200, //bug-11246-liyuan 管理端-积分管理 -积分活动策略 UI bug
render: text => {
return <span>{text == "1" ? "否" : text}</span>;
},
......@@ -196,7 +220,7 @@ class ActiveOption extends React.Component {
title: "发放有效期",
dataIndex: "time",
key: "time",
width: 400, //bug-11246-liyuan 管理端-积分管理 -积分活动策略 UI bug
// width: 400, //bug-11246-liyuan 管理端-积分管理 -积分活动策略 UI bug
render: (text, record) => {
return (
<span>
......@@ -302,7 +326,7 @@ class ActiveOption extends React.Component {
};
return (
<div className={Styles.list}>
<Breadcrumb title="活动策略设置"/>
<Breadcrumb title="活动策略设置" />
<div className={Styles.listBtn}>
<div style={{ float: "left" }}>
<Button type="primary" onClick={this.showModal}>
......@@ -333,6 +357,7 @@ class ActiveOption extends React.Component {
onCancel={this.handleCancel}
onCreate={this.handleCreate}
record={this.state.record}
codeList={this.props.codeList}
type={this.state.type}
/>
</div>
......@@ -343,12 +368,14 @@ class ActiveOption extends React.Component {
function mapStateToProps(state, ownProps) {
return {
table: state.point.table,
codeList: state.point.codeList,
};
}
function mapDispatchToProps(dispatch) {
return {
getPointTable: obj => dispatch(getPointTable(obj)),
getCodeList: obj => dispatch(getCodeList(obj)),
postPointShelf: (obj, jsn, cb) => dispatch(postPointShelf(obj, jsn, cb)),
postPointShelves: (obj, jsn, cb) =>
dispatch(postPointShelves(obj, jsn, cb)),
......
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