From a4ef35bb323b5f8300f15a4eb604d61ff39a194a Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期四, 17 十二月 2020 17:35:39 +0800
Subject: [PATCH] 2020-12-17

---
 src/templates/zshare/modalform/index.jsx                             |    2 
 src/components/header/index.jsx                                      |    8 +
 src/tabviews/zshare/mutilform/index.scss                             |    7 +
 src/templates/formtabconfig/index.jsx                                |    2 
 src/templates/modalconfig/index.jsx                                  |    2 
 src/tabviews/home/index.jsx                                          |    5 
 src/tabviews/custom/index.scss                                       |    6 
 src/menu/components/card/data-card/wrapsetting/index.jsx             |    2 
 src/tabviews/custom/components/card/data-card/index.scss             |   25 +++
 src/templates/modalconfig/dragelement/card.jsx                       |    5 
 src/templates/treepageconfig/index.scss                              |    3 
 src/templates/formtabconfig/index.scss                               |    3 
 src/tabviews/custom/components/card/data-card/index.jsx              |   15 ++
 src/tabviews/custom/components/card/prop-card/index.scss             |   20 +++
 src/tabviews/custom/components/card/table-card/index.jsx             |    2 
 src/tabviews/custom/components/card/prop-card/index.jsx              |   15 ++
 src/templates/calendarconfig/index.scss                              |    3 
 src/templates/modalconfig/index.scss                                 |   10 +
 src/tabviews/zshare/calendar/index.jsx                               |   58 +++++----
 src/menu/stylecontroller/index.jsx                                   |   18 +++
 src/store/reducer.js                                                 |    7 +
 src/tabviews/home/index.scss                                         |   10 +
 src/menu/components/card/cardcomponent/index.jsx                     |   18 ++-
 src/menu/components/card/data-card/index.jsx                         |   14 ++
 src/templates/subtableconfig/index.scss                              |    3 
 src/tabviews/zshare/mutilform/index.jsx                              |   14 +-
 src/templates/comtableconfig/index.scss                              |    3 
 src/tabviews/custom/index.jsx                                        |    9 +
 src/menu/modalconfig/index.jsx                                       |    2 
 src/menu/components/card/data-card/wrapsetting/settingform/index.jsx |   35 +++++
 src/mob/colorsketch/index.scss                                       |    4 
 src/menu/components/card/prop-card/index.jsx                         |   16 ++
 src/views/login/index.jsx                                            |    2 
 33 files changed, 279 insertions(+), 69 deletions(-)

diff --git a/src/components/header/index.jsx b/src/components/header/index.jsx
index ab1c8c7..12a849a 100644
--- a/src/components/header/index.jsx
+++ b/src/components/header/index.jsx
@@ -238,6 +238,14 @@
         let mainMenu = menulist[0] || ''
         let _menu = null
 
