@@ -331,9 +377,11 @@ export default class index extends Component {
}
- onClick={() => this.onOpen(this.addForm)}
+ onClick={() =>
+ this.onOpen({ modal: this.addForm, addType: [0, 1] })
+ }
>
- 新增{name}
+ 新增目录/菜单
}
diff --git a/web-react/src/views/main/_layout/content/index.jsx b/web-react/src/views/main/_layout/content/index.jsx
index 73f2ad5..e52b045 100644
--- a/web-react/src/views/main/_layout/content/index.jsx
+++ b/web-react/src/views/main/_layout/content/index.jsx
@@ -20,7 +20,6 @@ class ComponentDynamic extends Component {
if (this.props.onRef) {
this.props.onRef(this)
}
-
return true
}
@@ -73,6 +72,40 @@ class ComponentDynamic extends Component {
}
}
+class Iframe extends Component {
+ shouldComponentUpdate() {
+ if (this.props.onRef) {
+ this.props.onRef(this)
+ }
+ return true
+ }
+
+ componentDidMount() {
+ if (this.props.onRef) {
+ this.props.onRef(this)
+ }
+ this.loadComponent()
+ }
+
+ loadComponent() {
+ NProgress.start()
+ const iframe = this.refs.content
+ iframe.onload = () => {
+ NProgress.done()
+ }
+ iframe.onerror = () => {
+ NProgress.done()
+ }
+ iframe.src = this.props.src
+ }
+
+ render() {
+ const { title } = this.props
+
+ return
+ }
+}
+
export default class index extends Component {
state = {
actived: '',
@@ -191,14 +224,23 @@ export default class index extends Component {
' yo-tab-external-tabpane'
}
>
-
this.panes.push(p)}
- />
+ {pane.openType === 1 ? (
+ this.panes.push(p)}
+ />
+ ) : pane.openType === 2 ? (
+
)
})}
diff --git a/web-react/src/views/main/_layout/header/search.jsx b/web-react/src/views/main/_layout/header/search.jsx
index 6849851..f8aba8d 100644
--- a/web-react/src/views/main/_layout/header/search.jsx
+++ b/web-react/src/views/main/_layout/header/search.jsx
@@ -78,7 +78,7 @@ export default class search extends Component {
}
onSelect(value, option) {
- const { id, meta, component } = option.menu
+ const { id, meta, component, link, redirect, openType } = option.menu
// 选中时清空输入框内容,并失去焦点
this.setState({ searchValue: '' })
@@ -88,7 +88,19 @@ export default class search extends Component {
key: id,
title: meta.title,
icon: meta.icon,
- path: component,
+ path: (() => {
+ switch (openType) {
+ case 1:
+ return component
+ case 2:
+ return link
+ case 3:
+ return redirect
+ default:
+ return null
+ }
+ })(),
+ openType,
})
}
diff --git a/web-react/src/views/main/_layout/sider/menu.jsx b/web-react/src/views/main/_layout/sider/menu.jsx
index f20f406..cbd3a5e 100644
--- a/web-react/src/views/main/_layout/sider/menu.jsx
+++ b/web-react/src/views/main/_layout/sider/menu.jsx
@@ -50,11 +50,25 @@ export default class index extends Component {
}
onOpenContentWindow = menu => {
+ const { id, meta, component, link, redirect, openType } = menu
+
window.openContentWindow({
- key: menu.id,
- title: menu.meta.title,
- icon: menu.meta.icon,
- path: menu.component,
+ key: id,
+ title: meta.title,
+ icon: meta.icon,
+ path: (() => {
+ switch (openType) {
+ case 1:
+ return component
+ case 2:
+ return link
+ case 3:
+ return redirect
+ default:
+ return null
+ }
+ })(),
+ openType,
})
}
diff --git a/web-react/src/views/main/index.jsx b/web-react/src/views/main/index.jsx
index 1e7e7eb..d848dfd 100644
--- a/web-react/src/views/main/index.jsx
+++ b/web-react/src/views/main/index.jsx
@@ -105,7 +105,31 @@ export default class index extends Component {
return
}
- const path = settings.path.startsWith('/') ? settings.path : `/${settings.path}`
+ let path = (p => {
+ if (p.startsWith('http')) return p
+ if (p.startsWith('/')) return p
+ else return `/${p}`
+ })(settings.path)
+
+ if ([2, 3].includes(settings.openType)) {
+ const param = (p => {
+ const arr = []
+ if (p && p.constructor === Object) {
+ Object.keys(p).forEach(key => {
+ arr.push(`${key}=${(p[key] || '').toString()}`)
+ })
+ }
+ return arr.join('&')
+ })(settings.param)
+
+ path += param ? `?${param}` : ''
+
+ if (settings.openType === 3) {
+ // 打开新的浏览器窗口
+ window.open(path)
+ return
+ }
+ }
/**
* 向标签页队列中添加一个新的标签页
@@ -120,7 +144,9 @@ export default class index extends Component {
path,
param: settings.param,
loaded: false,
+ openType: settings.openType || 1,
}
+
this.setState({
panes: [...this.state.panes, newPane],
})