From 5306aa30949e7a4cb7632da46ed7a786c5e61bde Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期一, 30 八月 2021 18:30:28 +0800
Subject: [PATCH] 2021-08-30

---
 src/views/design/index.jsx                      |    2 
 src/views/design/index.scss                     |    5 
 src/views/design/header/index.scss              |   55 ++++
 src/views/appmanage/index.scss                  |    2 
 src/views/design/header/index.jsx               |   41 +++
 src/views/appcheck/index.jsx                    |  260 +++++++++++++++++++++++
 src/router/index.js                             |    2 
 src/views/appcheck/index.scss                   |  104 +++++++++
 src/pc/components/login/normal-login/index.jsx  |    2 
 src/views/appcheck/header/index.jsx             |   31 ++
 src/views/appcheck/header/index.scss            |   57 +++++
 src/views/appmanage/index.jsx                   |   42 +++
 src/views/appmanage/submutilform/index.jsx      |   23 ++
 src/pc/components/login/normal-login/index.scss |    6 
 14 files changed, 605 insertions(+), 27 deletions(-)

diff --git a/src/pc/components/login/normal-login/index.jsx b/src/pc/components/login/normal-login/index.jsx
index 9f0d75e..74ec83e 100644
--- a/src/pc/components/login/normal-login/index.jsx
+++ b/src/pc/components/login/normal-login/index.jsx
@@ -46,7 +46,7 @@
         wrap: { name: card.name, width: card.width || 24, loginWays: ['uname_pwd'] },
         style: { background: '#ffffff', width: '330px', borderRadius: '4px', marginLeft: '55vw'},
         loginWays: [
-          {type: 'uname_pwd', label: '璐﹀彿瀵嗙爜', remember: 'true'},
+          {type: 'uname_pwd', label: '璐﹀彿瀵嗙爜鐧诲綍', remember: 'true'},
           {type: 'sms_vcode', label: '鐭俊楠岃瘉鐮�'},
           {type: 'app_scan', label: '鎵爜鐧诲綍'},
         ]
