From badd84cc656409590040caaad63bf22f0b6afaf1 Mon Sep 17 00:00:00 2001 From: king <18310653075@163.com> Date: 星期三, 14 七月 2021 18:09:25 +0800 Subject: [PATCH] 2021-07-14 --- src/views/appmanage/index.jsx | 575 +++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 395 insertions(+), 180 deletions(-) diff --git a/src/views/appmanage/index.jsx b/src/views/appmanage/index.jsx index 6070899..aef6542 100644 --- a/src/views/appmanage/index.jsx +++ b/src/views/appmanage/index.jsx @@ -1,6 +1,6 @@ import React, {Component} from 'react' import { fromJS } from 'immutable' -import { Spin, notification, Button, Table, Modal, ConfigProvider, Typography } from 'antd' +import { Spin, notification, Input, Button, Table, Modal, ConfigProvider, Typography, Row, Col, Tooltip, Icon } from 'antd' import moment from 'moment' import md5 from 'md5' import enUS from 'antd/es/locale/en_US' @@ -13,10 +13,12 @@ const { confirm } = Modal const { Paragraph } = Typography +const { Search } = Input const _locale = sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS const Header = asyncComponent(() => import('@/mob/header')) const MutilForm = asyncComponent(() => import('./mutilform')) +const TransForm = asyncComponent(() => import('./transform')) const SubMutilForm = asyncComponent(() => import('./submutilform')) let base_url = '' @@ -28,120 +30,79 @@ sessionStorage.setItem('isEditState', 'true') +const skinStyle = { + bg_black_style_blue: {name: '钃濊壊', color: '#1890ff'}, + bg_black_style_red: {name: '绾㈣壊', color: '#f5222d'}, + bg_black_style_orange_red: {name: '姗欑孩鑹�', color: '#fa541c'}, + bg_black_style_orange: {name: '姗欒壊', color: '#fa8c16'}, + bg_black_style_orange_yellow: {name: '姗欓粍鑹�', color: '#faad14'}, + bg_black_style_yellow: {name: '榛勮壊', color: '#fadb14'}, + bg_black_style_yellow_green: {name: '榛勭豢鑹�', color: '#a0d911'}, + bg_black_style_green: {name: '缁胯壊', color: '#52c41a'}, + bg_black_style_cyan: {name: '闈掕壊', color: '#13c2c2'}, + bg_black_style_blue_purple: {name: '钃濈传鑹�', color: '#2f54eb'}, + bg_black_style_purple: {name: '绱壊', color: '#722ed1'}, + bg_black_style_magenta: {name: '娲嬬孩鑹�', color: '#eb2f96'}, + bg_black_style_grass_green: {name: '鑽夌豢鑹�', color: '#aeb303'}, + bg_black_style_deep_red: {name: '娣辩孩鑹�', color: '#c32539'} +} + class AppManage extends Component { state = { loading: false, applist: [], columns: [ - { title: '搴旂敤鍚嶇О', dataIndex: 'remark', key: 'remark', align: 'center' }, - { title: '搴旂敤缂栫爜', dataIndex: 'kei_no', key: 'kei_no', align: 'center' }, + { title: '搴旂敤鍚嶇О', dataIndex: 'remark', key: 'remark', align: 'center', width: '30%' }, + { title: '搴旂敤缂栫爜', dataIndex: 'kei_no', key: 'kei_no', align: 'center', width: '30%' }, { title: '鎿嶄綔', key: 'action', align: 'center', - render: (text, record) => (<Button type="link" onClick={() => this.deleteApp(record)} style={{color: '#ff4d4f'}}>鍒犻櫎</Button>), - }, - ], - subcolumns: [ - { - title: '搴旂敤绫诲瀷', dataIndex: 'typename', key: 'typename', align: 'center' - }, - { - title: '璇█', dataIndex: 'lang', key: 'lang', align: 'center', - render: (text, record) => text === 'en-US' ? '鑻辨枃' : '涓枃' - }, - { - title: '鐧诲綍', dataIndex: 'login_types', key: 'login_types', align: 'center', - render: (text, record) => text === 'false' ? '涓嶉渶瑕�' : '闇�瑕�' - }, - { - title: '鏉冮檺绠$悊', dataIndex: 'role_type', key: 'role_type', align: 'center', - render: (text, record) => text === 'false' ? '涓嶅惎鐢�' : '鍚敤' - }, - { - title: '鐢ㄦ埛缁戝畾', dataIndex: 'user_binding', key: 'user_binding', align: 'center', - render: (text, record) => { - let val = '' - if (!text) return '鏃�' - if (text.indexOf('uname_pwd') > -1) { - val = '鐢ㄦ埛鍚�' - } - if (text.indexOf('sms_vcode') > -1) { - val = val ? val + ',鎵嬫満鍙�' : '鎵嬫満鍙�' - } - return val - } - }, - { - title: '鐨偆', dataIndex: 'css', key: 'css', align: 'center', - render: (text, record) => { - const style = { - bg_black_style_blue: '钃濋粦鑹茬郴', - bg_white_style_blue: '钃濈櫧鑹茬郴', - bg_black_style_red: '绾㈤粦鑹茬郴', - bg_white_style_red: '绾㈢櫧鑹茬郴', - bg_black_style_orange_red: '姗欑孩榛戣壊绯�', - bg_white_style_orange_red: '姗欑孩鐧借壊绯�', - bg_black_style_orange: '姗欓粦鑹茬郴', - bg_white_style_orange: '姗欑櫧鑹茬郴', - bg_black_style_orange_yellow: '姗欓粍榛戣壊绯�', - bg_white_style_orange_yellow: '姗欓粍鐧借壊绯�', - bg_black_style_yellow: '榛勯粦鑹茬郴', - bg_white_style_yellow: '榛勭櫧鑹茬郴', - bg_black_style_yellow_green: '榛勭豢榛戣壊绯�', - bg_white_style_yellow_green: '榛勭豢鐧借壊绯�', - bg_black_style_green: '缁块粦鑹茬郴', - bg_white_style_green: '缁跨櫧鑹茬郴', - bg_black_style_cyan: '闈掗粦鑹茬郴', - bg_white_style_cyan: '闈掔櫧鑹茬郴', - bg_black_style_blue_purple: '钃濈传榛戣壊绯�', - bg_white_style_blue_purple: '钃濈传鐧借壊绯�', - bg_black_style_purple: '绱粦鑹茬郴', - bg_white_style_purple: '绱櫧鑹茬郴', - bg_black_style_magenta: '娲嬬孩榛戣壊绯�', - bg_white_style_magenta: '娲嬬孩鐧借壊绯�', - bg_black_style_grass_green: '鑽夌豢榛戣壊绯�', - bg_white_style_grass_green: '鑽夌豢鐧借壊绯�', - bg_black_style_deep_red: '娣辩孩榛戣壊绯�', - bg_white_style_deep_red: '娣辩孩鐧借壊绯�' - } - - return style[text] || '钃濋粦鑹茬郴' - } - }, - { - title: '鏍囬', dataIndex: 'title', key: 'title', align: 'center', width: '170px' - }, - { - title: '鍥炬爣', dataIndex: 'favicon', key: 'favicon', align: 'center', width: '120px', - render: (text, record) => (text ? <img style={{width: '32px', height: '32px'}} src={text} alt="" /> : null) - }, - { - title: '鎿嶄綔', - key: 'action', - align: 'center', - width: '250px', + width: '40%', render: (text, record) => ( <div> - <Button type="link" onClick={() => this.deleteSubApp(record)} style={{color: '#ff4d4f'}}>鍒犻櫎</Button> - <Button type="link" onClick={() => this.jumpApp(record)}>缂栬緫搴旂敤</Button> - <Paragraph style={{display: 'inline-block', margin: 0}} copyable={{ text: `${base_url}${record.typename === 'pad' ? 'mob' : record.typename}/index.html#/index/${this.state.selectApp.kei_no}/${record.typename !== 'pc' ? record.typename + '/' : ''}${record.lang}` }}></Paragraph> + <Button type="link" onClick={() => this.setState({ selectApp: record, visible: 'edit' })} style={{color: '#8E44AD'}}>淇敼</Button> + <Button type="link" onClick={() => this.deleteApp(record)} style={{color: '#ff4d4f'}}>鍒犻櫎</Button> + <Button type="link" onClick={() => this.setState({ selectSubApp: record, subVisible: 'plus' })} style={{color: '#26C281'}}>娣诲姞瀛愬簲鐢�</Button> </div> - ) + ), }, ], selectApp: null, selectSubApp: null, - selectedRowKeys: [], - selectedSubRowKeys: [], visible: false, - subVisible: false + subVisible: false, + transcolumns: [ + { title: '浼犺緭鍙�', dataIndex: 'VersionName', key: 'VersionName', align: 'left' }, + { title: '璇存槑', dataIndex: 'ProgramName', key: 'ProgramName', align: 'left' }, + { title: '鐘舵��', dataIndex: 'StatusName', key: 'StatusName', align: 'left' }, + { title: '鍒涘缓鏃堕棿', dataIndex: 'CreateDate', key: 'CreateDate', align: 'left' }, + { + title: '鎿嶄綔', + key: 'action', + align: 'center', + render: (text, record) => ( + <div> + <Button type="link" onClick={() => this.setState({ selectTran: record, transVisible: 'edit' })} style={{color: '#8E44AD'}}>淇敼</Button> + <Button type="link" onClick={() => this.deleteTran(record)} style={{color: '#ff4d4f'}}>鍒犻櫎</Button> + <Button type="link" onClick={() => this.enableTran(record)} style={{color: '#26C281'}}>鍚敤</Button> + </div> + ), + }, + ], + transVisible: false, + translist: [], + tranSearchKey: '', + selectTran: null, + transIndex: 1, + transTotal: 0 } UNSAFE_componentWillMount() { document.body.className = '' this.getAppList() this.getSmStemp() + this.getTransList() } /** @@ -153,10 +114,197 @@ } } + getTransList = () => { + const { tranSearchKey, transIndex } = this.state + + let param = { + func: 's_get_sVersion', + dataM: 'Y', + PageSize: 10, + PageIndex: transIndex, + OrderCol: 'ID desc' + } + + if (tranSearchKey) { + param.VersionName = tranSearchKey + param.ProgramName = tranSearchKey + } + + this.setState({ + loading: true + }) + + Api.getCloudConfig(param).then(result => { + if (result.status) { + this.setState({ + loading: false, + translist: result.data + }) + } else { + this.setState({ + loading: false + }) + notification.warning({ + top: 92, + message: result.message, + duration: 5 + }) + } + }) + } + + changeTable = (pagination) => { + this.setState({ + transIndex: pagination.current + }, () => { + this.getTransList() + }) + } + + tranSearch = (value) => { + this.setState({tranSearchKey: value}, () => { + this.getTransList() + }) + } + + submitTrans = () => { + const { transVisible, selectTran } = this.state + + this.transRef.handleConfirm().then(res => { + this.setState({ + confirmloading: true + }) + + let param = {} + + if (transVisible === 'plus') { + param.func = 's_sVersion_add' + param.VersionName = res.VersionName + param.ProgramName = res.ProgramName + } else { + param.func = 's_sVersion_upt' + param.ProgramName = res.ProgramName + param.ID = selectTran.ID + } + + Api.getCloudConfig(param).then(result => { + if (result.status) { + notification.success({ + top: 92, + message: '鎿嶄綔鎴愬姛锛�', + duration: 3 + }) + this.setState({ + confirmloading: false, + transVisible: false + }) + this.getTransList() + } else { + this.setState({ + confirmloading: false + }) + notification.warning({ + top: 92, + message: result.message, + duration: 5 + }) + } + }, () => { + this.setState({ + confirmloading: false + }) + }) + }) + } + + deleteTran = (record) => { + const _this = this + + let param = { + func: 's_sVersion_del', + ID: record.ID + } + + confirm({ + content: '纭畾鍒犻櫎璇ヤ紶杈撳彿鍚楋紵', + onOk() { + return new Promise(resolve => { + Api.getCloudConfig(param).then(result => { + if (result.status) { + notification.success({ + top: 92, + message: '鎿嶄綔鎴愬姛锛�', + duration: 3 + }) + + _this.setState({ + selectTran: null, + }) + _this.getTransList() + } else { + notification.warning({ + top: 92, + message: result.message, + duration: 5 + }) + } + resolve() + }, () => { + resolve() + }) + }) + }, + onCancel() {} + }) + } + + enableTran = (record) => { + const _this = this + + let param = { + func: 's_sVersion_sub', + ID: record.ID + } + + confirm({ + content: '纭畾鍚敤璇ヤ紶杈撳彿鍚楋紵', + onOk() { + return new Promise(resolve => { + Api.getCloudConfig(param).then(result => { + if (result.status) { + notification.success({ + top: 92, + message: '鎿嶄綔鎴愬姛锛�', + duration: 3 + }) + + _this.setState({ + selectTran: record, + }) + _this.getTransList() + } else { + Modal.error({ + title: result.message, + }) + } + resolve() + }, () => { + resolve() + }) + }) + }, + onCancel() {} + }) + } + getAppList = () => { let param = { func: 's_get_kei' } + + this.setState({ + loading: true + }) Api.getCloudConfig(param).then(result => { if (result.status) { @@ -249,8 +397,6 @@ }) _this.setState({ - selectedRowKeys: [], - selectedSubRowKeys: [], selectApp: null, selectSubApp: null, loading: true @@ -310,7 +456,6 @@ }) _this.setState({ - selectedSubRowKeys: [], selectSubApp: null, loading: true }) @@ -343,74 +488,26 @@ window.open(window.location.href.replace(/#.+/ig, `#/${route}/${window.btoa(window.encodeURIComponent(JSON.stringify({...item, kei_no: selectApp.kei_no, remark: selectApp.remark, type: 'app'})))}`)) } - /** - * - */ onSelectChange = selectedRowKeys => { const { applist } = this.state let selectApp = applist.filter(item => item.ID === selectedRowKeys[0])[0] - this.setState({ selectedRowKeys, selectApp }) + this.setState({ selectApp }) } - /** - * - */ - onSubChange = selectedSubRowKeys => { - this.setState({ selectedSubRowKeys }) + onTransChange = selectedRowKeys => { + const { translist } = this.state + let selectTran = translist.filter(item => item.ID === selectedRowKeys[0])[0] + + this.setState({ selectTran }) } /** * @description 鐐瑰嚮鏁磋锛岃Е鍙戝垏鎹紝 鍒ゆ柇鏄惁鍙�夛紝鍗曢�夋垨澶氶�夛紝杩涜瀵瑰簲鎿嶄綔 */ changeRow = (record) => { - this.setState({ selectedRowKeys: [record.ID], selectApp: record }) + this.setState({ selectApp: record }) } - - /** - * @description 鐐瑰嚮鏁磋锛岃Е鍙戝垏鎹紝 鍒ゆ柇鏄惁鍙�夛紝鍗曢�夋垨澶氶�夛紝杩涜瀵瑰簲鎿嶄綔 - */ - changeSubRow = (record) => { - this.setState({ selectedSubRowKeys: [record.ID], selectSubApp: record }) - } - - trigerApp = (type) => { - if (type === 'edit' && !this.state.selectApp) { - notification.warning({ - top: 92, - message: '璇烽�夋嫨闇�瑕佺紪杈戠殑搴旂敤锛�', - duration: 5 - }) - return - } - - this.setState({ - visible: type - }) - } - - trigerSubApp = (type) => { - if (type === 'edit' && !this.state.selectSubApp) { - notification.warning({ - top: 92, - message: '璇烽�夋嫨闇�瑕佺紪杈戠殑瀛愬簲鐢紒', - duration: 5 - }) - return - } else if (!this.state.selectApp) { - notification.warning({ - top: 92, - message: '璇烽�夋嫨搴旂敤锛�', - duration: 5 - }) - return - } - - this.setState({ - subVisible: type - }) - } - submitCard = () => { const { selectApp, visible } = this.state @@ -455,8 +552,6 @@ }) this.setState({ - selectedRowKeys: [], - selectedSubRowKeys: [], selectApp: null, selectSubApp: null, confirmloading: false, @@ -541,7 +636,6 @@ }) this.setState({ - selectedSubRowKeys: [], selectSubApp: null, confirmloading: false, subVisible: false, @@ -567,7 +661,7 @@ } render () { - const { loading, visible, subVisible, columns, applist, selectedRowKeys, selectedSubRowKeys, subcolumns, selectApp, selectSubApp } = this.state + const { loading, visible, subVisible, columns, transcolumns, applist, translist, transVisible, selectApp, selectTran, selectSubApp } = this.state return ( <div className="mk-app-manage"> @@ -579,34 +673,141 @@ <Spin /> </div> : null } - <div className="app-table"> - <div className="app-action"> - <Button className="mk-green" onClick={() => this.trigerApp('plus')}>娣诲姞</Button> - <Button className="mk-purple" onClick={() => this.trigerApp('edit')}>淇敼</Button> + <div className="view-wrap"> + <div className="left-view"> + <div className="app-table"> + <div className="app-action"> + <Button className="mk-green" onClick={() => this.setState({ visible: 'plus' })}>娣诲姞搴旂敤</Button> + </div> + <Table + rowKey="ID" + columns={columns} + dataSource={applist} + pagination={false} + rowSelection={{ type: 'radio', selectedRowKeys: selectApp ? [selectApp.ID] : [], onChange: this.onSelectChange }} + onRow={(record) => ({ onClick: () => this.setState({ selectApp: record })})} + /> + </div> + <div className={'trans-table' + (this.state.transTotal <= 10 ? ' no-footer' : '')}> + <div className="app-action"> + <Button className="mk-green" onClick={() => this.setState({ transVisible: 'plus' })}>娣诲姞浼犺緭鍙�</Button> + <Search placeholder="缁煎悎鎼滅储" onSearch={value => this.tranSearch(value)} enterButton /> + </div> + <Table + rowKey="ID" + columns={transcolumns} + dataSource={translist} + pagination={{ + current: this.state.transIndex, + pageSize: 10, + total: this.state.transTotal || 0 + }} + rowSelection={{ type: 'radio', selectedRowKeys: selectTran ? [selectTran.ID] : [], onChange: this.onTransChange }} + onRow={(record) => ({ onClick: () => this.setState({ selectTran: record })})} + onChange={this.changeTable} + /> + </div> + {/* <div className={'script-table' + (this.state.transTotal <= 10 ? ' no-footer' : '')}> + <div className="app-action"> + <Button className="mk-green" onClick={() => this.setState({ scriptVisible: 'plus' })}>娣诲姞鑴氭湰</Button> + <Search placeholder="缁煎悎鎼滅储" onSearch={value => this.scriptSearch(value)} enterButton /> + </div> + <Table + rowKey="ID" + columns={transcolumns} + dataSource={translist} + pagination={{ + current: this.state.transIndex, + pageSize: 10, + total: this.state.transTotal || 0 + }} + rowSelection={{ type: 'radio', selectedRowKeys: selectTran ? [selectTran.ID] : [], onChange: this.onTransChange }} + onRow={(record) => ({ onClick: () => this.setState({ selectTran: record })})} + onChange={this.changeTable} + /> + </div> */} </div> - <Table - rowKey="ID" - columns={columns} - dataSource={applist} - pagination={false} - rowSelection={{ type: 'radio', selectedRowKeys, onChange: this.onSelectChange }} - onRow={(record) => ({ onClick: () => {this.changeRow(record)} })} - /> - </div> - <div className="app-table"> - <div className="sub-app-title"><span>瀛愬簲鐢�</span></div> - <div className="app-action"> - <Button className="mk-green" onClick={() => this.trigerSubApp('plus')}>娣诲姞</Button> - <Button className="mk-purple" onClick={() => this.trigerSubApp('edit')}>淇敼</Button> + <div className="right-view"> + {selectApp ? <div className="app-title">{selectApp.remark}</div> : null} + {selectApp && selectApp.sublist.map((item, index) => { + let css = skinStyle[item.css] ? skinStyle[item.css].name : '' + let color = skinStyle[item.css] ? skinStyle[item.css].color : '#e8e8e8' + let binding = '' + if (item.user_binding) { + if (item.user_binding.indexOf('uname_pwd') > -1) { + binding = '鐢ㄦ埛鍚�' + } + if (item.user_binding.indexOf('sms_vcode') > -1) { + binding = binding ? binding + '锛屾墜鏈哄彿' : '鎵嬫満鍙�' + } + } + return ( + <div className="sub-app" key={index} style={{borderColor: color}}> + <Row> + <Col span={12}> + <div className="app-item"> + <div className="label">搴旂敤绫诲瀷:</div> + <div className="content" style={{fontSize: '18px', fontWeight: 600}}>{item.typename}</div> + </div> + </Col> + <Col span={12}> + <div className="app-item"> + <div className="label">璇█:</div> + <div className="content" style={{textDecoration: 'underline'}}>{item.lang === 'en-US' ? '鑻辨枃' : '涓枃'}</div> + </div> + </Col> + <Col span={12}> + <div className="app-item"> + <div className="label">鏉冮檺绠$悊:</div> + <div className="content">{item.role_type === 'false' ? '涓嶅惎鐢�' : '鍚敤'}</div> + </div> + </Col> + <Col span={12}> + <div className="app-item"> + <div className="label">鐧诲綍:</div> + <div className="content">{item.login_types === 'false' ? '涓嶉渶瑕�' : '闇�瑕�'}</div> + </div> + </Col> + <Col span={12}> + <div className="app-item"> + <div className="label">鐨偆:</div> + <div className="content" style={{color: color}}>{css}</div> + </div> + </Col> + <Col span={12}> + <div className="app-item"> + {binding ? <div className="label"> + <Tooltip placement="topLeft" title="寰俊鍏紬鍙风櫥褰曟椂锛岀郴缁熺敤鎴蜂笌寰俊鐢ㄦ埛鐨勭粦瀹氭柟寮忋��"> + <Icon type="question-circle" /> + 鐢ㄦ埛缁戝畾: + </Tooltip> + </div> : null} + <div className="content">{binding}</div> + </div> + </Col> + <Col span={12}> + <div className="app-item"> + <div className="label">鏍囬:</div> + <div className="content">{item.title || '鏃�'}</div> + </div> + </Col> + <Col span={12}> + <div className="app-item"> + <div className="label">缃戠珯鍥炬爣:</div> + <div className="content">{item.favicon ? <img style={{width: '30px', height: '30px'}} src={item.favicon} alt="" /> : '鏃�'}</div> + </div> + </Col> + </Row> + <div className="action"> + <Button type="link" onClick={() => this.setState({ selectSubApp: item, subVisible: 'edit' })} style={{color: '#8E44AD'}}>淇敼</Button> + <Button type="link" onClick={() => this.deleteSubApp(item)} style={{color: '#ff4d4f'}}>鍒犻櫎</Button> + <Button type="link" onClick={() => this.jumpApp(item)}>缂栬緫搴旂敤</Button> + <Paragraph style={{display: 'inline-block', margin: 0}} copyable={{ text: `${base_url}${item.typename === 'pad' ? 'mob' : item.typename}/index.html#/index/${this.state.selectApp.kei_no}/${item.typename !== 'pc' ? item.typename + '/' : ''}${item.lang}` }}></Paragraph> + </div> + </div> + ) + })} </div> - <Table - rowKey="ID" - columns={subcolumns} - dataSource={selectApp ? selectApp.sublist : []} - pagination={false} - rowSelection={{ type: 'radio', selectedRowKeys: selectedSubRowKeys, onChange: this.onSubChange }} - onRow={(record) => ({ onClick: () => {this.changeSubRow(record)} })} - /> </div> <Modal title={'缂栬緫搴旂敤'} @@ -623,6 +824,20 @@ <MutilForm type={visible} card={visible === 'edit' ? selectApp : ''} wrappedComponentRef={(inst) => this.mobcardRef = inst} inputSubmit={this.submitCard} /> </Modal> <Modal + title={transVisible === 'plus' ? '娣诲姞浼犺緭鍙�' : '缂栬緫浼犺緭鍙�'} + width={'600px'} + maskClosable={false} + visible={!!transVisible} + onCancel={() => this.setState({transVisible: false})} + confirmLoading={this.state.confirmloading} + onOk={this.submitTrans} + cancelText="鍙栨秷" + okText="纭畾" + destroyOnClose + > + <TransForm type={transVisible} card={transVisible === 'edit' ? selectTran : ''} wrappedComponentRef={(inst) => this.transRef = inst} inputSubmit={this.submitTrans} /> + </Modal> + <Modal title={'缂栬緫瀛愬簲鐢�'} width={'850px'} maskClosable={false} -- Gitblit v1.8.0