+        if (mainMenu === '') { // 鏄惁鏄剧ず渚ц竟鏍忔帶鍒�
+          let _url = window.location.href.split('#')[0]
+          localStorage.setItem(_url + '-sideHidden', 'true')
+        } else {
+          let _url = window.location.href.split('#')[0]
+          localStorage.removeItem(_url + '-sideHidden')
+        }
+
         if (sessionStorage.getItem('ThirdMenu')) { // 鏄惁涓烘墦寮�鏂伴〉闈�
           let ThirdMenuId = sessionStorage.getItem('ThirdMenu')
           _menu = thdMenuList.filter(item => item.MenuID === ThirdMenuId)[0] // 閫氳繃url涓璵enuid绛涢�夊嚭閫変腑鐨勪富鑿滃崟
diff --git a/src/menu/components/card/cardcomponent/index.jsx b/src/menu/components/card/cardcomponent/index.jsx
index 8d6d660..f99c712 100644
--- a/src/menu/components/card/cardcomponent/index.jsx
+++ b/src/menu/components/card/cardcomponent/index.jsx
@@ -1,7 +1,7 @@
 import React, {Component} from 'react'
 import PropTypes from 'prop-types'
 import { is, fromJS } from 'immutable'
-import { Modal, Popover, Icon, Switch } from 'antd'
+import { Modal, Popover, Icon, Switch, Col } from 'antd'
 
 import asyncComponent from '@/utils/asyncComponent'
 import zhCN from '@/locales/zh-CN/model.js'
@@ -16,6 +16,7 @@
 
 class CardBoxComponent extends Component {
   static propTpyes = {
+    offset: PropTypes.any,           // 鍋忕Щ閲�
     MenuType: PropTypes.any,         // 鑿滃崟绫诲瀷
     cards: PropTypes.object,         // 鍗$墖琛岄厤缃俊鎭�
     card: PropTypes.object,          // 鍗$墖閰嶇疆淇℃伅
@@ -172,7 +173,7 @@
     const { card, side } = this.state
 
     let _style = null
-    let options = ['height', 'background', 'border', 'padding', 'margin']
+    let options = ['height', 'background', 'border', 'padding', 'margin', 'shadow']
     if (side === 'front') {
       _style = card.style ? fromJS(card.style).toJS() : {}
     } else if (side === 'back') {
@@ -204,16 +205,21 @@
   }
 
   render() {
-    const { cards, MenuType } = this.props
+    const { cards, MenuType, offset } = this.props
     const { card, elements, side, settingVisible, dict } = this.state
 
-    let _style = card.style
+    let _style = {...card.style}
+
+    if (_style.shadow) {
+      _style.boxShadow = '0 0 4px ' + _style.shadow
+    }
+    
     if (side === 'back') {
       _style = {...card.backStyle, height: card.style.height}
     }
 
     return (
-      <div className={'ant-col ant-col-' + (card.setting.width || 6)}>
+      <Col span={card.setting.width || 6} offset={offset || 0}>
         <div className="card-item" style={_style}>
           <CardCellComponent cards={cards} cardCell={card} side={side} elements={elements} updateElement={this.updateCard}/>
           <div className="card-control">
@@ -251,7 +257,7 @@
             wrappedComponentRef={(inst) => this.settingRef = inst}
           />
         </Modal>
-      </div>
+      </Col>
     )
   }
 }
diff --git a/src/menu/components/card/data-card/index.jsx b/src/menu/components/card/data-card/index.jsx
index 9b07350..9180af2 100644
--- a/src/menu/components/card/data-card/index.jsx
+++ b/src/menu/components/card/data-card/index.jsx
@@ -246,6 +246,18 @@
     const { menu } = this.props
     const { card } = this.state
 
+    let offset = 0
+    if (card.wrap.cardFloat && card.wrap.cardFloat !== 'left') {
+      let _width = 0
+      card.subcards.forEach(card => {
+        _width += card.setting.width
+      })
+      offset = _width < 24 ? 24 - _width : 0
+      if (card.wrap.cardFloat === 'center') {
+        offset = Math.floor(offset / 2)
+      }
+    }
+
     return (
       <div className="menu-data-card-edit-box" style={{...card.style, minHeight: card.wrap.minHeight}}>
         <NormalHeader defaultshow="hidden" config={card} updateComponent={this.updateComponent}/>
@@ -262,7 +274,7 @@
           <Icon type="tool" />
         </Popover>
         <ActionComponent config={card} setSubConfig={this.setSubConfig} updateaction={this.updateComponent}/>
-        {card.subcards.map(subcard => (<CardComponent key={subcard.uuid} MenuType={menu ? menu.MenuType : ''} cards={card} card={subcard} updateElement={this.updateCard} deleteElement={this.deleteCard}/>))}
+        {card.subcards.map((subcard, index) => (<CardComponent key={subcard.uuid} offset={!index ? offset : 0} MenuType={menu ? menu.MenuType : ''} cards={card} card={subcard} updateElement={this.updateCard} deleteElement={this.deleteCard}/>))}
         <div style={{clear: 'both'}}></div>
         {card.wrap.pagestyle !== 'switch' && card.setting.laypage === 'true' ? <Pagination total={85} showTotal={total => `鍏� ${total} 鏉} pageSize={20} defaultCurrent={1}/> : null}
       </div>
diff --git a/src/menu/components/card/data-card/wrapsetting/index.jsx b/src/menu/components/card/data-card/wrapsetting/index.jsx
index bd9c89a..3f448f5 100644
--- a/src/menu/components/card/data-card/wrapsetting/index.jsx
+++ b/src/menu/components/card/data-card/wrapsetting/index.jsx
@@ -61,7 +61,7 @@
           wrapClassName="popview-modal"
           title={config.type === 'table' ? '琛ㄦ牸璁剧疆' : '鍗$墖璁剧疆'}
           visible={visible}
-          width={700}
+          width={800}
           maskClosable={false}
           okText={dict['model.submit']}
           onOk={this.verifySubmit}
diff --git a/src/menu/components/card/data-card/wrapsetting/settingform/index.jsx b/src/menu/components/card/data-card/wrapsetting/settingform/index.jsx
index fe1be9d..2ae6842 100644
--- a/src/menu/components/card/data-card/wrapsetting/settingform/index.jsx
+++ b/src/menu/components/card/data-card/wrapsetting/settingform/index.jsx
@@ -165,6 +165,41 @@
             </Col> : null}
             {config.subtype !== 'tablecard' ? <Col span={12}>
               <Form.Item label={
+                <Tooltip placement="topLeft" title="璁剧疆涓哄眳涓榻愭垨鍙冲榻愶紝鍙湪鍗$墖涓�1琛屾椂鏈夋晥銆�">
+                  <Icon type="question-circle" />
+                  鍗$墖鎺掑垪
+                </Tooltip>
+              }>
+                {getFieldDecorator('cardFloat', {
+                  initialValue: wrap.cardFloat || 'left'
+                })(
+                  <Radio.Group style={{whiteSpace: 'nowrap'}}>
+                    <Radio key="left" value="left"> 宸﹀榻� </Radio>
+                    <Radio key="center" value="center"> 灞呬腑 </Radio>
+                    <Radio key="right" value="right"> 鍙冲榻� </Radio>
+                  </Radio.Group>
+                )}
+              </Form.Item>
+            </Col> : null}
+            {config.subtype !== 'tablecard' ? <Col span={12}>
+              <Form.Item label={
+                <Tooltip placement="topLeft" title="榧犳爣鎮诞浜庡崱鐗囦笂鏂规椂锛屽崱鐗囨斁澶�1.1鍊嶃��">
+                  <Icon type="question-circle" />
+                  鍗$墖鏀惧ぇ
+                </Tooltip>
+              }>
+                {getFieldDecorator('scale', {
+                  initialValue: wrap.scale || 'false'
+                })(
+                  <Radio.Group>
+                    <Radio key="false" value="false"> 鍚� </Radio>
+                    <Radio key="true" value="true"> 鏄� </Radio>
+                  </Radio.Group>
+                )}
+              </Form.Item>
+            </Col> : null}
+            {config.subtype !== 'tablecard' ? <Col span={12}>
+              <Form.Item label={
                 <Tooltip placement="topLeft" title="鍗$墖澶栬竟妗嗙殑鏈�灏忛珮搴︼紝鎺у埗鏁版嵁鍔犺浇鏃剁粍浠剁殑鍗犱綅銆�">
                   <Icon type="question-circle" />
                   鏈�灏忛珮搴�
diff --git a/src/menu/components/card/prop-card/index.jsx b/src/menu/components/card/prop-card/index.jsx
index 0bf9bf8..a089c19 100644
--- a/src/menu/components/card/prop-card/index.jsx
+++ b/src/menu/components/card/prop-card/index.jsx
@@ -82,7 +82,7 @@
         name: card.name,
         subtype: card.subtype,
         setting: { interType: 'system' },
-        wrap: { name: card.name, width: 24, title: '', addable: 'false', switch: 'false', datatype: 'dynamic' },
+        wrap: { name: card.name, width: 24, title: '', addable: 'false', switch: 'false', datatype: 'static' },
         style: { marginLeft: '0px', marginRight: '0px', marginTop: '8px', marginBottom: '8px' },
         headerStyle: { fontSize: '16px', borderBottomWidth: '1px', borderBottomColor: '#e8e8e8' },
         columns: [],
@@ -226,6 +226,18 @@
     const { menu } = this.props
     const { card } = this.state
 
+    let offset = 0
+    if (card.wrap.cardFloat && card.wrap.cardFloat !== 'left') {
+      let _width = 0
+      card.subcards.forEach(card => {
+        _width += card.setting.width
+      })
+      offset = _width < 24 ? 24 - _width : 0
+      if (card.wrap.cardFloat === 'center') {
+        offset = Math.floor(offset / 2)
+      }
+    }
+
     return (
       <div className="menu-prop-card-edit-box" style={{...card.style, minHeight: card.wrap.minHeight}}>
         <NormalHeader defaultshow="hidden" config={card} updateComponent={this.updateComponent}/>
@@ -240,7 +252,7 @@
         } trigger="hover">
           <Icon type="tool" />
         </Popover>
-        {card.subcards.map(subcard => (<CardComponent key={subcard.uuid} MenuType={menu ? menu.MenuType : ''} cards={card} card={subcard} updateElement={this.updateCard} deleteElement={this.deleteCard}/>))}
+        {card.subcards.map((subcard, index) => (<CardComponent key={subcard.uuid} offset={!index ? offset : 0} MenuType={menu ? menu.MenuType : ''} cards={card} card={subcard} updateElement={this.updateCard} deleteElement={this.deleteCard}/>))}
       </div>
     )
   }
diff --git a/src/menu/modalconfig/index.jsx b/src/menu/modalconfig/index.jsx
index 5f4be1f..2c9c5ab 100644
--- a/src/menu/modalconfig/index.jsx
+++ b/src/menu/modalconfig/index.jsx
@@ -199,7 +199,7 @@
       _formfields = config.fields
     }
 
-    _inputfields = _formfields.filter(item => item.type === 'text' || item.type === 'number')
+    _inputfields = _formfields.filter(item => item.type === 'text' || item.type === 'number' || item.type === 'color')
     _tabfields = _formfields.filter(item => card.field !== item.field && item.hidden !== 'true' && ['text', 'number', 'select', 'link'].includes(item.type))
     _tabfields.unshift({field: '', text: '鍘熻〃鍗�'})
 
diff --git a/src/menu/stylecontroller/index.jsx b/src/menu/stylecontroller/index.jsx
index 2a89594..dd478b6 100644
--- a/src/menu/stylecontroller/index.jsx
+++ b/src/menu/stylecontroller/index.jsx
@@ -168,6 +168,13 @@
     this.updateStyle({backgroundColor: val})
   }
 
+  /**
+   * @description 淇敼闃村奖棰滆壊 锛岄鑹叉帶浠�
+   */
+  changeShadowColor = (val) => {
+    this.updateStyle({shadow: val})
+  }
+
   imgChange = (list) => {
     if (list[0] && list[0].response) {
       this.setState({
@@ -503,6 +510,17 @@
                   </Form.Item>
                 </Col>
               </Panel> : null}
+              {options.includes('shadow') ? <Panel header="闃村奖" key="shadow">
+                <Col span={24}>
+                  <Form.Item
+                    colon={false}
+                    label={<Icon title="闃村奖棰滆壊" type="bg-colors" />}
+                    labelCol={{xs: { span: 24 }, sm: { span: 4 }}} wrapperCol={ {xs: { span: 24 }, sm: { span: 20 }} }
+                  >
+                    <ColorSketch value={card.shadow || 'transparent'} onChange={this.changeShadowColor} />
+                  </Form.Item>
+                </Col>
+              </Panel> : null}
               {options.includes('margin') ? <Panel header="澶栬竟璺�" key="margin">
                 <Col span={24}>
                   <Form.Item
diff --git a/src/mob/colorsketch/index.scss b/src/mob/colorsketch/index.scss
index 96900ce..0cb58e9 100644
--- a/src/mob/colorsketch/index.scss
+++ b/src/mob/colorsketch/index.scss
@@ -3,6 +3,7 @@
   width: 100%;
 
   .color-sketch-block-box {
+    // border-radius: 4px;
     display: inline-block;
     width: calc(100% - 160px);
     height: 100%;
@@ -12,13 +13,14 @@
   .color-sketch-block-inner {
     display: inline-block;
     cursor: pointer;
-    border-radius: 2px;
+    border-radius: 4px;
     box-shadow: 0 0 0 1px rgba(0, 0, 0, .1);
     width: 100%;
     height: 100%;
   }
   .color-sketch-value {
     display: inline-block;
+    font-size: 13px;
     width: 160px;
     padding-left: 10px;
     height: 25px;
diff --git a/src/store/reducer.js b/src/store/reducer.js
index 19f9032..a203f8b 100644
--- a/src/store/reducer.js
+++ b/src/store/reducer.js
@@ -2,6 +2,8 @@
 import moment from 'moment'
 import * as Type from './action-type'
 
+let _mainMenu = null
+let _url = window.location.href.split('#')[0]
 let _collapse = localStorage.getItem('collapse') === 'true'
 let _level = 10
 let _Mlevel = sessionStorage.getItem('Member_Level')
@@ -15,10 +17,13 @@
     _level = 30
   }
 }
+if (localStorage.getItem(_url + '-sideHidden') === 'true') {
+  _mainMenu = ''
+}
 
 let defaultState = {
   menuTree: null,       // 鑿滃崟缁撴瀯鏍�
-  mainMenu: null,       // 宸查�変富鑿滃崟
+  mainMenu: _mainMenu,  // 宸查�変富鑿滃崟
   tabviews: [],         // 瀵艰埅鏍�
   collapse: _collapse,  // 鏄惁鏀惰捣渚ц竟鏍忓鑸�
   isiframe: false,      // 鏄惁涓篿frame绐楀彛
diff --git a/src/tabviews/custom/components/card/data-card/index.jsx b/src/tabviews/custom/components/card/data-card/index.jsx
index 373bcd7..0e5a924 100644
--- a/src/tabviews/custom/components/card/data-card/index.jsx
+++ b/src/tabviews/custom/components/card/data-card/index.jsx
@@ -319,12 +319,21 @@
       _total = config.setting.pageSize * pageIndex
       switchable = true
     }
+    let offset = 0
+    if (config.wrap.cardFloat && config.wrap.cardFloat !== 'left') {
+      if (data && card.setting.width * data.length < 24) {
+        offset = 24 - card.setting.width * data.length
+        if (config.wrap.cardFloat === 'center') {
+          offset = Math.floor(offset / 2)
+        }
+      }
+    }
 
     return (
       <div className="custom-data-card-box" style={{...config.style, minHeight: config.wrap.minHeight}}>
         {loading ?
           <div className="loading-mask">
-            <div className="ant-spin-blur"></div>
+            {data ? <div className="ant-spin-blur"></div> : null}
             <Spin />
           </div> : null
         }
@@ -340,11 +349,11 @@
             getexceloutparam={this.getexceloutparam}
           /> : null
         }
-        <div className="data-zoom">
+        <div className={`data-zoom ${config.wrap.cardType} ${config.wrap.scale}`}>
           {switchable ? <div className={'prev-page ' + (pageIndex === 1 ? 'disabled' : '')} onClick={this.prevPage}><div><div><img src={preImg} alt=""/></div></div></div> : null}
           {data && data.length > 0 ? <div className="card-row-list">
             {data.map((item, index) => (
-              <Col className={activeKey === index ? 'active' : (selectKeys.indexOf(index) > -1 ? 'selected' : '')} key={index} span={card.setting.width} onClick={() => {this.changeCard(index, item)}}>
+              <Col className={activeKey === index ? 'active' : (selectKeys.indexOf(index) > -1 ? 'selected' : '')} key={index} span={card.setting.width} offset={!index ? offset : 0} onClick={() => {this.changeCard(index, item)}}>
                 <CardItem card={card} cards={config} data={item} updateStatus={this.updateStatus}/>
               </Col>
             ))}
diff --git a/src/tabviews/custom/components/card/data-card/index.scss b/src/tabviews/custom/components/card/data-card/index.scss
index 5d1f123..72029b8 100644
--- a/src/tabviews/custom/components/card/data-card/index.scss
+++ b/src/tabviews/custom/components/card/data-card/index.scss
@@ -18,6 +18,26 @@
     display: flex;
     position: relative;
   }
+  .data-zoom.radio, .data-zoom.checkbox {
+    .card-row-list {
+      >.ant-col:not(.active):not(.selected):hover {
+        >.card-item-box {
+          border-color: #69c0ff!important;
+          box-shadow: 0 0 4px #69c0ff!important;
+        }
+      }
+    }
+  }
+  .data-zoom.true {
+    .card-row-list {
+      >.ant-col:hover {
+        >.card-item-box {
+          z-index: 1;
+          transform: scale(1.1);
+        }
+      }
+    }
+  }
   .prev-page {
     width: 20px;
     div {
@@ -50,16 +70,17 @@
     flex: 10;
 
     .card-item-box {
+      position: relative;
       background-color: #ffffff;
       transition: all 0.3s;
     }
     >.active >.card-item-box {
       border-color: #1890ff!important;
-      box-shadow: 0 0 3px #1890ff;
+      box-shadow: 0 0 4px #1890ff;
     }
     >.selected >.card-item-box {
       border-color: #69c0ff!important;
-      box-shadow: 0 0 1px #69c0ff;
+      box-shadow: 0 0 4px #69c0ff;
     }
   }
   .card-item-box {
diff --git a/src/tabviews/custom/components/card/prop-card/index.jsx b/src/tabviews/custom/components/card/prop-card/index.jsx
index 1e01bd4..f072388 100644
--- a/src/tabviews/custom/components/card/prop-card/index.jsx
+++ b/src/tabviews/custom/components/card/prop-card/index.jsx
@@ -64,7 +64,9 @@
       _cols.set(item.field, item)
     })
 
+    let _width = 0
     _config.subcards.forEach(card => {
+      _width += card.setting.width
       card.elements = card.elements.map(item => {
         if (item.field && _cols.has(item.field)) {
           item.col = _cols.get(item.field)
@@ -78,6 +80,15 @@
         return item
       })
     })
+
+    let offset = 0
+    if (_config.wrap.cardFloat && _config.wrap.cardFloat !== 'left' && _config.subcards[0] && _width < 24) {
+      offset = 24 - _width
+      if (_config.wrap.cardFloat === 'center') {
+        offset = Math.floor(offset / 2)
+      }
+      _config.subcards[0].offset = offset
+    }
 
     this.setState({
       sync: _sync,
@@ -252,9 +263,9 @@
             <Spin />
           </div> : null
         }
-        <div className="card-row-list">
+        <div className={`card-row-list ${config.wrap.cardType} ${config.wrap.scale}`}>
           {config.subcards.map((item, index) => (
-            <Col className={activeKey === index ? 'active' : ''} key={index} span={item.setting.width || 6} onClick={() => {this.changeCard(index, item)}}>
+            <Col className={activeKey === index ? 'active' : ''} key={index} span={item.setting.width || 6} offset={item.offset || 0} onClick={() => {this.changeCard(index, item)}}>
               <CardItem card={item} cards={config} data={data} updateStatus={this.updateStatus}/>
             </Col>
           ))}
diff --git a/src/tabviews/custom/components/card/prop-card/index.scss b/src/tabviews/custom/components/card/prop-card/index.scss
index dae2885..ba16fac 100644
--- a/src/tabviews/custom/components/card/prop-card/index.scss
+++ b/src/tabviews/custom/components/card/prop-card/index.scss
@@ -19,14 +19,32 @@
     }
     >.active >.card-item-box {
       border-color: #1890ff!important;
-      box-shadow: 0 0 3px #1890ff;
+      box-shadow: 0 0 4px #1890ff;
+    }
+  }
+  .card-row-list.radio, .card-row-list.checkbox {
+    >.ant-col:not(.active):not(.selected):hover {
+      >.card-item-box {
+        border-color: #69c0ff!important;
+        box-shadow: 0 0 4px #69c0ff!important;
+      }
+    }
+  }
+  .card-row-list.true {
+    >.ant-col:hover {
+      >.card-item-box {
+        z-index: 1;
+        transform: scale(1.1);
+      }
     }
   }
 
   .card-item-box {
+    position: relative;
     background-position: center center;
     background-repeat: no-repeat;
     background-size: cover;
+    transition: all 0.3s;
   }
 
   .loading-mask {
diff --git a/src/tabviews/custom/components/card/table-card/index.jsx b/src/tabviews/custom/components/card/table-card/index.jsx
index 75f6167..140a11c 100644
--- a/src/tabviews/custom/components/card/table-card/index.jsx
+++ b/src/tabviews/custom/components/card/table-card/index.jsx
@@ -299,7 +299,7 @@
       <div className="custom-table-card-box" style={{...config.style, height: config.wrap.height}}>
         {loading ?
           <div className="loading-mask">
-            <div className="ant-spin-blur"></div>
+            {data ? <div className="ant-spin-blur"></div> : null}
             <Spin />
           </div> : null
         }
diff --git a/src/tabviews/custom/index.jsx b/src/tabviews/custom/index.jsx
index f396e05..a295a88 100644
--- a/src/tabviews/custom/index.jsx
+++ b/src/tabviews/custom/index.jsx
@@ -263,6 +263,11 @@
           item.subcards.forEach(card => {
             let _hasheight = card.style.height && card.style.height !== 'auto'
 
+            if (card.style.shadow) { // 鍗$墖闃村奖
+              card.style.boxShadow = '0 0 4px ' + card.style.shadow
+              delete card.style.shadow
+            }
+
             card.elements = card.elements.filter(cell => {
               if (cell.eleType === 'button') {
                 cell.logLabel = item.name + '-' + cell.label
@@ -688,8 +693,8 @@
     const { debug, loadingview, viewlost, config, loading } = this.state
 
     return (
-      <div className="custom-page-wrap" id={this.state.ContainerId} style={config ? config.style : null}>
-        {(loadingview || loading) ? <Spin size="large" /> : null}
+      <div className={'custom-page-wrap ' + (loadingview || loading ? 'loading' : '')} id={this.state.ContainerId} style={config ? config.style : null}>
+        {(loadingview || loading) ? <Spin className="view-spin" size="large" /> : null}
         <Row>{this.getComponents()}</Row>
         {debug && MenuNo && options.sysType !== 'cloud' && menuType !== 'HS' ? <Button
           icon="copy"
diff --git a/src/tabviews/custom/index.scss b/src/tabviews/custom/index.scss
index b8b53a5..4e7b7e6 100644
--- a/src/tabviews/custom/index.scss
+++ b/src/tabviews/custom/index.scss
@@ -44,4 +44,8 @@
     opacity: 0.8;
   }
 }
-
+.custom-page-wrap.loading {
+  .ant-spin-spinning:not(.view-spin) {
+    display: none;
+  }
+}
diff --git a/src/tabviews/home/index.jsx b/src/tabviews/home/index.jsx
index 6104d7a..26fbcd0 100644
--- a/src/tabviews/home/index.jsx
+++ b/src/tabviews/home/index.jsx
@@ -16,6 +16,7 @@
 
   state = {
     loading: true,
+    background: sessionStorage.getItem('home_background'),
     view: ''
   }
 
@@ -56,10 +57,10 @@
   }
 
   render() {
-    const { loading, view } = this.state
+    const { loading, view, background } = this.state
 
     if (loading) {
-      return (<Spin className="home-box-spin" size="large" />)
+      return (<div className="home-loading-view" style={{background: background}}><Spin className="home-box-spin" size="large" /></div>)
     } else if (view === 'custom') {
       return (<CustomPage MenuID={this.props.MenuID}/>)
     } else {
diff --git a/src/tabviews/home/index.scss b/src/tabviews/home/index.scss
index 0a6c007..6e0f295 100644
--- a/src/tabviews/home/index.scss
+++ b/src/tabviews/home/index.scss
@@ -1,5 +1,9 @@
-.home-box-spin {
+.home-loading-view {
   position: relative;
-  left: 50%;
-  top: 30vh;
+  height: 100%;
+  .home-box-spin {
+    position: relative;
+    left: 50%;
+    top: 30vh;
+  }
 }
\ No newline at end of file
diff --git a/src/tabviews/zshare/calendar/index.jsx b/src/tabviews/zshare/calendar/index.jsx
index 75ffdf7..fa32a93 100644
--- a/src/tabviews/zshare/calendar/index.jsx
+++ b/src/tabviews/zshare/calendar/index.jsx
@@ -92,8 +92,17 @@
     const { calendar } = this.props
 
     let datalist = []
-    let levels = { red: 1, orange: 2, yellow: 3, green: 4, cyan: 5, blue: 6, purple: 7, gray: 8 }
-    let colors = { red: '#d0021b', orange: '#f5a623', yellow: '#f8e71c', green: '#7ed321', cyan: '#50e3c2', blue: '#1890ff', purple: '#bd10e0', gray: '#9b9b9b' }
+    let colors = {
+      transparent: 'rgba(0, 0, 0, 0)',
+      red: 'rgba(208, 2, 27, 1)',
+      orange: 'rgba(245, 166, 35, 1)',
+      yellow: 'rgba(248, 231, 28, 1)',
+      green: 'rgba(126, 211, 33, 1)',
+      cyan: 'rgba(80, 227, 194, 1)',
+      blue: 'rgba(24, 144, 255, 1)',
+      purple: 'rgba(189, 16, 224, 1)',
+      gray: 'rgba(155, 155, 155, 1)'
+    }
 
     data && data.forEach(item => {
       let startTime = item[calendar.startfield]
@@ -107,8 +116,7 @@
       let equal = endTime.substr(0, 4) === startTime.substr(0, 4)
 
       datalist.push({
-        color: colors[color] || '',
-        level: color && levels[color] ? levels[color] : 100,
+        color: colors[color] || color,
         remark: item[calendar.remarkfield],
         startMonth: startTime.substr(0, 4) + startTime.substr(5, 2),
         endMonth: endTime.substr(0, 4) + endTime.substr(5, 2),
@@ -119,21 +127,6 @@
       })
     })
 
-    if (datalist.length > 0) {
-      datalist.sort((a, b) => a.level - b.level)
-    }
-
-    let styles = [
-      {background: '#d0021b', color: '#ffffff'},
-      {background: '#f5a623', color: '#ffffff'},
-      {background: '#f8e71c', color: '#ffffff'},
-      {background: '#7ed321', color: '#ffffff'},
-      {background: '#50e3c2', color: '#ffffff'},
-      {background: '#1890ff', color: '#ffffff'},
-      {background: '#bd10e0', color: '#ffffff'},
-      {background: '#9b9b9b', color: '#ffffff'},
-    ]
-
     return datelist.map(month => {
       month.subData = []
       datalist.forEach(item => {
@@ -141,9 +134,7 @@
           month.subData.push(item)
         }
       })
-      if (month.subData[0]) {
-        month.style = styles[month.subData[0].level - 1] || null
-      }
+      month.style = this.getStyle(month.subData[0])
       month.sublist = month.sublist.map(week => {
         week.sublist = week.sublist.map(day => {
           if (!day) return null
@@ -154,16 +145,29 @@
               day.subData.push(item)
             }
           })
-
-          if (day.subData[0]) {
-            day.style = styles[day.subData[0].level - 1] || null
-          }
+          day.style = this.getStyle(day.subData[0])
           return day
         })
         return week
       })
       return month
     })
+  }
+
+  getStyle = (item ) => {
+    if (!item || !item.color) return null
+    let style = {background: item.color}
+    
+    if (/rgb/ig.test(item.color)) {
+      try {
+        let colors = item.color.match(/\d+/g)
+        if ((colors[0] * 0.299 + colors[1] * 0.578 + colors[2] * 0.114) * colors[3] < 192) {
+          style.color = '#ffffff'
+        }
+      } catch {}
+    }
+
+    return style
   }
 
   getDateList = (selectYear) => {
@@ -309,7 +313,7 @@
                       <tr key={cell.week}>
                         {cell.sublist.map((d, i) => (
                           <td key={i}>
-                            {d ? <div className={'day-wrap ' + d.class} style={d.style || null} onClick={() => this.triggerDay(d)}>
+                            {d ? <div className="day-wrap" style={d.style || null} onClick={() => this.triggerDay(d)}>
                               {d.subData.length > 0 ? <Popover mouseEnterDelay={0.3} overlayClassName="calendar-day-pop" content={
                                 <div>
                                   {d.subData.map((data, index) => (
diff --git a/src/tabviews/zshare/mutilform/index.jsx b/src/tabviews/zshare/mutilform/index.jsx
index c0c29d5..5688593 100644
--- a/src/tabviews/zshare/mutilform/index.jsx
+++ b/src/tabviews/zshare/mutilform/index.jsx
@@ -6,15 +6,17 @@
 
 import Api from '@/api'
 import options from '@/store/options.js'
-import { formRule, calendarColors } from '@/utils/option.js'
+import { formRule } from '@/utils/option.js'
 import Utils from '@/utils/utils.js'
-import FileUpload from '../fileupload'
 import CustomSwitch from './customSwitch'
+import asyncComponent from '@/utils/asyncComponent'
 import CheckCard from './checkCard'
 import './index.scss'
 
 const {MonthPicker} = DatePicker
 const { TextArea } = Input
+const FileUpload = asyncComponent(() => import('../fileupload'))
+const ColorSketch = asyncComponent(() => import('@/mob/colorsketch'))
 
 class MainSearch extends Component {
   static propTpyes = {
@@ -836,7 +838,7 @@
               </Tooltip> : item.label
             }>
               {getFieldDecorator(item.field, {
-                initialValue: item.initval,
+                initialValue: item.initval || 'transparent',
                 rules: [
                   {
                     required: item.required === 'true',
@@ -844,11 +846,7 @@
                   }
                 ]
               })(
-                <Select disabled={item.readonly === 'true'}>
-                  {calendarColors.map(option =>
-                    <Select.Option key={option.name} style={{background: option.value, color: '#ffffff'}} value={option.name}>{option.name}</Select.Option>
-                  )}
-                </Select>
+                <ColorSketch />
               )}
             </Form.Item>
           </Col>
diff --git a/src/tabviews/zshare/mutilform/index.scss b/src/tabviews/zshare/mutilform/index.scss
index eff2b51..ac212f9 100644
--- a/src/tabviews/zshare/mutilform/index.scss
+++ b/src/tabviews/zshare/mutilform/index.scss
@@ -74,6 +74,13 @@
     text-overflow:ellipsis;
     white-space:nowrap;
   }
+  .color-sketch-block {
+    margin-top: 7px;
+    overflow: hidden;
+    .color-sketch-block-box {
+      min-width: 100px;
+    }
+  }
   p {
     color: #1890ff;
     border-bottom: 1px solid #d9d9d9;
diff --git a/src/templates/calendarconfig/index.scss b/src/templates/calendarconfig/index.scss
index 1628a90..cdffc0f 100644
--- a/src/templates/calendarconfig/index.scss
+++ b/src/templates/calendarconfig/index.scss
@@ -15,6 +15,9 @@
     height: 100%;
     overflow-y: hidden;
     padding-bottom: 30px;
+    .ant-collapse-borderless {
+      background-color: #ffffff;
+    }
     .ant-collapse-item {
       position: relative;
       border: 0;
diff --git a/src/templates/comtableconfig/index.scss b/src/templates/comtableconfig/index.scss
index a64c17c..a3e3eba 100644
--- a/src/templates/comtableconfig/index.scss
+++ b/src/templates/comtableconfig/index.scss
@@ -15,6 +15,9 @@
     height: 100%;
     overflow-y: hidden;
     padding-bottom: 30px;
+    .ant-collapse-borderless {
+      background-color: #ffffff;
+    }
     .ant-collapse-item {
       position: relative;
       border: 0;
diff --git a/src/templates/formtabconfig/index.jsx b/src/templates/formtabconfig/index.jsx
index 1098f5c..e99bdf9 100644
--- a/src/templates/formtabconfig/index.jsx
+++ b/src/templates/formtabconfig/index.jsx
@@ -439,7 +439,7 @@
       _formfields = [..._formfields, ...group.sublist]
     })
 
-    _inputfields = _formfields.filter(item => item.type === 'text' || item.type === 'number')
+    _inputfields = _formfields.filter(item => item.type === 'text' || item.type === 'number' || item.type === 'color')
     _tabfields = _formfields.filter(item => card.field !== item.field && item.hidden !== 'true' && ['text', 'number', 'select', 'link'].includes(item.type))
     _tabfields.unshift({field: '', text: '鍘熻〃鍗�'})
     
diff --git a/src/templates/formtabconfig/index.scss b/src/templates/formtabconfig/index.scss
index dca4801..a05ad70 100644
--- a/src/templates/formtabconfig/index.scss
+++ b/src/templates/formtabconfig/index.scss
@@ -15,6 +15,9 @@
     height: 100%;
     overflow-y: auto;
     padding-bottom: 30px;
+    .ant-collapse-borderless {
+      background-color: #ffffff;
+    }
     .ant-collapse-item {
       position: relative;
       border: 0;
diff --git a/src/templates/modalconfig/dragelement/card.jsx b/src/templates/modalconfig/dragelement/card.jsx
index 6c17b89..8228abe 100644
--- a/src/templates/modalconfig/dragelement/card.jsx
+++ b/src/templates/modalconfig/dragelement/card.jsx
@@ -4,6 +4,7 @@
 import moment from 'moment'
 
 import CheckCard from '../checkCard'
+import ColorSketch from '@/mob/colorsketch'
 import './index.scss'
 
 const { MonthPicker } = DatePicker
@@ -84,8 +85,10 @@
     formItem = (<Input style={{marginTop: '4px'}} value={card.initval} />)
   } else if (card.type === 'number') {
     formItem = (<InputNumber value={card.initval} precision={card.decimal} />)
-  } else if (card.type === 'multiselect' || card.type === 'select' || card.type === 'link' || card.type === 'color') {
+  } else if (card.type === 'multiselect' || card.type === 'select' || card.type === 'link') {
     formItem = (<Select value={selectval}></Select>)
+  } else if (card.type === 'color') {
+    formItem = (<ColorSketch value={card.initval || 'transparent'}/>)
   } else if (card.type === 'date') {
     formItem = (<DatePicker value={card.initval ? moment().subtract(card.initval, 'days') : null} />)
   } else if (card.type === 'datemonth') {
diff --git a/src/templates/modalconfig/index.jsx b/src/templates/modalconfig/index.jsx
index 7ada148..0b11fa9 100644
--- a/src/templates/modalconfig/index.jsx
+++ b/src/templates/modalconfig/index.jsx
@@ -276,7 +276,7 @@
       _formfields = config.fields
     }
 
-    _inputfields = _formfields.filter(item => item.type === 'text' || item.type === 'number')
+    _inputfields = _formfields.filter(item => item.type === 'text' || item.type === 'number' || item.type === 'color')
     _tabfields = _formfields.filter(item => card.field !== item.field && item.hidden !== 'true' && ['text', 'number', 'select', 'link'].includes(item.type))
     _tabfields.unshift({field: '', text: '鍘熻〃鍗�'})
 
diff --git a/src/templates/modalconfig/index.scss b/src/templates/modalconfig/index.scss
index a69c04f..8d3e188 100644
--- a/src/templates/modalconfig/index.scss
+++ b/src/templates/modalconfig/index.scss
@@ -15,6 +15,9 @@
     height: 100%;
     overflow-y: auto;
     padding-bottom: 30px;
+    .ant-collapse-borderless {
+      background-color: #ffffff;
+    }
     .ant-collapse-item {
       border: 0;
     }
@@ -242,6 +245,13 @@
                 width: 100%;
                 margin-top: 4px;
               }
+              .color-sketch-block {
+                margin-top: 7px;
+                overflow: hidden;
+                .color-sketch-block-box {
+                  min-width: 100px;
+                }
+              }
             }
             .ant-form-item-control-wrapper::after {
               content: '';
diff --git a/src/templates/subtableconfig/index.scss b/src/templates/subtableconfig/index.scss
index d81d245..2012d7c 100644
--- a/src/templates/subtableconfig/index.scss
+++ b/src/templates/subtableconfig/index.scss
@@ -15,6 +15,9 @@
     height: 100%;
     overflow-y: hidden;
     padding-bottom: 30px;
+    .ant-collapse-borderless {
+      background-color: #ffffff;
+    }
     .ant-collapse-item {
       position: relative;
       border: 0;
diff --git a/src/templates/treepageconfig/index.scss b/src/templates/treepageconfig/index.scss
index 8784403..bf89c4a 100644
--- a/src/templates/treepageconfig/index.scss
+++ b/src/templates/treepageconfig/index.scss
@@ -15,6 +15,9 @@
     height: 100%;
     overflow-y: hidden;
     padding-bottom: 30px;
+    .ant-collapse-borderless {
+      background-color: #ffffff;
+    }
     .ant-collapse-item {
       position: relative;
       border: 0;
diff --git a/src/templates/zshare/modalform/index.jsx b/src/templates/zshare/modalform/index.jsx
index b0080fa..25fd8a5 100644
--- a/src/templates/zshare/modalform/index.jsx
+++ b/src/templates/zshare/modalform/index.jsx
@@ -28,7 +28,7 @@
   datemonth: ['initval', 'readonly', 'required', 'hidden', 'readin', 'entireLine', 'tooltip'],
   datetime: ['initval', 'readonly', 'required', 'hidden', 'readin', 'entireLine', 'tooltip'],
   textarea: ['initval', 'readonly', 'required', 'hidden', 'readin', 'fieldlength', 'maxRows', 'encryption', 'interception', 'tooltip'],
-  color: ['readonly', 'required', 'hidden', 'readin', 'entireLine', 'tooltip'],
+  color: ['initval', 'readonly', 'required', 'hidden', 'readin', 'entireLine', 'tooltip'],
   hint: ['label', 'type', 'blacklist', 'message'],
   funcvar: [],
   linkMain: ['readonly', 'required', 'hidden', 'fieldlength', 'entireLine', 'tooltip']
diff --git a/src/views/login/index.jsx b/src/views/login/index.jsx
index 5bcfbb5..464f851 100644
--- a/src/views/login/index.jsx
+++ b/src/views/login/index.jsx
@@ -298,6 +298,8 @@
               webSite: res.WebSite || ''
             }
 
+            sessionStorage.setItem('home_background', res.index_background_color)
+
             // url鏍囬
             document.title = systemMsg.platTitle
 

--
Gitblit v1.8.0