From d5edf87014863eceaa44f28809ae4b54a39b9a8e Mon Sep 17 00:00:00 2001
From: king <18310653075@163.com>
Date: 星期五, 23 五月 2025 10:54:05 +0800
Subject: [PATCH] Merge branch 'develop'

---
 src/tabviews/custom/components/card/prop-card/index.jsx               |    2 
 src/tabviews/zshare/actionList/tabbutton/index.jsx                    |    4 +-
 src/tabviews/custom/components/table/base-table/index.jsx             |    2 
 src/tabviews/zshare/actionList/funczip/index.jsx                      |    2 
 src/components/imgScale/index.scss                                    |    4 +-
 src/tabviews/zshare/actionList/popupbutton/index.jsx                  |    2 
 src/tabviews/custom/components/card/double-data-card/index.jsx        |    2 
 src/menu/datasource/verifycard/settingform/index.jsx                  |   17 ++++++++
 src/tabviews/custom/components/table/normal-table/index.jsx           |    2 
 src/utils/utils-custom.js                                             |   25 ++++++++++++
 src/tabviews/zshare/actionList/funcMegvii/index.jsx                   |    2 
 src/tabviews/custom/components/table/edit-table/normalTable/index.jsx |    2 
 src/tabviews/zshare/actionList/excelInbutton/index.jsx                |    2 
 src/tabviews/zshare/actionList/printbutton/index.jsx                  |    2 
 src/tabviews/zshare/actionList/exceloutbutton/index.jsx               |    2 
 src/tabviews/custom/components/chart/antv-X6/index.scss               |    3 +
 src/tabviews/custom/components/chart/antv-X6/index.jsx                |    9 ++++
 src/tabviews/custom/components/table/edit-table/index.jsx             |    2 
 src/api/index.js                                                      |    5 +-
 src/views/login/index.scss                                            |    2 
 src/menu/components/card/prop-card/index.jsx                          |    2 
 src/tabviews/zshare/actionList/normalbutton/index.jsx                 |    4 +-
 src/views/systemfunc/sidemenu/config.jsx                              |   14 +++---
 src/tabviews/custom/components/card/data-card/index.jsx               |    2 
 24 files changed, 82 insertions(+), 33 deletions(-)