diff --git a/src/pc/components/login/normal-login/index.scss b/src/pc/components/login/normal-login/index.scss
index 3112f0b..6aa78f1 100644
--- a/src/pc/components/login/normal-login/index.scss
+++ b/src/pc/components/login/normal-login/index.scss
@@ -130,9 +130,9 @@
 
 .mk-mob-view .login-edit-box {
   display: block;
-  .login-way-wrap.simple {
-    display: none;
-  }
+  // .login-way-wrap.simple {
+  //   display: none;
+  // }
   .login-way-wrap {
     padding: 0 15px;
     border-radius: 0;
diff --git a/src/router/index.js b/src/router/index.js
index 9af2b9f..9220007 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -13,6 +13,7 @@
 const Login = asyncLoadComponent(() => import('@/views/login'))
 const NotFound = asyncComponent(() => import('@/views/404'))
 const AppManage = asyncLoadComponent(() => import('@/views/appmanage'))
+const AppCheck = asyncLoadComponent(() => import('@/views/appcheck'))
 const PCDesign = asyncLoadComponent(() => import('@/views/pcdesign'))
 const MobDesign = asyncLoadComponent(() => import('@/views/mobdesign'))
 const MenuDesign = asyncLoadComponent(() => import('@/views/menudesign'))
@@ -29,6 +30,7 @@
   {path: '/main', name: 'main', component: Main, auth: true},
   {path: '/design', name: 'design', component: Design, auth: true},
   {path: '/appmanage', name: 'appmanage', component: AppManage, auth: true},
+  {path: '/appcheck', name: 'appcheck', component: AppCheck, auth: true},
   {path: '/pcdesign/:param', name: 'pcdesign', component: PCDesign, auth: true},
   {path: '/mobdesign/:param', name: 'mobdesign', component: MobDesign, auth: true},
   {path: '/menudesign/:param', name: 'menudesign', component: MenuDesign, auth: true},
diff --git a/src/views/appcheck/header/index.jsx b/src/views/appcheck/header/index.jsx
new file mode 100644
index 0000000..96bba6d
--- /dev/null
+++ b/src/views/appcheck/header/index.jsx
@@ -0,0 +1,31 @@
+import React, {Component} from 'react'
+
+import avatar from '@/assets/img/avatar.jpg'
+import MainLogo from '@/assets/img/main-logo.png'
+import './index.scss'
+
+class AppManageHeader extends Component {
+  state = {
+    avatar: sessionStorage.getItem('CloudAvatar') || avatar,
+    userName: sessionStorage.getItem('CloudUserName')
+  }
+
+  render () {
+    return (
+      <header className="app-manage-header-container">
+        <div className="header-logo"><img src={MainLogo} alt=""/></div>
+        <div className="title">
+          搴旂敤绠$悊
+        </div>
+        <div className="header-user">
+          <img src={this.state.avatar} alt=""/>
+          <span>
+            <span className="username">{this.state.userName}</span>
+          </span>
+        </div>
+      </header>
+    )
+  }
+}
+
+export default AppManageHeader
\ No newline at end of file
diff --git a/src/views/appcheck/header/index.scss b/src/views/appcheck/header/index.scss
new file mode 100644
index 0000000..fd7bb98
--- /dev/null
+++ b/src/views/appcheck/header/index.scss
@@ -0,0 +1,57 @@
+.app-manage-header-container {
+  width: 100%;
+  height: 48px;
+  color: rgba(255, 255, 255, 0.65);
+  position: fixed;
+  top: 0px;
+  z-index: 10;
+  padding-right: 0px;
+  left: 0;
+  
+  background: #001529;
+  border-bottom: 1px solid #000;
+
+  .header-logo {
+    float: left;
+    width: 180px;
+    line-height: 48px;
+    text-align: center;
+    padding-left: 5px;
+    box-sizing: border-box;
+    opacity: 1;
+    img {
+      max-width: 100%;
+      max-height: 40px;
+    }
+  }
+  .header-user {
+    float: right;
+    line-height: 48px;
+    margin-right: 10px;
+    img {
+      width: 29px;
+      height: 29px;
+      border-radius: 30px;
+      margin-right: 7px;
+    }
+    span {
+      color: #ffffff;
+      font-size: 0.95rem;
+      .username {
+        display: inline-block;
+        height: 30px;
+        max-width: 95px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space: nowrap;
+      }
+    }
+  }
+  .title {
+    position: absolute;
+    left: calc(50% - 36px);
+    top: 10px;
+    color: #ffffff;
+    font-size: 18px;
+  }
+}
\ No newline at end of file
diff --git a/src/views/appcheck/index.jsx b/src/views/appcheck/index.jsx
new file mode 100644
index 0000000..4343b23
--- /dev/null
+++ b/src/views/appcheck/index.jsx
@@ -0,0 +1,260 @@
+import React, {Component} from 'react'
+import { Spin, notification, Table, ConfigProvider, Typography, Row, Col, Tooltip, Icon } from 'antd'
+import enUS from 'antd/es/locale/en_US'
+import zhCN from 'antd/es/locale/zh_CN'
+
+import Api from '@/api'
+import asyncComponent from '@/utils/asyncComponent'
+import './index.scss'
+
+const { Paragraph } = Typography
+
+const _locale = sessionStorage.getItem('lang') !== 'en-US' ? zhCN : enUS
+const Header = asyncComponent(() => import('./header'))
+
+let base_url = ''
+if (process.env.NODE_ENV === 'production') {
+  base_url = document.location.origin + '/' + window.GLOB.service
+} else {
+  base_url = window.GLOB.location + '/' + window.GLOB.service
+}
+
+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 AppCheck extends Component {
+  state = {
+    loading: false,
+    applist: [],
+    columns: [
+      { title: '搴旂敤鍚嶇О', dataIndex: 'remark', key: 'remark', align: 'center', width: '45%' },
+      { title: '搴旂敤缂栫爜', dataIndex: 'kei_no', key: 'kei_no', align: 'center', width: '45%' },
+    ],
+    selectApp: null
+  }
+
+  UNSAFE_componentWillMount() {
+    document.body.className = ''
+    this.getAppList()
+  }
+
+  /**
+   * @description 缁勪欢閿�姣侊紝娓呴櫎state鏇存柊
+   */
+  componentWillUnmount () {
+    this.setState = () => {
+      return
+    }
+  }
+
+  getAppList = () => {
+    let param = {
+      func: 's_get_kei'
+    }
+
+    param.rduri = window.GLOB.mainSystemApi
+
+    this.setState({
+      loading: true
+    })
+
+    Api.getLocalConfig(param).then(result => {
+      if (result.status) {
+        let selectApp = null
+        let applist = result.data.map(item => {
+          item.sublist = item.data_detail || []
+          item.sublist = item.sublist.map(cell => {
+            cell.ID = cell.d_id
+
+            if (cell.customize_param) {
+              let _param = {}
+              try {
+                _param = JSON.parse(window.decodeURIComponent(window.atob(cell.customize_param)))
+              } catch (e) {
+                _param = {}
+              }
+              cell.copyright = _param.copyright || ''
+              cell.logo = _param.logo || ''
+            }
+
+            return cell
+          })
+
+          if (this.state.selectApp && this.state.selectApp.ID === item.ID) {
+            selectApp = item
+          }
+
+          return item
+        })
+
+        if (!selectApp && applist[0]) {
+          selectApp = applist[0]
+        }
+
+        this.setState({
+          loading: false,
+          applist: applist,
+          selectApp
+        })
+      } else {
+        this.setState({
+          loading: false
+        })
+        notification.warning({
+          top: 92,
+          message: result.message,
+          duration: 5
+        })
+      }
+    })
+  }
+
+  onSelectChange = selectedRowKeys => {
+    const { applist } = this.state
+    let selectApp = applist.filter(item => item.ID === selectedRowKeys[0])[0]
+
+    this.setState({ selectApp })
+  }
+
+  /**
+   * @description 鐐瑰嚮鏁磋锛岃Е鍙戝垏鎹紝 鍒ゆ柇鏄惁鍙�夛紝鍗曢�夋垨澶氶�夛紝杩涜瀵瑰簲鎿嶄綔
+   */
+  changeRow = (record) => {
+    this.setState({ selectApp: record })
+  }
+
+  render () {
+    const { loading, columns, applist, selectApp } = this.state
+
+    return (
+      <div className="mk-app-check">
+        <ConfigProvider locale={_locale}>
+          <Header view="manage" />
+          {loading ?
+            <div className="loading-mask">
+              <Spin size="large" />
+            </div> : null
+          }
+          <div className="view-wrap">
+            <div className="left-view">
+              <div className="app-table">
+                <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>
+            <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>
+                      </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: '18px', height: '18px'}} src={item.favicon} alt="" /> : '鏃�'}</div>
+                        </div>
+                      </Col>
+                      <Col span={12}>
+                        <div className="app-item">
+                          <div className="label">鐗堟潈:</div>
+                          <div className="content">{item.copyright || '鏃�'}</div>
+                        </div>
+                      </Col>
+                      <Col span={12}>
+                        <div className="app-item">
+                          <div className="label">LOGO:</div>
+                          <div className="content">{item.logo ? <img style={{height: '18px'}} src={item.logo} alt="" /> : '鏃�'}</div>
+                        </div>
+                      </Col>
+                    </Row>
+                    <div className="action">
+                      <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>
+          </div>
+        </ConfigProvider>
+      </div>
+    )
+  }
+}
+
+export default AppCheck
\ No newline at end of file
diff --git a/src/views/appcheck/index.scss b/src/views/appcheck/index.scss
new file mode 100644
index 0000000..d6372c4
--- /dev/null
+++ b/src/views/appcheck/index.scss
@@ -0,0 +1,104 @@
+.mk-app-check {
+  background: #fff;
+  min-height: 100vh;
+  padding: 70px 30px;
+
+  .loading-mask {
+    position: fixed;
+    top: 0px;
+    bottom: 0px;
+    left: 0px;
+    right: 0px;
+    z-index: 2;
+    background: rgba(255, 255, 255, 0.35);
+
+    .ant-spin {
+      position: absolute;
+      left: 50%;
+      top: 50%;
+    }
+  }
+  .view-wrap {
+    width: 100%;
+    position: relative;
+    display: flex;
+
+    .left-view {
+      flex: 1;
+      width: 60%;
+      padding-right: 5px;
+      .app-table {
+        padding-top: 30px;
+      }
+    }
+    .right-view {
+      width: 40%;
+      padding-left: 20px;
+
+      .app-title {
+        font-size: 16px;
+        font-weight: 500;
+        height: 30px;
+        line-height: 30px;
+        border-bottom: 1px solid #d8d8d8;
+        margin-bottom: 17px;
+      }
+      .sub-app {
+        margin: 10px 10px 25px;
+        border: 1px solid #e8e8e8;
+        height: 210px;
+        border-radius: 4px;
+        padding-top: 10px;
+
+        .app-item {
+          height: 30px;
+          line-height: 30px;
+          div {
+            display: inline-block;
+            white-space: nowrap;
+            overflow: hidden;
+            white-space: nowrap;
+            text-overflow: ellipsis;
+            line-height: 30px;
+          }
+          .label {
+            width: 40%;
+            text-align: right;
+            color: rgba(0, 0, 0, 0.65);
+            .anticon-question-circle {
+              color: #c49f47;
+              margin-right: 3px;
+            }
+          }
+          .content {
+            width: 60%;
+            padding-left: 10px;
+            color: rgba(0, 0, 0, 0.85);
+          }
+        }
+        .action {
+          text-align: right;
+          padding: 5px 20px;
+          margin-top: 5px;
+          border-top: 1px solid #e8e8e8;
+
+          .ant-typography-copy {
+            color: #26C281;
+          }
+        }
+      }
+    }
+  }
+  .ant-table-wrapper {
+    .ant-table-body {
+      border: 1px solid #e8e8e8;
+      border-bottom: 0;
+      border-radius: 4px;
+    }
+    .ant-table-tbody {
+      > tr.ant-table-row-selected td {
+        background: #bae7ff;
+      }
+    }
+  }
+}
diff --git a/src/views/appmanage/index.jsx b/src/views/appmanage/index.jsx
index 983e632..0c1e89a 100644
--- a/src/views/appmanage/index.jsx
+++ b/src/views/appmanage/index.jsx
@@ -458,6 +458,18 @@
           item.sublist = item.data_detail || []
           item.sublist = item.sublist.map(cell => {
             cell.ID = cell.d_id
+
+            if (cell.customize_param) {
+              let _param = {}
+              try {
+                _param = JSON.parse(window.decodeURIComponent(window.atob(cell.customize_param)))
+              } catch (e) {
+                _param = {}
+              }
+              cell.copyright = _param.copyright || ''
+              cell.logo = _param.logo || ''
+            }
+
             return cell
           })
 
