From d87530a16ed85534432e3c60c644dc96d63f6f69 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期四, 02 十二月 2021 17:20:02 +0800 Subject: [PATCH] Merge branch 'master' into bms --- src/assets/css/viewstyle.scss | 14 + src/views/design/header/index.jsx | 56 ++-- src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx | 13 src/menu/components/card/cardcellcomponent/index.jsx | 10 src/tabviews/zshare/topSearch/index.jsx | 43 +++ src/templates/formtabconfig/index.jsx | 10 src/templates/zshare/verifycard/index.jsx | 128 ++++++++--- src/router/index.js | 3 src/menu/components/share/actioncomponent/index.jsx | 10 public/options.json | 2 src/tabviews/zshare/mutilform/mkSelect/index.jsx | 30 ++ src/menu/components/form/formaction/index.jsx | 10 src/templates/sharecomponent/actioncomponent/index.jsx | 10 src/tabviews/custom/components/card/balcony/index.jsx | 2 src/templates/sharecomponent/actioncomponent/index.scss | 6 src/templates/zshare/customscript/index.jsx | 9 src/views/appmanage/submutilform/index.jsx | 2 src/views/mobdesign/index.jsx | 86 +++++++ src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx | 105 +------- src/templates/sharecomponent/actioncomponent/dragaction/card.jsx | 9 src/menu/datasource/verifycard/index.jsx | 9 src/templates/zshare/verifycard/index.scss | 3 src/views/login/index.jsx | 82 +++++++ 23 files changed, 460 insertions(+), 192 deletions(-) diff --git a/public/options.json b/public/options.json index 3a794e0..72f9117 100644 --- a/public/options.json +++ b/public/options.json @@ -10,7 +10,7 @@ "defaultLang": "zh-CN", "WXAppID": "", "debugger": false, - "licenseKey": "", + "licenseKey": "7EFE13KIKKILIJ7C8CFC", "probation": "", "host": "http://bms-test.kresstools.cn", "service": "oc/" diff --git a/src/assets/css/viewstyle.scss b/src/assets/css/viewstyle.scss index fa3c6cf..83b2b59 100644 --- a/src/assets/css/viewstyle.scss +++ b/src/assets/css/viewstyle.scss @@ -438,6 +438,20 @@ border-color: $color6; } } + .ant-carousel { + .slick-dots { + >li { + button { + background-color: $color3; + } + } + >li.slick-active { + button { + background-color: $color6; + } + } + } + } } body.hidden-split-line #root { // 鍘婚櫎鐧诲綍椤靛垎鍓茬嚎 diff --git a/src/menu/components/card/cardcellcomponent/index.jsx b/src/menu/components/card/cardcellcomponent/index.jsx index 1d322fd..7686036 100644 --- a/src/menu/components/card/cardcellcomponent/index.jsx +++ b/src/menu/components/card/cardcellcomponent/index.jsx @@ -671,7 +671,15 @@ maskClosable={false} okText={dict['model.submit']} onOk={this.verifySubmit} - onCancel={() => { this.setState({ profVisible: false }) }} + onCancel={() => { + if (this.verifyRef.handleCancel) { + this.verifyRef.handleCancel().then(() => { + this.setState({ profVisible: false }) + }) + } else { + this.setState({ profVisible: false }) + } + }} destroyOnClose > {card && !card.execMode && card.OpenType !== 'excelIn' && card.OpenType !== 'excelOut' ? diff --git a/src/menu/components/form/formaction/index.jsx b/src/menu/components/form/formaction/index.jsx index 86b5ce0..b3a1f9e 100644 --- a/src/menu/components/form/formaction/index.jsx +++ b/src/menu/components/form/formaction/index.jsx @@ -251,7 +251,15 @@ maskClosable={false} okText={dict['model.submit']} onOk={this.verifySubmit} - onCancel={() => { this.setState({ profVisible: false }) }} + onCancel={() => { + if (this.verifyRef.handleCancel) { + this.verifyRef.handleCancel().then(() => { + this.setState({ profVisible: false }) + }) + } else { + this.setState({ profVisible: false }) + } + }} destroyOnClose > <VerifyCard diff --git a/src/menu/components/share/actioncomponent/index.jsx b/src/menu/components/share/actioncomponent/index.jsx index ea3fb0c..c7718dc 100644 --- a/src/menu/components/share/actioncomponent/index.jsx +++ b/src/menu/components/share/actioncomponent/index.jsx @@ -496,7 +496,15 @@ maskClosable={false} okText={dict['model.submit']} onOk={this.verifySubmit} - onCancel={() => { this.setState({ profVisible: false }) }} + onCancel={() => { + if (this.verifyRef.handleCancel) { + this.verifyRef.handleCancel().then(() => { + this.setState({ profVisible: false }) + }) + } else { + this.setState({ profVisible: false }) + } + }} destroyOnClose > {card && !card.execMode && card.OpenType !== 'excelIn' && card.OpenType !== 'excelOut' ? diff --git a/src/menu/datasource/verifycard/index.jsx b/src/menu/datasource/verifycard/index.jsx index e21bfda..095b693 100644 --- a/src/menu/datasource/verifycard/index.jsx +++ b/src/menu/datasource/verifycard/index.jsx @@ -2,6 +2,7 @@ import PropTypes from 'prop-types' import { fromJS } from 'immutable' import { Form, Tabs, Popconfirm, Icon, notification, Modal, Typography, Spin, message } from 'antd' +import { StopOutlined, CheckCircleOutlined } from '@ant-design/icons' import moment from 'moment' import Api from '@/api' @@ -117,15 +118,15 @@ width: '13%', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <Icon style={{marginLeft: '5px'}} type="stop" theme="twoTone" twoToneColor="#ff4d4f" /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <Icon style={{marginLeft: '5px'}} type="check-circle" theme="twoTone" twoToneColor="#52c41a" /> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) }, diff --git a/src/router/index.js b/src/router/index.js index 65d856c..78c75a3 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -84,8 +84,9 @@ let _s = md5('mksoft' + moment().format('YYYYMMDD')) let isauth = authCode && authCode.includes(_s) let key = md5(window.GLOB.appId + 'minke_software' + window.GLOB.appkey).toUpperCase().substr(-6) + let key1 = window.GLOB.licenseKey ? window.GLOB.licenseKey.substring(0, 6) : '' - if (window.GLOB.licenseKey === key) { + if (key1 === key) { isauth = true } diff --git a/src/tabviews/custom/components/card/balcony/index.jsx b/src/tabviews/custom/components/card/balcony/index.jsx index 8f0c7e6..72ad28f 100644 --- a/src/tabviews/custom/components/card/balcony/index.jsx +++ b/src/tabviews/custom/components/card/balcony/index.jsx @@ -100,7 +100,7 @@ config: _config, arr_field: _config.columns.map(col => col.field).join(','), }, () => { - if (_config.wrap.datatype !== 'static' && _config.setting && _config.setting.sync !== 'true' && _config.setting.onload === 'true') { + if (_config.wrap.datatype !== 'static' && _config.setting && _config.setting.sync !== 'true') { this.loadData() } }) diff --git a/src/tabviews/zshare/mutilform/mkSelect/index.jsx b/src/tabviews/zshare/mutilform/mkSelect/index.jsx index 192ddd4..86ff5c5 100644 --- a/src/tabviews/zshare/mutilform/mkSelect/index.jsx +++ b/src/tabviews/zshare/mutilform/mkSelect/index.jsx @@ -17,6 +17,19 @@ } else { value = [] } + } else if (value) { + let option = null + if (config.setAll === 'true') { + option= config.oriOptions[1] + } else { + option= config.oriOptions[0] + } + if (typeof(value) === 'string' && option && typeof(option.value) === 'number') { + value = +value + if (isNaN(value)) { + value = config.initval + } + } } this.state = { @@ -40,7 +53,7 @@ } UNSAFE_componentWillReceiveProps (nextProps) { - const { config } = this.state + const { config, value } = this.state if (!is(fromJS(config.oriOptions), fromJS(nextProps.config.oriOptions))) { this.setState({ @@ -52,6 +65,21 @@ this.setState({ value: nextProps.config.initval, }) + } else { + let option = null + if (config.setAll === 'true') { + option= nextProps.config.oriOptions[1] + } else { + option= nextProps.config.oriOptions[0] + } + if (option && typeof(option.value) === 'number') { + let val = +value + if (!isNaN(val)) { + this.setState({ + value: val + }) + } + } } } } diff --git a/src/tabviews/zshare/topSearch/index.jsx b/src/tabviews/zshare/topSearch/index.jsx index 4a2ad50..cbb6432 100644 --- a/src/tabviews/zshare/topSearch/index.jsx +++ b/src/tabviews/zshare/topSearch/index.jsx @@ -520,9 +520,16 @@ this.props.form.validateFields((err, values) => { if (err) return - let searches = this.getFieldsValues(values) + let { searches, error } = this.getFieldsValues(values) - if (this.state.hasReqFields) { + if (error) { + notification.warning({ + top: 92, + message: error, + duration: 3 + }) + return + } else if (this.state.hasReqFields) { let requireFields = searches.filter(item => item.required && item.value === '') if (requireFields.length > 0) { let labels = requireFields.map(item => item.label) @@ -580,6 +587,7 @@ // 鑾峰彇鎼滅储鏉′欢鍊� let search = [] + let error = null searchlist.forEach(item => { if (item.type === 'group') { search.push({ @@ -601,10 +609,37 @@ }) } else { let type = item.type + let val = values[item.field] !== undefined ? values[item.field] : '' + if (type === 'multiselect' || (type === 'checkcard' && item.multiple === 'true')) { type = 'multi' + } else if (type === 'text' && !error) { + if (/'/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鑻辨枃鐘舵�佺殑鍗曞紩鍙枫�俙 + } else if (/(^|\s)select\s/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鍏抽敭瀛梥elect銆俙 + } else if (/\sfrom(\s|\()/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鍏抽敭瀛梖rom銆俙 + } else if (/(^|\s)insert\s/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鍏抽敭瀛梚nsert銆俙 + } else if (/(^|\s)delete\s/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鍏抽敭瀛梔elete銆俙 + } else if (/(^|\s)update\s/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鍏抽敭瀛梪pdate銆俙 + } else if (/(^|\s)where\s/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鍏抽敭瀛梬here銆俙 + } else if (/(^|\s)drop\s/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鍏抽敭瀛梔rop銆俙 + } else if (/(^|\s)exec\s/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鍏抽敭瀛梕xec銆俙 + } else if (/(^|\s)truncate\s/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鍏抽敭瀛梩runcate銆俙 + } else if (/(^|\s)while\s/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鍏抽敭瀛梬hile銆俙 + } else if (/(^|\s)for\s/ig.test(val)) { + error = `鎼滅储鏉′欢${item.label}涓紝涓嶅彲浣跨敤鍏抽敭瀛梖or銆俙 + } } - let val = values[item.field] !== undefined ? values[item.field] : '' if (typeof(val) === 'string') { val = val.replace(/(^\s*|\s*$)/ig, '') @@ -622,7 +657,7 @@ } }) - return search + return {searches: search, error} } handleOk = (values) => { diff --git a/src/templates/formtabconfig/index.jsx b/src/templates/formtabconfig/index.jsx index fbe82e8..ae8ce10 100644 --- a/src/templates/formtabconfig/index.jsx +++ b/src/templates/formtabconfig/index.jsx @@ -2019,7 +2019,15 @@ maskClosable={false} okText={this.state.dict['model.submit']} onOk={this.verifySubmit} - onCancel={() => { this.setState({ profileVisible: false }) }} + onCancel={() => { + if (this.verifyRef.handleCancel) { + this.verifyRef.handleCancel().then(() => { + this.setState({ profileVisible: false }) + }) + } else { + this.setState({ profileVisible: false }) + } + }} destroyOnClose > <VerifyCard diff --git a/src/templates/sharecomponent/actioncomponent/dragaction/card.jsx b/src/templates/sharecomponent/actioncomponent/dragaction/card.jsx index 7f983f0..6fde75c 100644 --- a/src/templates/sharecomponent/actioncomponent/dragaction/card.jsx +++ b/src/templates/sharecomponent/actioncomponent/dragaction/card.jsx @@ -28,10 +28,17 @@ const opacity = isDragging ? 0 : 1 let hasProfile = false + let forbidSql = false if (['pop', 'prompt', 'exec'].includes(card.OpenType)) { hasProfile = true + if (card.verify && card.verify.default === 'false') { + forbidSql = true + } } else if (card.OpenType === 'excelIn' || card.OpenType === 'excelOut') { hasProfile = true + if (card.verify && card.verify.default === 'false') { + forbidSql = true + } } else if (card.funcType === 'print') { hasProfile = true } @@ -53,7 +60,7 @@ key={card.uuid} onDoubleClick={() => doubleClickCard(id)} > - {card.label}{card.position === 'grid' && <Icon type="table" />} + {card.label}{card.position === 'grid' && <Icon type="table" />}{forbidSql && <Icon type="disconnect" />} </Button> </div> </div> diff --git a/src/templates/sharecomponent/actioncomponent/index.jsx b/src/templates/sharecomponent/actioncomponent/index.jsx index f1b2953..635027e 100644 --- a/src/templates/sharecomponent/actioncomponent/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/index.jsx @@ -912,7 +912,15 @@ maskClosable={false} okText={dict['model.submit']} onOk={this.verifySubmit} - onCancel={() => { this.setState({ profVisible: false }) }} + onCancel={() => { + if (this.verifyRef.handleCancel) { + this.verifyRef.handleCancel().then(() => { + this.setState({ profVisible: false }) + }) + } else { + this.setState({ profVisible: false }) + } + }} destroyOnClose > {card && !card.execMode && card.OpenType !== 'excelIn' && card.OpenType !== 'excelOut' ? diff --git a/src/templates/sharecomponent/actioncomponent/index.scss b/src/templates/sharecomponent/actioncomponent/index.scss index 6a0e1f5..cfa9c43 100644 --- a/src/templates/sharecomponent/actioncomponent/index.scss +++ b/src/templates/sharecomponent/actioncomponent/index.scss @@ -23,6 +23,12 @@ right: 1px; bottom: 0px; } + .anticon-disconnect { + font-size: 10px; + position: absolute; + right: 1px; + top: 0px; + } } } } diff --git a/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx b/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx index 1fef86d..1328845 100644 --- a/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx +++ b/src/templates/sharecomponent/actioncomponent/verifyexcelin/index.jsx @@ -1,8 +1,8 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' import { fromJS } from 'immutable' -import { Form, Tabs, Row, Col, Input, Button, Table, Popconfirm, Icon, Tooltip, notification, Modal, message, InputNumber, Radio, Typography } from 'antd' -import { QuestionCircleOutlined } from '@ant-design/icons' +import { Form, Tabs, Row, Col, Input, Button, Popconfirm, Icon, Tooltip, notification, Modal, message, InputNumber, Radio, Typography } from 'antd' +import { QuestionCircleOutlined, StopOutlined, CheckCircleOutlined } from '@ant-design/icons' import moment from 'moment' import Api from '@/api' @@ -153,15 +153,15 @@ inputType: 'switch', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <Icon style={{marginLeft: '5px'}} type="stop" theme="twoTone" twoToneColor="#ff4d4f" /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <Icon style={{marginLeft: '5px'}} type="check-circle" theme="twoTone" twoToneColor="#52c41a" /> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) }, @@ -189,15 +189,13 @@ dataIndex: 'position', width: '10%', render: (text, record) => { - let _text = '' - if (record.position === 'front') { - _text = 'sql鍓�' - } else if (record.position === 'init') { - _text = '鍒濆鍖�' + if (record.position === 'init') { + return <span style={{color: 'orange'}}>鍒濆鍖�</span> + } else if (record.position === 'front') { + return <span style={{color: '#26C281'}}>sql鍓�</span> } else { - _text = 'sql鍚�' + return <span style={{color: '#1890ff'}}>sql鍚�</span> } - return _text } }, { @@ -206,28 +204,26 @@ width: '10%', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <Icon style={{marginLeft: '5px'}} type="stop" theme="twoTone" twoToneColor="#ff4d4f" /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <Icon style={{marginLeft: '5px'}} type="check-circle" theme="twoTone" twoToneColor="#52c41a" /> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) }, { title: '鎿嶄綔', align: 'center', - width: '20%', + width: '140px', dataIndex: 'operation', render: (text, record) => - (<div> + (<div style={{textAlign: 'center'}}> <span className="operation-btn" title={this.props.dict['model.edit']} onClick={() => this.handleEdit(record, 'scripts')} style={{color: '#1890ff'}}><Icon type="edit" /></span> - <span className="operation-btn" title={this.props.dict['header.form.up']} onClick={() => this.handleUpDown(record, 'scripts', 'up')} style={{color: '#1890ff'}}><Icon type="arrow-up" /></span> - <span className="operation-btn" title={this.props.dict['header.form.down']} onClick={() => this.handleUpDown(record, 'scripts', 'down')} style={{color: '#ff4d4f'}}><Icon type="arrow-down" /></span> <span className="operation-btn" title={this.props.dict['header.form.status.change']} onClick={() => this.handleStatus(record, 'scripts')} style={{color: '#8E44AD'}}><Icon type="swap" /></span> <Popconfirm overlayClassName="popover-confirm" @@ -587,68 +583,6 @@ }) } - handleUpDown = (record, type, direction) => { - let verify = JSON.parse(JSON.stringify(this.state.verify)) - let index = 0 - - if (type === 'columns') { - verify.columns = verify.columns.filter((item, i) => { - if (item.uuid === record.uuid) { - index = i - } - - return item.uuid !== record.uuid - }) - if ((index === 0 && direction === 'up') || (index === verify.columns.length && direction === 'down')) { - return - } - - if (direction === 'up') { - verify.columns.splice(index - 1, 0, record) - } else { - verify.columns.splice(index + 1, 0, record) - } - } else if (type === 'unique') { - verify.uniques = verify.uniques.filter((item, i) => { - if (item.uuid === record.uuid) { - index = i - } - - return item.uuid !== record.uuid - }) - if ((index === 0 && direction === 'up') || (index === verify.uniques.length && direction === 'down')) { - return - } - - if (direction === 'up') { - verify.uniques.splice(index - 1, 0, record) - } else { - verify.uniques.splice(index + 1, 0, record) - } - } else if (type === 'scripts') { - verify.scripts = verify.scripts.filter((item, i) => { - if (item.uuid === record.uuid) { - index = i - } - - return item.uuid !== record.uuid - }) - if ((index === 0 && direction === 'up') || (index === verify.scripts.length && direction === 'down')) { - return - } - - if (direction === 'up') { - verify.scripts.splice(index - 1, 0, record) - } else { - verify.scripts.splice(index + 1, 0, record) - } - } - - this.setState({ - verify: verify - }) - } - handleConfirm = () => { const { verify } = this.state // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� @@ -878,14 +812,15 @@ scriptsChange={this.scriptsChange} wrappedComponentRef={(inst) => this.scriptsForm = inst} /> - <Table + <EditTable actions={['move']} data={verify.scripts} columns={scriptsColumns} onChange={(scripts) => {this.setState({verify: {...verify, scripts}})}}/> + {/* <Table bordered rowKey="uuid" className="custom-table" dataSource={verify.scripts} columns={scriptsColumns} pagination={false} - /> + /> */} </TabPane> : null} <TabPane tab="淇℃伅鎻愮ず" key="tip"> <Form {...formItemLayout}> diff --git a/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx b/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx index d1ed393..41dce62 100644 --- a/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx +++ b/src/templates/sharecomponent/settingcomponent/settingform/simplescript/index.jsx @@ -2,6 +2,7 @@ import PropTypes from 'prop-types' import { fromJS } from 'immutable' import { Form, Row, Col, Icon, Button, notification, Select, Popconfirm, Typography, Modal, Radio } from 'antd' +import { StopOutlined, CheckCircleOutlined } from '@ant-design/icons' import moment from 'moment' import Utils from '@/utils/utils.js' @@ -55,9 +56,9 @@ width: '13%', render: (text, record) => { if (record.position === 'front') { - return 'sql鍓�' + return <span style={{color: '#26C281'}}>sql鍓�</span> } else { - return 'sql鍚�' + return <span style={{color: '#1890ff'}}>sql鍚�</span> } } }, @@ -67,15 +68,15 @@ width: '12%', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <Icon style={{marginLeft: '5px'}} type="stop" theme="twoTone" twoToneColor="#ff4d4f" /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <Icon style={{marginLeft: '5px'}} type="check-circle" theme="twoTone" twoToneColor="#52c41a" /> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) }, diff --git a/src/templates/zshare/customscript/index.jsx b/src/templates/zshare/customscript/index.jsx index 9b211ba..bf6ddb4 100644 --- a/src/templates/zshare/customscript/index.jsx +++ b/src/templates/zshare/customscript/index.jsx @@ -2,6 +2,7 @@ import PropTypes from 'prop-types' import { fromJS } from 'immutable' import { Form, Row, Col, Icon, Button, notification, Select, Popconfirm, Typography } from 'antd' +import { StopOutlined, CheckCircleOutlined } from '@ant-design/icons' import moment from 'moment' import Utils from '@/utils/utils.js' @@ -54,15 +55,15 @@ width: '12%', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <Icon style={{marginLeft: '5px'}} type="stop" theme="twoTone" twoToneColor="#ff4d4f" /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <Icon style={{marginLeft: '5px'}} type="check-circle" theme="twoTone" twoToneColor="#52c41a" /> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) }, diff --git a/src/templates/zshare/verifycard/index.jsx b/src/templates/zshare/verifycard/index.jsx index 94e8755..9d42d79 100644 --- a/src/templates/zshare/verifycard/index.jsx +++ b/src/templates/zshare/verifycard/index.jsx @@ -1,6 +1,6 @@ import React, {Component} from 'react' import PropTypes from 'prop-types' -import { fromJS } from 'immutable' +import { is, fromJS } from 'immutable' import { Form, Tabs, Row, Col, Radio, Button, Select, Popconfirm, notification, Modal, message, InputNumber, Tooltip, Typography } from 'antd' import { QuestionCircleOutlined, CheckCircleOutlined, StopOutlined, EditOutlined, SwapOutlined, DeleteOutlined } from '@ant-design/icons' import moment from 'moment' @@ -97,15 +97,15 @@ inputType: 'switch', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) } @@ -133,15 +133,15 @@ inputType: 'switch', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) }, @@ -207,15 +207,15 @@ inputType: 'switch', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) } @@ -228,7 +228,7 @@ render: (text) => { let title = text.match(/^\s*\/\*.+\*\//) title = title && title[0] ? title[0] : '' - text = title ? text.replace(title, '') : text + // text = title ? text.replace(title, '') : text return ( <div> @@ -259,15 +259,15 @@ width: '9%', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) }, @@ -298,7 +298,7 @@ render: (text) => { let title = text.match(/^\s*\/\*.+\*\//) title = title && title[0] ? title[0] : '' - text = title ? text.replace(title, '') : text + // text = title ? text.replace(title, '') : text return ( <div> @@ -314,11 +314,11 @@ width: '10%', render: (text, record) => { if (record.position === 'init') { - return '鍒濆鍖�' + return <span style={{color: 'orange'}}>鍒濆鍖�</span> } else if (record.position === 'front') { - return 'sql鍓�' + return <span style={{color: '#26C281'}}>sql鍓�</span> } else { - return 'sql鍚�' + return <span style={{color: '#1890ff'}}>sql鍚�</span> } } }, @@ -328,22 +328,22 @@ width: '10%', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) }, { title: '鎿嶄綔', align: 'center', - width: '20%', + width: '140px', dataIndex: 'operation', render: (text, record) => (<div style={{textAlign: 'center'}}> @@ -367,7 +367,7 @@ render: (text) => { let title = text.match(/^\s*\/\*.+\*\//) title = title && title[0] ? title[0] : '' - text = title ? text.replace(title, '') : text + // text = title ? text.replace(title, '') : text return ( <div> @@ -383,9 +383,9 @@ width: '10%', render: (text, record) => { if (record.position === 'front') { - return 'sql鍓�' + return <span style={{color: '#26C281'}}>sql鍓�</span> } else { - return 'sql鍚�' + return <span style={{color: '#1890ff'}}>sql鍚�</span> } } }, @@ -395,15 +395,15 @@ width: '10%', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) }, @@ -496,15 +496,15 @@ width: '8%', render: (text, record) => record.status === 'false' ? ( - <div> + <div style={{color: '#ff4d4f'}}> {this.props.dict['model.status.forbidden']} - <StopOutlined style={{marginLeft: '5px', color: '#ff4d4f'}} /> + <StopOutlined style={{marginLeft: '5px'}} /> </div> ) : ( - <div> + <div style={{color: '#26C281'}}> {this.props.dict['model.status.open']} - <CheckCircleOutlined style={{marginLeft: '5px', color: '#52c41a'}}/> + <CheckCircleOutlined style={{marginLeft: '5px'}}/> </div> ) }, @@ -573,9 +573,20 @@ }) } + _verify.customverifys.forEach((item, i) => { + item.$index = i + 1 + }) + _verify.scripts.forEach((item, i) => { + item.$index = i + 1 + }) + _verify.cbScripts.forEach((item, i) => { + item.$index = i + 1 + }) + this.setState({ setting: config.setting || {}, - verify: _verify + verify: _verify, + oriVerify: fromJS(_verify).toJS() }) if (config.Template !== 'FormTab' && (card.intertype === 'inner' || card.intertype === 'outer')) { // 鍐呴儴鎴栧閮ㄦ帴鍙� @@ -1398,6 +1409,45 @@ }) } + handleCancel = () => { + const { verify, oriVerify } = this.state + // 琛ㄥ崟鎻愪氦鏃舵鏌ヨ緭鍏ュ�兼槸鍚︽纭� + return new Promise((resolve, reject) => { + let msg = '' + if (this.customForm && this.customForm.state.editItem) { + msg = '鑷畾涔夐獙璇�' + } else if (this.customForm && this.customForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.customForm.props.form.getFieldValue('sql'))) { + msg = '鑷畾涔夐獙璇�' + } else if (this.orderForm && this.orderForm.state.editItem) { + msg = '鍗曞彿鐢熸垚' + } else if (this.scriptsForm && this.scriptsForm.state.editItem) { + msg = '鑷畾涔夎剼鏈�' + } else if (this.scriptsForm && this.scriptsForm.props.form.getFieldValue('sql') && !/^\s+$/.test(this.scriptsForm.props.form.getFieldValue('sql'))) { + msg = '鑷畾涔夎剼鏈�' + } + + if (!is(fromJS(verify), fromJS(oriVerify))) { + confirm({ + content: '楠岃瘉淇℃伅宸蹭慨鏀癸紝纭畾鍙栨秷鍚楋紵', + onOk() { + resolve() + }, + onCancel() {} + }) + } else if (msg) { + confirm({ + content: msg + '鏈繚瀛橈紝纭畾鍙栨秷鍚楋紵', + onOk() { + resolve() + }, + onCancel() {} + }) + } else { + resolve() + } + }) + } + /** * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊 */ diff --git a/src/templates/zshare/verifycard/index.scss b/src/templates/zshare/verifycard/index.scss index 9fc9d9e..d3dab25 100644 --- a/src/templates/zshare/verifycard/index.scss +++ b/src/templates/zshare/verifycard/index.scss @@ -69,4 +69,7 @@ padding: 0 5px; cursor: pointer; } + .operation-btn:not(:first-child) { + margin-left: 5px; + } } \ No newline at end of file diff --git a/src/views/appmanage/submutilform/index.jsx b/src/views/appmanage/submutilform/index.jsx index e782e76..96b98d8 100644 --- a/src/views/appmanage/submutilform/index.jsx +++ b/src/views/appmanage/submutilform/index.jsx @@ -158,7 +158,7 @@ </Col> {typename !== 'pc' ? <Col span={12}> <Form.Item label={ - <Tooltip placement="topLeft" title="浣跨敤鍏紬鍙锋巿鏉冪櫥褰曟椂锛屾槸鍚﹂渶瑕佺粦瀹氱敤鎴枫��"> + <Tooltip placement="topLeft" title="浣跨敤鍏紬鍙锋巿鏉冪櫥褰曟垨浣跨敤灏忕▼搴忔椂锛屾槸鍚﹂渶瑕佺粦瀹氱敤鎴枫��"> <QuestionCircleOutlined className="mk-form-tip" /> 鐢ㄦ埛缁戝畾 </Tooltip> diff --git a/src/views/design/header/index.jsx b/src/views/design/header/index.jsx index cf0d77c..fbb0c7b 100644 --- a/src/views/design/header/index.jsx +++ b/src/views/design/header/index.jsx @@ -241,34 +241,36 @@ componentDidMount () { if (window.GLOB.systemType !== 'production') { - Api.getSystemConfig({func: 'sPC_Get_Roles_sModular'}).then(res => { - if (res.status) { - let _permFuncField = [] - let _sysRoles = [] - - if (res.Roles && res.Roles.length > 0) { - _sysRoles = res.Roles.map(role => { - return { - uuid: Utils.getuuid(), - value: role.RoleID, - text: role.RoleName - } - }) + setTimeout(() => { + Api.getSystemConfig({func: 'sPC_Get_Roles_sModular'}).then(res => { + if (res.status) { + let _permFuncField = [] + let _sysRoles = [] + + if (res.Roles && res.Roles.length > 0) { + _sysRoles = res.Roles.map(role => { + return { + uuid: Utils.getuuid(), + value: role.RoleID, + text: role.RoleName + } + }) + } + + if (res.sModular && res.sModular.length > 0) { + res.sModular.forEach(field => { + if (field.ModularNo) { + _permFuncField.push(field.ModularNo) + } + }) + _permFuncField = _permFuncField.sort() + } + + sessionStorage.setItem('sysRoles', JSON.stringify(_sysRoles)) + sessionStorage.setItem('permFuncField', JSON.stringify(_permFuncField)) } - - if (res.sModular && res.sModular.length > 0) { - res.sModular.forEach(field => { - if (field.ModularNo) { - _permFuncField.push(field.ModularNo) - } - }) - _permFuncField = _permFuncField.sort() - } - - sessionStorage.setItem('sysRoles', JSON.stringify(_sysRoles)) - sessionStorage.setItem('permFuncField', JSON.stringify(_permFuncField)) - } - }) + }) + }, 50) } else if (window.GLOB.systemType === 'production') { this.props.resetEditLevel('HS') this.props.modifyMainMenu({ diff --git a/src/views/login/index.jsx b/src/views/login/index.jsx index 8eaa080..79278be 100644 --- a/src/views/login/index.jsx +++ b/src/views/login/index.jsx @@ -337,16 +337,85 @@ let _s = md5('mksoft' + moment().format('YYYYMMDD')) authCode = authCode ? authCode.split(',') : [] let index = authCode.findIndex(key => key === _s) + let license = false - let key = md5(window.GLOB.appId + 'minke_software' + window.GLOB.appkey).toUpperCase().substr(-6) + if (window.GLOB.licenseKey) { + if (window.GLOB.licenseKey.length !== 20) { + Modal.warning({ + title: `鏈湴鎺堟潈鐮佸凡澶辨晥锛岃鑱旂郴绠$悊鍛樸�俙, + okText: '鐭ラ亾浜�' + }) + } else { + let key = md5(window.GLOB.appId + 'minke_software' + window.GLOB.appkey).toUpperCase().substr(-6) + + let key1 = window.GLOB.licenseKey.substring(0, 6) + let key2 = window.GLOB.licenseKey.substring(6, 14) + let key3 = window.GLOB.licenseKey.substring(14) + let key4 = md5(key1 + key2).toUpperCase().substr(-6) + + if (key === key1 && key3 === key4) { + let last = window.GLOB.appkey[window.GLOB.appkey.length - 1] + let offset = 0 + let keys = {} + + if (!isNaN(+last)) { + offset = (10 - last) % 10 + } else { + last = last.charCodeAt() - 65 + offset = (30 - last) % 10 + } + + for (let i = 0; i < 26; i++) { + let char = String.fromCharCode(65 + i) + keys[char] = (offset + i) % 10 + } + + let lictime = +key2.replace(/[A-Z]/ig, (s) => { + return keys[s] + }) + let curtime = +moment().format('YYYYMMDD') + let licday = lictime - curtime + let _mindUrl = window.location.href.split('#')[0] + 'notMind' - if (index > -1 || window.GLOB.licenseKey === key) { + if (licday < 0 || isNaN(licday)) { + Modal.warning({ + title: '鏈湴鎺堟潈鐮佸凡澶辨晥锛岃鑱旂郴绠$悊鍛樸��', + okText: '鐭ラ亾浜�' + }) + } else if (licday > 20) { + license = true + localStorage.removeItem(_mindUrl) + } else { + license = true + + if (localStorage.getItem(_mindUrl) !== 'false') { + Modal.confirm({ + title: `璺濈鎺堟潈鍒版湡杩樺墿${licday}澶╋紝璇疯仈绯荤鐞嗗憳銆俙, + okText: '涓嶅湪鎻愰啋', + cancelText: '鍏抽棴', + onOk() { + localStorage.setItem(_mindUrl, 'false') + }, + onCancel() {}, + }) + } + } + } else { + Modal.warning({ + title: '鏈湴鎺堟潈鐮佸凡澶辨晥锛岃鑱旂郴绠$悊鍛樸��', + okText: '鐭ラ亾浜�' + }) + } + } + } + + if ((!window.GLOB.licenseKey && index > -1) || license) { this.setState({ auth: true }) } - if (window.GLOB.licenseKey !== key && (index === -1 || index > 5)) { + if (!window.GLOB.licenseKey && (index === -1 || index > 5)) { let _appId = window.GLOB.appId if (options.sysType === 'cloud') { // 浜戠浣跨敤绯荤粺閰嶇疆appid @@ -399,6 +468,13 @@ this.setState({ auth: true }) + + if (res.warning_day && res.warning_day < 20) { + Modal.warning({ + title: `璺濈鎺堟潈鍒版湡杩樺墿${res.warning_day}澶╋紝璇疯仈绯荤鐞嗗憳銆俙, + okText: '鐭ラ亾浜�' + }) + } } else { localStorage.removeItem(_authUrl) this.setState({ diff --git a/src/views/mobdesign/index.jsx b/src/views/mobdesign/index.jsx index 0de7b33..d4474f5 100644 --- a/src/views/mobdesign/index.jsx +++ b/src/views/mobdesign/index.jsx @@ -734,14 +734,6 @@ title: cell.label, }) }) - card.backElements && card.backElements.forEach(cell => { - if (cell.eleType !== 'button') return - this.checkBtn(cell) - m.children.push({ - key: cell.uuid, - title: cell.label, - }) - }) }) } else if (item.type === 'carousel' || item.type === 'timeline') { item.subcards.forEach(card => { @@ -835,10 +827,86 @@ } getMiniStyle = (config) => { - console.log(config) + config.miniStyle = this.transferStyle(config.style) + + let traversal = (components) => { + return components.map(item => { + if (item.style) { + item.miniStyle = this.transferStyle(item.style) + } + if (item.headerStyle) { + item.miniHeaderStyle = this.transferStyle(item.headerStyle) + } + + if (item.action && item.action.length > 0) { + item.action = item.action.map(btn => { + btn.miniStyle = this.transferStyle(btn.style) + return btn + }) + } + + if (item.type === 'tabs') { + item.subtabs.forEach(tab => { + tab.components = traversal(tab.components) + }) + } else if (item.type === 'group') { + item.components = traversal(item.components) + } else if (['card', 'carousel', 'timeline'].includes(item.type) || (item.type === 'table' && item.subtype === 'tablecard')) { + item.subcards.forEach(card => { + card.miniStyle = this.transferStyle(card.style) + card.elements = card.elements.map(cell => { + cell.miniStyle = this.transferStyle(cell.style) + return cell + }) + }) + } else if (item.type === 'balcony') { + item.elements && item.elements.forEach(cell => { + cell.miniStyle = this.transferStyle(cell.style) + }) + } else if (item.type === 'menubar') { + item.subMenus = item.subMenus.map(menu => { + menu.miniStyle = this.transferStyle(menu.style) + return menu + }) + } else if (item.type === 'table' && item.subtype === 'normaltable') { + let getCols = (cols) => { + return cols.map(col => { + if (col.type === 'colspan') { + col.subcols = getCols(col.subcols || []) + } else if (col.type === 'custom' || col.type === 'action') { + col.elements = col.elements.map(cell => { + cell.miniStyle = this.transferStyle(cell.style) + return cell + }) + } + + return col + }) + } + + item.cols = getCols(item.cols) + } + + return item + }) + } + + config.components = traversal(config.components) + return config } + transferStyle = (style = {}) => { + let _style = '' + Object.keys(style).forEach(key => { + if (['hShadow', 'vShadow', 'shadowBlur', 'shadowColor'].includes(key)) return + if (!style[key]) return + _style += `${key.replace(/[A-Z]/g, m => '-' + m.toLowerCase())}:${style[key]};` + }) + + return _style + } + submitConfig = () => { let config = fromJS(this.state.config).toJS() -- Gitblit v1.8.0