diff --git a/src/api/index.js b/src/api/index.js
index 45b9cbf..5e61e12 100644
--- a/src/api/index.js
+++ b/src/api/index.js
@@ -1079,8 +1079,9 @@
               res.ErrCode = '-2'
               MKEmitter.emit('reloadTabs')
             } else if (res.message === 'permission deny') {
-              res.message = window.GLOB.dict['permission_deny'] || '鏃犲綋鍓嶈彍鍗曟垨鎸夐挳鐨勮闂潈闄愶紝璇疯仈绯荤鐞嗗憳锛�'
-              res.ErrMesg = window.GLOB.dict['permission_deny'] || '鏃犲綋鍓嶈彍鍗曟垨鎸夐挳鐨勮闂潈闄愶紝璇疯仈绯荤鐞嗗憳锛�'
+              let isBtn = url.indexOf('s_TableData_InUpDe') > -1
+              res.message = window.GLOB.dict['permission_deny'] || `鏃犲綋鍓�${isBtn ? '鎸夐挳' : '鑿滃崟'}鐨勮闂潈闄愶紝璇疯仈绯荤鐞嗗憳锛乣
+              res.ErrMesg = res.message
             }
           }
           resolve(res)
diff --git a/src/components/imgScale/index.scss b/src/components/imgScale/index.scss
index 8bc7646..f193b66 100644
--- a/src/components/imgScale/index.scss
+++ b/src/components/imgScale/index.scss
@@ -48,8 +48,8 @@
   overflow: hidden;
 }
 .mk-image-preview-img {
-  max-width: 100%;
-  max-height: 100%;
+  max-width: 95%;
+  max-height: 95%;
   vertical-align: middle;
   -webkit-transform: scale3d(1, 1, 1);
           transform: scale3d(1, 1, 1);
diff --git a/src/menu/components/card/prop-card/index.jsx b/src/menu/components/card/prop-card/index.jsx
index ec54ba9..3fd1c5c 100644
--- a/src/menu/components/card/prop-card/index.jsx
+++ b/src/menu/components/card/prop-card/index.jsx
@@ -403,7 +403,7 @@
             <CopyComponent type="propcard" card={card}/>
             <PasteComponent options={['cardcell']} updateConfig={this.pasteComponent} />
             <FontColorsOutlined className="style" title="璋冩暣鏍峰紡" onClick={this.changeStyle}/>
-            {card.wrap.datatype === 'dynamic' ? <ClockComponent config={card} updateConfig={this.updateComponent}/> : <ClockCircleOutlined style={{color: '#eeeeee', cursor: 'not-allowed'}}/>}
+            {card.wrap.datatype !== 'public' ? <ClockComponent config={card} updateConfig={this.updateComponent}/> : <ClockCircleOutlined style={{color: '#eeeeee', cursor: 'not-allowed'}}/>}
             <DeleteOutlined className="close" title="鍒犻櫎缁勪欢" onClick={() => this.props.deletecomponent(card.uuid)} />
             {card.wrap.datatype === 'dynamic' ? <SettingComponent config={card} updateConfig={this.updateComponent} /> : <SettingOutlined style={{color: '#eeeeee', cursor: 'not-allowed'}}/>}
           </div>
diff --git a/src/menu/datasource/verifycard/settingform/index.jsx b/src/menu/datasource/verifycard/settingform/index.jsx
index cfb2a37..92b8896 100644
--- a/src/menu/datasource/verifycard/settingform/index.jsx
+++ b/src/menu/datasource/verifycard/settingform/index.jsx
@@ -219,6 +219,7 @@
         sm: { span: 16 }
       }
     }
+    let hasUp = !['balcony', 'menubar', 'commonbar', 'tabbar', 'invTable'].includes(config.subtype) && (!config.wrap || config.wrap.supType !== 'multi') && MenuType !== 'billPrint'
 
     return (
       <div className="model-datasource-setting-form-box">
@@ -474,7 +475,7 @@
                 </Radio.Group>)}
               </Form.Item>
             </Col> : null}
-            {!['balcony', 'menubar', 'commonbar', 'tabbar', 'invTable'].includes(config.subtype) && (!config.wrap || config.wrap.supType !== 'multi') && MenuType !== 'billPrint' ? <Col span={8}>
+            {hasUp ? <Col span={8}>
               <Form.Item label={
                 <Tooltip placement="topLeft" title={'璇ョ粍浠跺鏋滃彈鍏朵粬缁勪欢鎺у埗锛岃閫夐」鐩稿簲鐨勭粍浠讹紝娌℃湁鏃堕�夆�滄棤鈥濄��'}>
                   <QuestionCircleOutlined className="mk-form-tip" />
@@ -737,6 +738,20 @@
                 })(<InputNumber min={0} max={60000} precision={0} />)}
               </Form.Item>
             </Col> : null}
+            {hasUp && setting.supModule && setting.supModule[0] && setting.supModule[0] !== 'empty' ? <Col span={8}>
+              <Form.Item label={
+                <Tooltip placement="topLeft" title="鏈幏鍙栧埌涓婄骇涓婚敭鍊肩殑鎻愮ず鏂囨湰銆�">
+                  <QuestionCircleOutlined className="mk-form-tip" />
+                  涓婄骇绌哄�兼彁绀�
+                </Tooltip>
+              }>
+                {getFieldDecorator('supModTip', {
+                  initialValue: setting.supModTip || ''
+                })(
+                  <Input placeholder={''} autoComplete="off" />
+                )}
+              </Form.Item>
+            </Col> : null}
           </Row>
         </Form>
         <Modal
diff --git a/src/tabviews/custom/components/card/data-card/index.jsx b/src/tabviews/custom/components/card/data-card/index.jsx
index 3f04f41..8861386 100644
--- a/src/tabviews/custom/components/card/data-card/index.jsx
+++ b/src/tabviews/custom/components/card/data-card/index.jsx
@@ -1091,7 +1091,7 @@
     if (config.setting.supModule && !BID && config.wrap.supKey !== 'false') {
       notification.warning({
         top: 92,
-        message: window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: config.setting.supModTip || window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
       this.setState({
diff --git a/src/tabviews/custom/components/card/double-data-card/index.jsx b/src/tabviews/custom/components/card/double-data-card/index.jsx
index 4fac5cc..3aa3097 100644
--- a/src/tabviews/custom/components/card/double-data-card/index.jsx
+++ b/src/tabviews/custom/components/card/double-data-card/index.jsx
@@ -1002,7 +1002,7 @@
     if (config.setting.supModule && !BID && config.wrap.supKey !== 'false') {
       notification.warning({
         top: 92,
-        message: window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: config.setting.supModTip || window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
       this.setState({
diff --git a/src/tabviews/custom/components/card/prop-card/index.jsx b/src/tabviews/custom/components/card/prop-card/index.jsx
index f0bce0e..2c4e2d2 100644
--- a/src/tabviews/custom/components/card/prop-card/index.jsx
+++ b/src/tabviews/custom/components/card/prop-card/index.jsx
@@ -161,7 +161,7 @@
       MKEmitter.addListener('searchRefresh', this.searchRefresh)
     }
 
-    if (config.timer && config.wrap.datatype === 'dynamic') {
+    if (config.timer && config.wrap.datatype !== 'public') {
       this.timer = new TimerTask()
       this.timer.init(config.uuid, config.timer, config.timerRepeats, () => {this.loadData('timer')})
     }
diff --git a/src/tabviews/custom/components/chart/antv-X6/index.jsx b/src/tabviews/custom/components/chart/antv-X6/index.jsx
index ecedc25..ed4283f 100644
--- a/src/tabviews/custom/components/chart/antv-X6/index.jsx
+++ b/src/tabviews/custom/components/chart/antv-X6/index.jsx
@@ -1563,12 +1563,16 @@
   setback = () => {
     if (this.mkGraph.canUndo()) {
       this.mkGraph.undo()
+    } else {
+      message.warning('鏃犲彲鎾ら攢璁板綍锛�')
     }
   }
 
   setprev = () => {
     if (this.mkGraph.canRedo()) {
       this.mkGraph.redo()
+    } else {
+      message.warning('鏃犲彲鍓嶈繘璁板綍锛�')
     }
   }
 
@@ -1746,7 +1750,10 @@
     let cells = this.mkGraph.getCells()
     const that = this
 
-    if (cells.length === 0) return
+    if (cells.length === 0) {
+      message.warning('灏氭湭娣诲姞鍏冪礌锛�')
+      return
+    }
 
     confirm({
       title: '纭畾娓呯┖鍏冪礌鍚�?',
diff --git a/src/tabviews/custom/components/chart/antv-X6/index.scss b/src/tabviews/custom/components/chart/antv-X6/index.scss
index 63daf7b..d4e81ef 100644
--- a/src/tabviews/custom/components/chart/antv-X6/index.scss
+++ b/src/tabviews/custom/components/chart/antv-X6/index.scss
@@ -94,6 +94,9 @@
       border-right: 1px solid #dfe3e8;
       transition: all 0.2s;
 
+      .x6-port {
+        display: none;
+      }
       .x6-widget-stencil-title {
         display: none;
       }
diff --git a/src/tabviews/custom/components/table/base-table/index.jsx b/src/tabviews/custom/components/table/base-table/index.jsx
index 0099b1e..4117ef4 100644
--- a/src/tabviews/custom/components/table/base-table/index.jsx
+++ b/src/tabviews/custom/components/table/base-table/index.jsx
@@ -436,7 +436,7 @@
     if (config.setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: config.setting.supModTip || window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
       this.setState({
diff --git a/src/tabviews/custom/components/table/edit-table/index.jsx b/src/tabviews/custom/components/table/edit-table/index.jsx
index 1ce2b6a..7f9b250 100644
--- a/src/tabviews/custom/components/table/edit-table/index.jsx
+++ b/src/tabviews/custom/components/table/edit-table/index.jsx
@@ -637,7 +637,7 @@
     if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
       this.setState({
diff --git a/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx b/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
index b596c48..8415ed3 100644
--- a/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
+++ b/src/tabviews/custom/components/table/edit-table/normalTable/index.jsx
@@ -2508,7 +2508,7 @@
     if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
 
diff --git a/src/tabviews/custom/components/table/normal-table/index.jsx b/src/tabviews/custom/components/table/normal-table/index.jsx
index 2443066..42ec308 100644
--- a/src/tabviews/custom/components/table/normal-table/index.jsx
+++ b/src/tabviews/custom/components/table/normal-table/index.jsx
@@ -901,7 +901,7 @@
     if (setting.supModule && !BID && setting.supKey !== 'false') {
       notification.warning({
         top: 92,
-        message: window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
       this.setState({
diff --git a/src/tabviews/zshare/actionList/excelInbutton/index.jsx b/src/tabviews/zshare/actionList/excelInbutton/index.jsx
index 6c5f1a0..a022b65 100644
--- a/src/tabviews/zshare/actionList/excelInbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/excelInbutton/index.jsx
@@ -121,7 +121,7 @@
     if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
     } else if (btn.Ot === 'requiredSgl' && data.length !== 1) {
diff --git a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
index 36aa1b9..053530d 100644
--- a/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/exceloutbutton/index.jsx
@@ -102,7 +102,7 @@
     if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
     } else {
diff --git a/src/tabviews/zshare/actionList/funcMegvii/index.jsx b/src/tabviews/zshare/actionList/funcMegvii/index.jsx
index 652dc2a..29638b1 100644
--- a/src/tabviews/zshare/actionList/funcMegvii/index.jsx
+++ b/src/tabviews/zshare/actionList/funcMegvii/index.jsx
@@ -122,7 +122,7 @@
     if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
     } else if (data.length === 0) {
diff --git a/src/tabviews/zshare/actionList/funczip/index.jsx b/src/tabviews/zshare/actionList/funczip/index.jsx
index 9bee41a..7c36866 100644
--- a/src/tabviews/zshare/actionList/funczip/index.jsx
+++ b/src/tabviews/zshare/actionList/funczip/index.jsx
@@ -113,7 +113,7 @@
     if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
       return
diff --git a/src/tabviews/zshare/actionList/normalbutton/index.jsx b/src/tabviews/zshare/actionList/normalbutton/index.jsx
index 495d224..b415701 100644
--- a/src/tabviews/zshare/actionList/normalbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/normalbutton/index.jsx
@@ -413,7 +413,7 @@
     if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
       return false
@@ -1533,7 +1533,7 @@
     if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || window.GLOB.dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
       _resolve()
diff --git a/src/tabviews/zshare/actionList/popupbutton/index.jsx b/src/tabviews/zshare/actionList/popupbutton/index.jsx
index 9c79b09..71fb054 100644
--- a/src/tabviews/zshare/actionList/popupbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/popupbutton/index.jsx
@@ -155,7 +155,7 @@
     if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
       return
diff --git a/src/tabviews/zshare/actionList/printbutton/index.jsx b/src/tabviews/zshare/actionList/printbutton/index.jsx
index 5b331b5..8b330d2 100644
--- a/src/tabviews/zshare/actionList/printbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/printbutton/index.jsx
@@ -143,7 +143,7 @@
     if (setting.supModule && !BID) {
       notification.warning({
         top: 92,
-        message: dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
+        message: setting.supModTip || dict['sup_key_req'] || '闇�瑕佷笂绾т富閿�硷紒',
         duration: 5
       })
       return
diff --git a/src/tabviews/zshare/actionList/tabbutton/index.jsx b/src/tabviews/zshare/actionList/tabbutton/index.jsx
index 94322e0..d812ec5 100644
--- a/src/tabviews/zshare/actionList/tabbutton/index.jsx
+++ b/src/tabviews/zshare/actionList/tabbutton/index.jsx
@@ -188,7 +188,7 @@
       if (!menu) {
         notification.warning({
           top: 92,
-          message: dict['no_perm'] || '鑿滃崟宸插垹闄ゆ垨娌℃湁璁块棶鏉冮檺锛�',
+          message: dict['no_perm'] || `娌℃湁${btn.MenuName ? `鑿滃崟銆�${btn.MenuName}銆嬬殑` : '姝よ彍鍗曠殑'}璁块棶鏉冮檺锛乣,
           duration: 5
         })
         return