@@ -471,13 +483,12 @@
         if (!selectApp && applist[0]) {
           selectApp = applist[0]
         }
-        
+
         this.setState({
           loading: false,
           applist: applist,
           selectApp
         })
-
       } else {
         this.setState({
           loading: false
@@ -578,6 +589,7 @@
       exec_type: 'y',
       remark: selectApp.remark,
       kei_no: selectApp.kei_no,
+      cus_param_type: 'A',
       LText: ''
     }
 
@@ -588,7 +600,7 @@
     sublist = sublist.filter(item => item.ID !== record.ID)
 
     // param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','${item.link_type || 'true'}','${item.role_type || 'true'}','${item.lang || 'zh-CN'}'`)
-    param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}'`)
+    param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}','${window.btoa(window.encodeURIComponent(JSON.stringify({copyright: item.copyright || '', logo: item.logo || ''})))}'`)
     param.LText = param.LText.join(' union all ')
     param.LText = Utils.formatOptions(param.LText)
     
@@ -803,6 +815,7 @@
         exec_type: 'y',
         remark: res.remark,
         kei_no: res.kei_no,
+        cus_param_type: 'A',
         LText: ''
       }
 
@@ -811,7 +824,7 @@
 
       if (visible === 'edit') {
         // param.LText = selectApp.sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','${item.link_type || 'true'}','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}'`)
-        param.LText = selectApp.sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}'`)
+        param.LText = selectApp.sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}','${window.btoa(window.encodeURIComponent(JSON.stringify({copyright: item.copyright || '', logo: item.logo || ''})))}'`)
         param.LText = param.LText.join(' union all ')
         param.LText = Utils.formatOptions(param.LText)
       }
