From 991a63234bba49da5a22d0f64ae15837d3253829 Mon Sep 17 00:00:00 2001
From: loulijun2021 <1694218219@qq.com>
Date: 星期一, 04 七月 2022 15:04:17 +0800
Subject: [PATCH] 除生产管理外   其它页面能适应小屏

---
 public/static/grf/5l.grf                              |    0 
 public/static/grf/7-2e.grf                            |    0 
 src/views/zzmx/chda.vue                               |   41 
 public/static/grf/1i.grf                              |    0 
 public/static/grf/7-1g.grf                            |    0 
 public/static/grid/grwebapp.js                        |  499 +++++++++++++++++++++
 public/static/grf/3e.grf                              |    0 
 public/static/grf/6a.grf                              |    0 
 src/api/scgl.js                                       |   17 
 public/static/grf/3n.grf                              |    0 
 public/static/grf/9x.grf                              |    0 
 public/static/grf/8h.grf                              |    0 
 public/static/grf/4e.grf                              |    0 
 public/static/grf/6j.grf                              |    0 
 public/static/grf/SummaryToDetail/ChartBar.grf        |    0 
 public/static/grf/5c.grf                              |    0 
 public/static/grf/7-3e.grf                            |    0 
 public/static/grf/2g.grf                              |    0 
 public/static/grf/6h.grf                              |    0 
 public/static/grf/7-3a.grf                            |    0 
 public/static/grf/program/data_from_url.grf           |    0 
 public/static/grf/7-2g.grf                            |    0 
 public/static/grf/1k.grf                              |    0 
 public/static/grf/8d.grf                              |    0 
 public/static/grf/4a.grf                              |    0 
 public/static/grf/3i.grf                              |    0 
 public/static/grf/3g.grf                              |    0 
 public/static/grf/产品流传单.grf                           |    0 
 public/static/grf/4c.grf                              |    0 
 public/static/grf/7-1e.grf                            |    0 
 public/static/grf/8f.grf                              |    0 
 public/static/grf/3p.grf                              |    0 
 public/static/grf/5n.grf                              |    0 
 public/static/grf/5e.grf                              |    0 
 public/static/grf/3q-1.grf                            |    0 
 public/static/grf/2e.grf                              |    0 
 public/static/grf/1b.grf                              |    0 
 public/static/grf/7-3c.grf                            |    0 
 public/static/grf/1d.grf                              |    0 
 public/static/grf/5g.grf                              |    0 
 public/static/grf/8b.grf                              |    0 
 public/static/grf/3a.grf                              |    0 
 public/static/grf/a1.grf                              |    0 
 public/static/grf/7-1b.grf                            |    0 
 public/static/grf/2b.grf                              |    0 
 public/static/grf/7-2a.grf                            |    0 
 public/static/grf/6e.grf                              |    0 
 public/static/grf/SummaryToDetail/Summary.grf         |    0 
 public/static/grf/9a.grf                              |    0 
 public/static/grf/6n.grf                              |    0 
 public/static/grf/2k.grf                              |    0 
 public/static/grf/1m.grf                              |    0 
 public/static/grf/5p.grf                              |    0 
 public/static/grf/3j.grf                              |    0 
 public/static/grf/3q-3.grf                            |    0 
 public/static/grf/6c.grf                              |    0 
 public/static/grf/7-1i.grf                            |    0 
 public/static/grf/ds.grf                              |    0 
 public/index.html                                     |    2 
 public/static/grf/3c.grf                              |    0 
 public/static/grf/7-2c.grf                            |    0 
 public/static/grf/8i.grf                              |    0 
 public/static/grf/7-3f.grf                            |    0 
 public/static/grf/aaa.grf                             |    0 
 public/static/grf/1o.grf                              |    0 
 public/static/grf/6l.grf                              |    0 
 src/views/jcsz/jsqd.vue                               |   46 -
 public/static/grf/5i.grf                              |    0 
 public/static/grf/2i.grf                              |    0 
 public/static/grf/1f.grf                              |    0 
 src/views/zzmx/gxdy.vue                               |   10 
 public/static/grf/3l.grf                              |    0 
 public/static/grf/1a_test.grf                         |    4 
 public/static/grf/8g.grf                              |    0 
 public/static/grf/4d.grf                              |    0 
 src/views/jcsz/wldw.vue                               |    8 
 src/views/scgl/gd.vue                                 |   24 
 public/static/grf/6k.grf                              |    0 
 public/static/grf/7-3d.grf                            |    0 
 public/static/grf/3o.grf                              |    0 
 public/static/grf/2h.grf                              |    0 
 public/static/grf/5b.grf                              |    0 
 public/static/grf/SummaryToDetail/Crosstab.grf        |    0 
 public/static/grf/SummaryToDetail/Crosstab_Period.grf |    0 
 public/static/grf/6b.grf                              |    0 
 public/static/grf/7-1h.grf                            |    0 
 src/views/zzmx/jpgj.vue                               |    3 
 public/static/grf/1h.grf                              |    0 
 public/static/grf/3@.grf                              |    0 
 public/static/grf/7-2f.grf                            |    0 
 public/static/grf/5k.grf                              |    0 
 public/static/grf/1q.grf                              |    0 
 public/static/grf/3f.grf                              |    0 
 src/views/wlgl/kwdy.vue                               |    3 
 public/static/grf/3h.grf                              |    0 
 public/static/grf/SummaryToDetail/Detail.grf          |    0 
 src/views/zzmx/gylx.vue                               |    3 
 src/views/sbgl/sbqd.vue                               |   34 
 public/static/grf/7-1d.grf                            |    0 
 public/static/grf/8e.grf                              |    0 
 public/static/grf/1a.grf                              |    2 
 public/static/grf/1l.grf                              |    0 
 public/static/grf/5d.grf                              |    0 
 public/static/grf/产品流传单A5.grf                         |    0 
 public/static/grf/5o.grf                              |    0 
 public/static/grf/6g.grf                              |    0 
 public/static/grf/2d.grf                              |    0 
 public/static/grf/3q-2.grf                            |    0 
 public/static/grf/7-3b.grf                            |    0 
 public/static/grf/2f.grf                              |    0 
 public/static/grf/6i.grf                              |    0 
 public/static/grf/5f.grf                              |    0 
 public/static/grf/2m.grf                              |    0 
 public/static/grf/3q.grf                              |    0 
 public/static/grf/5m.grf                              |    0 
 public/static/grf/1j.grf                              |    0 
 public/static/grf/7-1f.grf                            |    0 
 public/static/grf/4b.grf                              |    0 
 src/views/jcsz/zzjg.vue                               |   43 +
 src/views/scgl/scdd.vue                               |   47 +
 public/static/grf/1n.grf                              |    0 
 public/static/grf/2l.grf                              |    0 
 public/static/grf/7-1a2.grf                           |    0 
 public/static/grf/1e.grf                              |    0 
 public/static/grf/1c.grf                              |    0 
 public/static/grf/3k.grf                              |    0 
 public/static/grf/7-1c.grf                            |    0 
 public/static/grf/5h.grf                              |    0 
 public/static/grf/8c.grf                              |    0 
 public/static/grf/3b.grf                              |    0 
 public/static/grf/2c.grf                              |    0 
 public/static/grf/7-2b.grf                            |    0 
 public/static/grid/webapp-ws-tutorial.htm             |   46 -
 public/static/grf/9b.grf                              |    0 
 public/static/grf/6f.grf                              |    0 
 public/static/grf/3m.grf                              |    0 
 public/static/grf/1p.grf                              |    0 
 public/static/grf/6m.grf                              |    0 
 public/static/grf/5j.grf                              |    0 
 public/static/grf/1g.grf                              |    0 
 public/static/grf/2j.grf                              |    0 
 public/static/grf/5a.grf                              |    0 
 public/static/grf/7-3g.grf                            |    0 
 /dev/null                                             |  490 ---------------------
 public/static/grf/a0.grf                              |    0 
 public/static/grf/2a.grf                              |    0 
 public/static/grf/7-2d.grf                            |    0 
 public/static/grf/8a.grf                              |    0 
 src/views/jcsz/yhqd.vue                               |   36 
 public/static/grf/3d.grf                              |    0 
 public/static/grf/7-1a.grf                            |    0 
 src/views/zzmx/gylx_bak.vue                           |    4 
 public/static/grf/6d.grf                              |    0 
 153 files changed, 718 insertions(+), 644 deletions(-)

