| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 | /* * << * Davinci * == * Copyright (C) 2016 - 2017 EDP * == * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * *      http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * >> */import React from 'react'import { Form, Row, Col, Input, Radio, Select, Tabs, Checkbox} from 'antd'import { IExludeRoles } from 'containers/Viz/components/PortalList'import { FormComponentProps } from 'antd/lib/form'const styles = require('containers/Viz/Viz.less')const TabPane = Tabs.TabPaneconst Option = Select.Optionconst FormItem = Form.Itemconst RadioGroup = Radio.Groupconst utilStyles = require('assets/less/util.less')interface IDashboardFormProps extends FormComponentProps {  portalId: number  type: string  itemId: number  dashboards: any[]  onCheckUniqueName: (pathname: string, data: any, resolve: () => any, reject: (error: string) => any) => any  exludeRoles?: IExludeRoles[]  onChangePermission: (scope: object, e: any) => any}export class DashboardForm extends React.PureComponent<IDashboardFormProps, {}> {  private checkNameUnique = (rule, value = '', callback) => {    const { onCheckUniqueName, type, form, portalId} = this.props    const { id } = form.getFieldsValue()    const data = {      portal: portalId,      id: type === ('add' || 'copy') ? '' : id,      name: value    }    if (!value) {      callback()    }    type === 'move'      ? callback()      : onCheckUniqueName('dashboard', data,          () => {            callback()        }, (err) => {          callback(err)        })  }  public render () {    const { getFieldDecorator } = this.props.form    const { dashboards, type, itemId, exludeRoles } = this.props    const commonFormItemStyle = {      labelCol: { span: 6 },      wrapperCol: { span: 16 }    }    const authControl = exludeRoles && exludeRoles.length ? exludeRoles.map((role) => (      <div className={styles.excludeList} key={`${role.name}key`}>        <Checkbox checked={role.permission} onChange={this.props.onChangePermission.bind(this, role)}/>        <b>{role.name}</b>      </div>    )) : []    const dashboardsArr = (dashboards as any[]).filter((d) => d.type === 0)    const folderOptions = (dashboardsArr as any[]).map((s) => <Option key={`${s.id}`} value={`${s.id}`}>{s.name}</Option>)    const deleteItem = (dashboards as any[]).find((d) => d.id === Number(itemId))    let deleteType = ''    let deleteName = ''    if (deleteItem) {      deleteType = deleteItem.type === 0 ? '文件夹' : '仪表板'      deleteName = deleteItem.name    }    return (      <Form>        {type !== 'add' && type !== 'copy' && (          <FormItem className={utilStyles.hide}>            {getFieldDecorator('id', {})(              <Input />            )}          </FormItem>        )}        <Row gutter={8} className={type === 'move' ? '' : utilStyles.hide}>          <Col span={24}>            <FormItem label="所属文件夹" {...commonFormItemStyle}>              {getFieldDecorator('folder', {                rules: [{                  required: true,                  message: '请选择所属文件夹'                }],                initialValue: '0'              })(                <Select>                  <Option key="0" value="0">根目录</Option>                  {folderOptions}                </Select>              )}            </FormItem>          </Col>        </Row>        <Row gutter={8} className={type === 'delete' || type === 'move' ? utilStyles.hide : ''}>        <Tabs defaultActiveKey="dashboardInfo">          <TabPane tab="基本信息" key="dashboardInfo">          <Col span={24}>            <FormItem label="所属文件夹" {...commonFormItemStyle}>              {getFieldDecorator('folder', {                rules: [{                  required: true,                  message: '请选择所属文件夹'                }],                // initialValue: (folderOptions as any[]).length ? `${dashboardsArr[0].name}` : ''                initialValue: '0'              })(                <Select>                  <Option key="0" value="0">根目录</Option>                  {folderOptions}                </Select>              )}            </FormItem>            <FormItem className={utilStyles.hide}>              {getFieldDecorator('config', {})(                <Input />              )}            </FormItem>            <FormItem className={utilStyles.hide}>              {getFieldDecorator('index', {})(                <Input />              )}            </FormItem>            <FormItem              label={type === 'copy' ? '重命名' : '名称'}              {...commonFormItemStyle}              hasFeedback              className={type === 'move' ? utilStyles.hide : ''}            >              {getFieldDecorator('name', {                rules: [{                  required: true,                  message: '名称 不能为空'                }, {                  validator: this.checkNameUnique                }]              })(                <Input placeholder="名称" />              )}            </FormItem>            <FormItem              label="选择类型"              {...commonFormItemStyle}              className={type === 'move' ? utilStyles.hide : ''}            >              {getFieldDecorator('selectType', {                initialValue: 1              })(                 <RadioGroup disabled={type === 'edit' || type === 'copy' || type === 'move'}>                    <Radio value={0}>文件夹</Radio>                    <Radio value={1}>仪表板</Radio>                    {/* <Radio value={2}>Report</Radio> */}                    {/* <Select disabled={type === 'edit' || type === 'copy' || type === 'move'}>                      <Option key="0" value="0">文件夹</Option>                      <Option key="Dashboard" value="1">Dashboard</Option>                      <Option key="Report" value="2">Report</Option>                    </Select> */}                  </RadioGroup>              )}            </FormItem>          </Col>          </TabPane>          <TabPane tab="权限管理" key="dashboardControl">            {              authControl            }          </TabPane>          </Tabs>        </Row>        <p className={type === 'delete' ? '' : utilStyles.hide}>          确定要删除 {deleteType}:{deleteName} ?        </p>      </Form>    )  }}export default Form.create<IDashboardFormProps>()(DashboardForm)
 |