@@ -872,6 +885,7 @@
         exec_type: 'y',
         remark: selectApp.remark,
         kei_no: selectApp.kei_no,
+        cus_param_type: 'A',
         LText: ''
       }
 
@@ -896,7 +910,7 @@
       }
 
       // param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','${item.login_types || 'true'}','${item.link_type || 'true'}','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}'`)
-      param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}'`)
+      param.LText = sublist.map(item => `select '${item.ID}','${item.typename}','${selectApp.ID}','${sessionStorage.getItem('CloudUserID') || ''}','${window.GLOB.appkey || ''}','false','false','${item.role_type || 'true'}','${item.lang || 'zh-CN'}','${item.css || ''}','${item.title || ''}','${item.favicon || ''}','${item.user_binding || ''}','${item.sms_id || ''}','${window.btoa(window.encodeURIComponent(JSON.stringify({copyright: item.copyright || '', logo: item.logo || ''})))}'`)
       param.LText = param.LText.join(' union all ')
       param.LText = Utils.formatOptions(param.LText)
 
@@ -1045,8 +1059,8 @@
                       </Col>
                       <Col span={12}>
                         <div className="app-item">
-                          {/* <div className="label">鐧诲綍:</div>
-                          <div className="content">{item.login_types === 'false' ? '涓嶉渶瑕�' : '闇�瑕�'}</div> */}
+                          {/* <div className="label">鐨偆:</div>
+                          <div className="content" style={{color: color}}>{css}</div> */}
                         </div>
                       </Col>
                       <Col span={12}>