@@ -285,7 +285,7 @@
     if (!menu) {
       notification.warning({
         top: 92,
-        message: dict['no_perm'] || '鑿滃崟宸插垹闄ゆ垨娌℃湁璁块棶鏉冮檺锛�',
+        message: dict['no_perm'] || '娌℃湁姝よ彍鍗曠殑璁块棶鏉冮檺锛�',
         duration: 5
       })
       return
diff --git a/src/utils/utils-custom.js b/src/utils/utils-custom.js
index 464d315..87a4db3 100644
--- a/src/utils/utils-custom.js
+++ b/src/utils/utils-custom.js
@@ -2553,6 +2553,9 @@
               filterSql(script.sql)
             })
           }
+          if (item.setting.supModTip) {
+            sql.push(item.setting.supModTip)
+          }
         }
 
         if (item.columns) {
@@ -2729,6 +2732,9 @@
           filterSql(script.sql)
         })
       }
+      if (item.setting.supModTip) {
+        sql.push(item.setting.supModTip)
+      }
     })
   }
 
@@ -2767,7 +2773,12 @@
   ops = ops.map(n => n.replace(/^\s+|\s+$/g, ''))
   menu = menu.map(n => n.replace(/^\s+|\s+$/g, ''))
 
-  sql = sql.filter(Boolean)
+  sql = sql.filter((n) => {
+    if (!n) return false
+    if (/^[a-zA-Z_]+$/.test(n)) return false
+
+    return true
+  })
   btn = btn.filter(Boolean)
   ops = ops.filter(Boolean)
   menu = menu.filter(Boolean)