diff --git a/public/grwebapp.js b/public/grwebapp.js
deleted file mode 100644
index 000690d..0000000
--- a/public/grwebapp.js
+++ /dev/null
@@ -1,490 +0,0 @@
-// 鍙橀噺 _grwebapp_url 鎸囧畾WEB鎶ヨ〃瀹㈡埛绔畨瑁呯▼搴忕殑涓嬭浇URL锛屽綋閫氳繃WebSocket閫氳涓嶆垚鍔熸椂锛屾彁绀虹敤鎴风敤姝RL涓嬭浇绋嬪簭杩涜瀹夎銆�
-// 鎴栫敤浜庤嚜鍔ㄦ洿鏂癢EB鎶ヨ〃瀹㈡埛绔椂涓嬭浇鏂扮増鏈紝寮�鍙戣�呭簲灏� _grwebapp_url 鏀逛负鑷繁鏈嶅姟鍣ㄧ殑URL锛屾柟渚跨敤鎴蜂粠鍙闂殑WEB鏈嶅姟鍣ㄤ笅杞�
-// 鍙橀噺 _grwebapp_version 鎸囧畾鑷姩鏇存柊鏃讹紝瀹㈡埛绔▼搴忛渶瑕佺殑鐗堟湰鍙凤紝濡傛灉灏忎簬姝ょ増鏈彿锛屽垯鑷姩杩涜鏇存柊
-var _grwebapp_websocket = null
-var _grwebapp_url = 'http://www.rubylong.cn/download/gridreport6-webapp.exe'
-var _grwebapp_version = '6.8.2.0'
-var webapp_onmessage // 濡傛灉闇�瑕佸搷搴旀墽琛屼换鍔″悗鐨勬秷鎭搷搴旓紝搴旇鍐欎竴涓悕绉颁负 webapp_onmessage 鐨� function
-
-function webapp_url_method_valid(url, method) {
-  if (!method) {
-    if (typeof url === 'object') {
-      method = url.method
-      url = url.url
-    }
-    if (!method) {
-      method = /.grf|.txt|.xml|.json/.test(url) ? 'GET' : 'POST'
-    }
-  }
-  return method
-}
-
-// 姝ゅ嚱鏁扮敤浜庡垽鏂竴涓彉閲忔槸鍚︿负URL瀛楃涓诧紝濡傛灉绫诲瀷涓哄瓧绗︿覆涓旈涓潪绌虹櫧瀛楃涓嶄负鈥�<鈥濅笌鈥渰鈥濆嵆鍒ゅ畾涓篣RL
-// 濡傛灉鍙傛暟鏄竴涓猳bject瀵硅薄锛屼笖鍏跺叿鏈夆�渦rl鈥濆睘鎬э紝鍒欏叾鏄疕TTPParam瀵硅薄锛屾槸涓�涓猽rl鍙傛暟
-var webapp_is_url = function(p) {
-  var index = 0
-  var len = p.length
-  var ch
-
-  // 瀵硅薄濡傛灉鏈塽rl灞炴�э紝鍒ゅ畾涓簎rl
-  if (typeof p === 'object') {
-    return !!p.url
-  }
-
-  if (typeof p !== 'string') {
-    return 0
-  }
-
-  // 棣栧厛鎵惧埌绗竴涓潪绌虹櫧瀛楃
-  while (index < len) {
-    ch = p[index]
-    if (!/\s/g.test(ch)) { break }
-    index++
-  }
-
-  // 濡傛灉涓嶆槸xml鎴杍son鏂囨湰涓诧紝鍒欏垽瀹氫负url
-  return (ch != '{') && (ch != '<') && (p.substr(index, 4) != '_WR_')
-}
-
-function webapp_ajax(method, url, callback, cbthis, params) {
-  var xmlhttp = new XMLHttpRequest()
-  var headers
-
-  xmlhttp.onreadystatechange = function() {
-    if (xmlhttp.readyState == 4 && xmlhttp.status > 0) {
-      callback.call(cbthis, xmlhttp, xmlhttp.status == 200)
-    }
-  }
-
-  xmlhttp.onerror = function() {
-    callback.call(cbthis, xmlhttp, 0)
-  }
-
-  if (typeof url === 'object') {
-    headers = url.headers
-    if (typeof headers === 'string') {
-      headers = JSON.parse(headers)
-    }
-
-    if (!method) {
-      method = url.method
-    }
-
-    if (!params) {
-      params = url.data
-    }
-
-    url = url.url
-  }
-
-  xmlhttp.open(webapp_url_method_valid(url, method), url, true) // 寮傛璇锋眰鏁版嵁
-
-  if (headers && typeof headers === 'object') {
-    for (var key in headers) {
-      xmlhttp.setRequestHeader(key, headers[key])
-    }
-  }
-
-  xmlhttp.send(params) // POST 鎴� PUT 鍙互浼犻�掑弬鏁�
-}
-
-// ///////////////////////////////////////////////////////////////////////////
-// 鍒涘缓鍚姩WEB鎶ヨ〃瀹㈡埛绔殑URL鍗忚鍙傛暟
-function _gr_up_href(args) {
-  console.log(args, 788)
-  return 'grwebapp://' + (args ? JSON.stringify(args) : '')
-}
-
-// 閫氳繃URL鍗忚鍚姩WEB鎶ヨ〃瀹㈡埛绔▼搴�
-// 鍙傛暟 appUpdate 鎸囧畾鏄惁鑷姩鏇存柊WEB鎶ヨ〃瀹㈡埛绔▼搴忥紝鏍规嵁_grwebapp_version涓庡凡缁忓畨瑁呯殑绋嬪簭鐗堟湰杩涜姣旇緝锛屾寜闇�杩涜鑷姩鍗囩骇
-function webapp_urlprotocol_startup(appUpdate) {
-  var arg = appUpdate ? {
-    type: 'update',
-    url: _grwebapp_url,
-    ver: _grwebapp_version
-  } : 0
-  window.location.href = _gr_up_href(arg)
-}
-
-// 濡傛灉WEB鎶ヨ〃瀹㈡埛绔▼搴忔湭杩愯锛屽厛閫氳繃URL鍗忚鍚姩WEB鎶ヨ〃瀹㈡埛绔▼搴�
-// 閫氱煡WEB鎶ヨ〃瀹㈡埛绔▼搴忔牴鎹ā鏉夸笌鏁版嵁鐨刄RL锛屼互鍙婄敓鎴愮被鍨嬬瓑鐩稿叧鍙傛暟杩涜鎶ヨ〃鐢熸垚锛�
-function webapp_urlprotocol_run(args, report_url, data_url) {
-  if (report_url) {
-    args.report = report_url
-  }
-  if (data_url) {
-    args.data = data_url
-  }
-
-  window.location.href = _gr_up_href(args)
-}
-
-// ///////////////////////////////////////////////////////////////////////////
-// 妫�鏌ebSocket鏄惁宸茬粡鍒涘缓骞堕�氳杩炴帴鎴愬姛
-function webapp_ws_check(slience) {
-  if (!slience) {
-    if (!_grwebapp_websocket) {
-      alert('WebSocket娌℃湁鍒涘缓锛屾棤娉曞彂閫佹暟鎹紒')
-    } else if (_grwebapp_websocket.readyState != 1) {
-      alert('WebSocket姝e湪杩炴帴涓紝鏆備笉鑳藉彂閫佹暟鎹紒')
-    }
-  }
-  return _grwebapp_websocket && (_grwebapp_websocket.readyState === 1)
-}
-
-// 鍒涘缓骞堕�氳杩炴帴WebSocket
-function webapp_ws_create(onopen) {
-  // 濡傛灉宸茬粡鍒涘缓锛屼笖杩炴帴姝e父锛屽垯涓嶈鍐嶆鍒涘缓
-  if (_grwebapp_websocket && _grwebapp_websocket.readyState === 1) {
-    return
-  }
-
-  // 鍒ゆ柇褰撳墠娴忚鍣ㄦ槸鍚︽敮鎸乄ebSocket
-  if ('WebSocket' in window) {
-    _grwebapp_websocket = new WebSocket('ws://127.0.0.1:22333')
-
-    // 杩炴帴鎴愬姛寤虹珛鐨勫洖璋冩柟娉�
-    if (onopen) {
-      _grwebapp_websocket.onopen = function() {
-        // alert("_grwebapp_websocket.onopen");
-        onopen()
-      }
-    }
-    debugger
-    // 鎺ユ敹鍒版秷鎭殑鍥炶皟鏂规硶
-    if (window.webapp_onmessage) {
-      _grwebapp_websocket.onmessage = function(event) {
-        window.webapp_onmessage(event)
-      }
-    }
-
-    _grwebapp_websocket.onerror = function() {
-      var children = document.body.children
-      var childrenLen = children.length
-      var referNode = childrenLen ? children[0] : null
-      var newNode = document.createElement('h3')
-
-      _grwebapp_websocket = null
-
-      // 寮瑰嚭alert鎻愮ず淇℃伅锛屽彲淇敼涓烘洿閫傚悎鐨勮〃杩�
-      // alert("鍒涘缓WebSocket澶辫触锛屽彲鑳芥槸鈥榃EB鎶ヨ〃瀹㈡埛绔▼搴忊�欏湪鏈満娌℃湁瀹夎锛屾垨鍦ㄦ姤琛ㄧ綉椤靛姞杞芥椂娌℃湁璋冪敤鈥榳ebapp_urlprotocol_startup鈥欏嚱鏁拌繘琛屽惎鍔ㄣ��");
-      alert('鍒涘缓WebSocket澶辫触锛屽彲鑳芥槸WEB鎶ヨ〃瀹㈡埛绔▼搴忔病鏈夊惎鍔紝鎴栧叾鍦ㄦ湰鏈烘病鏈夊畨瑁咃紝璇锋牴鎹綉椤甸《閮ㄧ殑鎻愮ず杩涜鐩稿簲鐨勬搷浣溿��')
-
-      // 鍦ㄧ綉椤垫渶鍓嶉潰鍔犱笂鎻愮ず涓嬭浇鐨勬枃瀛楋紝鍙慨鏀逛负鏇撮�傚悎鐨勮〃杩颁笌鐣岄潰褰㈠紡
-      // newNode.innerHTML = '鐗瑰埆鎻愮ず锛�<a href="' + _grwebapp_url + '">鐐瑰嚮涓嬭浇WEB鎶ヨ〃瀹㈡埛绔▼搴�</a>锛屼笅杞藉悗鍙屽嚮涓嬭浇鐨勬枃浠惰繘琛屽畨瑁咃紝瀹夎瀹屾垚鍚庨噸鏂版墦寮�褰撳墠缃戦〉銆�';
-      newNode.innerHTML = '鐗瑰埆鎻愮ず锛氬皾璇�<a href="javascript:webapp_urlprotocol_startup();">鍚姩WEB鎶ヨ〃瀹㈡埛绔▼搴�</a>銆傛垨<a href="' + _grwebapp_url + '">鐐瑰嚮涓嬭浇WEB鎶ヨ〃瀹㈡埛绔▼搴�</a>锛屼笅杞藉悗鍙屽嚮涓嬭浇鐨勬枃浠惰繘琛屽畨瑁咃紝瀹夎瀹屾垚鍚庨噸鏂版墦寮�褰撳墠缃戦〉銆�'
-      document.body.insertBefore(newNode, referNode)
-    }
-
-    // 杩炴帴鍏抽棴鐨勫洖璋冩柟娉�
-    _grwebapp_websocket.onclose = function() {
-      _grwebapp_websocket = null
-    }
-
-    // 鎰熻杩欓儴鍒嗗彲浠ヤ笉瑕�
-    // 鐩戝惉绐楀彛鍏抽棴浜嬩欢锛屽綋绐楀彛鍏抽棴鏃讹紝涓诲姩鍘诲叧闂璤grwebapp_websocket杩炴帴锛岄槻姝㈣繛鎺ヨ繕娌℃柇寮�灏卞叧闂獥鍙o紝server绔細鎶涘紓甯搞��
-    // window.onbeforeunload = function () {
-    //    if (_grwebapp_websocket) {
-    //        _grwebapp_websocket.close();
-    //    }
-    // }
-  } else {
-    alert('褰撳墠娴忚鍣ㄤ笉鏀寔HTML5鐨刉ebSocket锛岃閫夌敤鏇存柊鐗堟湰鐨勬祻瑙堝櫒锛�')
-  }
-}
-
-function webapp_build_one(pack, report, report_method, data, data_method, callback_fun, dataParams) {
-  if (!report) {
-    alert('鍦ㄥ弬鏁颁腑娌℃湁瀹氫箟鎶ヨ〃妯℃澘鐨剈rl锛屾姤琛ㄤ笉鑳界敓鎴愶紒')
-    return
-  }
-
-  if (data) {
-    if (webapp_is_url(data)) {
-      webapp_ajax(data_method, data, function(xmlhttp, success) {
-        if (success) {
-          pack.data = xmlhttp.responseText
-          callback_fun()
-        } else {
-          // alert("杞藉叆鎶ヨ〃鏁版嵁澶辫触锛屽搷搴旀秷鎭細" + xmlhttp.responseText);
-          window.open(data, 'blank')
-        }
-      }, undefined, dataParams)
-    } else {
-      pack.data = (typeof data === 'object') ? JSON.stringify(data) : data
-      callback_fun()
-    }
-  } else {
-    pack.data = ''
-  }
-
-  if (webapp_is_url(report)) {
-    webapp_ajax(report_method, report, function(xmlhttp, success) {
-      if (success) {
-        pack.report = xmlhttp.responseText
-        callback_fun()
-      } else {
-        // alert("杞藉叆鎶ヨ〃妯℃澘澶辫触锛屽搷搴旀秷鎭細" + xmlhttp.responseText);
-        window.open(report, 'blank')
-      }
-    })
-  } else {
-    pack.report = (typeof report === 'object') ? JSON.stringify(report) : report
-    callback_fun()
-  }
-}
-
-// 灏嗗弬鏁伴�氳繃WebSocket鍙戦�佺粰WEB鎶ヨ〃瀹㈡埛绔紝WEB鎶ヨ〃瀹㈡埛绔墽琛屽搴旂殑浠诲姟
-// 鍙傛暟璇存槑锛�
-// args锛�
-//  鎶ヨ〃鐢熸垚鐩稿叧鐨勫弬鏁帮紝涓轰竴涓粨鏋勪綋瀵硅薄鎴栫粨鏋勪綋瀵硅薄鏁扮粍銆�
-//  褰撳弬鏁颁负鏁扮粍鏃讹紝琛ㄧず鏄墽琛屾壒閲忎换鍔°�傛鏃跺悗闈㈢殑 report 涓� data 鍙傛暟涓嶄細琚敤鍒般��
-//  缁撴瀯浣撳璞$殑鍚勪釜鏁版嵁椤硅鏄庤鍙傝�冨府鍔╀腑鈥淲EB鎶ヨ〃(B/S鎶ヨ〃)->WEB鎶ヨ〃瀹㈡埛绔�->鍚姩鍙傛暟璇存槑鈥濋儴鍒�
-// report锛�
-//  鎶ヨ〃妯℃澘鏂囨湰锛屾姤琛ㄥ畾涔夋牸寮忓繀椤讳负JSON鏍煎紡銆傛鍙傛暟鍙┖锛屼负绌鸿〃绀烘墽琛岄潪鎶ヨ〃鐢熸垚浠诲姟锛屾垨WEB鎶ヨ〃瀹㈡埛绔�氳繃URL鑾峰彇鎶ヨ〃妯℃澘銆�
-// data锛�
-//  鎶ヨ〃鏁版嵁鏂囨湰锛屾鍙傛暟鍙┖锛屾姤琛ㄦ棤闇�鎻愪緵鏁版嵁锛屾垨WEB鎶ヨ〃瀹㈡埛绔�氳繃URL鑾峰彇鎶ヨ〃鏁版嵁銆�
-//
-//  鎶ヨ〃鏁版嵁瀵瑰簲鐨� XML 鎴� JSON 鏂囨湰锛岃鍙傝�冨府鍔┾�淲EB鎶ヨ〃(B/S鎶ヨ〃)->WEB鎶ヨ〃鏁版嵁鈥濅腑鐨勮鏄庛��
-function webapp_ws_run(variant_args, report, data) {
-  function run_one(args, reportText, dataText) {
-    var msg
-
-    if (webapp_ws_check()) {
-      if (typeof args === 'string') {
-        args = {
-          type: args
-        }
-      }
-      msg = JSON.stringify(args)
-
-      if (reportText) {
-        if (reportText.substr(0, 4) === '_WR_') {
-          msg += reportText.length
-        }
-        msg += reportText
-
-        if (dataText) {
-          msg += dataText
-        }
-      }
-
-      _grwebapp_websocket.send(msg)
-    }
-  } // end of run_one
-
-  if (!webapp_ws_check(1)) {
-    // 濡傛灉WebSocket娌℃湁杩炴帴锛屽垯棣栧厛鍒涘缓骞惰繛鎺ebSocket锛屽苟鍦╫nopen浜嬩欢涓墽琛岀浉鍏崇殑浠诲姟
-    webapp_ws_create(function() {
-      webapp_ws_run(variant_args, report, data)
-    })
-    return
-  }
-
-  if (Array.isArray(variant_args)) {
-    variant_args.forEach(function(args) {
-      run_one(args)
-    })
-  } else {
-    run_one(variant_args, report, data)
-  }
-}
-
-// 閫氳繃 ajax 鏂瑰紡鑾峰彇鎶ヨ〃妯℃澘涓庢姤琛ㄦ暟鎹紝鐒跺悗閫氳繃 WebSocket 鍙戦�佺浉鍏虫暟鎹粰WEB鎶ヨ〃瀹㈡埛绔苟鐢熸垚鎶ヨ〃
-// 鍙傛暟鏃㈠彲浠ユ槸鍗曚釜缁撴瀯浣撳璞★紝涔熷彲浠ユ槸缁撴瀯浣撳璞℃暟缁勩�傚鏋滄槸鏁扮粍锛岃〃绀烘垚鎵圭敓鎴愬涓姤琛ㄣ��
-// 缁撴瀯浣撳璞$殑鍚勪釜鏁版嵁椤硅鏄庤鍙傝�冨府鍔╀腑鈥淲EB鎶ヨ〃(B/S鎶ヨ〃)->WEB鎶ヨ〃瀹㈡埛绔�->鍚姩鍙傛暟璇存槑鈥濋儴鍒嗐��
-function webapp_ws_ajax_run(variant_args) {
-  function run_one(args) {
-    var report = args.report
-    var data = args.data
-    var report_method = args.report_method
-    var data_method = args.data_method
-    var dataUrlParams = args.dataUrlParams
-    var pack = {}
-
-    function run() {
-      // 鍙湁褰搑eport涓巇ata閮借祴鍊间箣鍚庢墠杩愯锛屽嵆鍚慦EB鎶ヨ〃瀹㈡埛绔▼搴忓彂閫佹暟鎹�
-      if (pack.report && pack.data !== undefined) {
-        webapp_ws_run(args, pack.report, pack.data)
-      }
-    }
-
-    // 鍥犱负args闇�瑕佷紶閫掔粰WEBAPP锛宺eport涓巇ata鐨剈rl鐩稿叧鐨勫弬鏁颁笉闇�瑕佷紶閫掞紝鎵�浠ュ皢鍏跺垹闄ゆ帀
-    delete args.report
-    delete args.data
-    delete args.report_method
-    delete args.data_method
-    delete args.dataUrlParams
-
-    webapp_build_one(pack, report, report_method, data, data_method, run, dataUrlParams)
-  } // end of run_one
-
-  if (!webapp_ws_check(1)) {
-    // 濡傛灉WebSocket娌℃湁杩炴帴锛屽垯棣栧厛鍒涘缓骞惰繛鎺ebSocket锛屽苟鍦╫nopen浜嬩欢涓墽琛岀浉鍏崇殑浠诲姟
-    webapp_ws_create(function() {
-      webapp_ws_ajax_run(variant_args)
-    })
-    return
-  }
-
-  if (Array.isArray(variant_args)) {
-    variant_args.forEach(function(args) {
-      run_one(args)
-    })
-  } else {
-    run_one(variant_args)
-  }
-}
-
-// 閫氳繃 ajax 鏂瑰紡鑾峰彇澶氫釜鎶ヨ〃鐨勬ā鏉夸笌鏁版嵁锛岀劧鍚庣敤 WebSocket 灏嗘暟鎹竴娆℃�у彂閫佺粰WEB鎶ヨ〃瀹㈡埛绔▼搴忋��
-// 瀹炵幇澶氫釜鎶ヨ〃鍚屾椂鐢熸垚鍦ㄤ竴涓换鍔′腑(搴旂敤Grid++Report鐨勭嫭绔嬪瓙鎶ヨ〃鍔熻兘瀹炵幇)锛岃揪鍒板涓姤琛ㄥ悓鏃堕瑙堛�佹墦鍗颁笌鏁版嵁瀵煎嚭
-function webapp_ws_ajax_together(args, reports) {
-  var reportCount = reports.length
-  var reportPacks = []
-  var gettedCount = 0 // 鎸囩ず宸茬粡鑾峰彇鍒版暟鎹殑鎶ヨ〃涓暟
-
-  function ajaxRequestOne(arg, index) {
-    var report = arg.report
-    var data = arg.data
-    var report_method = arg.report_method
-    var data_method = arg.data_method
-    var dataUrlParams = arg.dataUrlParams
-    var pack = reportPacks[index]
-
-    function try_ws_send() {
-      var msg
-      var dataMsg = ''
-      var lengths = []
-
-      if (pack.report && pack.data !== undefined) {
-        if (++gettedCount >= reportCount) { // 鍙湁褰撳叏閮ㄦ姤琛ㄧ殑妯℃澘涓庢暟鎹兘宸茬粡鑾峰彇鍒颁箣鍚庯紝鎵嶄細鍚慦EB鎶ヨ〃瀹㈡埛绔彂閫佹暟鎹�
-          msg = JSON.stringify(args)
-
-          reportPacks.forEach(function(item) {
-            var report = item.report
-            var data = item.data
-            var reportLen = report.length
-            var reportLenText = ''
-
-            if (report.substr(0, 4) === '_WR_') {
-              reportLenText += reportLen
-              dataMsg += reportLenText
-              reportLen += reportLenText.length
-            }
-            dataMsg += report
-
-            if (data) {
-              dataMsg += data
-            }
-
-            lengths.push(reportLen + data.length)
-          })
-
-          msg += JSON.stringify(lengths)
-          msg += dataMsg
-
-          _grwebapp_websocket.send(msg)
-        }
-      }
-    }
-
-    webapp_build_one(pack, report, report_method, data, data_method, try_ws_send, dataUrlParams)
-  } // end of ajaxRequestOne
-
-  if (!webapp_ws_check(1)) {
-    // 濡傛灉WebSocket娌℃湁杩炴帴锛屽垯棣栧厛鍒涘缓骞惰繛鎺ebSocket锛屽苟鍦╫nopen浜嬩欢涓墽琛岀浉鍏崇殑浠诲姟
-    webapp_ws_create(function() {
-      webapp_ws_ajax_together(args, reports)
-    })
-    return
-  }
-
-  reports.forEach(function(report, index) {
-    reportPacks.push({})
-    ajaxRequestOne(report, index)
-  })
-}
-
-// ///////////////////////////////////////////////////////////////////////////
-// 閫氳繃WebSocket鍚慦EB鎶ヨ〃瀹㈡埛绔彂閫佹灇涓惧嚭褰撳墠鐢佃剳鐨勬墍鏈夋墦鍗版満淇℃伅鐨勬寚浠�
-// 鍦ㄧ綉椤电殑 webapp_onmessage 鍑芥暟涓帴鏀禬EB鎶ヨ〃瀹㈡埛绔繑鍥炵殑缁撴灉锛屽叿浣撹鍙傝�冧緥瀛愩��
-function webapp_ws_fun_Printers() {
-  webapp_ws_run({
-    type: 'fun',
-    fun: 'Printers'
-  })
-}
-
-// 閫氳繃WebSocket鍚慦EB鎶ヨ〃瀹㈡埛绔彂閫佹灇涓惧嚭褰撳墠鐢佃剳鐨勬寚瀹氭墦鍗版満鐨勫叏閮ㄥ彲鐢ㄧ焊寮犵殑鎸囦护
-// 鍦ㄧ綉椤电殑 webapp_onmessage 鍑芥暟涓帴鏀禬EB鎶ヨ〃瀹㈡埛绔繑鍥炵殑缁撴灉锛屽叿浣撹鍙傝�冧緥瀛�
-function webapp_ws_fun_PrinterPapers(printer) {
-  webapp_ws_run({
-    type: 'fun',
-    fun: 'PrinterPapers',
-    printer: printer
-  })
-}
-
-// 閫氳繃WebSocket鍚慦EB鎶ヨ〃瀹㈡埛绔彂閫佸仠姝㈠綋鍓嶆姤琛ㄩ瑙堝苟鍏抽棴棰勮绐楀彛鐨勬寚浠�
-function webapp_ws_fun_StopPreview() {
-  webapp_ws_run({
-    type: 'fun',
-    fun: 'StopPreview'
-  })
-}
-
-// ///////////////////////////////////////////////////////////////////////////
-// 閫氳繃WebSocket鍚慦EB鎶ヨ〃瀹㈡埛绔彂閫佹秷鎭繘琛岃嚜鍔ㄦ洿鏂版鏌ュ鐞�
-function webapp_ws_autoupdate() {
-  webapp_ws_run({
-    type: 'update',
-    url: _grwebapp_url,
-    ver: _grwebapp_version
-  })
-}
-
-// ///////////////////////////////////////////////////////////////////////////
-// 涓篣RL杩藉姞涓�涓悕涓篿d鐨勯殢鏈烘暟鍙傛暟锛岀敤浜庨槻姝㈡祻瑙堝櫒缂撳瓨銆�
-// 鎶ヨ〃妯℃澘閲嶆柊璁捐鍚庯紝鍥犱负娴忚鍣ㄧ紦瀛樿�岃鎶ヨ〃鐢熸垚涓嶈兘鍙嶆槧鍑烘柊淇敼鐨勮璁$粨鏋滐紝URL鍚庤拷鍔犱竴涓殢鏈烘暟鍙傛暟鍙互閬垮厤杩欐牱鐨勯棶棰�
-// 鍙傛暟url蹇呴』鏄潤鎬佺殑URL锛屽叾鍚庢湰韬棤浠讳綍鍙傛暟
-// 濡傛灉妯℃澘鍑犱箮涓嶆�庝箞淇敼锛屽彲浠ュ幓鎺夊鏈嚱鏁扮殑璋冪敤
-function urlAddRandomNo(url) {
-  return url + '?id=' + Math.floor(Math.random() * 10000)
-}
-
-// 鏍规嵁褰撳墠缃戦〉URL鑾峰彇鍒板綋鍓峎EB鏈嶅姟鍣ㄧ殑鏍筓RL锛屽苟璁板綍鍦� window.rootURL 涓�
-function gr_extractRootURL() {
-  var path = window.location.pathname
-  var index = path.lastIndexOf('/')
-
-  window.rootURL = window.location.protocol + '//' + window.location.host
-  if (index >= 0) {
-    path = path.substr(0, index)
-
-    // demmo鐨勬牴鐩綍鍦ㄥ綋鍓嶉〉闈㈢殑1绾х洰褰曚箣涓�
-    index = path.lastIndexOf('/')
-    if (index >= 0) {
-      path = path.substr(0, index)
-    }
-
-    window.rootURL += path
-  }
-  window.rootURL += '/'
-}
-
-// vue涓娇鐢ㄥ皢涓嬪垪娉ㄩ噴寮�鏀�
-export {
-  webapp_url_method_valid,
-  webapp_urlprotocol_startup,
-  webapp_ajax,
-  webapp_ws_ajax_run,
-  webapp_urlprotocol_run,
-  urlAddRandomNo,
-  webapp_onmessage,
-  webapp_ws_fun_StopPreview,
-  webapp_ws_fun_PrinterPapers,
-  webapp_ws_fun_Printers,
-  webapp_ws_ajax_together,
-  webapp_ws_autoupdate,
-  gr_extractRootURL
-}
diff --git a/public/index.html b/public/index.html
index 84a2031..62145d9 100644
--- a/public/index.html
+++ b/public/index.html
@@ -6,7 +6,7 @@
     <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
     <title><%= webpackConfig.name %></title>