@@ -1074,10 +1088,22 @@
                       </Col>
                       <Col span={12}>
                         <div className="app-item">
-                          <div className="label">缃戠珯鍥炬爣:</div>
+                          <div className="label">缃戠珯澶村儚:</div>
                           <div className="content">{item.favicon ? <img style={{width: '18px', height: '18px'}} src={item.favicon} alt="" /> : '鏃�'}</div>
                         </div>
                       </Col>
+                      <Col span={12}>
+                        <div className="app-item">
+                          <div className="label">鐗堟潈:</div>
+                          <div className="content">{item.copyright || '鏃�'}</div>
+                        </div>
+                      </Col>
+                      <Col span={12}>
+                        <div className="app-item">
+                          <div className="label">LOGO:</div>
+                          <div className="content">{item.logo ? <img style={{height: '18px'}} src={item.logo} alt="" /> : '鏃�'}</div>
+                        </div>
+                      </Col>
                     </Row>
                     <div className="action">
                       <Button type="link" onClick={() => this.jumpMenu(item)} style={{color: 'rgba(30, 228, 224, 1)'}}>鑿滃崟&鏉冮檺</Button>
diff --git a/src/views/appmanage/index.scss b/src/views/appmanage/index.scss
index 5f9cb3b..e9858f7 100644
--- a/src/views/appmanage/index.scss
+++ b/src/views/appmanage/index.scss
@@ -58,7 +58,7 @@
       .sub-app {
         margin: 10px 10px 25px;
         border: 1px solid #e8e8e8;
-        height: 180px;
+        height: 210px;
         border-radius: 4px;
         padding-top: 10px;
 
diff --git a/src/views/appmanage/submutilform/index.jsx b/src/views/appmanage/submutilform/index.jsx
index 3d1a936..dd46068 100644
--- a/src/views/appmanage/submutilform/index.jsx
+++ b/src/views/appmanage/submutilform/index.jsx
@@ -194,7 +194,7 @@
             </Form.Item>
           </Col>
           <Col span={12}>
-            <Form.Item label="鍥炬爣">
+            <Form.Item label="缃戠珯澶村儚">
               {getFieldDecorator('favicon', {
                 initialValue: card ? card.favicon : ''
               })(
@@ -202,6 +202,27 @@
               )}
             </Form.Item>
           </Col>
+          <Col span={12}>
+            <Form.Item label={
+              <Tooltip placement="topLeft" title="浣跨敤寰俊鎺堟潈鐧诲綍鏃讹紝缁戝畾鐢ㄦ埛椤甸潰鐨勭増鏉冨0鏄庯紝娉細鍙坊鍔爃tml鏍囩銆�">
+                <Icon type="question-circle" />
+                鐗堟潈
+              </Tooltip>
+            }>
+              {getFieldDecorator('copyright', {
+                initialValue: card ? card.copyright || '' : ''
+              })(<Input placeholder="" autoComplete="off" onPressEnter={this.handleSubmit} />)}
+            </Form.Item>
+          </Col>
+          <Col span={12}>
+            <Form.Item label="LOGO">
+              {getFieldDecorator('logo', {
+                initialValue: card ? card.logo : ''
+              })(
+                <SourceComponent type="picture" placement="right"/>
+              )}
+            </Form.Item>
+          </Col>
         </Row>
       </Form>
     )