@@ -3145,6 +3156,9 @@
               script.sql = filterSql(script.sql)
             })
           }
+          if (item.setting.supModTip) {
+            item.setting.supModTip = replaceTitle(item.setting.supModTip)
+          }
         }
 
         if (item.columns) {
@@ -3320,6 +3334,9 @@
         item.scripts && item.scripts.forEach(script => {
           script.sql = filterSql(script.sql)
         })
+      }
+      if (item.setting.supModTip) {
+        item.setting.supModTip = replaceTitle(item.setting.supModTip)
       }
     })
   }
@@ -3566,6 +3583,9 @@
               script.sql = filterSql(script.sql)
             })
           }
+          if (item.setting.supModTip) {
+            item.setting.supModTip = replaceTitle(item.setting.supModTip)
+          }
         }
 
         if (item.columns) {
@@ -3726,6 +3746,9 @@
           script.sql = filterSql(script.sql)
         })
       }
+      if (item.setting.supModTip) {
+        item.setting.supModTip = replaceTitle(item.setting.supModTip)
+      }
     })
   }
 
diff --git a/src/views/login/index.scss b/src/views/login/index.scss
index 598e2be..b4fe275 100644
--- a/src/views/login/index.scss
+++ b/src/views/login/index.scss
@@ -36,7 +36,7 @@
     border-bottom: 2px solid var(--mk-sys-color);
     display: flex;
     align-items: center;