-    <script src="./grwebapp.js"></script>
+    <script src="static/grid/grwebapp.js"></script>
   </head>
   <body>
     <noscript>
diff --git a/public/grf/1a.grf b/public/static/grf/1a.grf
similarity index 99%
rename from public/grf/1a.grf
rename to public/static/grf/1a.grf
index b313dc3..4051994 100644
--- a/public/grf/1a.grf
+++ b/public/static/grf/1a.grf
@@ -311,4 +311,4 @@
 			]
 		}
 	]
-}
\ No newline at end of file
+}
diff --git a/public/grf/1a.grf b/public/static/grf/1a_test.grf
similarity index 99%
copy from public/grf/1a.grf
copy to public/static/grf/1a_test.grf
index b313dc3..e377212 100644
--- a/public/grf/1a.grf
+++ b/public/static/grf/1a_test.grf
@@ -1,4 +1,4 @@
-锘縶
+{
 	"Version":"6.8.5.0",
 	"Title":"1a.绠�鍗曡〃鏍�",
 	"Author":"閿愭氮鎶ヨ〃杞欢",
@@ -311,4 +311,4 @@
 			]
 		}
 	]
-}
\ No newline at end of file
+}
diff --git a/public/grf/1b.grf b/public/static/grf/1b.grf
similarity index 100%
rename from public/grf/1b.grf
rename to public/static/grf/1b.grf
diff --git a/public/grf/1c.grf b/public/static/grf/1c.grf
similarity index 100%
rename from public/grf/1c.grf
rename to public/static/grf/1c.grf
diff --git a/public/grf/1d.grf b/public/static/grf/1d.grf
similarity index 100%
rename from public/grf/1d.grf
rename to public/static/grf/1d.grf
diff --git a/public/grf/1e.grf b/public/static/grf/1e.grf
similarity index 100%
rename from public/grf/1e.grf
rename to public/static/grf/1e.grf
diff --git a/public/grf/1f.grf b/public/static/grf/1f.grf
similarity index 100%
rename from public/grf/1f.grf
rename to public/static/grf/1f.grf
diff --git a/public/grf/1g.grf b/public/static/grf/1g.grf
similarity index 100%
rename from public/grf/1g.grf
rename to public/static/grf/1g.grf
diff --git a/public/grf/1h.grf b/public/static/grf/1h.grf
similarity index 100%
rename from public/grf/1h.grf
rename to public/static/grf/1h.grf
diff --git a/public/grf/1i.grf b/public/static/grf/1i.grf
similarity index 100%
rename from public/grf/1i.grf
rename to public/static/grf/1i.grf
diff --git a/public/grf/1j.grf b/public/static/grf/1j.grf
similarity index 100%
rename from public/grf/1j.grf
rename to public/static/grf/1j.grf
diff --git a/public/grf/1k.grf b/public/static/grf/1k.grf
similarity index 100%
rename from public/grf/1k.grf
rename to public/static/grf/1k.grf
diff --git a/public/grf/1l.grf b/public/static/grf/1l.grf
similarity index 100%
rename from public/grf/1l.grf
rename to public/static/grf/1l.grf
diff --git a/public/grf/1m.grf b/public/static/grf/1m.grf
similarity index 100%
rename from public/grf/1m.grf
rename to public/static/grf/1m.grf
diff --git a/public/grf/1n.grf b/public/static/grf/1n.grf
similarity index 100%
rename from public/grf/1n.grf
rename to public/static/grf/1n.grf
diff --git a/public/grf/1o.grf b/public/static/grf/1o.grf
similarity index 100%
rename from public/grf/1o.grf
rename to public/static/grf/1o.grf
diff --git a/public/grf/1p.grf b/public/static/grf/1p.grf
similarity index 100%
rename from public/grf/1p.grf
rename to public/static/grf/1p.grf
diff --git a/public/grf/1q.grf b/public/static/grf/1q.grf
similarity index 100%
rename from public/grf/1q.grf
rename to public/static/grf/1q.grf
diff --git a/public/grf/2a.grf b/public/static/grf/2a.grf
similarity index 100%
rename from public/grf/2a.grf
rename to public/static/grf/2a.grf
diff --git a/public/grf/2b.grf b/public/static/grf/2b.grf
similarity index 100%
rename from public/grf/2b.grf
rename to public/static/grf/2b.grf
diff --git a/public/grf/2c.grf b/public/static/grf/2c.grf
similarity index 100%
rename from public/grf/2c.grf
rename to public/static/grf/2c.grf
diff --git a/public/grf/2d.grf b/public/static/grf/2d.grf
similarity index 100%
rename from public/grf/2d.grf
rename to public/static/grf/2d.grf
diff --git a/public/grf/2e.grf b/public/static/grf/2e.grf
similarity index 100%
rename from public/grf/2e.grf
rename to public/static/grf/2e.grf
diff --git a/public/grf/2f.grf b/public/static/grf/2f.grf
similarity index 100%
rename from public/grf/2f.grf
rename to public/static/grf/2f.grf
diff --git a/public/grf/2g.grf b/public/static/grf/2g.grf
similarity index 100%
rename from public/grf/2g.grf
rename to public/static/grf/2g.grf
diff --git a/public/grf/2h.grf b/public/static/grf/2h.grf
similarity index 100%
rename from public/grf/2h.grf
rename to public/static/grf/2h.grf
diff --git a/public/grf/2i.grf b/public/static/grf/2i.grf
similarity index 100%
rename from public/grf/2i.grf
rename to public/static/grf/2i.grf
diff --git a/public/grf/2j.grf b/public/static/grf/2j.grf
similarity index 100%
rename from public/grf/2j.grf
rename to public/static/grf/2j.grf
diff --git a/public/grf/2k.grf b/public/static/grf/2k.grf
similarity index 100%
rename from public/grf/2k.grf
rename to public/static/grf/2k.grf
diff --git a/public/grf/2l.grf b/public/static/grf/2l.grf
similarity index 100%
rename from public/grf/2l.grf
rename to public/static/grf/2l.grf
diff --git a/public/grf/2m.grf b/public/static/grf/2m.grf
similarity index 100%
rename from public/grf/2m.grf
rename to public/static/grf/2m.grf
diff --git a/public/grf/3@.grf b/public/static/grf/3@.grf
similarity index 100%
rename from public/grf/3@.grf
rename to public/static/grf/3@.grf
diff --git a/public/grf/3a.grf b/public/static/grf/3a.grf
similarity index 100%
rename from public/grf/3a.grf
rename to public/static/grf/3a.grf
diff --git a/public/grf/3b.grf b/public/static/grf/3b.grf
similarity index 100%
rename from public/grf/3b.grf
rename to public/static/grf/3b.grf
diff --git a/public/grf/3c.grf b/public/static/grf/3c.grf
similarity index 100%
rename from public/grf/3c.grf
rename to public/static/grf/3c.grf
diff --git a/public/grf/3d.grf b/public/static/grf/3d.grf
similarity index 100%
rename from public/grf/3d.grf
rename to public/static/grf/3d.grf
diff --git a/public/grf/3e.grf b/public/static/grf/3e.grf
similarity index 100%
rename from public/grf/3e.grf
rename to public/static/grf/3e.grf
diff --git a/public/grf/3f.grf b/public/static/grf/3f.grf
similarity index 100%
rename from public/grf/3f.grf
rename to public/static/grf/3f.grf
diff --git a/public/grf/3g.grf b/public/static/grf/3g.grf
similarity index 100%
rename from public/grf/3g.grf
rename to public/static/grf/3g.grf
diff --git a/public/grf/3h.grf b/public/static/grf/3h.grf
similarity index 100%
rename from public/grf/3h.grf
rename to public/static/grf/3h.grf
diff --git a/public/grf/3i.grf b/public/static/grf/3i.grf
similarity index 100%
rename from public/grf/3i.grf
rename to public/static/grf/3i.grf
diff --git a/public/grf/3j.grf b/public/static/grf/3j.grf
similarity index 100%
rename from public/grf/3j.grf
rename to public/static/grf/3j.grf
diff --git a/public/grf/3k.grf b/public/static/grf/3k.grf
similarity index 100%
rename from public/grf/3k.grf
rename to public/static/grf/3k.grf
diff --git a/public/grf/3l.grf b/public/static/grf/3l.grf
similarity index 100%
rename from public/grf/3l.grf
rename to public/static/grf/3l.grf
diff --git a/public/grf/3m.grf b/public/static/grf/3m.grf
similarity index 100%
rename from public/grf/3m.grf
rename to public/static/grf/3m.grf
diff --git a/public/grf/3n.grf b/public/static/grf/3n.grf
similarity index 100%
rename from public/grf/3n.grf
rename to public/static/grf/3n.grf
diff --git a/public/grf/3o.grf b/public/static/grf/3o.grf
similarity index 100%
rename from public/grf/3o.grf
rename to public/static/grf/3o.grf
diff --git a/public/grf/3p.grf b/public/static/grf/3p.grf
similarity index 100%
rename from public/grf/3p.grf
rename to public/static/grf/3p.grf
diff --git a/public/grf/3q-1.grf b/public/static/grf/3q-1.grf
similarity index 100%
rename from public/grf/3q-1.grf
rename to public/static/grf/3q-1.grf
diff --git a/public/grf/3q-2.grf b/public/static/grf/3q-2.grf
similarity index 100%
rename from public/grf/3q-2.grf
rename to public/static/grf/3q-2.grf
diff --git a/public/grf/3q-3.grf b/public/static/grf/3q-3.grf
similarity index 100%
rename from public/grf/3q-3.grf
rename to public/static/grf/3q-3.grf
diff --git a/public/grf/3q.grf b/public/static/grf/3q.grf
similarity index 100%
rename from public/grf/3q.grf
rename to public/static/grf/3q.grf
diff --git a/public/grf/4a.grf b/public/static/grf/4a.grf
similarity index 100%
rename from public/grf/4a.grf
rename to public/static/grf/4a.grf
diff --git a/public/grf/4b.grf b/public/static/grf/4b.grf
similarity index 100%
rename from public/grf/4b.grf
rename to public/static/grf/4b.grf
diff --git a/public/grf/4c.grf b/public/static/grf/4c.grf
similarity index 100%
rename from public/grf/4c.grf
rename to public/static/grf/4c.grf
diff --git a/public/grf/4d.grf b/public/static/grf/4d.grf
similarity index 100%
rename from public/grf/4d.grf
rename to public/static/grf/4d.grf
diff --git a/public/grf/4e.grf b/public/static/grf/4e.grf
similarity index 100%
rename from public/grf/4e.grf
rename to public/static/grf/4e.grf
diff --git a/public/grf/5a.grf b/public/static/grf/5a.grf
similarity index 100%
rename from public/grf/5a.grf
rename to public/static/grf/5a.grf
diff --git a/public/grf/5b.grf b/public/static/grf/5b.grf
similarity index 100%
rename from public/grf/5b.grf
rename to public/static/grf/5b.grf
diff --git a/public/grf/5c.grf b/public/static/grf/5c.grf
similarity index 100%
rename from public/grf/5c.grf
rename to public/static/grf/5c.grf
diff --git a/public/grf/5d.grf b/public/static/grf/5d.grf
similarity index 100%
rename from public/grf/5d.grf
rename to public/static/grf/5d.grf
diff --git a/public/grf/5e.grf b/public/static/grf/5e.grf
similarity index 100%
rename from public/grf/5e.grf
rename to public/static/grf/5e.grf
diff --git a/public/grf/5f.grf b/public/static/grf/5f.grf
similarity index 100%
rename from public/grf/5f.grf
rename to public/static/grf/5f.grf
diff --git a/public/grf/5g.grf b/public/static/grf/5g.grf
similarity index 100%
rename from public/grf/5g.grf
rename to public/static/grf/5g.grf
diff --git a/public/grf/5h.grf b/public/static/grf/5h.grf
similarity index 100%
rename from public/grf/5h.grf
rename to public/static/grf/5h.grf
diff --git a/public/grf/5i.grf b/public/static/grf/5i.grf
similarity index 100%
rename from public/grf/5i.grf
rename to public/static/grf/5i.grf
diff --git a/public/grf/5j.grf b/public/static/grf/5j.grf
similarity index 100%
rename from public/grf/5j.grf
rename to public/static/grf/5j.grf
diff --git a/public/grf/5k.grf b/public/static/grf/5k.grf
similarity index 100%
rename from public/grf/5k.grf
rename to public/static/grf/5k.grf
diff --git a/public/grf/5l.grf b/public/static/grf/5l.grf
similarity index 100%
rename from public/grf/5l.grf
rename to public/static/grf/5l.grf
diff --git a/public/grf/5m.grf b/public/static/grf/5m.grf
similarity index 100%
rename from public/grf/5m.grf
rename to public/static/grf/5m.grf
diff --git a/public/grf/5n.grf b/public/static/grf/5n.grf
similarity index 100%
rename from public/grf/5n.grf
rename to public/static/grf/5n.grf
diff --git a/public/grf/5o.grf b/public/static/grf/5o.grf
similarity index 100%
rename from public/grf/5o.grf
rename to public/static/grf/5o.grf
diff --git a/public/grf/5p.grf b/public/static/grf/5p.grf
similarity index 100%
rename from public/grf/5p.grf
rename to public/static/grf/5p.grf
diff --git a/public/grf/6a.grf b/public/static/grf/6a.grf
similarity index 100%
rename from public/grf/6a.grf
rename to public/static/grf/6a.grf
diff --git a/public/grf/6b.grf b/public/static/grf/6b.grf
similarity index 100%
rename from public/grf/6b.grf
rename to public/static/grf/6b.grf
diff --git a/public/grf/6c.grf b/public/static/grf/6c.grf
similarity index 100%
rename from public/grf/6c.grf
rename to public/static/grf/6c.grf
diff --git a/public/grf/6d.grf b/public/static/grf/6d.grf
similarity index 100%
rename from public/grf/6d.grf
rename to public/static/grf/6d.grf
diff --git a/public/grf/6e.grf b/public/static/grf/6e.grf
similarity index 100%
rename from public/grf/6e.grf
rename to public/static/grf/6e.grf
diff --git a/public/grf/6f.grf b/public/static/grf/6f.grf
similarity index 100%
rename from public/grf/6f.grf
rename to public/static/grf/6f.grf
diff --git a/public/grf/6g.grf b/public/static/grf/6g.grf
similarity index 100%
rename from public/grf/6g.grf
rename to public/static/grf/6g.grf
diff --git a/public/grf/6h.grf b/public/static/grf/6h.grf
similarity index 100%
rename from public/grf/6h.grf
rename to public/static/grf/6h.grf
diff --git a/public/grf/6i.grf b/public/static/grf/6i.grf
similarity index 100%
rename from public/grf/6i.grf
rename to public/static/grf/6i.grf
diff --git a/public/grf/6j.grf b/public/static/grf/6j.grf
similarity index 100%
rename from public/grf/6j.grf
rename to public/static/grf/6j.grf
diff --git a/public/grf/6k.grf b/public/static/grf/6k.grf
similarity index 100%
rename from public/grf/6k.grf
rename to public/static/grf/6k.grf
diff --git a/public/grf/6l.grf b/public/static/grf/6l.grf
similarity index 100%
rename from public/grf/6l.grf
rename to public/static/grf/6l.grf
diff --git a/public/grf/6m.grf b/public/static/grf/6m.grf
similarity index 100%
rename from public/grf/6m.grf
rename to public/static/grf/6m.grf
diff --git a/public/grf/6n.grf b/public/static/grf/6n.grf
similarity index 100%
rename from public/grf/6n.grf
rename to public/static/grf/6n.grf
diff --git a/public/grf/7-1a.grf b/public/static/grf/7-1a.grf
similarity index 100%
rename from public/grf/7-1a.grf
rename to public/static/grf/7-1a.grf
diff --git a/public/grf/7-1a2.grf b/public/static/grf/7-1a2.grf
similarity index 100%
rename from public/grf/7-1a2.grf
rename to public/static/grf/7-1a2.grf
diff --git a/public/grf/7-1b.grf b/public/static/grf/7-1b.grf
similarity index 100%
rename from public/grf/7-1b.grf
rename to public/static/grf/7-1b.grf
diff --git a/public/grf/7-1c.grf b/public/static/grf/7-1c.grf
similarity index 100%
rename from public/grf/7-1c.grf
rename to public/static/grf/7-1c.grf
diff --git a/public/grf/7-1d.grf b/public/static/grf/7-1d.grf
similarity index 100%
rename from public/grf/7-1d.grf
rename to public/static/grf/7-1d.grf
diff --git a/public/grf/7-1e.grf b/public/static/grf/7-1e.grf
similarity index 100%
rename from public/grf/7-1e.grf
rename to public/static/grf/7-1e.grf
diff --git a/public/grf/7-1f.grf b/public/static/grf/7-1f.grf
similarity index 100%
rename from public/grf/7-1f.grf
rename to public/static/grf/7-1f.grf
diff --git a/public/grf/7-1g.grf b/public/static/grf/7-1g.grf
similarity index 100%
rename from public/grf/7-1g.grf
rename to public/static/grf/7-1g.grf
diff --git a/public/grf/7-1h.grf b/public/static/grf/7-1h.grf
similarity index 100%
rename from public/grf/7-1h.grf
rename to public/static/grf/7-1h.grf
diff --git a/public/grf/7-1i.grf b/public/static/grf/7-1i.grf
similarity index 100%
rename from public/grf/7-1i.grf
rename to public/static/grf/7-1i.grf
diff --git a/public/grf/7-2a.grf b/public/static/grf/7-2a.grf
similarity index 100%
rename from public/grf/7-2a.grf
rename to public/static/grf/7-2a.grf
diff --git a/public/grf/7-2b.grf b/public/static/grf/7-2b.grf
similarity index 100%
rename from public/grf/7-2b.grf
rename to public/static/grf/7-2b.grf
diff --git a/public/grf/7-2c.grf b/public/static/grf/7-2c.grf
similarity index 100%
rename from public/grf/7-2c.grf
rename to public/static/grf/7-2c.grf
diff --git a/public/grf/7-2d.grf b/public/static/grf/7-2d.grf
similarity index 100%
rename from public/grf/7-2d.grf
rename to public/static/grf/7-2d.grf
diff --git a/public/grf/7-2e.grf b/public/static/grf/7-2e.grf
similarity index 100%
rename from public/grf/7-2e.grf
rename to public/static/grf/7-2e.grf
diff --git a/public/grf/7-2f.grf b/public/static/grf/7-2f.grf
similarity index 100%
rename from public/grf/7-2f.grf
rename to public/static/grf/7-2f.grf
diff --git a/public/grf/7-2g.grf b/public/static/grf/7-2g.grf
similarity index 100%
rename from public/grf/7-2g.grf
rename to public/static/grf/7-2g.grf
diff --git a/public/grf/7-3a.grf b/public/static/grf/7-3a.grf
similarity index 100%
rename from public/grf/7-3a.grf
rename to public/static/grf/7-3a.grf
diff --git a/public/grf/7-3b.grf b/public/static/grf/7-3b.grf
similarity index 100%
rename from public/grf/7-3b.grf
rename to public/static/grf/7-3b.grf
diff --git a/public/grf/7-3c.grf b/public/static/grf/7-3c.grf
similarity index 100%
rename from public/grf/7-3c.grf
rename to public/static/grf/7-3c.grf
diff --git a/public/grf/7-3d.grf b/public/static/grf/7-3d.grf
similarity index 100%
rename from public/grf/7-3d.grf
rename to public/static/grf/7-3d.grf
diff --git a/public/grf/7-3e.grf b/public/static/grf/7-3e.grf
similarity index 100%
rename from public/grf/7-3e.grf
rename to public/static/grf/7-3e.grf
diff --git a/public/grf/7-3f.grf b/public/static/grf/7-3f.grf
similarity index 100%
rename from public/grf/7-3f.grf
rename to public/static/grf/7-3f.grf
diff --git a/public/grf/7-3g.grf b/public/static/grf/7-3g.grf
similarity index 100%
rename from public/grf/7-3g.grf
rename to public/static/grf/7-3g.grf
diff --git a/public/grf/8a.grf b/public/static/grf/8a.grf
similarity index 100%
rename from public/grf/8a.grf
rename to public/static/grf/8a.grf
diff --git a/public/grf/8b.grf b/public/static/grf/8b.grf
similarity index 100%
rename from public/grf/8b.grf
rename to public/static/grf/8b.grf
diff --git a/public/grf/8c.grf b/public/static/grf/8c.grf
similarity index 100%
rename from public/grf/8c.grf
rename to public/static/grf/8c.grf
diff --git a/public/grf/8d.grf b/public/static/grf/8d.grf
similarity index 100%
rename from public/grf/8d.grf
rename to public/static/grf/8d.grf
diff --git a/public/grf/8e.grf b/public/static/grf/8e.grf
similarity index 100%
rename from public/grf/8e.grf
rename to public/static/grf/8e.grf
diff --git a/public/grf/8f.grf b/public/static/grf/8f.grf
similarity index 100%
rename from public/grf/8f.grf
rename to public/static/grf/8f.grf
diff --git a/public/grf/8g.grf b/public/static/grf/8g.grf
similarity index 100%
rename from public/grf/8g.grf
rename to public/static/grf/8g.grf
diff --git a/public/grf/8h.grf b/public/static/grf/8h.grf
similarity index 100%
rename from public/grf/8h.grf
rename to public/static/grf/8h.grf
diff --git a/public/grf/8i.grf b/public/static/grf/8i.grf
similarity index 100%
rename from public/grf/8i.grf
rename to public/static/grf/8i.grf
diff --git a/public/grf/9a.grf b/public/static/grf/9a.grf
similarity index 100%
rename from public/grf/9a.grf
rename to public/static/grf/9a.grf
diff --git a/public/grf/9b.grf b/public/static/grf/9b.grf
similarity index 100%
rename from public/grf/9b.grf
rename to public/static/grf/9b.grf
diff --git a/public/grf/9x.grf b/public/static/grf/9x.grf
similarity index 100%
rename from public/grf/9x.grf
rename to public/static/grf/9x.grf
diff --git a/public/grf/SummaryToDetail/ChartBar.grf b/public/static/grf/SummaryToDetail/ChartBar.grf
similarity index 100%
rename from public/grf/SummaryToDetail/ChartBar.grf
rename to public/static/grf/SummaryToDetail/ChartBar.grf
diff --git a/public/grf/SummaryToDetail/Crosstab.grf b/public/static/grf/SummaryToDetail/Crosstab.grf
similarity index 100%
rename from public/grf/SummaryToDetail/Crosstab.grf
rename to public/static/grf/SummaryToDetail/Crosstab.grf
diff --git a/public/grf/SummaryToDetail/Crosstab_Period.grf b/public/static/grf/SummaryToDetail/Crosstab_Period.grf
similarity index 100%
rename from public/grf/SummaryToDetail/Crosstab_Period.grf
rename to public/static/grf/SummaryToDetail/Crosstab_Period.grf
diff --git a/public/grf/SummaryToDetail/Detail.grf b/public/static/grf/SummaryToDetail/Detail.grf
similarity index 100%
rename from public/grf/SummaryToDetail/Detail.grf
rename to public/static/grf/SummaryToDetail/Detail.grf
diff --git a/public/grf/SummaryToDetail/Summary.grf b/public/static/grf/SummaryToDetail/Summary.grf
similarity index 100%
rename from public/grf/SummaryToDetail/Summary.grf
rename to public/static/grf/SummaryToDetail/Summary.grf
diff --git a/public/grf/a0.grf b/public/static/grf/a0.grf
similarity index 100%
rename from public/grf/a0.grf
rename to public/static/grf/a0.grf
diff --git a/public/grf/a1.grf b/public/static/grf/a1.grf
similarity index 100%
rename from public/grf/a1.grf
rename to public/static/grf/a1.grf
diff --git a/public/grf/aaa.grf b/public/static/grf/aaa.grf
similarity index 100%
rename from public/grf/aaa.grf
rename to public/static/grf/aaa.grf
diff --git a/public/grf/ds.grf b/public/static/grf/ds.grf
similarity index 100%
rename from public/grf/ds.grf
rename to public/static/grf/ds.grf
diff --git a/public/grf/program/data_from_url.grf b/public/static/grf/program/data_from_url.grf
similarity index 100%
rename from public/grf/program/data_from_url.grf
rename to public/static/grf/program/data_from_url.grf
diff --git "a/public/grf/\344\272\247\345\223\201\346\265\201\344\274\240\345\215\225.grf" "b/public/static/grf/\344\272\247\345\223\201\346\265\201\344\274\240\345\215\225.grf"
similarity index 100%
rename from "public/grf/\344\272\247\345\223\201\346\265\201\344\274\240\345\215\225.grf"
rename to "public/static/grf/\344\272\247\345\223\201\346\265\201\344\274\240\345\215\225.grf"
diff --git "a/public/grf/\344\272\247\345\223\201\346\265\201\344\274\240\345\215\225A5.grf" "b/public/static/grf/\344\272\247\345\223\201\346\265\201\344\274\240\345\215\225A5.grf"
similarity index 100%
rename from "public/grf/\344\272\247\345\223\201\346\265\201\344\274\240\345\215\225A5.grf"
rename to "public/static/grf/\344\272\247\345\223\201\346\265\201\344\274\240\345\215\225A5.grf"
diff --git a/public/static/grid/grwebapp.js b/public/static/grid/grwebapp.js
new file mode 100644
index 0000000..3eee469
--- /dev/null
+++ b/public/static/grid/grwebapp.js
@@ -0,0 +1,499 @@
+//鍙橀噺 _grwebapp_url 鎸囧畾WEB鎶ヨ〃瀹㈡埛绔畨瑁呯▼搴忕殑涓嬭浇URL锛屽綋閫氳繃WebSocket閫氳涓嶆垚鍔熸椂锛屾彁绀虹敤鎴风敤姝RL涓嬭浇绋嬪簭杩涜瀹夎銆�
+//鎴栫敤浜庤嚜鍔ㄦ洿鏂癢EB鎶ヨ〃瀹㈡埛绔椂涓嬭浇鏂扮増鏈紝寮�鍙戣�呭簲灏� _grwebapp_url 鏀逛负鑷繁鏈嶅姟鍣ㄧ殑URL锛屾柟渚跨敤鎴蜂粠鍙闂殑WEB鏈嶅姟鍣ㄤ笅杞�
+//鍙橀噺 _grwebapp_version 鎸囧畾鑷姩鏇存柊鏃讹紝瀹㈡埛绔▼搴忛渶瑕佺殑鐗堟湰鍙凤紝濡傛灉灏忎簬姝ょ増鏈彿锛屽垯鑷姩杩涜鏇存柊
+var _grwebapp_websocket = null,
+  _grwebapp_url = "http://www.rubylong.cn/download/gridreport6-webapp.exe",
+  _grwebapp_version = "6.8.2.0",
+  webapp_onmessage ; //濡傛灉闇�瑕佸搷搴旀墽琛屼换鍔″悗鐨勬秷鎭搷搴旓紝搴旇鍐欎竴涓悕绉颁负 webapp_onmessage 鐨� function
+
+function webapp_url_method_valid(url, method) {
+  if (!method) {
+    if (typeof url == "object") {
+      method = url.method;
+      url = url.url;
+    }
+    if (!method) {
+      method = /.grf|.txt|.xml|.json/.test(url) ? "GET" : "POST";
+    }
+  }
+  return method;
+}
+
+//姝ゅ嚱鏁扮敤浜庡垽鏂竴涓彉閲忔槸鍚︿负URL瀛楃涓诧紝濡傛灉绫诲瀷涓哄瓧绗︿覆涓旈涓潪绌虹櫧瀛楃涓嶄负鈥�<鈥濅笌鈥渰鈥濆嵆鍒ゅ畾涓篣RL
+//濡傛灉鍙傛暟鏄竴涓猳bject瀵硅薄锛屼笖鍏跺叿鏈夆�渦rl鈥濆睘鎬э紝鍒欏叾鏄疕TTPParam瀵硅薄锛屾槸涓�涓猽rl鍙傛暟
+var webapp_is_url = function (p) {
+  var index = 0,
+    len = p.length,
+    ch;
+
+  //瀵硅薄濡傛灉鏈塽rl灞炴�э紝鍒ゅ畾涓簎rl
+  if (typeof p == "object") {
+    return !!p.url;
+  }
+
+  if (typeof p != "string") {
+    return 0;
+  }
+
+  //棣栧厛鎵惧埌绗竴涓潪绌虹櫧瀛楃
+  while (index < len) {
+    ch = p[index];
+    if (!/\s/g.test(ch))
+      break;
+    index++;
+  }
+
+  //濡傛灉涓嶆槸xml鎴杍son鏂囨湰涓诧紝鍒欏垽瀹氫负url
+  return (ch != "{") && (ch != "<") && (p.substr(index, 4) != "_WR_");
+};
+
+function webapp_ajax(method, url, callback, cbthis, params) {
+  var xmlhttp = new XMLHttpRequest(),
+    headers;
+
+  xmlhttp.onreadystatechange = function () {
+    if (xmlhttp.readyState == 4 && xmlhttp.status > 0) {
+      callback.call(cbthis, xmlhttp, xmlhttp.status == 200);
+    }
+  }
+
+  xmlhttp.onerror = function () {
+    callback.call(cbthis, xmlhttp, 0);
+  }
+
+  if (typeof url == "object") {
+    headers = url.headers;
+    if (typeof headers == "string") {
+      headers = JSON.parse(headers)
+    }
+
+    if (!method) {
+      method = url.method;
+    }
+
+    if (!params) {
+      params = url.data;
+    }
+
+    url = url.url;
+  }
+
+  xmlhttp.open(webapp_url_method_valid(url, method), url, true); //寮傛璇锋眰鏁版嵁
+
+  if (headers && typeof headers == "object") {
+    for (var key in headers) {
+      xmlhttp.setRequestHeader(key, headers[key]);
+    }
+  }
+
+  xmlhttp.send(params);  //POST 鎴� PUT 鍙互浼犻�掑弬鏁�
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//鍒涘缓鍚姩WEB鎶ヨ〃瀹㈡埛绔殑URL鍗忚鍙傛暟
+function _gr_up_href(args) {
+  return "grwebapp://" + (args ? JSON.stringify(args) : "");
+}
+
+//閫氳繃URL鍗忚鍚姩WEB鎶ヨ〃瀹㈡埛绔▼搴�
+//鍙傛暟 appUpdate 鎸囧畾鏄惁鑷姩鏇存柊WEB鎶ヨ〃瀹㈡埛绔▼搴忥紝鏍规嵁_grwebapp_version涓庡凡缁忓畨瑁呯殑绋嬪簭鐗堟湰杩涜姣旇緝锛屾寜闇�杩涜鑷姩鍗囩骇
+function webapp_urlprotocol_startup(appUpdate) {
+  var arg = appUpdate ? {
+    type: "update",
+    url: _grwebapp_url,
+    ver: _grwebapp_version
+  } : 0;
+  window.location.href = _gr_up_href(arg);
+}
+
+//濡傛灉WEB鎶ヨ〃瀹㈡埛绔▼搴忔湭杩愯锛屽厛閫氳繃URL鍗忚鍚姩WEB鎶ヨ〃瀹㈡埛绔▼搴�
+//閫氱煡WEB鎶ヨ〃瀹㈡埛绔▼搴忔牴鎹ā鏉夸笌鏁版嵁鐨刄RL锛屼互鍙婄敓鎴愮被鍨嬬瓑鐩稿叧鍙傛暟杩涜鎶ヨ〃鐢熸垚锛�
+function webapp_urlprotocol_run(args, report_url, data_url) {
+  if (report_url) {
+    args.report = report_url;
+  }
+  if (data_url) {
+    args.data = data_url;
+  }
+
+  window.location.href = _gr_up_href(args);
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//妫�鏌ebSocket鏄惁宸茬粡鍒涘缓骞堕�氳杩炴帴鎴愬姛
+function webapp_ws_check(slience) {
+  if (!slience) {
+    if (!_grwebapp_websocket) {
+      alert("WebSocket娌℃湁鍒涘缓锛屾棤娉曞彂閫佹暟鎹紒");
+    }
+    else if (_grwebapp_websocket.readyState != 1) {
+      alert("WebSocket姝e湪杩炴帴涓紝鏆備笉鑳藉彂閫佹暟鎹紒");
+    }
+  }
+  return _grwebapp_websocket && (_grwebapp_websocket.readyState === 1);
+}
+
+//鍒涘缓骞堕�氳杩炴帴WebSocket
+function webapp_ws_create(onopen) {
+  //濡傛灉宸茬粡鍒涘缓锛屼笖杩炴帴姝e父锛屽垯涓嶈鍐嶆鍒涘缓
+  if (_grwebapp_websocket && _grwebapp_websocket.readyState === 1) {
+    return;
+  }
+
+  //鍒ゆ柇褰撳墠娴忚鍣ㄦ槸鍚︽敮鎸乄ebSocket
+  if ('WebSocket' in window) {
+    _grwebapp_websocket = new WebSocket("ws://127.0.0.1:22333");
+
+    //杩炴帴鎴愬姛寤虹珛鐨勫洖璋冩柟娉�
+    if (onopen) {
+      _grwebapp_websocket.onopen = function () {
+        //alert("_grwebapp_websocket.onopen");
+        onopen();
+      }
+    }
+    // debugger;
+    //鎺ユ敹鍒版秷鎭殑鍥炶皟鏂规硶
+    if (window.webapp_onmessage) {
+      _grwebapp_websocket.onmessage = function (event) {
+        window.webapp_onmessage(event);
+      }
+    }
+
+    _grwebapp_websocket.onerror = function () {
+      var children = document.body.children,
+        childrenLen = children.length,
+        referNode = childrenLen ? children[0] : null,
+        newNode = document.createElement("h3");
+
+      _grwebapp_websocket = null;
+
+      //寮瑰嚭alert鎻愮ず淇℃伅锛屽彲淇敼涓烘洿閫傚悎鐨勮〃杩�
+      //alert("鍒涘缓WebSocket澶辫触锛屽彲鑳芥槸鈥榃EB鎶ヨ〃瀹㈡埛绔▼搴忊�欏湪鏈満娌℃湁瀹夎锛屾垨鍦ㄦ姤琛ㄧ綉椤靛姞杞芥椂娌℃湁璋冪敤鈥榳ebapp_urlprotocol_startup鈥欏嚱鏁拌繘琛屽惎鍔ㄣ��");
+      alert("鍒涘缓WebSocket澶辫触锛屽彲鑳芥槸WEB鎶ヨ〃瀹㈡埛绔▼搴忔病鏈夊惎鍔紝鎴栧叾鍦ㄦ湰鏈烘病鏈夊畨瑁咃紝璇锋牴鎹綉椤甸《閮ㄧ殑鎻愮ず杩涜鐩稿簲鐨勬搷浣溿��");
+
+      //鍦ㄧ綉椤垫渶鍓嶉潰鍔犱笂鎻愮ず涓嬭浇鐨勬枃瀛楋紝鍙慨鏀逛负鏇撮�傚悎鐨勮〃杩颁笌鐣岄潰褰㈠紡
+      //newNode.innerHTML = '鐗瑰埆鎻愮ず锛�<a href="' + _grwebapp_url + '">鐐瑰嚮涓嬭浇WEB鎶ヨ〃瀹㈡埛绔▼搴�</a>锛屼笅杞藉悗鍙屽嚮涓嬭浇鐨勬枃浠惰繘琛屽畨瑁咃紝瀹夎瀹屾垚鍚庨噸鏂版墦寮�褰撳墠缃戦〉銆�';
+      newNode.innerHTML = '鐗瑰埆鎻愮ず锛氬皾璇�<a href="javascript:webapp_urlprotocol_startup();">鍚姩WEB鎶ヨ〃瀹㈡埛绔▼搴�</a>銆傛垨<a href="' + _grwebapp_url + '">鐐瑰嚮涓嬭浇WEB鎶ヨ〃瀹㈡埛绔▼搴�</a>锛屼笅杞藉悗鍙屽嚮涓嬭浇鐨勬枃浠惰繘琛屽畨瑁咃紝瀹夎瀹屾垚鍚庨噸鏂版墦寮�褰撳墠缃戦〉銆�';
+      document.body.insertBefore(newNode, referNode);
+    };
+
+    //杩炴帴鍏抽棴鐨勫洖璋冩柟娉�
+    _grwebapp_websocket.onclose = function () {
+      _grwebapp_websocket = null;
+    }
+
+    //鎰熻杩欓儴鍒嗗彲浠ヤ笉瑕�
+    //鐩戝惉绐楀彛鍏抽棴浜嬩欢锛屽綋绐楀彛鍏抽棴鏃讹紝涓诲姩鍘诲叧闂璤grwebapp_websocket杩炴帴锛岄槻姝㈣繛鎺ヨ繕娌℃柇寮�灏卞叧闂獥鍙o紝server绔細鎶涘紓甯搞��
+    //window.onbeforeunload = function () {
+    //    if (_grwebapp_websocket) {
+    //        _grwebapp_websocket.close();
+    //    }
+    //}
+  }
+  else {
+    alert('褰撳墠娴忚鍣ㄤ笉鏀寔HTML5鐨刉ebSocket锛岃閫夌敤鏇存柊鐗堟湰鐨勬祻瑙堝櫒锛�')
+  }
+}
+
+function webapp_build_one(pack, report, report_method, data, data_method, callback_fun, dataParams) {
+  if (!report) {
+    alert("鍦ㄥ弬鏁颁腑娌℃湁瀹氫箟鎶ヨ〃妯℃澘鐨剈rl锛屾姤琛ㄤ笉鑳界敓鎴愶紒");
+    return;
+  }
+
+  if (data) {
+    if (webapp_is_url(data)) {
+      webapp_ajax(data_method, data, function (xmlhttp, success) {
+        if (success) {
+          pack.data = xmlhttp.responseText;
+          callback_fun();
+        }
+        else {
+          //alert("杞藉叆鎶ヨ〃鏁版嵁澶辫触锛屽搷搴旀秷鎭細" + xmlhttp.responseText);
+          window.open(data, "blank");
+        }
+      }, undefined, dataParams);
+    }
+    else {
+      pack.data = (typeof data == "object") ? JSON.stringify(data) : data;
+      callback_fun();
+    }
+  }
+  else {
+    pack.data = "";
+  }
+
+  if (webapp_is_url(report)) {
+    webapp_ajax(report_method, report, function (xmlhttp, success) {
+      if (success) {
+        pack.report = xmlhttp.responseText;
+        callback_fun();
+      }
+      else {
+        //alert("杞藉叆鎶ヨ〃妯℃澘澶辫触锛屽搷搴旀秷鎭細" + xmlhttp.responseText);
+        window.open(report, "blank");
+      }
+    });
+  }
+  else {
+    pack.report = (typeof report == "object") ? JSON.stringify(report) : report;
+    callback_fun();
+  }
+}
+
+//灏嗗弬鏁伴�氳繃WebSocket鍙戦�佺粰WEB鎶ヨ〃瀹㈡埛绔紝WEB鎶ヨ〃瀹㈡埛绔墽琛屽搴旂殑浠诲姟
+//鍙傛暟璇存槑锛�
+//args锛�
+//  鎶ヨ〃鐢熸垚鐩稿叧鐨勫弬鏁帮紝涓轰竴涓粨鏋勪綋瀵硅薄鎴栫粨鏋勪綋瀵硅薄鏁扮粍銆�
+//  褰撳弬鏁颁负鏁扮粍鏃讹紝琛ㄧず鏄墽琛屾壒閲忎换鍔°�傛鏃跺悗闈㈢殑 report 涓� data 鍙傛暟涓嶄細琚敤鍒般��
+//  缁撴瀯浣撳璞$殑鍚勪釜鏁版嵁椤硅鏄庤鍙傝�冨府鍔╀腑鈥淲EB鎶ヨ〃(B/S鎶ヨ〃)->WEB鎶ヨ〃瀹㈡埛绔�->鍚姩鍙傛暟璇存槑鈥濋儴鍒�
+//report锛�
+//  鎶ヨ〃妯℃澘鏂囨湰锛屾姤琛ㄥ畾涔夋牸寮忓繀椤讳负JSON鏍煎紡銆傛鍙傛暟鍙┖锛屼负绌鸿〃绀烘墽琛岄潪鎶ヨ〃鐢熸垚浠诲姟锛屾垨WEB鎶ヨ〃瀹㈡埛绔�氳繃URL鑾峰彇鎶ヨ〃妯℃澘銆�
+//data锛�
+//  鎶ヨ〃鏁版嵁鏂囨湰锛屾鍙傛暟鍙┖锛屾姤琛ㄦ棤闇�鎻愪緵鏁版嵁锛屾垨WEB鎶ヨ〃瀹㈡埛绔�氳繃URL鑾峰彇鎶ヨ〃鏁版嵁銆�
+//
+//  鎶ヨ〃鏁版嵁瀵瑰簲鐨� XML 鎴� JSON 鏂囨湰锛岃鍙傝�冨府鍔┾�淲EB鎶ヨ〃(B/S鎶ヨ〃)->WEB鎶ヨ〃鏁版嵁鈥濅腑鐨勮鏄庛��
+function webapp_ws_run(variant_args, report, data) {
+  function run_one(args, reportText, dataText) {
+    var msg;
+
+    if (webapp_ws_check()) {
+      if (typeof args === "string") {
+        args = {
+          type: args
+        };
+      }
+      msg = JSON.stringify(args);
+
+      if (reportText) {
+        if (reportText.substr(0, 4) === "_WR_") {
+          msg += reportText.length;
+        }
+        msg += reportText;
+
+        if (dataText) {
+          msg += dataText;
+        }
+      }
+
+      _grwebapp_websocket.send(msg);
+    }
+  } //end of run_one
+
+  if (!webapp_ws_check(1)) {
+    //濡傛灉WebSocket娌℃湁杩炴帴锛屽垯棣栧厛鍒涘缓骞惰繛鎺ebSocket锛屽苟鍦╫nopen浜嬩欢涓墽琛岀浉鍏崇殑浠诲姟
+    webapp_ws_create(function () {
+      webapp_ws_run(variant_args, report, data);
+    });
+    return;
+  }
+
+  if (Array.isArray(variant_args)) {
+    variant_args.forEach(function (args) {
+      run_one(args);
+    })
+  }
+  else {
+    run_one(variant_args, report, data);
+  }
+}
+
+//閫氳繃 ajax 鏂瑰紡鑾峰彇鎶ヨ〃妯℃澘涓庢姤琛ㄦ暟鎹紝鐒跺悗閫氳繃 WebSocket 鍙戦�佺浉鍏虫暟鎹粰WEB鎶ヨ〃瀹㈡埛绔苟鐢熸垚鎶ヨ〃
+//鍙傛暟鏃㈠彲浠ユ槸鍗曚釜缁撴瀯浣撳璞★紝涔熷彲浠ユ槸缁撴瀯浣撳璞℃暟缁勩�傚鏋滄槸鏁扮粍锛岃〃绀烘垚鎵圭敓鎴愬涓姤琛ㄣ��
+//缁撴瀯浣撳璞$殑鍚勪釜鏁版嵁椤硅鏄庤鍙傝�冨府鍔╀腑鈥淲EB鎶ヨ〃(B/S鎶ヨ〃)->WEB鎶ヨ〃瀹㈡埛绔�->鍚姩鍙傛暟璇存槑鈥濋儴鍒嗐��
+function webapp_ws_ajax_run(variant_args) {
+  function run_one(args) {
+    var report = args.report,
+      data = args.data,
+      report_method = args.report_method,
+      data_method = args.data_method,
+      dataUrlParams = args.dataUrlParams,
+      pack = {};
+
+    function run() {
+      //鍙湁褰搑eport涓巇ata閮借祴鍊间箣鍚庢墠杩愯锛屽嵆鍚慦EB鎶ヨ〃瀹㈡埛绔▼搴忓彂閫佹暟鎹�
+      if (pack.report && pack.data !== undefined) {
+        webapp_ws_run(args, pack.report, pack.data);
+      }
+    }
+
+    //鍥犱负args闇�瑕佷紶閫掔粰WEBAPP锛宺eport涓巇ata鐨剈rl鐩稿叧鐨勫弬鏁颁笉闇�瑕佷紶閫掞紝鎵�浠ュ皢鍏跺垹闄ゆ帀
+    delete args.report;
+    delete args.data;
+    delete args.report_method;
+    delete args.data_method;
+    delete args.dataUrlParams;
+
+    webapp_build_one(pack, report, report_method, data, data_method, run, dataUrlParams);
+  } //end of run_one
+
+  if (!webapp_ws_check(1)) {
+    //濡傛灉WebSocket娌℃湁杩炴帴锛屽垯棣栧厛鍒涘缓骞惰繛鎺ebSocket锛屽苟鍦╫nopen浜嬩欢涓墽琛岀浉鍏崇殑浠诲姟
+    webapp_ws_create(function () {
+      webapp_ws_ajax_run(variant_args);
+    });
+    return;
+  }
+
+  if (Array.isArray(variant_args)) {
+    variant_args.forEach(function (args) {
+      run_one(args);
+    });
+  }
+  else {
+    run_one(variant_args);
+  }
+}
+
+//閫氳繃 ajax 鏂瑰紡鑾峰彇澶氫釜鎶ヨ〃鐨勬ā鏉夸笌鏁版嵁锛岀劧鍚庣敤 WebSocket 灏嗘暟鎹竴娆℃�у彂閫佺粰WEB鎶ヨ〃瀹㈡埛绔▼搴忋��
+//瀹炵幇澶氫釜鎶ヨ〃鍚屾椂鐢熸垚鍦ㄤ竴涓换鍔′腑(搴旂敤Grid++Report鐨勭嫭绔嬪瓙鎶ヨ〃鍔熻兘瀹炵幇)锛岃揪鍒板涓姤琛ㄥ悓鏃堕瑙堛�佹墦鍗颁笌鏁版嵁瀵煎嚭
+function webapp_ws_ajax_together(args, reports) {
+  var reportCount = reports.length,
+    reportPacks = [],
+    gettedCount = 0; //鎸囩ず宸茬粡鑾峰彇鍒版暟鎹殑鎶ヨ〃涓暟
+
+  function ajaxRequestOne(arg, index) {
+    var report = arg.report,
+      data = arg.data,
+      report_method = arg.report_method,
+      data_method = arg.data_method,
+      dataUrlParams = arg.dataUrlParams,
+      pack = reportPacks[index];
+
+    function try_ws_send() {
+      var msg,
+        dataMsg = "",
+        lengths = [];
+
+      if (pack.report && pack.data !== undefined) {
+        if (++gettedCount >= reportCount) { //鍙湁褰撳叏閮ㄦ姤琛ㄧ殑妯℃澘涓庢暟鎹兘宸茬粡鑾峰彇鍒颁箣鍚庯紝鎵嶄細鍚慦EB鎶ヨ〃瀹㈡埛绔彂閫佹暟鎹�
+          msg = JSON.stringify(args);
+
+          reportPacks.forEach(function (item) {
+            var report = item.report,
+              data = item.data,
+              reportLen = report.length,
+              reportLenText = "";
+
+            if (report.substr(0, 4) === "_WR_") {
+              reportLenText += reportLen;
+              dataMsg += reportLenText;
+              reportLen += reportLenText.length;
+            }
+            dataMsg += report;
+
+            if (data) {
+              dataMsg += data;
+            }
+
+            lengths.push(reportLen + data.length);
+          });
+
+          msg += JSON.stringify(lengths);
+          msg += dataMsg;
+
+          _grwebapp_websocket.send(msg);
+        }
+      }
+    }
+
+    webapp_build_one(pack, report, report_method, data, data_method, try_ws_send, dataUrlParams);
+  } //end of ajaxRequestOne
+
+  if (!webapp_ws_check(1)) {
+    //濡傛灉WebSocket娌℃湁杩炴帴锛屽垯棣栧厛鍒涘缓骞惰繛鎺ebSocket锛屽苟鍦╫nopen浜嬩欢涓墽琛岀浉鍏崇殑浠诲姟
+    webapp_ws_create(function () {
+      webapp_ws_ajax_together(args, reports);
+    });
+    return;
+  }
+
+  reports.forEach(function (report, index) {
+    reportPacks.push({});
+    ajaxRequestOne(report, index);
+  });
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//閫氳繃WebSocket鍚慦EB鎶ヨ〃瀹㈡埛绔彂閫佹灇涓惧嚭褰撳墠鐢佃剳鐨勬墍鏈夋墦鍗版満淇℃伅鐨勬寚浠�
+//鍦ㄧ綉椤电殑 webapp_onmessage 鍑芥暟涓帴鏀禬EB鎶ヨ〃瀹㈡埛绔繑鍥炵殑缁撴灉锛屽叿浣撹鍙傝�冧緥瀛愩��
+function webapp_ws_fun_Printers() {
+  webapp_ws_run({
+    type: "fun",
+    fun: "Printers"
+  });
+}
+
+//閫氳繃WebSocket鍚慦EB鎶ヨ〃瀹㈡埛绔彂閫佹灇涓惧嚭褰撳墠鐢佃剳鐨勬寚瀹氭墦鍗版満鐨勫叏閮ㄥ彲鐢ㄧ焊寮犵殑鎸囦护
+//鍦ㄧ綉椤电殑 webapp_onmessage 鍑芥暟涓帴鏀禬EB鎶ヨ〃瀹㈡埛绔繑鍥炵殑缁撴灉锛屽叿浣撹鍙傝�冧緥瀛�
+function webapp_ws_fun_PrinterPapers(printer) {
+  webapp_ws_run({
+    type: "fun",
+    fun: "PrinterPapers",
+    printer: printer
+  });
+}
+
+//閫氳繃WebSocket鍚慦EB鎶ヨ〃瀹㈡埛绔彂閫佸仠姝㈠綋鍓嶆姤琛ㄩ瑙堝苟鍏抽棴棰勮绐楀彛鐨勬寚浠�
+function webapp_ws_fun_StopPreview() {
+  webapp_ws_run({
+    type: "fun",
+    fun: "StopPreview"
+  });
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//閫氳繃WebSocket鍚慦EB鎶ヨ〃瀹㈡埛绔彂閫佹秷鎭繘琛岃嚜鍔ㄦ洿鏂版鏌ュ鐞�
+function webapp_ws_autoupdate() {
+  webapp_ws_run({
+    type: "update",
+    url: _grwebapp_url,
+    ver: _grwebapp_version
+  });
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//涓篣RL杩藉姞涓�涓悕涓篿d鐨勯殢鏈烘暟鍙傛暟锛岀敤浜庨槻姝㈡祻瑙堝櫒缂撳瓨銆�
+//鎶ヨ〃妯℃澘閲嶆柊璁捐鍚庯紝鍥犱负娴忚鍣ㄧ紦瀛樿�岃鎶ヨ〃鐢熸垚涓嶈兘鍙嶆槧鍑烘柊淇敼鐨勮璁$粨鏋滐紝URL鍚庤拷鍔犱竴涓殢鏈烘暟鍙傛暟鍙互閬垮厤杩欐牱鐨勯棶棰�
+//鍙傛暟url蹇呴』鏄潤鎬佺殑URL锛屽叾鍚庢湰韬棤浠讳綍鍙傛暟
+//濡傛灉妯℃澘鍑犱箮涓嶆�庝箞淇敼锛屽彲浠ュ幓鎺夊鏈嚱鏁扮殑璋冪敤
+function urlAddRandomNo(url) {
+  return url + "?id=" + Math.floor(Math.random() * 10000);
+}
+
+//鏍规嵁褰撳墠缃戦〉URL鑾峰彇鍒板綋鍓峎EB鏈嶅姟鍣ㄧ殑鏍筓RL锛屽苟璁板綍鍦� window.rootURL 涓�
+function gr_extractRootURL() {
+  var path = window.location.pathname,
+    index = path.lastIndexOf("/");
+
+  window.rootURL = window.location.protocol + "//" + window.location.host;
+  if (index >= 0) {
+    path = path.substr(0, index);
+
+    //demmo鐨勬牴鐩綍鍦ㄥ綋鍓嶉〉闈㈢殑1绾х洰褰曚箣涓�
+    index = path.lastIndexOf("/");
+    if (index >= 0) {
+      path = path.substr(0, index);
+    }
+
+    window.rootURL += path;
+  }
+  window.rootURL += "/";
+}
+
+//vue涓娇鐢ㄥ皢涓嬪垪娉ㄩ噴寮�鏀�
+//export {
+//    webapp_url_method_valid,
+//    webapp_urlprotocol_startup,
+//    webapp_ajax,
+//    webapp_ws_ajax_run,
+//    webapp_urlprotocol_run,
+//    urlAddRandomNo,
+//    webapp_onmessage,
+//    webapp_ws_fun_StopPreview,
+//    webapp_ws_fun_PrinterPapers,
+//    webapp_ws_fun_Printers,
+//    webapp_ws_ajax_together,
+//    webapp_ws_autoupdate,
+//    gr_extractRootURL
+//}
diff --git a/public/webapp-ws-tutorial.htm b/public/static/grid/webapp-ws-tutorial.htm
similarity index 86%
rename from public/webapp-ws-tutorial.htm
rename to public/static/grid/webapp-ws-tutorial.htm
index 863dc10..bcaf4a4 100644
--- a/public/webapp-ws-tutorial.htm
+++ b/public/static/grid/webapp-ws-tutorial.htm
@@ -2,16 +2,12 @@
 <html>
 <head>
   <title>WEB鎶ヨ〃瀹㈡埛绔娇鐢ㄦ暀绋�(WebSocket) - 閿愭氮WEB鎶ヨ〃</title>
-  <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-  <meta name="Description" content="閿愭氮HTML5鎶ヨ〃搴旂敤WEB鎶ヨ〃瀹㈡埛绔疄鐜版墦鍗颁笌鏁版嵁瀵煎嚭銆�"/>
-  <meta name="Keywords" content="WEB鎶ヨ〃,WEB鎵撳嵃,HTML5鎶ヨ〃,WEB鎶ヨ〃瀹㈡埛绔�"/>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  <meta name="Description" content="閿愭氮HTML5鎶ヨ〃搴旂敤WEB鎶ヨ〃瀹㈡埛绔疄鐜版墦鍗颁笌鏁版嵁瀵煎嚭銆�" />
+  <meta name="Keywords" content="WEB鎶ヨ〃,WEB鎵撳嵃,HTML5鎶ヨ〃,WEB鎶ヨ〃瀹㈡埛绔�" />
   <script src="grwebapp.js"></script>
   <script language="javascript" type="text/javascript">
-
-    import {webapp_urlprotocol_startup} from "./grwebapp";
-
     function window_onload() {
-      console.log('鎵ц浜嗭紒')
       //*杩欏彞鐗瑰埆閲嶈*锛氬彧鏈夊湪WEB鎶ヨ〃瀹㈡埛绔▼搴忓悗锛屾墠鑳借繘琛學ebSocket閫氳
       //濡傛灉WEB鎶ヨ〃瀹㈡埛绔▼搴忎负寮�鏈鸿嚜鍚姩锛屼互涓嬭皟鐢ㄥ簲璇ュ幓鎺夈�傛洿澶氳鏄庤鍙傝�冨府鍔┾�淲EB鎶ヨ〃(B/S鎶ヨ〃)->WEB鎶ヨ〃瀹㈡埛绔�->閮ㄧ讲涓庡畨瑁呪�濋儴鍒嗕腑涓庤胺姝孋hrome娴忚鍣ㄧ殑鐩稿叧璇存槑
       webapp_urlprotocol_startup(); //鍚姩WEB鎶ヨ〃瀹㈡埛绔▼搴忥紝浠ヤ究渚﹀惉鎺ュ彈 WebSocket 鏁版嵁
@@ -43,7 +39,8 @@
       //alert(event.data);
       if (message.event == "PrintEnd") {
         OnPrintEnd();
-      } else if (message.event == "ExportEnd") {
+      }
+      else if (message.event == "ExportEnd") {
         OnExportEnd();
       }
     }
@@ -58,9 +55,6 @@
 <h3>璧锋渚嬪瓙</h3>
 <p><a href='javascript:ws_ajax_preview();'>鎵撳嵃棰勮(AJAX)</a>閫氳繃AJAX鏂瑰紡鑾峰彇鎶ヨ〃妯℃澘涓庢姤琛ㄦ暟鎹�</p>
 <script language="javascript" type="text/javascript">
-
-  import {urlAddRandomNo, webapp_ws_ajax_run} from "./grwebapp";
-
   function ws_ajax_preview() {
     //鍙傛暟鍏蜂綋璇存槑璇峰弬鑰冨府鍔╂枃妗d腑鐨勨�淲EB鎶ヨ〃(B/S鎶ヨ〃)->WEB鎶ヨ〃瀹㈡埛绔�->鍚姩鍙傛暟璇存槑鈥濋儴鍒�
     var args = {
@@ -93,11 +87,8 @@
   }
 </script>
 
-<p><a href='javascript:ws_ajax_print();'>鎵撳嵃(AJAX)</a>閫氳繃AJAX鏂瑰紡鑾峰彇鎶ヨ〃妯℃澘涓庢姤琛ㄦ暟鎹�</p>
+<p> <a href='javascript:ws_ajax_print();'>鎵撳嵃(AJAX)</a>閫氳繃AJAX鏂瑰紡鑾峰彇鎶ヨ〃妯℃澘涓庢姤琛ㄦ暟鎹�</p>
 <script language="javascript" type="text/javascript">
-
-  import {urlAddRandomNo, webapp_ws_ajax_run} from "./grwebapp";
-
   function ws_ajax_print() {
     var args = {
       type: "print",
@@ -112,9 +103,6 @@
 
 <p><a href='javascript:ws_ajax_export_xls();'>瀵煎嚭Excel(AJAX)</a>閫氳繃AJAX鏂瑰紡鑾峰彇鎶ヨ〃妯℃澘涓庢姤琛ㄦ暟鎹�</p>
 <script language="javascript" type="text/javascript">
-
-  import {urlAddRandomNo, webapp_ws_ajax_run} from "./grwebapp";
-
   function ws_ajax_export_xls() {
     var args = {
       type: "xls",
@@ -128,11 +116,8 @@
 </script>
 
 <h3>鑷畾涔夋墦鍗板弬鏁�</h3>
-<p><a href='javascript:print_arguments();'>鑷畾涔夋墦鍗板弬鏁�</a>锛氭寚瀹氭墦鍗版満锛岃缃�愪唤鎵撳嵃涓庢墦鍗颁唤鏁般��</p>
+<p> <a href='javascript:print_arguments();'>鑷畾涔夋墦鍗板弬鏁�</a>锛氭寚瀹氭墦鍗版満锛岃缃�愪唤鎵撳嵃涓庢墦鍗颁唤鏁般��</p>
 <script language="javascript" type="text/javascript">
-
-  import {urlAddRandomNo, webapp_ws_ajax_run} from "./grwebapp";
-
   function print_arguments() {
     var args = {
       type: "print",   //濡傛灉鏄杩涜鎵撳嵃锛屽皢 type 璁剧疆涓� print
@@ -147,14 +132,11 @@
   }
 </script>
 
-<p><a href='javascript:export_xls_custom();'>鑷畾涔夊鍑篍xcel</a>锛氳缃悎閫傜殑閫夐」鍙傛暟锛屽皢鏁版嵁瀵煎嚭涓鸿繛缁殑琛ㄦ牸锛岄〉鐪夐〉鑴氫笉瀵煎嚭锛屼笉鏄剧ず瀵煎嚭鍙傛暟瀵硅瘽妗嗙瓑銆�</p>
+<p> <a href='javascript:export_xls_custom();'>鑷畾涔夊鍑篍xcel</a>锛氳缃悎閫傜殑閫夐」鍙傛暟锛屽皢鏁版嵁瀵煎嚭涓鸿繛缁殑琛ㄦ牸锛岄〉鐪夐〉鑴氫笉瀵煎嚭锛屼笉鏄剧ず瀵煎嚭鍙傛暟瀵硅瘽妗嗙瓑銆�</p>
 <script language="javascript" type="text/javascript">
-
-  import {urlAddRandomNo, webapp_ws_ajax_run} from "./grwebapp";
-
   function export_xls_custom() {
     var args = {
-      report: urlAddRandomNo("../grf/1a.grf"),
+      report:urlAddRandomNo("../grf/1a.grf"),
       data: "../data/DataCenter.ashx?data=Customer",
       type: "xls",
       ExportPageBreak: false,
@@ -173,15 +155,12 @@
 
 <p><a href='javascript:ws_data_from_string();'>鎵撳嵃棰勮(鎶ヨ〃鏁版嵁鏉ヨ嚜瀛楃涓�)</a>锛氶�氳繃WebSocket鐩存帴灏嗙綉椤典腑鐨勫瓧绗︿覆鏁版嵁浼犻�掔粰WEB鎶ヨ〃瀹㈡埛绔��</p>
 <script language="javascript" type="text/javascript">
-
-  import {urlAddRandomNo, webapp_ws_ajax_run} from "./grwebapp";
-
   function ws_data_from_string() {
     var args = {
       type: "preview", //璁剧疆涓嶅悓鐨勫睘鎬у彲浠ユ墽琛屼笉鍚岀殑浠诲姟锛屽锛歱review print pdf xls csv txt rtf img grd
       report: urlAddRandomNo("../grf/1a.grf"),
       //瀹為檯搴旂敤涓紝data搴旇涓虹▼搴忎腑閫氳繃鍚勭閫斿緞鑾峰彇鍒扮殑鏁版嵁锛屾渶鍚庤灏嗘暟鎹浆鎹负鎶ヨ〃闇�瑕佺殑XML鎴朖SON鏍煎紡鐨勫瓧绗︿覆鏁版嵁
-      data: "<xml>" +
+      data:"<xml>" +
         "<row><CustomerID>HUNGC</CustomerID><CompanyName>浜旈噾鏈烘</CompanyName><ContactName>鑻忓厛鐢�</ContactName><ContactTitle>閿�鍞唬琛�</ContactTitle></row>" +
         "<row><CustomerID>CENTC</CustomerID><CompanyName>涓夋嵎瀹炰笟</CompanyName><ContactName>鐜嬪厛鐢�</ContactName><ContactTitle>甯傚満缁忕悊</ContactTitle></row>" +
         "<row><CustomerID>CACTU</CustomerID><CompanyName>濞佽埅璐ц繍</CompanyName><ContactName>鍒樺厛鐢�</ContactName><ContactTitle>閿�鍞唬鐞�</ContactTitle></row>" +
@@ -195,13 +174,10 @@
 
 <p><a href='javascript:ws_data_from_object();'>鎵撳嵃棰勮(鎶ヨ〃鏁版嵁鏉ヨ嚜JSON瀵硅薄)</a>锛氶�氳繃WebSocket鐩存帴灏嗙綉椤典腑鐨凧SON瀵硅薄鏁版嵁浼犻�掔粰WEB鎶ヨ〃瀹㈡埛绔��</p>
 <script language="javascript" type="text/javascript">
-
-  import {urlAddRandomNo, webapp_ws_ajax_run} from "./grwebapp";
-
   function ws_data_from_object() {
     var args = {
       type: "preview", //璁剧疆涓嶅悓鐨勫睘鎬у彲浠ユ墽琛屼笉鍚岀殑浠诲姟锛屽锛歱review print pdf xls csv txt rtf img grd
-      report: urlAddRandomNo("../grf/1a.grf"),
+      report: urlAddRandomNo("../grf/1a_test.grf"),
       //瀹為檯搴旂敤涓紝data搴旇涓虹▼搴忎腑閫氳繃鍚勭閫斿緞鑾峰彇鍒扮殑鏁版嵁锛屾渶鍚庤灏嗘暟鎹浆鎹负鎶ヨ〃闇�瑕佺殑XML鎴朖SON鏍煎紡鐨勫瓧绗︿覆鏁版嵁
       data:
         {
diff --git a/src/api/scgl.js b/src/api/scgl.js
index 1ec4013..435ee67 100644
--- a/src/api/scgl.js
+++ b/src/api/scgl.js
@@ -76,3 +76,20 @@
     params: data
   })
 }
+
+//
+export function MesOrderStepSearch(data) {
+  return request({
+    url: 'ProductionManagement/MesOrderStepSearch',
+    method: 'get',
+    params: data
+  })
+}
+//
+export function MesOrderStepStart(data) {
+  return request({
+    url: 'ProductionManagement/MesOrderStepStart',
+    method: 'post',
+    params: data
+  })
+}
diff --git a/src/views/jcsz/jsqd.vue b/src/views/jcsz/jsqd.vue
index 86c71e8..40bbad5 100644
--- a/src/views/jcsz/jsqd.vue
+++ b/src/views/jcsz/jsqd.vue
@@ -89,7 +89,6 @@
           <el-table-column
             prop="description"
             label="瑙掕壊鎻忚堪"
-            show-overflow-tooltip
             sortable="custom"
           />
           <el-table-column
@@ -101,7 +100,6 @@
             prop="lm_date"
             label="鍒涘缓鏃堕棿"
             sortable="custom"
-            show-overflow-tooltip
           />
           <el-table-column
             prop="lm_date"
@@ -152,7 +150,7 @@
     <el-dialog
       :title="operation==='add'?'鏂板':'缂栬緫'"
       :visible.sync="dialogVisible"
-      width="50%"
+      width="65%"
       top="15vh"
       :close-on-click-modal="false"
       @closed="handleClose"
@@ -160,17 +158,17 @@
     >
       <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="80px">
         <el-form-item label="瑙掕壊缂栫爜" prop="RoleCode">
-          <el-input v-model="dialogForm.RoleCode" :disabled="operation!=='add'" style="width: 220px" />
+          <el-input v-model="dialogForm.RoleCode" :disabled="operation!=='add'" style="width: 200px" />
         </el-form-item>
         <el-form-item label="瑙掕壊鍚嶇О" prop="RoleName">
-          <el-input v-model="dialogForm.RoleName" style="width: 220px" />
+          <el-input v-model="dialogForm.RoleName" style="width: 200px" />
         </el-form-item>
         <el-form-item prop="RoleTypeCode" label="瑙掕壊绫诲瀷">
           <el-select
             v-model="dialogForm.RoleTypeCode"
             filterable
             :popper-append-to-body="false"
-            style="width: 220px"
+            style="width: 200px"
             placeholder="璇烽�夋嫨"
           >
             <el-option
@@ -182,7 +180,7 @@
           </el-select>
         </el-form-item>
         <el-form-item label="瑙掕壊鎻忚堪" prop="description">
-          <el-input v-model="dialogForm.description" type="textarea" style="width: 220px" />
+          <el-input v-model="dialogForm.description" type="textarea" style="width: 200px" />
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
@@ -209,7 +207,7 @@
       <el-table
         :data="RoleTypeCodeArr"
         border
-        height="400"
+        height="300"
         highlight-current-row
         :header-cell-style="this.$headerCellStyle"
         :cell-style="this.$cellStyle"
@@ -281,6 +279,7 @@
       width="80%"
       :close-on-click-modal="false"
       top="15vh"
+      :fullscreen="isFullscreen"
       class="userDialogVisible"
       @closed="handleCloseUser"
       @close="handleCloseUser"
@@ -295,10 +294,10 @@
       <div style="display: flex;min-height: 50px">
         <el-form ref="dialogFormUser" inline :model="dialogFormUser" label-width="80px">
           <el-form-item label="鐢ㄦ埛缂栫爜">
-            <el-input v-model="dialogFormUser.usercode" class="userDialogVisibleInput" style="width: 220px" />
+            <el-input v-model="dialogFormUser.usercode" style="width: 200px" />
           </el-form-item>
           <el-form-item label="鐢ㄦ埛鍚嶇О">
-            <el-input v-model="dialogFormUser.username" class="userDialogVisibleInput" style="width: 220px" />
+            <el-input v-model="dialogFormUser.username" style="width: 200px" />
           </el-form-item>
           <el-form-item label="鎵�灞炵粍缁�">
             <el-cascader
@@ -309,8 +308,7 @@
               :append-to-body="false"
               :options="StuOrgArr"
               :props="defaultProps"
-              class="userDialogVisibleInput"
-              style="width: 220px;"
+              style="width: 200px;"
               @change="dialogCascaderChange"
             />
 
@@ -320,9 +318,8 @@
               v-model="dialogFormUser.isrole"
               filterable
               :popper-append-to-body="false"
-              style="width: 220px"
+              style="width: 200px"
               placeholder="璇烽�夋嫨"
-              class="userDialogVisibleInput"
             >
               <el-option
                 v-for="item in roleArr"
@@ -424,6 +421,7 @@
       :visible.sync="dialogVisibleRight"
       width="50%"
       top="15vh"
+      :fullscreen="isFullscreen"
       :close-on-click-modal="false"
       class="dialogVisibleRight"
       @closed="handleCloseRight"
@@ -535,6 +533,7 @@
     //   }
     // }
     return {
+      isFullscreen: false,
       mainHeight: 0,
       tableHeight: 0,
       form: {
@@ -787,8 +786,11 @@
     // 鑾峰彇椤甸潰楂樺害
     getHeight() {
       this.$nextTick(() => {
+        console.log(window.innerHeight)
+        console.log(window.innerHeight)
         this.mainHeight = window.innerHeight - 250
         this.tableHeight = this.mainHeight - 100
+        this.isFullscreen = window.innerHeight < 800
       })
     },
     /* 璁剧疆妯″潡*/
@@ -1360,9 +1362,9 @@
   color: #606266;
 }
 
-::v-deep .el-dialog__body {
-  padding: 20px 100px !important;
-}
+//::v-deep .el-dialog__body {
+//  padding: 20px 100px !important;
+//}
 
 .settingDialogVisible, .userDialogVisible, .dialogVisibleRight {
   ::v-deep .el-dialog__body {
@@ -1428,16 +1430,6 @@
       background-color: $main_color;
     }
   }
-}
-
-.userDialogVisible {
-  ::v-deep .userDialogVisibleInput {
-    //width:calc(100% - 30px) !important;
-  }
-
-  //::v-deep  .el-form-item {
-  //  width:calc(100% - 30px) !important;
-  //}
 }
 
 ::v-deep .el-radio__input.is-checked .el-radio__inner {
diff --git a/src/views/jcsz/wldw.vue b/src/views/jcsz/wldw.vue
index cb86979..acef046 100644
--- a/src/views/jcsz/wldw.vue
+++ b/src/views/jcsz/wldw.vue
@@ -71,7 +71,6 @@
           <el-table-column
             prop="name"
             label="鍗曚綅鍚嶇О"
-            show-overflow-tooltip
             sortable="custom"
             min-width="200px"
           />
@@ -134,7 +133,6 @@
             label="鍒涘缓鏃堕棿"
             sortable="custom"
             width="200"
-            show-overflow-tooltip
           />
           <el-table-column
             label="鎿嶄綔"
@@ -505,9 +503,9 @@
   color: #606266;
 }
 
-::v-deep .el-dialog__body {
-  padding: 20px 100px !important;
-}
+//::v-deep .el-dialog__body {
+//  padding: 20px 100px !important;
+//}
 
 ::v-deep .el-radio__input.is-checked .el-radio__inner {
   background-color: $main_color;
diff --git a/src/views/jcsz/yhqd.vue b/src/views/jcsz/yhqd.vue
index cb6c016..3763d4f 100644
--- a/src/views/jcsz/yhqd.vue
+++ b/src/views/jcsz/yhqd.vue
@@ -140,7 +140,6 @@
             prop="lm_date"
             label="鍒涘缓鏃堕棿"
             width="200"
-            show-overflow-tooltip
             sortable="custom"
           />
           <el-table-column
@@ -180,7 +179,7 @@
     <el-dialog
       :title="operation==='add'?'鏂板':'缂栬緫'"
       :visible.sync="dialogVisible"
-      width="50%"
+      width="65%"
       :close-on-click-modal="false"
       top="15vh"
       @closed="handleClose"
@@ -188,20 +187,20 @@
     >
       <el-form ref="dialogForm" :rules="dialogFormRules" inline :model="dialogForm" label-width="80px">
         <el-form-item label="鐢ㄦ埛缂栫爜" prop="UserCode">
-          <el-input v-model="dialogForm.UserCode" :disabled="operation!=='add'" style="width: 220px" />
+          <el-input v-model="dialogForm.UserCode" :disabled="operation!=='add'" style="width: 200px" />
         </el-form-item>
         <el-form-item label="鐢ㄦ埛鍚嶇О" prop="UserName">
-          <el-input v-model="dialogForm.UserName" style="width: 220px" />
+          <el-input v-model="dialogForm.UserName" style="width: 200px" />
         </el-form-item>
         <el-form-item label="鐢ㄦ埛瀵嗙爜" prop="Password">
-          <el-input v-model="dialogForm.Password" style="width: 220px" />
+          <el-input v-model="dialogForm.Password" style="width: 200px" />
         </el-form-item>
         <el-form-item label="鍦ㄨ亴鐘舵��" prop="Enable">
           <el-select
             v-model="dialogForm.Enable"
             :popper-append-to-body="false"
             filterable
-            style="width: 220px"
+            style="width: 200px"
             placeholder="璇烽�夋嫨"
           >
             <el-option
@@ -220,7 +219,7 @@
             popper-class="elCascader"
             :options="StuOrgArr"
             :props="defaultProps"
-            style="width: 220px;"
+            style="width: 200px;"
             @change="dialogCascaderChange"
           />
         </el-form-item>
@@ -229,7 +228,7 @@
             v-model="dialogForm.wagetype"
             :popper-append-to-body="false"
             filterable
-            style="width: 220px"
+            style="width: 200px"
             placeholder="璇烽�夋嫨"
           >
             <el-option
@@ -242,10 +241,10 @@
         </el-form-item>
 
         <el-form-item label="鑱旂郴鏂瑰紡">
-          <el-input v-model="dialogForm.Mobile" style="width: 220px" />
+          <el-input v-model="dialogForm.Mobile" style="width: 200px" />
         </el-form-item>
         <el-form-item label="鐢靛瓙閭">
-          <el-input v-model="dialogForm.Email" style="width: 220px" />
+          <el-input v-model="dialogForm.Email" style="width: 200px" />
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
@@ -260,8 +259,9 @@
     <el-dialog
       title="鍏宠仈瑙掕壊"
       :visible.sync="dialogVisibleRoles"
-      width="50%"
+      width="65%"
       top="15vh"
+      :fullscreen="isFullscreen"
       :close-on-click-modal="false"
       class="dialogVisibleRoles"
       @closed="handleCloseRoles"
@@ -309,6 +309,7 @@
           show-checkbox
           node-key="code"
           default-expand-all
+          style="height: 300px"
           :props="defaultPropsOfRoleTree"
           @check="checkBoxClick"
         />
@@ -355,6 +356,7 @@
       }
     }
     return {
+      isFullscreen: false,
       mainHeight: 0,
       tableHeight: 0,
       form: {
@@ -587,9 +589,15 @@
     },
     // 鑾峰彇椤甸潰楂樺害
     getHeight() {
+      console.log(window.innerHeight)
+      console.log(window.innerWidth)
       this.$nextTick(() => {
         this.mainHeight = window.innerHeight - 250
         this.tableHeight = this.mainHeight - 100
+        this.isFullscreen = window.innerHeight < 800
+        if (window.innerHeight < 800) {
+          this.tableHeight = this.tableHeight - 50
+        }
       })
     },
     // 鍏宠仈瑙掕壊鐐瑰嚮浜嬩欢
@@ -926,9 +934,9 @@
   color: #606266;
 }
 
-::v-deep .el-dialog__body {
-  padding: 20px 100px !important;
-}
+//::v-deep .el-dialog__body {
+//  padding: 20px 100px !important;
+//}
 
 ::v-deep .el-radio__input.is-checked .el-radio__inner {
   background-color: $main_color;
diff --git a/src/views/jcsz/zzjg.vue b/src/views/jcsz/zzjg.vue
index 140fd2a..277b859 100644
--- a/src/views/jcsz/zzjg.vue
+++ b/src/views/jcsz/zzjg.vue
@@ -99,7 +99,6 @@
           <el-table-column
             prop="lm_date"
             label="鍒涘缓鏃堕棿"
-            show-overflow-tooltip
             sortable="custom"
           />
           <el-table-column
@@ -130,7 +129,7 @@
     <el-dialog
       :title="operation==='add'?'鏂板':'缂栬緫'"
       :visible.sync="dialogVisible"
-      width="50%"
+      width="60%"
       top="15vh"
       :close-on-click-modal="false"
       @closed="handleClose"
@@ -151,15 +150,15 @@
           </el-radio-group>
         </el-form-item>
         <el-form-item label="缁勭粐缂栫爜" prop="OrgCode">
-          <el-input v-model="dialogForm.OrgCode" disabled style="width: 220px" />
+          <el-input v-model="dialogForm.OrgCode" disabled style="width: 200px" />
         </el-form-item>
         <el-form-item label="缁勭粐鍚嶇О" prop="OrgName">
-          <el-input v-model="dialogForm.OrgName" style="width: 220px" />
+          <el-input v-model="dialogForm.OrgName" style="width: 200px" />
         </el-form-item>
         <el-form-item v-if="dialogFormOrgTypeSelected!=='F'" prop="SupUnit" label="涓婄骇鍗曚綅">
           <el-select
             v-model="dialogForm.SupUnit"
-            style="width: 220px"
+            style="width: 200px"
             filterable
             :popper-append-to-body="false"
             placeholder="璇烽�夋嫨"
@@ -215,6 +214,8 @@
       }
     }
     return {
+      windowHeight: 0,
+      windowWidth: 0,
       mainHeight: 0,
       tableHeight: 0,
       numvalue: 0,
@@ -265,12 +266,38 @@
 
     }
   },
+  // watch: {
+  //   windowHeight(val) {
+  //     console.log('瀹炴椂灞忓箷楂樺害锛�', val, this.windowHeight)
+  //   },
+  //   windowWidth(val) {
+  //     if (val < 768) {
+  //       this.dialogWidth = '100%'
+  //     } else {
+  //       this.dialogWidth = '75%'
+  //     }
+  //     console.log('瀹炴椂灞忓箷瀹藉害锛�', val, this.windowHeight)
+  //   }
+  // },
   created() {
     this.getOrganizationSearch()
   },
   mounted() {
     window.addEventListener('resize', this.getHeight)
     this.getHeight()
+
+    // console.log('椤甸潰杩涘叆鏃剁殑瀹藉害锛�', document.body.clientWidth)
+    // if (document.body.clientWidth < 768) {
+    //   this.dialogWidth = '100%'
+    // }
+    //
+    // // <!--鎶妛indow.onresize浜嬩欢鎸傚湪鍒癿ounted鍑芥暟涓�-->
+    // window.onresize = () => {
+    //   return (() => {
+    //     this.windowHeight = document.documentElement.clientHeight// 楂�
+    //     this.windowWidth = document.documentElement.clientWidth // 瀹�
+    //   })()
+    // }
   },
   methods: {
     async getOrganizationSearch() {
@@ -466,9 +493,9 @@
   color: #606266;
 }
 
-::v-deep .el-dialog__body {
-  padding: 20px 100px !important;
-}
+//::v-deep .el-dialog__body {
+//  padding: 20px 100px !important;
+//}
 
 ::v-deep .el-radio__input.is-checked .el-radio__inner {
   background-color: $main_color;
diff --git a/src/views/sbgl/sbqd.vue b/src/views/sbgl/sbqd.vue
index 8da75f8..d9a8aa7 100644
--- a/src/views/sbgl/sbqd.vue
+++ b/src/views/sbgl/sbqd.vue
@@ -200,20 +200,20 @@
       :close-on-click-modal="false"
       :title="operation==='add'?'鏂板':'缂栬緫'"
       :visible.sync="dialogVisible"
-      width="50%"
+      width="65%"
       top="15vh"
       @closed="handleClose"
       @close="handleClose"
     >
       <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="80px">
         <el-form-item label="璁惧缂栫爜" prop="devicecode">
-          <el-input v-model="dialogForm.devicecode" :disabled="operation!=='add'" style="width: 220px" />
+          <el-input v-model="dialogForm.devicecode" :disabled="operation!=='add'" style="width: 200px" />
         </el-form-item>
         <el-form-item label="璁惧鍚嶇О" prop="devicename">
-          <el-input v-model="dialogForm.devicename" style="width: 220px" />
+          <el-input v-model="dialogForm.devicename" style="width: 200px" />
         </el-form-item>
         <el-form-item label="璁惧绫诲瀷" prop="devicetypecode">
-          <el-select v-model="dialogForm.devicetypecode" :popper-append-to-body="false" style="width: 220px" placeholder="璇烽�夋嫨" @change="devicetypecodeChange">
+          <el-select v-model="dialogForm.devicetypecode" :popper-append-to-body="false" style="width: 200px" placeholder="璇烽�夋嫨" @change="devicetypecodeChange">
             <el-option
               v-for="item in DeviceTypeArr"
               :key="item.code"
@@ -223,7 +223,7 @@
           </el-select>
         </el-form-item>
         <el-form-item label="璁惧缁�" prop="devicegroupcode">
-          <el-select v-model="dialogForm.devicegroupcode" :popper-append-to-body="false" :disabled="dialogForm.devicetypecode===''" style="width: 220px" placeholder="璇烽�夋嫨">
+          <el-select v-model="dialogForm.devicegroupcode" :popper-append-to-body="false" :disabled="dialogForm.devicetypecode===''" style="width: 200px" placeholder="璇烽�夋嫨">
             <el-option
               v-for="item in DeviceGroupDialogArr"
               :key="item.code"
@@ -235,14 +235,14 @@
         <el-form-item label="鎶曞叆鏃ユ湡" prop="importdate">
           <el-date-picker
             v-model="dialogForm.importdate"
-            style="width: 220px"
+            style="width: 200px"
             type="date"
             placeholder="閫夋嫨鏃ユ湡"
             popper-class="dateStyle"
           />
         </el-form-item>
         <el-form-item label="鎵�灞炶溅闂�" prop="workshopcode">
-          <el-select v-model="dialogForm.workshopcode" :popper-append-to-body="false" style="width: 220px" placeholder="璇烽�夋嫨" @change="workshopcodeChange">
+          <el-select v-model="dialogForm.workshopcode" :popper-append-to-body="false" style="width: 200px" placeholder="璇烽�夋嫨" @change="workshopcodeChange">
             <el-option
               v-for="item in WorkShopArr"
               :key="item.code"
@@ -252,7 +252,7 @@
           </el-select>
         </el-form-item>
         <el-form-item label="鎵�灞炰骇绾�" prop="linecode">
-          <el-select v-model="dialogForm.linecode" :popper-append-to-body="false" :disabled="dialogForm.workshopcode===''" style="width: 220px" placeholder="璇烽�夋嫨">
+          <el-select v-model="dialogForm.linecode" :popper-append-to-body="false" :disabled="dialogForm.workshopcode===''" style="width: 200px" placeholder="璇烽�夋嫨">
             <el-option
               v-for="item in WorkLineArr"
               :key="item.linecode"
@@ -262,7 +262,7 @@
           </el-select>
         </el-form-item>
         <el-form-item label="浣跨敤鐘舵��" prop="status">
-          <el-select v-model="dialogForm.status" :popper-append-to-body="false" style="width: 220px" placeholder="璇烽�夋嫨">
+          <el-select v-model="dialogForm.status" :popper-append-to-body="false" style="width: 200px" placeholder="璇烽�夋嫨">
             <el-option
               v-for="item in StatusArr"
               :key="item.value"
@@ -288,7 +288,7 @@
     <el-dialog
       title="璁惧绫诲瀷"
       :visible.sync="DeviceTypeDialogVisible"
-      width="50%"
+      width="65%"
       top="15vh"
       :close-on-click-modal="false"
       class="DeviceTypeDialogVisible"
@@ -301,7 +301,7 @@
       <el-table
         :data="DeviceTypeArray"
         border
-        height="400"
+        height="300"
         highlight-current-row
         :header-cell-style="this.$headerCellStyle"
         :cell-style="this.$cellStyle"
@@ -388,7 +388,7 @@
         :data="DeviceGroupArray"
         border
         highlight-current-row
-        height="400"
+        height="300"
         :header-cell-style="this.$headerCellStyle"
         :cell-style="this.$cellStyle"
         @sort-change="sortChangeOfDeviceGroup"
@@ -438,7 +438,6 @@
         <el-table-column
           prop="remark"
           label="鍒嗙粍鎻忚堪"
-          show-overflow-tooltip
           sortable="custom"
         >
           <template slot-scope="{row}">
@@ -773,6 +772,9 @@
       this.$nextTick(() => {
         this.mainHeight = window.innerHeight - 250
         this.tableHeight = this.mainHeight - 100
+        if (window.innerHeight < 800) {
+          this.tableHeight = this.tableHeight - 50
+        }
       })
     },
 
@@ -1022,9 +1024,9 @@
   color: #606266;
 }
 
-::v-deep .el-dialog__body {
-  padding: 20px 100px !important;
-}
+//::v-deep .el-dialog__body {
+//  padding: 20px 100px !important;
+//}
 
 .DeviceTypeDialogVisible {
   ::v-deep .el-dialog__body {
diff --git a/src/views/scgl/gd.vue b/src/views/scgl/gd.vue
index 949608a..48e17ad 100644
--- a/src/views/scgl/gd.vue
+++ b/src/views/scgl/gd.vue
@@ -30,14 +30,15 @@
             </el-form-item>
 
             <el-form-item label="浜у搧缂栫爜" style=" display: flex;">
-              <el-select v-model="form.partcode" :popper-append-to-body="false" style="width: 200px" placeholder="璇烽�夋嫨">
-                <el-option
-                  v-for="item in OrgTypeArr"
-                  :key="item.code"
-                  :label="item.name"
-                  :value="item.code"
-                />
-              </el-select>
+              <!--              <el-select v-model="form.partcode" :popper-append-to-body="false" style="width: 200px" placeholder="璇烽�夋嫨">-->
+              <!--                <el-option-->
+              <!--                  v-for="item in OrgTypeArr"-->
+              <!--                  :key="item.code"-->
+              <!--                  :label="item.name"-->
+              <!--                  :value="item.code"-->
+              <!--                />-->
+              <!--              </el-select>-->
+              <el-input v-model="form.partcode" style="width: 200px" placeholder="璇疯緭鍏�" />
             </el-form-item>
             <el-form-item label="浜у搧鍚嶇О" style=" display: flex;">
               <el-input v-model="form.partname" style="width: 200px" placeholder="璇疯緭鍏�" />
@@ -109,6 +110,7 @@
             <template scope="scope">
               <el-radio
                 v-model="radioSelected"
+                :label="scope.$index"
                 style="color: #fff;padding-left: 10px; margin-right: -25px;"
                 @change.native="getCurrentRow(scope.row)"
               />
@@ -397,6 +399,7 @@
     // 鍗曢�夋閫変腑鑾峰彇褰撳墠琛屼俊鎭�
     getCurrentRow(row) {
       console.log(row, 1)
+      this.radioSelected = row
     },
     // 鏂板鎸夐挳
     add(operation) {
@@ -640,4 +643,9 @@
   border-color: $main_color;
 }
 
+.elTableDiv{
+  ::v-deep .el-radio__label{
+    display: none;
+  }
+}
 </style>
diff --git a/src/views/scgl/scdd.vue b/src/views/scgl/scdd.vue
index b5dad52..dd8303e 100644
--- a/src/views/scgl/scdd.vue
+++ b/src/views/scgl/scdd.vue
@@ -30,14 +30,16 @@
             </el-form-item>
 
             <el-form-item label="浜у搧缂栫爜" style=" display: flex;">
-              <el-select v-model="form.partcode" :popper-append-to-body="false" style="width: 200px" placeholder="璇烽�夋嫨">
-                <el-option
-                  v-for="item in OrgTypeArr"
-                  :key="item.code"
-                  :label="item.name"
-                  :value="item.code"
-                />
-              </el-select>
+              <el-input v-model="form.partcode" style="width: 200px" placeholder="璇疯緭鍏�" />
+
+              <!--              <el-select v-model="form.partcode" :popper-append-to-body="false" style="width: 200px" placeholder="璇烽�夋嫨">-->
+              <!--                <el-option-->
+              <!--                  v-for="item in partArr"-->
+              <!--                  :key="item.code"-->
+              <!--                  :label="item.name"-->
+              <!--                  :value="item.code"-->
+              <!--                />-->
+              <!--              </el-select>-->
             </el-form-item>
             <el-form-item label="浜у搧鍚嶇О" style=" display: flex;">
               <el-input v-model="form.partname" style="width: 200px" placeholder="璇疯緭鍏�" />
@@ -81,6 +83,7 @@
         <el-button
           type="primary"
           icon="el-icon-switch-button"
+          @click="orderClose"
         >璁㈠崟鍏抽棴
         </el-button>
         <!--        <el-button type="primary" icon="el-icon-circle-plus-outline" @click="add('add')">鏂板</el-button>-->
@@ -109,6 +112,7 @@
             <template scope="scope">
               <el-radio
                 v-model="radioSelected"
+                :label="scope.$index"
                 style="color: #fff;padding-left: 10px; margin-right: -25px;"
                 @change.native="getCurrentRow(scope.row)"
               />
@@ -221,7 +225,7 @@
             placeholder="璇烽�夋嫨"
           >
             <el-option
-              v-for="item in OrgTypeArr"
+              v-for="item in erporderstusArr"
               :key="item.code"
               :label="item.name"
               :value="item.code"
@@ -263,7 +267,7 @@
       <span slot="footer" class="dialog-footer">
         <div class="footerButton">
           <el-button @click="dialogVisibleCancel">鍙� 娑�</el-button>
-          <el-button type="primary" @click="dialogVisibleConfirm">纭� 瀹�</el-button>
+          <el-button type="primary" @click="dialogVisibleConfirm">涓� 杈�</el-button>
         </div>
       </span>
     </el-dialog>
@@ -275,6 +279,7 @@
 import { AddUpdateOrganization, DeleteOrganization, OrganizationSearch, PrentOrganization } from '@/api/jcsz'
 import { getCookie } from '@/utils/auth'
 import { ErpOrderSearch } from '@/api/scgl'
+import { PartSelect } from '@/api/zzmx'
 
 const SER_HZ = /^[\u4e00-\u9fa5]+$/
 export default {
@@ -311,12 +316,13 @@
         page: 1, // 绗嚑椤�
         rows: 20 // 姣忛〉澶氬皯鏉�
       },
+      // partArr: [],
       erporderstusArr: [
         { code: 'CREATING', name: '杩涜涓�' },
         { code: 'NEW', name: '鏈紑濮�' }
       ],
       total: 10,
-      radioSelected: '',
+      radioSelected: {},
       tableData: [],
       dialogVisible: false,
       dialogForm: {
@@ -343,6 +349,7 @@
   },
   created() {
     this.getErpOrderSearch()
+    // this.getPartSelect()// 鑾峰彇浜у搧缂栫爜淇℃伅
   },
   mounted() {
     window.addEventListener('resize', this.getHeight)
@@ -354,6 +361,10 @@
       this.tableData = res.data
       this.total = res.count
     },
+    // async getPartSelect() {
+    //   const { data: res } = await PartSelect()
+    //   this.partArr = res
+    // },
     // 鎺掑簭鏀瑰彉鏃�
     sortChange({ column, prop, order }) {
       if (order === 'descending') {
@@ -371,9 +382,6 @@
     search() {
       this.getErpOrderSearch()
     },
-    upload() {
-
-    },
     // 閲嶇疆
     reset() {
       this.form.erporderstus = ''
@@ -389,6 +397,11 @@
     // 鍗曢�夋閫変腑鑾峰彇褰撳墠琛屼俊鎭�
     getCurrentRow(row) {
       console.log(row, 1)
+      this.radioSelected = row
+    },
+    // 璁㈠崟鍏抽棴
+    orderClose() {
+      console.log(this.radioSelected, 1)
     },
     // 鏂板鎸夐挳
     add(operation) {
@@ -632,4 +645,10 @@
   border-color: $main_color;
 }
 
+.elTableDiv{
+  ::v-deep .el-radio__label{
+    display: none;
+  }
+}
+
 </style>
diff --git a/src/views/wlgl/kwdy.vue b/src/views/wlgl/kwdy.vue
index 67b4574..3b3a891 100644
--- a/src/views/wlgl/kwdy.vue
+++ b/src/views/wlgl/kwdy.vue
@@ -352,6 +352,9 @@
       this.$nextTick(() => {
         this.mainHeight = window.innerHeight - 250
         this.tableHeight = this.mainHeight - 100
+        if (window.innerHeight < 800) {
+          this.tableHeight = this.tableHeight - 50
+        }
       })
     }
   }
diff --git a/src/views/zzmx/chda.vue b/src/views/zzmx/chda.vue
index 5d81552..575d561 100644
--- a/src/views/zzmx/chda.vue
+++ b/src/views/zzmx/chda.vue
@@ -103,20 +103,17 @@
           />
           <el-table-column
             prop="partcode"
-            show-overflow-tooltip
             label="鐗╂枡缂栫爜"
             sortable="custom"
           />
           <el-table-column
             prop="partname"
-            show-overflow-tooltip
             label="鐗╂枡鍚嶇О"
             sortable="custom"
           />
           <el-table-column
             prop="partspec"
             label="鐗╂枡瑙勬牸"
-            show-overflow-tooltip
             width="110"
             sortable="custom"
           />
@@ -139,7 +136,6 @@
           <el-table-column
             prop="stck_name"
             label="浠撳簱鍚嶇О"
-            show-overflow-tooltip
             sortable="custom"
           />
           <el-table-column
@@ -163,7 +159,6 @@
           <el-table-column
             prop="lm_date"
             label="鍒涘缓鏃堕棿"
-            show-overflow-tooltip
             sortable="custom"
           />
           <el-table-column
@@ -206,26 +201,26 @@
       :close-on-click-modal="false"
       :title="operation==='add'?'鏂板':'缂栬緫'"
       :visible.sync="dialogVisible"
-      width="50%"
+      width="65%"
       top="15vh"
       @closed="handleClose"
       @close="handleClose"
     >
       <el-form ref="dialogForm" inline :rules="dialogFormRules" :model="dialogForm" label-width="80px">
         <el-form-item label="鐗╂枡缂栫爜" prop="materialcode">
-          <el-input v-model="dialogForm.materialcode" :disabled="operation!=='add'" style="width: 220px" />
+          <el-input v-model="dialogForm.materialcode" :disabled="operation!=='add'" style="width: 200px" />
         </el-form-item>
         <el-form-item label="鐗╂枡鍚嶇О" prop="materialname">
-          <el-input v-model="dialogForm.materialname" style="width: 220px" />
+          <el-input v-model="dialogForm.materialname" style="width: 200px" />
         </el-form-item>
         <el-form-item label="鐗╂枡瑙勬牸" prop="materialspec">
-          <el-input v-model="dialogForm.materialspec" style="width: 220px" />
+          <el-input v-model="dialogForm.materialspec" style="width: 200px" />
         </el-form-item>
         <el-form-item label="浣跨敤鍗曚綅" prop="uomcode">
           <el-select
             v-model="dialogForm.uomcode"
             :popper-append-to-body="false"
-            style="width: 220px"
+            style="width: 200px"
             placeholder="璇烽�夋嫨"
           >
             <el-option
@@ -240,7 +235,7 @@
           <el-select
             v-model="dialogForm.warehousecode"
             :popper-append-to-body="false"
-            style="width: 220px"
+            style="width: 200px"
             placeholder="璇烽�夋嫨"
           >
             <el-option
@@ -255,7 +250,7 @@
           <el-select
             v-model="dialogForm.stocktypecode"
             :popper-append-to-body="false"
-            style="width: 220px"
+            style="width: 200px"
             placeholder="璇烽�夋嫨"
             @change="val=>stocktypecodeChange(val,'dialogForm')"
           >
@@ -271,7 +266,7 @@
           <el-select
             v-model="dialogForm.materialtypecode"
             :popper-append-to-body="false"
-            style="width: 220px"
+            style="width: 200px"
             :disabled="dialogForm.stocktypecode===''"
             placeholder="璇烽�夋嫨"
           >
@@ -284,10 +279,10 @@
           </el-select>
         </el-form-item>
         <el-form-item label="鏈�灏忓簱瀛�" prop="minstockqty">
-          <el-input v-model="dialogForm.minstockqty" style="width: 220px" />
+          <el-input v-model="dialogForm.minstockqty" style="width: 200px" />
         </el-form-item>
         <el-form-item label="鏈�澶у簱瀛�" prop="maxstockqty">
-          <el-input v-model="dialogForm.maxstockqty" style="width: 220px" />
+          <el-input v-model="dialogForm.maxstockqty" style="width: 200px" />
         </el-form-item>
       </el-form>
       <span slot="footer" class="dialog-footer">
@@ -303,7 +298,7 @@
       :close-on-click-modal="false"
       title="鍗曚綅璁剧疆"
       :visible.sync="officeDialogVisible"
-      width="50%"
+      width="65%"
       top="15vh"
       class="officeDialogVisible"
       @close="handleCloseOffice"
@@ -316,7 +311,7 @@
         :data="officeTableData"
         border
         highlight-current-row
-        height="400"
+        height="300"
         :header-cell-style="this.$headerCellStyle"
         :cell-style="this.$cellStyle"
         @sort-change="sortChangeOfOffice"
@@ -425,6 +420,7 @@
       :visible.sync="dialogVisibleRoute"
       width="50%"
       top="15vh"
+      :fullscreen="isFullscreen"
       class="dialogVisibleRoute"
       @closed="handleCloseRoute"
       @close="handleCloseRoute"
@@ -542,6 +538,7 @@
       }
     }
     return {
+      isFullscreen: false,
       mainHeight: 0,
       tableHeight: 0,
       form: {
@@ -791,6 +788,10 @@
       this.$nextTick(() => {
         this.mainHeight = window.innerHeight - 250
         this.tableHeight = this.mainHeight - 100
+        this.isFullscreen = window.innerHeight < 800
+        if (window.innerHeight < 800) {
+          this.tableHeight = this.tableHeight - 50
+        }
       })
     },
     /* 鐐瑰嚮鍏宠仈宸ヨ壓璺嚎妯″潡*/
@@ -1100,9 +1101,9 @@
   color: #606266;
 }
 
-::v-deep .el-dialog__body {
-  padding: 20px 100px !important;
-}
+//::v-deep .el-dialog__body {
+//  padding: 20px 100px !important;
+//}
 
 .dialogVisibleRoute {
   ::v-deep .el-dialog__body {
diff --git a/src/views/zzmx/gxdy.vue b/src/views/zzmx/gxdy.vue
index 632b3c9..08a2747 100644
--- a/src/views/zzmx/gxdy.vue
+++ b/src/views/zzmx/gxdy.vue
@@ -232,6 +232,7 @@
       :visible.sync="workDialogVisible"
       width="50%"
       top="15vh"
+      :fullscreen="isFullscreen"
       :close-on-click-modal="false"
       class="workDialogVisible"
       @closed="workHandleClose"
@@ -278,6 +279,7 @@
           :data="workDialogForm.workTreeArr"
           show-checkbox
           node-key="code"
+          style="height: 300px;"
           default-expand-all
           :props="workTreeDefaultProps"
           @check="checkBoxClick"
@@ -299,6 +301,7 @@
       :visible.sync="defectDialogVisible"
       width="50%"
       top="15vh"
+      :fullscreen="isFullscreen"
       :close-on-click-modal="false"
       class="defectDialogVisible"
       @closed="defectHandleClose"
@@ -319,7 +322,7 @@
           :data="defectTree"
           show-checkbox
           node-key="code"
-          style="height: 400px;"
+          style="height: 500px;"
           default-expand-all
           :props="workTreeDefaultProps"
         />
@@ -371,6 +374,7 @@
       }
     }
     return {
+      isFullscreen: false,
       mainHeight: 0,
       tableHeight: 0,
       form: {
@@ -564,6 +568,10 @@
       this.$nextTick(() => {
         this.mainHeight = window.innerHeight - 250
         this.tableHeight = this.mainHeight - 100
+        this.isFullscreen = window.innerHeight < 800
+        if (window.innerHeight < 800) {
+          this.tableHeight = this.tableHeight - 50
+        }
       })
     },
     /* 鍏宠仈宸ヤ綔绔欐ā鍧�*/
diff --git a/src/views/zzmx/gylx.vue b/src/views/zzmx/gylx.vue
index ad3a92a..d88329d 100644
--- a/src/views/zzmx/gylx.vue
+++ b/src/views/zzmx/gylx.vue
@@ -123,6 +123,7 @@
       width="70%"
       :close-on-click-modal="false"
       top="15vh"
+      :fullscreen="isFullscreen"
       @closed="handleClose"
       @close="handleClose"
     >
@@ -277,6 +278,7 @@
       }
     }
     return {
+      isFullscreen: false,
       mainHeight: 0,
       tableHeight: 0,
       form: {
@@ -632,6 +634,7 @@
       this.$nextTick(() => {
         this.mainHeight = window.innerHeight - 250
         this.tableHeight = this.mainHeight - 100
+        this.isFullscreen = window.innerHeight < 800
       })
     }
   }
diff --git a/src/views/zzmx/gylx_bak.vue b/src/views/zzmx/gylx_bak.vue
index 2e33e49..da834de 100644
--- a/src/views/zzmx/gylx_bak.vue
+++ b/src/views/zzmx/gylx_bak.vue
@@ -59,8 +59,8 @@
               <!--              </template>-->
             </el-table-column>
             <el-table-column label="宸ヨ壓璺嚎" prop="gylx" />
-            <el-table-column show-overflow-tooltip label="鐗╂枡缂栫爜" prop="wlbm" />
-            <el-table-column show-overflow-tooltip label="鐗╂枡鍚嶇О" prop="wlmc" />
+            <el-table-column label="鐗╂枡缂栫爜" prop="wlbm" />
+            <el-table-column label="鐗╂枡鍚嶇О" prop="wlmc" />
             <el-table-column label="鐗╂枡瑙勬牸" prop="wlgg" />
             <el-table-column label="缁撴潫瑁呯" prop="jszx">
               <template slot-scope="{row}">
diff --git a/src/views/zzmx/jpgj.vue b/src/views/zzmx/jpgj.vue
index bc9b21e..40df116 100644
--- a/src/views/zzmx/jpgj.vue
+++ b/src/views/zzmx/jpgj.vue
@@ -201,6 +201,7 @@
       :visible.sync="dialogVisible"
       width="70%"
       top="15vh"
+      :fullscreen="isFullscreen"
       :close-on-click-modal="false"
       @closed="handleClose"
       @close="handleClose"
@@ -450,6 +451,7 @@
       }
     }
     return {
+      isFullscreen: false,
       mainHeight: 0,
       tableHeight: 0,
       form: {
@@ -815,6 +817,7 @@
       this.$nextTick(() => {
         this.mainHeight = window.innerHeight - 250
         this.tableHeight = this.mainHeight - 100
+        this.isFullscreen = window.innerHeight < 800
       })
     }
   }

--
Gitblit v1.9.3