diff --git a/src/views/design/header/index.jsx b/src/views/design/header/index.jsx
index 5b14744..becaedf 100644
--- a/src/views/design/header/index.jsx
+++ b/src/views/design/header/index.jsx
@@ -295,7 +295,7 @@
   }
 
   render () {
-    const { mainMenu, editLevel } = this.props
+    const { mainMenu, editLevel, tabviews } = this.props
     const { menulist } = this.state
 
     return (
@@ -325,16 +325,45 @@
         {/* 杩涘叆缂栬緫鎸夐挳 */}
         {!editLevel ? <Icon onClick={this.enterEdit} className="edit-check" type="edit" /> : null}
         {!editLevel && options.sysType === 'local' && window.GLOB.systemType !== 'production' && this.props.memberLevel >= 20 ?
-          <span onClick={() => {window.open('#/appmanage')}} className="mobile" type="edit"> 搴旂敤绠$悊 <Icon type="arrow-right" /></span> : null
+          <div className="app-entrance entrance">
+            <div className="icon"><Icon type="appstore" /></div>
+            <div className="title">搴旂敤绠$悊</div>
+            <div className="detail">鍙垱寤哄強绠$悊PC銆乸ad鍙婄Щ鍔ㄧ绛変笉鍚岃澶囩殑搴旂敤锛屽疄鐜版槑绉戜簯APP銆佸井淇″叕浼楀彿銆佸皬绋嬪簭绛夊骞冲彴鐨勫簲鐢ㄥ叡浜��</div>
+            <Button type="primary" onClick={() => {window.open('#/appmanage')}}>
+              缂栬緫
+            </Button>
+          </div> : null
+        }
+        {editLevel === 'HS' && tabviews.length === 0 && options.sysType === 'local' && window.GLOB.systemType === 'production' && this.props.memberLevel >= 20 ?
+          <div className="app-prod-entrance entrance">
+            <div className="icon"><Icon type="appstore" /></div>
+            <div className="title">搴旂敤绠$悊</div>
+            <div className="detail">鍙垱寤哄強绠$悊PC銆乸ad鍙婄Щ鍔ㄧ绛変笉鍚岃澶囩殑搴旂敤锛屽疄鐜版槑绉戜簯APP銆佸井淇″叕浼楀彿銆佸皬绋嬪簭绛夊骞冲彴鐨勫簲鐢ㄥ叡浜��</div>
+            <Button type="primary" onClick={() => {window.open('#/appcheck')}}>
+              鏌ョ湅
+            </Button>
+          </div> : null
         }
         {!editLevel && options.sysType === 'local' && this.props.memberLevel >= 20 ?
-          <span onClick={() => {window.open('#/interface')}} className="interface" type="edit"> 鎺ュ彛璋冭瘯 <Icon type="arrow-right" /></span> : null
+          <div className="api-entrance entrance">
+            <div className="icon"><Icon type="api" /></div>
+            <div className="title">鎺ュ彛璋冭瘯</div>
+            <div className="detail">鍙嚜鍔ㄥ鐞嗙櫥褰曟帴鍙g殑鍙傛暟鍔犲瘑锛屼互鍙婁笟鍔℃帴鍙g殑绛惧悕璁$畻锛屾柟渚垮紑鍙戜汉鍛樼殑鎺ュ彛娴嬭瘯宸ヤ綔銆�</div>
+            <Button type="primary" onClick={() => {window.open('#/interface')}}>
+              缂栬緫
+            </Button>
+          </div> : null
         }
         {/* window.btoa(window.encodeURIComponent(JSON.stringify({ MenuType: 'home', MenuId: 'home_page_id', MenuName: '棣栭〉' }))) */}
         {!editLevel && window.GLOB.systemType !== 'production' && this.props.memberLevel >= 20 ?
-          <span className="home-edit" onClick={() => {window.open('#/menudesign/JTdCJTIyTWVudVR5cGUlMjIlM0ElMjJob21lJTIyJTJDJTIyTWVudUlkJTIyJTNBJTIyaG9tZV9wYWdlX2lkJTIyJTJDJTIyTWVudU5hbWUlMjIlM0ElMjIlRTklQTYlOTYlRTklQTElQjUlMjIlN0Q=')}}>
-            棣栭〉 <Icon type="arrow-right" />
-          </span> : null
+          <div className="home-entrance entrance">
+            <div className="icon"><Icon type="home" /></div>
+            <div className="title">棣栭〉</div>
+            <div className="detail">鍩轰簬鑷畾涔夐〉闈㈢殑棣栭〉璁捐锛屽彲瀹炵幇鐏垫椿鐨勫厓绱犻厤缃強鏍峰紡璋冩暣锛屽睍鐜板綋鍓嶇郴缁熺殑椋庢牸銆�</div>
+            <Button type="primary" onClick={() => {window.open('#/menudesign/JTdCJTIyTWVudVR5cGUlMjIlM0ElMjJob21lJTIyJTJDJTIyTWVudUlkJTIyJTNBJTIyaG9tZV9wYWdlX2lkJTIyJTJDJTIyTWVudU5hbWUlMjIlM0ElMjIlRTklQTYlOTYlRTklQTElQjUlMjIlN0Q=')}}>
+              缂栬緫
+            </Button>
+          </div> : null
         }
         {/* 缂栬緫鑿滃崟 */}
         {editLevel === 'level1' ? <EditMenu menulist={this.state.menulist} reload={this.reload} exitEdit={this.exitEdit}/> : null}
diff --git a/src/views/design/header/index.scss b/src/views/design/header/index.scss
index 4f796e4..717384c 100644
--- a/src/views/design/header/index.scss
+++ b/src/views/design/header/index.scss
@@ -137,12 +137,57 @@
     color: #1890ff;
     cursor: pointer;
   }
-  .home-edit {
+  .home-entrance {
+    left: 300px;
+  }
+  .api-entrance {
+    left: 600px;
+  }
+  .app-entrance {
+    left: 900px;
+  }
+  .app-prod-entrance {
+    left: 300px;
+  }
+  .entrance {
     position: absolute;
-    top: 100px;
-    right: 50px;
-    cursor: pointer;
-    color: #1890ff;
+    top: 200px;
+    background: #ffffff;
+    box-shadow: 0 0 5px #d9d9d9;
+    border-radius: 5px;
+    width: 250px;
+    height: 250px;
+    color: rgba(0, 0, 0, 0.85);
+    text-align: center;
+    .icon {
+      text-align: center;
+      padding: 15px 0px;
+      .anticon {
+        background-color: #1890ff;
+        color: #ffffff;
+        font-size: 24px;
+        width: 35px;
+        height: 35px;
+        line-height: 38px;
+        border-radius: 35px;
+      }
+    }
+    .title {
+      font-size: 16px;
+      text-align: center;
+      padding-bottom: 10px;
+    }
+    .detail {
+      font-size: 13px;
+      color: rgba(0, 0, 0, 0.65);
+      text-align: center;
+      padding: 0 10px;
+    }
+    .ant-btn {
+      margin-top: 15px;
+      height: 28px;
+      padding: 0 25px;
+    }
   }
 }
 .sys-header-container.mask::after {
diff --git a/src/views/design/index.jsx b/src/views/design/index.jsx
index 51fe335..61cabd1 100644
--- a/src/views/design/index.jsx
+++ b/src/views/design/index.jsx
@@ -20,7 +20,7 @@
   
   render () {
     return (
-      <div className="mk-main-view">
+      <div className="mk-main-view mk-design-view">
         <ConfigProvider locale={_locale}>
           <Header key="header"/>
           <Sidemenu key="sidemenu"/>
diff --git a/src/views/design/index.scss b/src/views/design/index.scss
index c14dc8e..7e50489 100644
--- a/src/views/design/index.scss
+++ b/src/views/design/index.scss
@@ -2,4 +2,7 @@
   display: flex;
   flex: auto;
   min-height: 100%;
-}
\ No newline at end of file
+}
+// .mk-design-view {
+//   background-color: rgb(238, 241, 246);
+// }
\ No newline at end of file

--
Gitblit v1.8.0