-    justify-content: right;
+    justify-content: flex-end;
     padding-right: 20vw;
     overflow: hidden;
 
diff --git a/src/views/systemfunc/sidemenu/config.jsx b/src/views/systemfunc/sidemenu/config.jsx
index 058481e..37ea55c 100644
--- a/src/views/systemfunc/sidemenu/config.jsx
+++ b/src/views/systemfunc/sidemenu/config.jsx
@@ -191,13 +191,13 @@
     MenuID: '1577972969199lei1g0qkvlh4tkc908m',
     MenuNo: 'sModularM',
     MenuName: '绯荤粺妯″潡',
-  }, {
-    src: '',
-    PageParam: {OpenType: 'newtab', Template: 'BaseTable'},
-    type: 'BaseTable',
-    MenuID: '1578479100252lfbp29v1kafk4s4q4ig',
-    MenuNo: 'BDLanguagePacksM',
-    MenuName: '璇█鍖�',
+  // }, {
+  //   src: '',
+  //   PageParam: {OpenType: 'newtab', Template: 'BaseTable'},
+  //   type: 'BaseTable',
+  //   MenuID: '1578479100252lfbp29v1kafk4s4q4ig',
+  //   MenuNo: 'BDLanguagePacksM',
+  //   MenuName: '璇█鍖�',
   }, {
     src: '',
     systems: ['production', 'local', 'SSO', 'cloud'],

--
Gitblit v1.8.0